From 3079edf96b70171b28a5bff35f8c06a442d58893 Mon Sep 17 00:00:00 2001 From: Rafael Zalamena Date: Fri, 23 Jun 2017 12:22:40 -0300 Subject: [PATCH] topotest: add guidelines This is the beginning of the guidelines file. It will contain all necessary instructions to help people write topology tests. --- tests/topotests/GUIDELINES.md | 352 ++++++++++++++++++ .../topotests/example-test/test_template.dot | 29 ++ .../topotests/example-test/test_template.jpg | Bin 0 -> 55492 bytes 3 files changed, 381 insertions(+) create mode 100644 tests/topotests/GUIDELINES.md create mode 100644 tests/topotests/example-test/test_template.dot create mode 100644 tests/topotests/example-test/test_template.jpg diff --git a/tests/topotests/GUIDELINES.md b/tests/topotests/GUIDELINES.md new file mode 100644 index 0000000000..9edf795aca --- /dev/null +++ b/tests/topotests/GUIDELINES.md @@ -0,0 +1,352 @@ +# Guidelines + +This document describes how to use the topotests testing framework. + + +## Executing Tests + +To run the whole suite of tests the following commands must be executed at the +top level directory of topotest: + +```shell +$ # Change to the top level directory of topotests. +$ cd path/to/topotests +$ # Tests must be run as root, since Mininet requires it. +$ sudo pytest +``` + +In order to run a specific test, you can use the following command: + +```shell +$ sudo pytest ospf-topo1/test_ospf_topo1.py +$ # or inside the test folder +$ cd ospf-topo1 +$ sudo pytest # to run all tests inside the directory +$ sudo pytest ospf-topo1/test_ospf_topo1.py # to run a specific one +``` + +The output of the tested daemons will be avaiable at the temporary folder of +your machine: + +```shell +$ ls /tmp +... +router1-zebra.err # zebra stderr output +router1-zebra.log # zebra log file +router1-zebra.out # zebra stdout output +... +``` + +You can also run memory leak tests to get reports: + +```shell +$ sudo env TOPOTESTS_CHECK_MEMLEAK="/tmp/memleak_report_" pytest ospf-topo1/test_ospf_topo1.py +... +$ ls /tmp/memleak_report_* +memleak_report_test_ospf_topo1.txt +``` + + +## Writing a New Test + +This section will guide you in all recommended steps to produce a standard +topology test. + +This is the recommended test writing routine: + +* Write a topology (Graphviz recommended) +* Obtain configuration files +* Write the test itself +* Create a Pull Request + +### Topotest File Hierarchy + +Before starting to write any tests one must know the file hierarchy. The +repository hierarchy looks like this: + +```shell +$ cd path/to/topotest +$ find ./* +... +./README.md # repository read me +./GUIDELINES.md # this file +./conftest.py # test hooks - pytest related functions +./example-test # example test folder +./example-test/__init__.py # python package marker - must always exist. +./example-test/test_template.jpg # generated topology picture - see next section +./example-test/test_template.dot # Graphviz dot file +./example-test/test_template.py # the topology plus the test +... +./ospf-topo1 # the ospf topology test +./ospf-topo1/router1 # router 1 configuration files +./ospf-topo1/router1/zebra.conf # zebra configuration file +./ospf-topo1/router1/ospfd.conf # ospf configuration file +./ospf-topo1/router1/ospfroute.txt # 'show ip ospf' output reference file +# removed other for shortness sake +... +./lib # shared test/topology functions +./lib/topogen.py # topogen implementation +./lib/topotest.py # topotest implementation +``` + +Guidelines for creating/editing topotest: + +* New topologies that don't fit the existing directories should create its own +* Always remember to add the __init__.py to new folders, this makes the life of + developers easier, auto complete engines and pylint happy +* Router (Quagga/FRR) specific code should go on topotest.py +* Generic/repeated router actions should have an abstraction in + topogen.TopoRouter. +* Generic/repeated non-router code should go to topotest.py +* pytest related code should go to conftest.py (e.g. specialized asserts) + + +### Defining the Topology + +The first step to write a new test is to define the topology. This step can be +done in many ways, but the recommended is to use Graphviz to generate a drawing +of the Topology. It allows us to see the topology graphically and to see the +names of equipments, links and addresses. + +Here is an example of Graphviz dot file that generates the +[template topology](example-test/test_template.dot) (the inlined code might get +outdated, please see the linked file): + +```dot +graph ospf_topo1 { + label="Template Topology"; + + # Make the Graph fit a A4 paper sheet + # 11inches x 8inches -> ~297mm x ~210mm + size="11,8!"; + # Uncomment this one for vertical A4 paper sheet + #size="8,11!"; + + # Routers + router1 [ + shape=octagon, + label="router1", + ]; + router2 [ + shape=octagon + label="router2\nrtr-id 10.0.255.1", + ]; + + # Switches + switch1 [shape=box]; + switch2 [shape=box]; + + # Connections + router1 -- switch1 [label="router1-eth0\n192.168.0.1/24"]; + + router1 -- switch2 [label="router1-eth1\n192.168.1.100/24"]; + router2 -- switch2 [label="router2-eth0\n192.168.1.1/24"]; +} +``` + +Here is the produced graph: + +![template topology graph](example-test/test_template.jpg) + + +### Generating / Obtaining Configuration Files + +In order to get the configuration files or command output for each router we +need to run the topology and execute commands in vtysh. The quickest way to +achieve that is writing the topology building code and running the topology. + +To bootstrap your test topology, do the following steps: + +* Copy the template test + +```shell +$ mkdir new-topo/ +$ touch new-topo/__init__.py +$ cp example-test/test_template.py new-topo/test_new_topo.py +``` + +* Modify the template according to your dot file +* Run the topology + +Topogen allows us to run the topology without running any tests, you can do that +using the following example commands: + +```shell +$ # Running your bootstraped topology +$ sudo pytest -s --topology-only new-topo/test_new_topo.py +$ # Running the test_template.py topology +$ sudo pytest -s --topology-only example-test/test_template.py +$ # Running the ospf_topo1.py topology +$ sudo pytest -s --topology-only ospf-topo1/test_ospf_topo1.py +``` + +Parameters explanation: + +* -s: actives input/output capture. This is required by mininet in order to show + the interactive shell. +* --topology-only: don't run anytest, just build the topology. + +After executing the commands above you should get the following terminal output: + +```shell +============================================================================================================ test session starts ============================================================================================================= +platform linux2 -- Python 2.7.12, pytest-3.1.2, py-1.4.34, pluggy-0.4.0 +rootdir: /media/sf_src/topotests, inifile: pytest.ini +collected 3 items + +ospf-topo1/test_ospf_topo1.py *** Starting controller + +*** Starting 6 switches +switch1 switch2 switch3 switch4 switch5 switch6 ... +router2: frr zebra started +router2: frr ospfd started +router3: frr zebra started +router3: frr ospfd started +router1: frr zebra started +router1: frr ospfd started +router4: frr zebra started +router4: frr ospfd started +*** Starting CLI: +mininet> +``` + +The last line shows us that we are now using the Mininet CLI (Command Line +Interface), from here you can call your router vtysh or even bash. + +Here are some commands example: + +```shell +mininet> router1 ping 10.0.3.1 +PING 10.0.3.1 (10.0.3.1) 56(84) bytes of data. +64 bytes from 10.0.3.1: icmp_seq=1 ttl=64 time=0.576 ms +64 bytes from 10.0.3.1: icmp_seq=2 ttl=64 time=0.083 ms +64 bytes from 10.0.3.1: icmp_seq=3 ttl=64 time=0.088 ms +^C +--- 10.0.3.1 ping statistics --- +3 packets transmitted, 3 received, 0% packet loss, time 1998ms +rtt min/avg/max/mdev = 0.083/0.249/0.576/0.231 ms + + + +mininet> router1 ping 10.0.3.3 +PING 10.0.3.3 (10.0.3.3) 56(84) bytes of data. +64 bytes from 10.0.3.3: icmp_seq=1 ttl=64 time=2.87 ms +64 bytes from 10.0.3.3: icmp_seq=2 ttl=64 time=0.080 ms +64 bytes from 10.0.3.3: icmp_seq=3 ttl=64 time=0.091 ms +^C +--- 10.0.3.3 ping statistics --- +3 packets transmitted, 3 received, 0% packet loss, time 2003ms +rtt min/avg/max/mdev = 0.080/1.014/2.872/1.313 ms + + + +mininet> router3 vtysh + +Hello, this is FRRouting (version 3.1-devrzalamena-build). +Copyright 1996-2005 Kunihiro Ishiguro, et al. + +frr-1# show running-config +Building configuration... + +Current configuration: +! +frr version 3.1-devrzalamena-build +frr defaults traditional +hostname router3 +no service integrated-vtysh-config +! +log file /tmp/router3-zebra.log +! +log file /tmp/router3-ospfd.log +! +interface router3-eth0 + ip address 10.0.3.1/24 +! +interface router3-eth1 + ip address 10.0.10.1/24 +! +interface router3-eth2 + ip address 172.16.0.2/24 +! +router ospf + ospf router-id 10.0.255.3 + redistribute kernel + redistribute connected + redistribute static + network 10.0.3.0/24 area 0 + network 10.0.10.0/24 area 0 + network 172.16.0.0/24 area 1 +! +line vty +! +end +frr-1# +``` + +After you successfully configured your topology you can obtain the +configuration files (per-daemon) using the following command: + +```shell +mininet> router3 vtysh -d ospfd + +Hello, this is FRRouting (version 3.1-devrzalamena-build). +Copyright 1996-2005 Kunihiro Ishiguro, et al. + +frr-1# show running-config +Building configuration... + +Current configuration: +! +frr version 3.1-devrzalamena-build +frr defaults traditional +no service integrated-vtysh-config +! +log file /tmp/router3-ospfd.log +! +router ospf + ospf router-id 10.0.255.3 + redistribute kernel + redistribute connected + redistribute static + network 10.0.3.0/24 area 0 + network 10.0.10.0/24 area 0 + network 172.16.0.0/24 area 1 +! +line vty +! +end +frr-1# +``` + + +### Writing Tests + +**TODO** + + +### Debugging Execution + +**TODO** + +```shell +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +> /media/sf_src/topotests/ospf-topo1/test_ospf_topo1.py(121)test_ospf_convergence() +-> for rnum in range(1, 5): +(Pdb) l +116 +117 def test_ospf_convergence(): +118 "Test OSPF daemon convergence" +119 import pdb +120 pdb.set_trace() +121 -> for rnum in range(1, 5): +122 router = 'router{}'.format(rnum) +123 +124 # Load expected results from the command +125 reffile = os.path.join(CWD, '{}/ospfroute.txt'.format(router)) +126 expected = open(reffile).read() +(Pdb) tgen = get_topogen() +(Pdb) pp tgen.gears['router1'] + +(Pdb) pp str(tgen.gears['router1']) +'TopoGear"switch1-eth0","router1-eth1"<->"switch3-eth0"]> TopoRouter<>' +``` diff --git a/tests/topotests/example-test/test_template.dot b/tests/topotests/example-test/test_template.dot new file mode 100644 index 0000000000..4937bee1ac --- /dev/null +++ b/tests/topotests/example-test/test_template.dot @@ -0,0 +1,29 @@ +graph ospf_topo1 { + label="Template Topology"; + + # Make the Graph fit a A4 paper sheet + # 11inches x 8inches -> ~297mm x ~210mm + size="11,8!"; + # Uncomment this one for vertical A4 paper sheet + #size="8,11!"; + + # Routers + router1 [ + shape=octagon, + label="router1", + ]; + router2 [ + shape=octagon + label="router2\nrtr-id 10.0.255.1", + ]; + + # Switches + switch1 [shape=box]; + switch2 [shape=box]; + + # Connections + router1 -- switch1 [label="router1-eth0\n192.168.0.1/24"]; + + router1 -- switch2 [label="router1-eth1\n192.168.1.100/24"]; + router2 -- switch2 [label="router2-eth0\n192.168.1.1/24"]; +} diff --git a/tests/topotests/example-test/test_template.jpg b/tests/topotests/example-test/test_template.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e76c22ee17fd7ad84609af98579a949a329f09f GIT binary patch literal 55492 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 V^#AkypDQx`bDaMCI3a$F{4cy!sAm8G literal 0 HcmV?d00001 -- 2.39.5