Skip to content

cloudnativelabs/kube-router-e2e

Repository files navigation

End-To-End Testing Framework

This framework uses Ginkgo -- a BDD-style Go testing framework built to help you efficiently write expressive and comprehensive tests.

Assumming a cluster already exists, the framework allows you to run tests against it.

  • NOTE: As of Jan 10th, 2019, a cluster must first be setup beforehand; that is, we don't yet support automatic provisioning of a cluster, though we hope to have this feature in very shortly. In the meantime, you can create a cluster using this repo: https://github.com/Nordix/k8s-ipv6

Tests

Tests are categorized as follows. Additional categories may be added as desired.

  • Router: focus on pod-to-pod connectivity
  • Services: focus on kube-router's services functionality
  • Policy: focus on network policy enforcement
  • Runtime: tests that focus just on specific kube-router functionality and are not tied to kubernetes

Running Tests

The following command will run all tests:

    $ ginkgo -- --kuberouter.SSHConfig='cd <path-to-Vagrantfile> && vagrant ssh-config' --kuberouter.testScope="ipv6-cluster"

Running Specific tests

To run a subset of the tests, you can use ginkgo's focus spec. Here are some examples:

    $ ginkgo --focus="Router*" -- --kuberouter.SSHConfig='cd /home/awander/go/src/github.com/Arvinderpal/k8-ipv6 && vagrant ssh-config' --kuberouter.testScope="ipv6-cluster"

    $ ginkgo --focus="Service-Proxy*" -- --kuberouter.SSHConfig='cd /home/awander/go/src/github.com/Arvinderpal/k8-ipv6 && vagrant ssh-config' --kuberouter.testScope="ipv6-cluster"  

Configuration Options

--kuberouter.provisioner: specify a provisioner (e.g. vagrant)
--kuberouter.provision:  provision a cluster before running the tests
--kuberouter.skipLogs: skip gathering logs if a test fails
--kuberouter.SSHConfig: specify a custom command to fetch SSH configuration (eg: 'vagrant ssh-config')
--kuberouter.showCommands: output which commands are ran to stdout

Logs/Results

For each test, we log:

  1. List commands that were issued (cmds.log)
  2. Output of kube-router instances on the 2 nodes during the the time the specific test was running (kuberouter-test-k8s(1/2).s)
  3. Output of each command (test-out.log).
  4. If the test fails, we also save the entire kube-router log file (kube-router-complete-k8s1.s). These files can be found in the directory test_results under the test name. For example,
~/go/src/github.com/cloudnativelabs/kube-router-e2e/test_results/Service-Proxy_Basic_Connectivity_to_Nodeport_Service_with_many_replicas $ ll
total 12140
drwxrwxr-x 2 awander awander     4096 Jan 10 12:34 ./
drwxrwxr-x 4 awander awander     4096 Jan 10 12:29 ../
-rw-rw-r-- 1 awander awander     5417 Jan 10 12:34 cmds.log
-rw-rw-r-- 1 awander awander   199945 Jan 10 12:29 kuberouter-test.log-k8s1.s
-rw-rw-r-- 1 awander awander    16566 Jan 10 12:34 test-output.log

Here is an example cmds.log file:

curl -g -6 http://[::1]:20244/healthz
gobgp neighbor
kubectl apply -f  /home/vagrant/go/src/github.com/cloudnativelabs/kube-router-e2e/manifests/busybox-1.yaml
kubectl -n default get pods -l app=busybox-2 -o json
sudo journalctl -au kube-router --since '60 seconds ago'
kubectl delete -f  /home/vagrant/go/src/github.com/cloudnativelabs/kube-router-e2e/manifests/busybox-2.yaml --grace-period=0 --force

And here is a snippet of he kuberouter-test.log-k8s1.s file:

-- Logs begin at Tue 2018-08-28 17:10:09 UTC, end at Tue 2019-01-15 23:47:44 UTC. --
Jan 15 23:46:46 k8s1 kube-router[4871]: I0115 23:46:46.615714    4871 network_routes_controller.go:252] Syncing ipsets
Jan 15 23:46:46 k8s1 kube-router[4871]: I0115 23:46:46.661630    4871 network_routes_controller.go:265] Performing periodic sync of service VIP routes
Jan 15 23:46:46 k8s1 kube-router[4871]: I0115 23:46:46.661699    4871 ecmp_vip.go:24] Advertising route: '172.20.0.10/32 via 192.168.33.8' to peers
Jan 15 23:46:46 k8s1 kube-router[4871]: I0115 23:46:46.661717    4871 network_routes_controller.go:269] Performing periodic sync of pod CIDR routes

Acknowledgement

This framework is based on the e2e testing framework of the cilium project. Many thanks to them for their excellent work!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages