28 | | Suggested grouping for functional test cases: |
29 | | - VLAN Handling and Port Allocation (cover OF-OPR-SLCR-FN-001, OF-OPR-SLCR-FN-014) |
30 | | - Data Plane Traffic handling and isolation (cover OF-OPR-SLCR-FN-002) |
31 | | - Control Traffic handling (OF-OPR-SLCR-FN-003)(OF-OPR-SLCR-FN-009) |
32 | | - GENI AM API Support (OF-OPR-SLCR-FN-005) |
33 | | - OpenFlow 1.0 Support (OF-OPR-SLCR-FN-004)(OF-OPR-SLCR-FN-006) |
34 | | - Slicer Configuration (OF-OPR-SLCR-FN-007) |
35 | | - Slicer Interoperability (OF-OPR-SLCR-FN-010, OF-OPR-SLCR-FN-011, OF-OPR-SLCR-FN-012, OF-OPR-SLCR-FN-013) |
| 29 | === Step 1: Setup === |
| 30 | * Reserve 5 slices (using the add_slice function) [005-a]: |
| 31 | * Slice 'samevlan' with two ports on a single switch, each on the same VLAN. Ensure the slicer state is accurate. [001-a] |
| 32 | * Slice 'diffvlans' with two ports on the same switch, each associated with a different VLAN. Ensure the slicer state is accurate. [001-a] |
| 33 | * Slice 'tenvlans' with 10 VLANs spanning across 10 switches. Ensure the slicer state is accurate. [001-a] |
| 34 | * Slice 'untaggedports' with two untagged ports on a single switch (doesn't need to be possible to pass). Ensure the slicer state is accurate. [001-b] |
| 35 | * Slice 'fullports' with two full ports on a single switch (doesn't need to be possible to pass). Ensure the slicer state is accurate. [001-c] |
| 36 | * Add a hosts attached to each port with the appropriate data plane VLAN connections for 'samevlan', 'diffvlans', and hosts for at least two of the VLANs for 'tenvlans' |
| 37 | * Add two hosts which are on the same VLAN but do not correspond to an existing slice. |
37 | | '' Note1: Error handling can be verified across each of the above (OF-OPR-SLCR-FN-008)'' |
| 39 | === Step 2: Establish that basic connectivity works === |
| 40 | * Run a modified pox forwarding.l2_learning controller for 'samevlan' that installs a send-to-controller rule for unmatched traffic within the VLAN. |
| 41 | * Start a packet capture on the slicer facing both the switch and the controller. |
| 42 | * Using a host that is not in a slice, send traffic on the data plane and make sure it never reaches the other host. [002] [004-a] [004-c] |
| 43 | * Using 'samevlan', send data plane traffic between the two hosts. Ensure that it gets through to the two hosts in 'samevlan', but not to the hosts in 'diffvlans'. [001] [003] |
| 44 | * Stop the packet capture, and check for the following: |
| 45 | * Check that traffic from the hosts that don't belong to a slice never shows up at the slicer. [004-a] [004-c] |
| 46 | * Check that traffic from the slicer destined for a controller is only sent to a single controller [004-b] [004-d] |
| 47 | * Check that packet-ins from the switch have a VLAN tag, but packet-ins going to the controller do not. Also ensure that nothing else is different. [014-b] [009] |
| 48 | * Check that packet-outs from the controller have no VLAN tag, but packet-outs going to the switch do. Also ensure that nothing else is different. [014-a] [009] |
| 49 | * Traffic sent to the OFPP_ALL port from the controller is funnelled into the set of ports in the slice by the slicer. [003-c] |
39 | | Suggested grouping for operational test cases: |
40 | | - Slicer Operations (run multiple slicers with multiple slices with all available substrates) (OF-OPR-SLCR-OP-001, OF-OPR-SLCR-OP-003, OF-OPR-SLCR-OP-004, OF-OPR-SLCR-OP-005, OF-OPR-SLCR-OP-006, OF-OPR-SLCR-OP-007, OF-OPR-SLCR-OP-008, OF-OPR-SLCR-OP-009) |
41 | | - Slicer Monitoring (OF-OPR-SLCR-OP-002) |
| 51 | === Step 3: Test for VLAN enforcement and translation === |
| 52 | * Stop the pox forwarding.l2_learning controller for 'samevlan'. Start a floodlight instance in its place with static flow pusher enabled. |
| 53 | * Push a flow that matches one of the ports and VLANs, and tries to do a VLAN rewrite to a different VLAN ID. Ensure this gets rejected by the slicer, and an error message is returned. [003-b] [004-e] [008-a] |
| 54 | * Push a flow that matches one of the ports and VLANs, and tries to do a strip-VLAN action. Ensure this gets rejected by the slicer, and an error message is returned. [003-a] [004-e] [008-a] |
| 55 | * Run a modified pox forwarding.l2_learning controller for 'diffvlans' that installs a send-to-controller rule for unmatched traffic within the VLAN. |
| 56 | * Send ping traffic between the 'diffvlans' hosts and make sure it gets exchanged properly. [014-d] |
43 | | '' Note 2: The Slicer Operations test case is complex, may be consider splipping up into smaller test cases?'' |
| 58 | === Step 4: Test for OF functionality === |
| 59 | * Start a packet capture on the slicer facing both the switch and the controller. |
| 60 | * Push a flow_stats request from the controller. |
| 61 | * Stop the packet capture, and check for the following: the flow_stats reply only went to the controller that requested it. [004-g] |
| 62 | * Run some OFTest checks to make sure that [004-f] and [009] are met. |
| 63 | * Test a few synchronous messages using OFTest to make sure [006] is met. |
| 64 | * Test that [007-a], [007-b], and [007-c] all generate error messages. |
| 65 | |
| 66 | === Step 5: Test for stacked slicer support === |
| 67 | * For 'diffvlans' stop the pox forwarding.l2_learning controller. In its place, stand up another instance of the slicer. In this higher-level slicer, create an identical slice for 'diffvlans' (can be done manually), and point it at a new controller URL. At that new controller URL, run an instance of floodlight forwarding with static flow pusher. Push down a flow that matches on the slice's VLAN for the switch and forwards traffic to the controller. |
| 68 | * Send data plane traffic between the 'diffvlans' hosts. |
| 69 | |
| 70 | === Step 6: Test for any extra fucntionality === |
| 71 | * Test that any documented control plane performance isoaltion solution works as expected. [011] |
| 72 | * Test that any documented data plane performance isoaltion solution works as expected. [012] |
| 73 | * Test that any per-slice flow limits work as expected. [012] |
| 74 | |
| 75 | === Step 7: Test API === |
| 76 | * Call dump_slices and make sure it works as expected. Ensure it returns which slices are active and which are disabled along with however the AM identifies the slices. [005-d] [008-b] [008-c] |
| 77 | * Call change_controller and make sure it is reflected in the slicer state [005-c] |
| 78 | * Call update_slice if possible and report back what happens [005-e] |
| 79 | * Call delete_slice and clean up all slices [005-b] |
| 80 | |
| 81 | == OF-OPF-SLCR-OP Testing Scenario == |
| 82 | |
| 83 | === Step 1: Setup === |
| 84 | * Clear any existing log files that the slicer may have created. |
| 85 | * Create 10 slices named slice{1-10}. Each slice should have a single unique VLAN ID spanning across 10 switches between two hosts. Generate ping traffic from a host at the end of each of the slices and make sure it is working. Leave this traffic running for the duration of this scenario. [003] |
| 86 | |
| 87 | === Step 2: Collect monitoring data === |
| 88 | * Make sure there is some way to collect monitoring data for all of the slices that have been set up. [002] |
| 89 | |
| 90 | === Step 3: Test slice operations === |
| 91 | * Create a new slice 'testslice', use the modified pox forwarding.l2_learning controller, and ensure that pings in the other slices continue to flow. Ensure that this slice is added with no operator intervention. [004] [001-a] |
| 92 | * Change the controller URL for 'testslice'. Ensure that the change takes place with no operator intervention. [001-c] |
| 93 | * If a slicer is capable of disabling a slice, trigger 'testslice' to get disabled. Ensure that the slicer owner either gets notified, or that at the very least, 'dump_slices' shows that the slice is disabled. Re-enable the slice if it was disabled. [001-d] |
| 94 | * Disconnect the controller. Wait for about a minute, and try sending traffic. Ensure that it doesn't get through. [008] |
| 95 | * Delete the slice and make sure that doing so does not require operator intervention. Check right away and make sure all flows for that slice have been removed. [001-b] [009] |
| 96 | |
| 97 | === Step 4: Substrate-generated traffic === |
| 98 | * Connect a host to the substrate that is not part of a slice, and that does not share a data plane port with the other slices. Send a high rate of traffic out of its data plane interface and ensure that the other slices remain stable. [007] |
| 99 | |
| 100 | === Step 5: Test logging === |
| 101 | * Check that a log exists for the slicer. [005] |
| 102 | * Configure the logging to rotate on a daily basis. |
| 103 | * Look at the entries for the log. Any entries that exist in the default case should be reasonable. At this point, the size of the log should also be reasonable. [006-a] |
| 104 | * Try changing the log level while the slicer is running to the most verbose level. Verify that the logs are showing more data. [006-b] |
| 105 | * Set the logging back to a standard level. Leave the setup running overnight. In the morning, verify that the logs have been rotated, and that logging is still working. [006-c] |