blob: 22742dcd861d1ec90fe044055aa4e1a7df31fc60 [file] [log] [blame]
DRAFT TEST PLAN FOR TESTING TOP-HALF OF OpenFlow 1.0 SWITCH
Draft 2 - 23 Apr 2012
1. GENERAL
===========
1.1 Test particular implementation, not OpenFlow protocol
This test plan is intended to test the function of those features of an OF
agent implementation that would be particular to a given switch,
i.e. semantics of various OF operations are correctly implemented on a given
switch.
It is NOT intended to test:
- syntactic featues, such as badly formed OF protocol messages, etc., nor
- semantic features that would be common to all implementations, e.g.
qualifying on a VLAN id > 4095, an action to set VLAN PCP to a value > 7,
etc.
2. FLOW ADD
============
2.5 FLOW ADD 5
---------------
OVERVIEW
- Add flows to switch, read back and verify flow configurations
PURPOSE
- Test acceptance of flow adds
- Test ability of switch to process additions to flow table in random
priority order
- Test correctness of flow configuration responses
INPUTS
- NUM_FLOWS: number of flows to define; 0 => maximum number of flows, as
determined from switch capabilities
PROCESS
1. Delete all flows from switch
2. Generate NUM_FLOWS distinct flow configurations
3. Send NUM_FLOWS flow adds to switch, for flows generated in step 2 above
- Flow mods with OFPFF_SEND_FLOW_REM = 0 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 0 (do not check for overlap)
4. Verify that no OFPT_ERROR responses were generated by switch
5. Retrieve flow stats from switch
6. Compare flow configurations returned by switch
7. Test PASSED iff all flows sent to switch in step 3 above are returned in
step 5 above; else test FAILED
NOTES
- Will use randomized flow configuration, in an attempt to cover combinations
of qualifier wildcarding, qualifier values, actions and action parameters
2.5.1 FLOW ADD 5.1
-------------------
OVERVIEW
- Verify flow canonicalization
PURPOSE
- Test that switch properly canonicalizes a given flow definition
(canonicalization is defined as wildcarding out qualifiers when antecedent
qualifiers are not set correctly, e.g. nw_tos cannot be specified, and hence
must be wildcarded, if dl_type is not specified to be 0x0800 (IP))
INPUTS
None
PROCESS
1. Delete all flows from switch
2. Generate 1 flow definition, which is different from its canonicalization
3. Send flow to switch
4. Retrieve flow from switch
5. Compare returned flow to canonical form of defined flow
7. Test PASSED iff flow received in step 4 above is identical to canonical
form of flow defined in step 3 above
2.6 FLOW ADD 6
---------------
OVERVIEW
- Test flow table capacity
PURPOSE
- Test switch can accept as many flow definitions as it claims
- Test generation of OFPET_FLOW_MOD_FAILED/OFPFMFC_ALL_TABLES_FULL
- Test that attempting to create flows beyond capacity does not corrupt flow
table
INPUTS
None
PROCESS
1. Delete all flows from switch
2. Send OFPT_FEATURES_REQUEST to determine switch features
3. For each table reported by step 2 above, send OFPT_STATS_REQUEST/
OFPST_TABLE to determine table features
4. Generate (N + 1) distinct flow configurations, where N is the flow capacity
reported by the switch in steps 2 and 3 above
- Flow wildcarding must obey supported wildcards, for each table
5. Send (N + 1) flow adds to switch, for flows generated in step 4 above
- Flow mods with OFPFF_SEND_FLOW_REM = 0 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 0 (do not check for overlap)
6. Verify that OFPET_FLOW_MOD_FAILED/OFPFMFC_ALL_TABLES_FULL error response
was generated by switch, for last flow mod sent
7. Retrieve flow stats from switch
8. Compare flow configurations returned by switch
9. Test PASSED iff:
- error message received, for correct flow
- last flow definition sent to switch is not in flow table
else test FAILED
2.7 FLOW ADD 7
---------------
OVERVIEW
- Test flow redefinition
PURPOSE
- Verify that successive flow adds with same priority and match criteria
overwrite in flow table
INPUTS
None
PROCESS
1. Delete all flows from switch
2. Generate flow definition F1
3. Generate flow definition F2, with same key (priority and match) as F1,
but with different actions
4. Send flow adds for F1 and F2 to switch
- Flow mods with OFPFF_SEND_FLOW_REM = 0 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 0 (do not check for overlap)
5. Retrieve flow stats from switch
6. Compare flow configurations returned by switch
7. Test PASSED iff 1 flow returned by switch, matching configuration of F2,
and with counters equal to 0; else test FAILED
2.8 FLOW ADD 8
---------------
OVERVIEW
- Add overlapping flows to switch, verify that overlapping flows are rejected
PURPOSE
- Test detection of overlapping flows by switch
- Test generation of OFPET_FLOW_MOD_FAILED/OFPFMFC_OVERLAP messages
- Test rejection of overlapping flows
- Test defining overlapping flows does not corrupt flow table
INPUTS
None
PROCESS
1. Delete all flows from switch
2. Generate flow definition F1
3. Generate flow definition F2, with key overlapping F1, by wildcarding a
qualifier specified in F1
4. Send flow adds to switch, for flows generated in steps 2 and 3 above
- Flow mods with OFPFF_SEND_FLOW_REM = 0 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 1 (check for overlap)
4. Verify that OFPET_FLOW_MOD_FAILED/OFPFMFC_OVERLAP error response was
generated by switch
5. Retrieve flow stats from switch
6. Compare flow configurations returned by switch
7. Test PASSED iff:
- error message received, for overlapping flow
- overlapping flow is not in flow table
else test FAILED
3. FLOW MODIFY
===============
3.1 FLOW MODIFY 1
------------------
OVERVIEW
- Strict modify of single existing flow
PURPOSE
- Verify that strict flow modify operates only on specified flow
- Verify that flow is correctly modified
INPUTS
- NUM_FLOWS: number of flows to define; 0 => maximum number of flows,
as determined from switch capabilities
PROCESS
1. Delete all flows from switch
2. Generate NUM_FLOWS distinct flow configurations
3. Send NUM_FLOWS flow adds to switch, for flows generated in step 2 above
- Flow mods with OFPFF_SEND_FLOW_REM = 0 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 0 (do not check for overlap)
4. Pick 1 defined flow F at random
5. Generate new action list for F
6. Send flow modify for F to switch
4. Verify that no OFPT_ERROR responses were generated by switch
5. Retrieve flow stats from switch
6. Compare flow configurations returned by switch
7. Test PASSED iff all flows sent to switch in step 3 and 6 above are
returned in step 5 above; else test FAILED
3.2 FLOW MODIFY 2
------------------
OVERVIEW
- Loose modify of existing flows
PURPOSE
- Verify that loose flow modify operates only on matching flows
- Verify that matching flows are correctly modified
INPUTS
- NUM_FLOWS: number of flows to define; 0 => maximum number of flows, as
determined from switch capabilities
PROCESS
1. Delete all flows from switch
2. Generate NUM_FLOWS distinct flow configurations
3. Send NUM_FLOWS flow adds to switch, for flows generated in step 2 above
- Flow mods with OFPFF_SEND_FLOW_REM = 0 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 0 (do not check for overlap)
4. Pick 1 defined flow F at random
5. Wildcard out 1 qualifier in match of F, creating F', such that F' will
match more than 1 existing flow key, and create new actions list A' for F'
6. Send loose flow modify for F' to switch
7. Retrieve flow stats from switch
8. Compare flow configurations returned by switch
9. Test PASSED iff all flows sent to switch in steps 3 and 6 above, are
returned in step 7 above, each with correct (original or modified) action
list;
else test FAILED
3.3 FLOW MODIFY 3
------------------
OVERVIEW
- Strict modify of non-existent flow
PRUPOSE
- Verify that strict modify of a non-existent flow is equivalent to a flow add
INPUTS
None
PROCESS
1. Delete all flows from switch
2. Send strict flow modify to switch
3. Retrieve flows from switch
4. Test PASSED iff single flow defined in step 2 above is returned in step 3
above; else test FAILED
3.3.1 FLOW MODIFY 3_1
---------------------
OVERVIEW
- No-op modify
PURPOSE
- Verify that modify of a flow with new actions same as old ones operates
correctly
PARAMETERS
None
PROCESS
1. Delete all flows from switch
2. Send single flow mod, as strict modify, to switch
3. Verify flow table in switch
4. Send same flow mod, as strict modify, to switch
5. Verify flow table in switch
6. Test PASSED iff flow defined in step 2 and 4 above verified; else FAILED
4. FLOW DELETE
===============
4.1 FLOW DELETE 1
------------------
OVERVIEW
- Strict delete of single flows
PURPOSE
- Verify correct operation of strict delete of single defined flow
INPUTS
- NUM_FLOWS: Number of flows to define; 0 => maximum number of flows, as
determined fro switch capabilities
PROCESS
1. Delete all flows from switch
2. Generate NUM_FLOWS distinct flow configurations
3. Send NUM_FLOWS flow adds to switch, for flows generated in step 2 above
- Flow mods with OFPFF_SEND_FLOW_REM = 0 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 0 (do not check for overlap)
4. Pick 1 defined flow F at random
5. Send strict flow delete for F to switch
6. Retrieve flow stats from switch
7. Compare flow configurations returned by switch
8. Test PASSED iff all flows sent to switch in step 3 above, less flow
removed in step 5 above, are returned in step 5 above; else test FAILED
4.2 FLOW DELETE 2
------------------
OVERVIEW
- Loose delete of flows
PURPOSE
- Verify correct operation of loose delete of multiple flows
INPUTS
- NUM_FLOWS: Number of flows to define; 0 => maximum number of flows, as
determined fro switch capabilities
PROCESS
1. Delete all flows from switch
2. Generate NUM_FLOWS distinct flow configurations
3. Send NUM_FLOWS flow adds to switch, for flows generated in step 2 above
- Flow mods with OFPFF_SEND_FLOW_REM = 0 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 0 (do not check for overlap)
4. Pick 1 defined flow F at random
5. Wildcard out 1 qualifier in match of F, creating F', such that F' will
match more than 1 existing flow key
6. Send loose flow delete for F' to switch
7. Retrieve flow stats from switch
8. Compare flow configurations returned by switch
9. Test PASSED iff all flows sent to switch in step 3 above, less flows
removed in step 6 above (i.e. those that match F'), are returned in step
5 above;
else test FAILED
4.4 FLOW DELETE 4
------------------
OVERVIEW
- Flow removed messages
PURPOSE
- Verify that switch generates OFPT_FLOW_REMOVED/OFPRR_DELETE response
messages when deleting flows that were added with OFPFF_SEND_FLOW_REM flag
INPUTS
- NUM_FLOWS: Number of flows to define; 0 => maximum number of flows, as
determined fro switch capabilities
PROCESS
1. Delete all flows from switch
2. Generate NUM_FLOWS distinct flow configurations
3. Send NUM_FLOWS flow adds to switch, for flows generated in step 2 above
- Flow mods with OFPFF_SEND_FLOW_REM = 1 (do not send remove message) and
OFPFF_CHECK_OVERLAP = 0 (do not check for overlap)
4. Pick 1 defined flow F at random
5. Send strict flow delete for F to switch
6. Verify that OFPT_FLOW_REMOVED/OFPRR_DELETE message is received from switch
7. Retrieve flow stats from switch
8. Compare flow configurations returned by switch
9. Test PASSED iff all flows sent to switch in step 3 above, less flow
removed in step 5 above, are returned in step 5 above; else test FAILED