OFTestListPage

From OpenFlow Wiki

Jump to: navigation, search

Contents

Current Test Cases for OpenFlow 1.1 Specification Testing

Here is the list of available tests by module in oft. Last updated 1/25/2011.

  • Tests preceded by * are not run by default
  • Tests marked (TP1) after name take --test-params including: 'vid=N;strip_vlan=bool;add_vlan=bool'

Module basic: Basic protocol and dataplane test cases

DataPlaneOnly Root class that sets up only the dataplane
Echo Test echo response with no data
EchoWithData Test echo response with short string data
FeaturesRequest Test features_request to make sure we get a response
FlowMod Insert a flow
FlowRemoveAll Remove all flows; required for almost all tests
FlowStatsGet Get stats
PacketIn Test packet in function
PacketOut Test packet out function
PortConfigMod Modify a bit in port config and verify changed
SimpleDataPlane Root class that sets up the controller and dataplane
SimpleProtocol Root class for setting up the controller
TableModConfig Simple table modification
TableStatsGet Get table stats

Module caps: Basic capabilities and capacities tests

* FillTableExact Fill the flow table with exact matches; can take a while
FillTableWC Fill the flow table with wildcard matches

Module config: Basic configuration parameter tests

BlockPacketInByPort Test ability to BLOCK packet ins via port_mod

Module dlnw_mask: Test cases for testing DL/NW bit mask features

ExactDlDstMask Execute exact match test with DL destination address bitmask
ExactDlSrcMask Execute exact match test with DL source address bitmask
ExactNwDstNetMask Execute exact match test with NW destination address bitmask
ExactNwDstSftMask Execute exact match test with NW destination address bitmask
ExactNwSrcNetMask Execute exact match test with NW source address bitmask
ExactNwSrcSftMask Execute exact match test with NW source address bitmask
WildcardDlDstMask Execute wildcard matching with DL destination address bitmask
WildcardDlSrcMask Execute wildcard match test with DL source address bitmask
WildcardNwDstNetMask Execute wildcard match test with NW destination address bitmask
WildcardNwDstSftMask Execute wildcard match test with NW destination address bitmask
WildcardNwSrcNetMask Execute wildcard matching with NW source address bitmask
WildcardNwSrcSftMask Execute wildcard matching with NW source address bitmask

Module flow_expire: Flow expire test case.

BaseFlowExpire Verify flow expire messages are properly generated.
HardFlowExpire No description
IdleFlowExpire No description

Module flow_stats: Flow stats test case.

FlowStats Verify flow stats are properly retrieved.

Module mplsact: Test cases for testing actions taken on packets

MplsActNonTagPush MPLS push action (0x8847) test with untagged pkt
MplsActNonTagPushDecTtl MPLS Push and TTL decrement action test with untagged pkt
MplsActNonTagPushSetLabel MPLS Push and Set LABEL action test with untagged pkt
MplsActNonTagPushSetOutrange0 MPLS set LABEL action (outrange value) test with untaggedpkt
MplsActNonTagPushSetOutrange1 MPLS set TC action test with untagged pkt
MplsActNonTagPushSetTc MPLS Push and Set TC action test with untagged pkt
MplsActNonTagPushSetTtl MPLS Push and Set TTL action test with untagged pkt
MplsActNonTagPushTtlIn MPLS push and TTL-in action test with untagged pkts
MplsActNonTagPushTtlOut MPLS push and TTL-out action test with untagged pkts
MplsActOneTagDecTtl MPLS TTL decrement action test with tagged pkt
MplsActOneTagPop MPLS pop action test with tagged pkt
MplsActOneTagPush MPLS push action (0x8847) test with tagged pkt
MplsActOneTagPushDecTtl MPLS Push and TTL decrement action test with tagged pkt
MplsActOneTagPushSetLabel MPLS Push and Set LABEL action test with tagged pkt
MplsActOneTagPushSetOutrange0 MPLS push and set LABEL action (outrange value) test withtagged pkt
MplsActOneTagPushSetOutrange1 MPLS push and set TC action (outrange value) test with tagged pkt
MplsActOneTagPushSetTc MPLS Push and Set TC action test with tagged pkt
MplsActOneTagPushSetTtl MPLS Push and Set TTL action test with tagged pkt
MplsActOneTagPushTtlIn MPLS push and TTL-in action test with tagged pkt
MplsActOneTagPushTtlOut MPLS push and TTL-out action test with tagged pkt
MplsActOneTagSetLabel0 MPLS set LABEL action test with tagged pkt
MplsActOneTagSetLabel1 MPLS set LABEL action (outrange value) test with tagged pkt
MplsActOneTagSetTc0-1 MPLS set action test with tagged pkt
MplsActOneTagSetTtl MPLS Set TTL action test with tagged pkt
MplsActOneTagTtlIn MPLS Copy TTL inward with tagged pkt
MplsActOneTagTtlOut MPLS Copy TTL outward with tagged pkt
MplsActTwoTagDecTtl MPLS TTL decrement action test with two-tagged pkt
MplsActTwoTagPop MPLS pop action test with two-tagged pkt
MplsActTwoTagPush MPLS push action (0x8847) test with two-tagged pkt
MplsActTwoTagPushDecTtl MPLS Push and Set TTL action test with two-tagged pkt
MplsActTwoTagPushSetLabel MPLS Push and Set LABEL action test with two-tagged pkt
MplsActTwoTagPushSetOutrange0 MPLS push and set LABEL action (outrange value) test withtwo-tagged pkt
MplsActTwoTagPushSetOutrange1 MPLS push and set TC action (outrange value) test with two-tagged pkt
MplsActTwoTagPushSetTc MPLS Push and Set TC action test with two-tagged pkt
MplsActTwoTagPushSetTtl MPLS Push and Set TTL action test with two-tagged pkt
MplsActTwoTagPushTtlIn MPLS push and TTL-in action test with two-tagged pkts
MplsActTwoTagPushTtlOut MPLS push and TTL-out action test with two-tagged pkts
MplsActTwoTagSetLabel0 MPLS set LABEL action test with two-tagged pkt
MplsActTwoTagSetLabel1 MPLS set LABEL action (outrange value) test with two-tagged pkt
MplsActTwoTagSetTc0 MPLS set TC action test with two-tagged pkt
MplsActTwoTagSetTc1 MPLS set TC action (outrange value) test with two-tagged pkt
MplsActTwoTagSetTtl MPLS set TTL action test with two-tagged pkt4
MplsActTwoTagTtlIn MPLS Copy TTL inward with two-tagged pkt
MplsActTwoTagTtlOut MPLS Copy TTL outward with two-tagged pkt

Module mplsmatch: Test cases for mpls match features

MplsExactAny0-1 MPLS match test with Exact LABEL, TC
MplsExactLabelWildTcAny0-1 MPLS match test with Exact LABEL and Wildcard TC
MplsExactLabelWildTcNone0-2 MPLS match test with Exact LABEL and Wildcard TC
MplsExactLabelWildTcOutrange0-4 MPLS match test with Exact LABEL and Wildcard TC
MplsExactLabelWildTcSpecific0-5 MPLS match test with Exact LABEL and Wildcard TC
MplsExactNone0-2 MPLS match test with Exact LABEL, TC
MplsExactOutrange0-4 MPLS match test with Exact LABEL, TC
MplsExactSpecific0-5 MPLS match test with Exact LABEL, TC
MplsWildAny0-1 MPLS match test with Wildcard LABEL, TC
MplsWildLabelExactTcAny0-1 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcNone0-2 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcOutrange0 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcOutrange1 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcOutrange2 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcOutrange3 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcOutrange4 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcSpecific0 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcSpecific1 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcSpecific2 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcSpecific3 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcSpecific4 MPLS match test with Wildcard LABEL and Exact TC
MplsWildLabelExactTcSpecific5 MPLS match test with Wildcard LABEL and Exact TC
MplsWildNone0 MPLS match test with Wildcard LABEL, TC
MplsWildNone1 MPLS match test with Wildcard LABEL, TC
MplsWildNone2 MPLS match test with Wildcard LABEL, TC
MplsWildOutrange0 MPLS match test with Wildcard LABEL, TC
MplsWildOutrange1 MPLS match test with Wildcard LABEL, TC
MplsWildOutrange2 MPLS match test with Wildcard LABEL, TC
MplsWildOutrange3 MPLS match test with Wildcard LABEL, TC
MplsWildOutrange4 MPLS match test with Wildcard LABEL, TC
MplsWildSpecific0 MPLS match test with Wildcard LABEL, TC
MplsWildSpecific1 MPLS match test with Wildcard LABEL, TC
MplsWildSpecific2 MPLS match test with Wildcard LABEL, TC
MplsWildSpecific3 MPLS match test with Wildcard LABEL, TC
MplsWildSpecific4 MPLS match test with Wildcard LABEL, TC
MplsWildSpecific5 MPLS match test with Wildcard LABEL, TC

Module multi-table: Created on Dec 14, 2010

MultiTableClearAction Simple four table test for "ClearAction"
MultiTableConfigContinue Simple table config test for "continue"
MultiTableConfigController Simple table config test for "controller"
MultiTableConfigDrop Simple table config test for "drop"
MultiTableEmptyInstruction Simple four table test for "Empty Instruction"
MultiTableGoto Simple three table test for "goto"
MultiTableGotoAndSendport Simple three table test for "goto and send to output port"
MultiTableMetadata Simple four table test for writing and matching "Metdata"
MultiTableMiss Simple four table test for all miss (not match)
MultiTableNoGoto Simple four table test for "No-goto"
MultiTablePolicyDecoupling Simple two-table test for "policy decoupling"
TwoTable1 Simple two table test
TwoTableApplyActGeneric2Mod Test if apply_action on one table is effective to the next table
TwoTableApplyActGenericSimple Test if apply_action on one table is effective to the next table

Module multitable_mpls: Test cases for mpls match with using multiple tables

TwoTable0MplsPushSetLabelTcMatch Multitable test: Push, Set LABEL, TC and apply it and expect it on outport
TwoTable1MplsPopMatch Multitable test: Pop, apply it and expect it on outport
TwoTable1MplsPopUnmatch Multitable test: Pop, apply it but not expect it on outport
TwoTable2MplsPopMatch Multitable test: Pop, apply it and expect it on outport
TwoTable2MplsPopUnmatch Multitable test: Pop, apply it but not expect it on outport
TwoTableMplsPushMatch Multitable test: Push and apply it and expect it on outport
TwoTableMplsPushSetLabelMatch Multitable test: Push, Set LABEL, apply it and expect it on outport
TwoTableMplsPushSetLabelUnmatch Multitable test: Push, Set LABEL, apply it but not expectit on outport
TwoTableMplsPushSetTcMatch Multitable test: Push, Set TC, apply it and expect it on outport
TwoTableMplsPushSetTcUnmatch Multitable test: Push, Set TC, apply it but not expect iton outport
TwoTableMplsPushSetTtlMatch Multitable test: Push, Set TTL, apply it and expect it onoutport
TwoTableMplsPushUnmatch Multitable test: Push, Set LABEL, apply it but not expectit on outport
TwoTableMplsSetMatch Multitable test: Set LABEL+TC, apply it and expect it on outport
TwoTableMplsSetUnmatch Multitable test: Set LABEL+TC, apply it but not expect iton outport
TwoTableMplsTtlInMatch Multitable test: Copy TTL inwards, apply it and expect iton outport
TwoTableMplsTtlOutMatch Multitable test: Copy TTL outwards, apply it and expect it on outport

Module multitable_vlan: Test cases for vlan match with using multiple tables

TwoTable0VlanPushSetVidPcpMatch Multitable test: Push, Set VID, PCP and apply it and expect it on outport
TwoTable1VlanPopMatch Multitable test: Pop, apply it and expect it on outport
TwoTable1VlanPopUnmatch Multitable test: Pop, apply it but not expect it on outport
TwoTable2VlanPopMatch Multitable test: Pop, apply it and expect it on outport
TwoTable2VlanPopUnmatch Multitable test: Pop, apply it but not expect it on outport
TwoTableVlanPushSetPcpMatch Multitable test: Push, Set PCP, apply it and expect it onoutport
TwoTableVlanPushSetPcpUnmatch Multitable test: Push, Set PCP, apply it but not expect it on outport
TwoTableVlanPushSetVidMatch0 Multitable test: Push, Set VID, apply it and expect it onoutport
TwoTableVlanPushSetVidMatch1 Multitable test: Push, Set VID, apply it and expect it onoutport
TwoTableVlanPushSetVidPcpMatch Multitable test: Push, Set VID+PCP, apply it and expect it on outport
TwoTableVlanPushSetVidPcpUnmatch Multitable test: Push, Set VID+PCP, apply it but not expect it on outport
TwoTableVlanPushSetVidUnmatch0 Multitable test: Push, Set VID, apply it but not expect it on outport
TwoTableVlanPushSetVidUnmatch1 Multitable test: Push, Set VID, apply it but not expect it on outport
TwoTableVlanSetMatch Multitable test: Set VID+PCP, apply it and expect it on outport
TwoTableVlanSetUnmatch Multitable test: Set VID+PCP, apply it but not expect it on outport

Module pktact: Test cases for testing actions taken on packets

AddVLANTag Add a VLAN tag to an untagged packet
All Send to OFPP_ALL port
AllExceptOneWildcardMatch Match exactly one field
AllExceptOneWildcardMatchTagged Match one field with tagged packets
AllPlusIngress Send to OFPP_ALL port and ingress port
AllWildcardMatch Create Wildcard-all flow and exercise for all ports
AllWildcardMatchTagged AllWildcardMatch with tagged packets
BaseMatchCase No description
DirectMC Multicast to all ports including ingress
DirectMCNonIngress Multicast to all non-ingress ports
DirectPacket Send packet to single egress port
DirectPacketICMP Send ICMP packet to single egress port
DirectTwoPorts Send packet to two egress ports
ExactMatch Exercise exact matching for all port pairs
ExactMatchTagged Exact match for all port pairs with tagged pkts
* ExactMatchTaggedMany ExactMatchTagged with many VLANS
* MixedVLAN Test mixture of VLAN tag actions
ModifyL2Dst Modify the dest MAC address (TP1)
ModifyL2Src Modify the source MAC address (TP1)
ModifyL3Dst Modify the dest IP address of an IP packet (TP1)
ModifyL3Src Modify the source IP address of an IP packet (TP1)
ModifyL4Dst Modify the dest TCP port of a TCP packet (TP1)
ModifyL4Src Modify the source TCP port of a TCP packet (TP1)
ModifyTOS Modify the IP type of service of an IP packet (TP1)
ModifyVID Modify the VLAN ID in the VLAN tag of a tagged packet
* PacketOnly Just send a packet thru the switch
* PacketOnlyTagged Just send a packet thru the switch
SingleWildcardMatch Exercise wildcard matching for all ports
SingleWildcardMatchTagged SingleWildcardMatch with tagged packets
StripVLANTag Strip the VLAN tag from a tagged packet

Module stats: Test table statistics

DescStatsGet Make sure we get a sane desc stats reply to our request
TableStats Fill up the flow table a bit and make sure

Module vlanact: Test cases for vlan action features

VlanActNonTagPush0 VLAN push action (type VLAN) test with untagged pkt
VlanActNonTagPush1 VLAN push action (type QinQ) test with untagged pkt
VlanActNonTagPush2 VLAN push action (type other) test with untagged pkt
VlanActNonTagPushPop VLAN Push and Pop action test with untagged pkt
VlanActNonTagPushSetPcp VLAN Push and Set PCP action test with untagged pkt
VlanActNonTagPushSetVid VLAN Push and Set VID action test with untagged pkt
VlanActNonTagPushSetVidPcp VLAN Push, Set VID and Set PCP action test with untagged pkt
VlanActOneTagPop VLAN pop action test with tagged pkt
VlanActOneTagPush0 VLAN push action (type VLAN) test with tagged pkt
VlanActOneTagPush1 VLAN push action (type QinQ) test with tagged pkt
VlanActOneTagPush2 VLAN push action (type other) test with tagged pkt
VlanActOneTagPushSPop VLAN multiple action test with tagged pkt
VlanActOneTagPushSetPcp VLAN Push and Set PCP action test with tagged pkt
VlanActOneTagPushSetVid VLAN Push and Set VID action test with tagged pkt
VlanActOneTagPushSetVidPcp VLAN Push, Set VID and Set PCP action test with tagged pkt
VlanActOneTagSetPcp0 VLAN set action test with tagged pkt
VlanActOneTagSetPcp1 VLAN set action test with tagged pkt
VlanActOneTagSetVid0 VLAN set VID action test with tagged pkt
VlanActOneTagSetVid1 VLAN set VID action (outrange value) test with tagged pkt
VlanActTwoTagPop VLAN pop action test with two-tagged pkt
VlanActTwoTagPush0 VLAN push action (type VLAN) test with two-tagged pkt
VlanActTwoTagPush1 VLAN push action (type QinQ) test with two-tagged pkt
VlanActTwoTagPush2 VLAN push action (type other) test with two-tagged pkt
VlanActTwoTagPushPop VLAN Push and Pop action test with two-tagged pkt
VlanActTwoTagPushSetPcp VLAN Push and Set PCP action test with two-tagged pkt
VlanActTwoTagPushSetVid VLAN Push and Set VID action test with two-tagged pkt
VlanActTwoTagPushSetVidPcp VLAN Push, Set VID and Set PCP action test with two-tagged pkt
VlanActTwoTagSetPcp0 VLAN set PCP action test with two-tagged pkt
VlanActTwoTagSetPcp1 VLAN set PCP action (outrange value) test with two-taggedpkt
VlanActTwoTagSetVid0 VLAN set VID action test with two-tagged pkt
VlanActTwoTagSetVid1 VLAN set VID action (outrange value) test with two-taggedpkt

Module vlanmatch: Test cases for vlan match features

VlanExactAny0 VLAN match test with Exact VID, PCP
VlanExactAny1 VLAN match test with Exact VID, PCP
VlanExactIdWildPcpAny0 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpAny1 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpNone0 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpNone1 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpNone2 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpOutrange0 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpOutrange1 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpOutrange2 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpOutrange3 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpOutrange4 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpSpecific0 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpSpecific1 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpSpecific2 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpSpecific3 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpSpecific4 VLAN match test with Exact VID and Wildcard PCP
VlanExactIdWildPcpSpecific5 VLAN match test with Exact VID and Wildcard PCP
VlanExactNone0 VLAN match test with Exact VID, PCP
VlanExactNone1 VLAN match test with Exact VID, PCP
VlanExactNone2 VLAN match test with Exact VID, PCP
VlanExactOutrange0 VLAN match test with Exact VID, PCP
VlanExactOutrange1 VLAN match test with Exact VID, PCP
VlanExactOutrange2 VLAN match test with Exact VID, PCP
VlanExactOutrange3 VLAN match test with Exact VID, PCP
VlanExactOutrange4 VLAN match test with Exact VID, PCP
VlanExactSpecific0 VLAN match test with Exact VID, PCP
VlanExactSpecific1 VLAN match test with Exact VID, PCP
VlanExactSpecific2 VLAN match test with Exact VID, PCP
VlanExactSpecific3 VLAN match test with Exact VID, PCP
VlanExactSpecific4 VLAN match test with Exact VID, PCP
VlanExactSpecific5 VLAN match test with Exact VID, PCP
VlanWildAny0 VLAN match test with Wildcard VID, PCP
VlanWildAny1 VLAN match test with Wildcard VID, PCP
VlanWildIdExactPcpAny0 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpAny1 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpNone0 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpNone1 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpNone2 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpOutrange0 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpOutrange1 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpOutrange2 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpOutrange3 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpOutrange4 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpSpecific0 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpSpecific1 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpSpecific2 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpSpecific3 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpSpecific4 VLAN match test with Wildcard VID and Exact PCP
VlanWildIdExactPcpSpecific5 VLAN match test with Wildcard VID and Exact PCP
VlanWildNone0 VLAN match test with Wildcard VID, PCP
VlanWildNone1 VLAN match test with Wildcard VID, PCP
VlanWildNone2 VLAN match test with Wildcard VID, PCP
VlanWildOutrange0 VLAN match test with Wildcard VID, PCP
VlanWildOutrange1 VLAN match test with Wildcard VID, PCP
VlanWildOutrange2 VLAN match test with Wildcard VID, PCP
VlanWildOutrange3 VLAN match test with Wildcard VID, PCP
VlanWildOutrange4 VLAN match test with Wildcard VID, PCP
VlanWildSpecific0 VLAN match test with Wildcard VID, PCP
VlanWildSpecific1 VLAN match test with Wildcard VID, PCP
VlanWildSpecific2 VLAN match test with Wildcard VID, PCP
VlanWildSpecific3 VLAN match test with Wildcard VID, PCP
VlanWildSpecific4 VLAN match test with Wildcard VID, PCP
VlanWildSpecific5 VLAN match test with Wildcard VID, PCP

Test Cases for OpenFlow 1.0

Here is the list of available tests by module in oft on the master branch. This supports OpenFlow 1.0. Last updated 7/20/2010.

Test List:
  Module flow_stats:  Flow stats test case.
    FlowStats:        Verify flow stats are properly retrieved.

  Module flow_expire:  Flow expire test case.
    FlowExpire:       Verify flow expire messages are properly generated.

  Module basic:       Basic protocol and dataplane test cases
    DataPlaneOnly:    Root class that sets up only the dataplane
    Echo:             Test echo response with no data
    EchoWithData:     Test echo response with short string data
    FlowMod:          Insert a flow
    FlowStatsGet:     Get stats 
    PacketIn:         Test packet in function
    PacketOut:        Test packet out function
    PortConfigMod:    Modify a bit in port config and verify changed
    SimpleDataPlane:  Root class that sets up the controller and dataplane
    SimpleProtocol:   Root class for setting up the controller
    TableStatsGet:    Get table stats 

  Module caps:        Basic capabilities and capacities tests
  * FillTableExact:   Fill the flow table with exact matches; can take a while
    FillTableWC:      Fill the flow table with wildcard matches

  Module pktact:      Test cases for testing actions taken on packets
    AddVLANTag:       Add a VLAN tag to an untagged packet
    All:              Send to OFPP_ALL port
    AllExceptOneWildcardMatch: 
                      Match exactly one field
    AllExceptOneWildcardMatchTagged: 
                      Match one field with tagged packets
    AllPlusIngress:   Send to OFPP_ALL port and ingress port
    AllWildcardMatch: Create Wildcard-all flow and exercise for all ports
    AllWildcardMatchTagged: 
                      AllWildcardMatch with tagged packets
    BaseMatchCase:    No description
    DirectMC:         Multicast to all ports including ingress
    DirectMCNonIngress: 
                      Multicast to all non-ingress ports
    DirectPacket:     Send packet to single egress port
    DirectPacketICMP: Send ICMP packet to single egress port
    DirectTwoPorts:   Send packet to two egress ports
    ExactMatch:       Exercise exact matching for all port pairs
    ExactMatchTagged: Exact match for all port pairs with tagged pkts
  * ExactMatchTaggedMany: 
                      ExactMatchTagged with many VLANS
    Flood:            Flood to all ports except ingress
    FloodMinusPort:   Config port with No_Flood and test Flood action
    FloodPlusIngress: Flood to all ports plus send to ingress port
  * MixedVLAN:        Test mixture of VLAN tag actions
    ModifyL2Dst:      Modify the dest MAC address (TP1)
    ModifyL2Src:      Modify the source MAC address (TP1)
    ModifyL3Dst:      Modify the dest IP address of an IP packet (TP1)
    ModifyL3Src:      Modify the source IP address of an IP packet (TP1)
    ModifyL4Dst:      Modify the dest TCP port of a TCP packet (TP1)
    ModifyL4Src:      Modify the source TCP port of a TCP packet (TP1)
    ModifyTOS:        Modify the IP type of service of an IP packet (TP1)
    ModifyVID:        Modify the VLAN ID in the VLAN tag of a tagged packet
  * PacketOnly:       Just send a packet thru the switch
  * PacketOnlyTagged: Just send a packet thru the switch
    SingleWildcardMatch: 
                      Exercise wildcard matching for all ports
    SingleWildcardMatchTagged: 
                      SingleWildcardMatch with tagged packets
    StripVLANTag:     Strip the VLAN tag from a tagged packet

Tests preceded by * are not run by default
Tests marked (TP1) after name take --test-params including:
    'vid=N;strip_vlan=bool;add_vlan=bool'


Prioritization of Test Cases to Write

See the current BlackBox test list summary. We should be working towards getting that coverage.

Here is a rough prioritization of test cases to add taken from the more complete list below.

  • Matching: Using output action, run positive and negative tests to:
    • Exercise all single wildcard Matching cases. [Glen] (Tatsuya. Done)
    • Exercise all "all wildcard except X" Matching cases [Glen] (Tatsuya. Done)
    • Exercise all wildcard Matching case [Glen] (Tatsuya. Done)
  • Actions: Using an exact match, run positive and negative tests to:
    • Exercise output to inport Action (Bob L)
    • Exercise multicast to 2 ports Action, not to in port (Dan. Done)
    • Exercise multicast to all ports except in port (Dan. Done)
    • Exercise multicast to all ports including in port (Dan. Done)
    • Exercise flood to all ports except in port (Dan. Done)
    • Exercise flood to all ports and send to in port (Dan. Done)
    • Exercise 'send to all' port Action, not to in port (Dan. Done)
    • Exercise 'send to all' port Action and send to in port (Dan. Done)
    • Set one port to NO_FLOOD; exercise FLOOD and ALL actions
    • Exercise rewrite-actions: (Done)
      • Exercise rewrite L2 fields if supported (Tatsuya. Done)
      • Exercise rewrite VLAN ID if supported (Tatsuya. Done)
      • Exercise rewrite L3 fields if supported (Tatsuya. Done)
      • Exercise rewrite L4 fields if supported (Tatsuya. Done)
    • Exercise some combinations of output and rewrite... TBD
  • Protocol:
    • Test switch features get (Dan. Done)
    • Test port modification (Dan. Done)
    • Send some packets and verify
      • Table stats
      • Port stats
      • Flow stats
    • Test MATCH and NO MATCH packet-in notifications
  • Table Maintenance
    • Test flow add by querying flow table (rather than packet matching)
    • Test flow modification with existing flow in table
    • Test hard and soft flow expirations with and without notification

Overview of Test Case Space

This is an attempt to identify possible tests for OpenFlow switches.

In the test lists, the following markers are used.

  • CHOOSE ONE: This means that one item in the following list should be chosen for a test case. If only one item is given, consider it a boolean.
  • OPTION: This means any combination of items in the following list can be chosen for a test case
  • COMBINE WITH: Test cases are created in combination with choices from the indicated category. Not all combinations will be tested, but some variation may be required for coverage.
  • DEPENDS ON: Test case may depend on some external requirement like support in the particular platform.

High Level Categories

Test Categories

Packet Variations

Tests involving the dataplane may have variations in the packets that are used. These are not really test cases directly, but parameters that may be used by test cases.

