

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