TBD: This needs to be straightened out a bit

  • CHOOSE ONE
    • Unknown ethertype
    • OPTION:
      • VLAN tag absent
      • VLAN, VID == 0
      • VLAN, VID != 0
      • OPTION CFI 0 or 1
      • OPTION PCP 0 - 7
    • IPv4
      • OPTION: TOS value
      • OPTION: Include IP Options
    • IPv6
    • TCP
    • ICMP
    • SNAP zero OUI
    • SNAP non-zero OUI
    • ARP

Matching

Note each test generally includes a positive test (send packet matching flow and expect action) and a negative test (send packet not matching flow and verify action did not occur, at least through flow counter).

  • COMBINE WITH: Packet Variations
  • OPTION: For each of the following CHOOSE wildcard or specific value
    • Ingress port
    • L2 dst
    • L2 src
    • L2 type
    • CHOOSE ONE
      • VLAN absence
      • OPTION
        • VLAN VID
        • VLAN PCP
    • L3 tos
    • L3 proto
    • CHOOSE ONE: L3 src bitmask 0 - 32
    • CHOOSE ONE: L3 dst bitmask 0 - 32
    • L4 sport
    • L4 dport
    • ICMP fields
  • CHOOSE ONE
    • Positive match (packet sent matches flow)
    • Negative match (packet sent does not match flow)

Actions

Drop

  • COMBINE WITH: Matching

Direction

  • DEPENDS ON: Reported switch capabilities
  • COMBINE WITH: Matching
  • OPTION
    • Output action
    • Enqueue action
  • CHOOSE ONE
    • inport as output port
  • CHOOSE ONE
    • unicast
    • multicast to 2 ports
    • multicast to more than 2 ports (requires port count greater than 4)
    • flood
    • all

Modification

The following modification actions may be carried out in any combination. Of course we'll start with the single field change operations; do a few multiple field operations and then do as many as possible.

  • DEPENDS ON: Reported switch capabilities
  • COMBINE WITH: Matching
  • COMBINE WITH: Actions
  • OPTION
    • Change L2 dst
    • Change L2 src
    • Change L2 type
    • Change VLAN VID
    • Change VLAN PCP
    • Strip VLAN
    • Change L3 src
    • Change L3 dst
    • Change L3 tos
    • Change L4 sport
    • Change L4 pport

Control plane boundary

  • Packet in
    • CHOOSE ONE
      • With OFPPC_NO_PACKET_IN for port
    • CHOOSE ONE
      • No match
      • COMBINE WITH: Matching
    • OPTION Send length (at least miss send length bytes sent)

Protocol

Hello

Echo

  • CHOOSE ONE
    • With data

Packet out

  • OPTION
    • COMBINE WITH: Actions
    • Apply table

Flow delete

  • OPTION
    • Request response

Async flow removed notification

Switch capabilities

Switch description

Switch config

Provoke error messages

  • TBD: Itemize

Statistics

  • OPTION
    • Packet counters
    • Byte counters

Flow statistics

  • CHOOSE ONE
    • Single
    • All
    • Aggregate CHOOSE ONE
      • Cookie
      • COMBINE WITH Matching

Table statistics

Port statistics

Table Maintenance

Flow add

OPTION: Check overlap flag

Flow modify

OPTION: cookie?

Flow delete

  • OPTION: Strict
  • OPTION: out_port specified
  • OPTION: cookie

Flow expiration

  • OPTION
    • Idle timeout
    • Hard timeout
  • Timer precision

Flow priorities

Buffer ID for pkt in/pkt out processing

Port status

Validate state flags

  • Link down flag

Deferred Tests

  • Emergency flow table related tests/flags
  • Tests that require some external configuration management

during the test (such as a port status that requires changing the physical port state).

  • Failover
  • Capacity related tests
    • Insert flows until failure
      • Exact match
      • Wildcard
  • Performance related
    • Flow setup time
    • Flow insert rate
    • Queuing characteristics
    • Bandwidth