| ''' |
| More complex (composite) test-cases for the OLT |
| ''' |
| |
| import logging |
| from oftest.testutils import * |
| from oltbase import OltBaseTest |
| from oltconstants import * |
| |
| |
| class Thing(object): |
| """An object we can stash arbitrary attributes for easy reach""" |
| def __init__(self, **kws): |
| self.__dict__.update(kws) |
| |
| |
| class ControllerAccess(OltBaseTest): |
| """Verify openflow access from OLT device""" |
| |
| def runTest(self): |
| logging.info("Running ControllerAccess test") |
| |
| # implicitly testing access to the openflow device |
| # and deleting all residual flows and groups |
| delete_all_flows(self.controller) |
| delete_all_groups(self.controller) |
| |
| |
| class TestScenario1SingleOnu(OltBaseTest): |
| """ |
| Run a comprehensive test scenrario on the OLT, with one ONU. |
| |
| Plan: |
| |
| 0. Reset the OLT into a clean state |
| 1. Setup the OLT to pass authentication (EAPOL) to controller |
| from any port, and test it. |
| 2. Setup the OLT to pass unicast traffic for the ONU |
| 3. Verify that unicast traffic works in both directions (use a few hundred frames in both ways) |
| 4. Setup IGMP forwarding toward the controller |
| 5. Send periodic IGMP queries out toward the ONU and verify its arrival |
| 6. Send in an IGMP join request for one channel (specific multicast address) and verify that |
| the controller receives it. |
| 7. Setup flows for forwarding multicast traffic from the OLT port toward the ONU(s) |
| 8. Verify that multicast packets can reach the ONU |
| 9. Verify that bidirectional unicast traffic still works across the PON |
| 10. Change channel to a new multicast group and verify both multicast receiption as well as |
| unicast traffic works. This step involves: |
| - sending a leave message by the ONU to the controller and verify its reception |
| - sending a join message and verify its reception |
| - removing the existing multicast flow |
| - adding a new multicast flow |
| - verify that original flow no longer flows |
| - verify new flow |
| - verify that unicast still works |
| 11. Add a second channel while keeping the existing one. Verify all what needs to be verified |
| (similar as above) |
| 12. Add two more multicast channels, and verify everything |
| 13. Flip a channel for one of the multicast channels, and verify everything |
| 14. Tear down the test. |
| """ |
| |
| def runTest(self): |
| logging.info("Running %s" % self.__class__.__name__) |
| |
| # Some constants |
| s_vlan_id = 111 |
| mcast_vlan_id = 140 |
| mcast_groups = Thing( |
| ch1="230.10.10.10", |
| ch2="231.11.11.11", |
| ch3="232.12.12.12", |
| ch4="233.13.13.13", |
| ch5="234.14.14.14" |
| ) |
| onu1 = Thing( |
| port=onu_port, |
| ip="13.14.14.13", |
| mac="b6:b8:3e:fb:1a:3f", |
| c_vlan_id=13 |
| ) |
| |
| # 0. Reset the OLT into a clean state |
| self.resetOlt() |
| |
| # 1. Setup the OLT to pass authentication (EAPOL) to controller |
| # from any port, and test it. |
| self.installEapolRule() |
| self.sendEapolIn() |
| |
| # 2. Setup the OLT to pass unicast traffic for the ONU1 |
| self.installDoubleTaggingRules(s_vlan_id, onu1.c_vlan_id, self.getCookieBlock()) |
| |
| # 3. Verify that unicast traffic works in both directions (use a few hundred frames in both ways) |
| self.testPacketFlow(s_vlan_id, onu1.c_vlan_id) # this tests just one packet in each way |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 100) |
| |
| # 4. Setup IGMP forwarding toward the controller |
| self.installIgmpRule(self.getCookieBlock()) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 5. Send periodic IGMP queries out toward the ONU and verify its arrival |
| self.testIgmpQueryOut() |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 6. Send in an IGMP join request for one channel (specific multicast address) and verify that |
| # the controller receives it. |
| self.sendIgmpReport(join=[mcast_groups.ch1]) |
| |
| # 7. Setup flows for forwarding multicast traffic from the OLT port toward the ONU(s) |
| ch1_cookie = self.getCookieBlock() |
| ch1_group_id = 1 |
| self.setupMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu1.port], ch1_group_id, ch1_cookie) |
| |
| # 8. Verify that multicast packets can reach the ONU |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], 10) |
| |
| # 9. Verify that bidirectional unicast traffic still works across the PON |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 10. Change channel to a new multicast group and verify both multicast receiption as well as |
| # unicast traffic works. This step involves: |
| # - sending a leave message by the ONU to the controller and verify its reception |
| # - sending a join message and verify its reception |
| # - removing the existing multicast flow |
| # - adding a new multicast flow |
| # - verify that original flow no longer flows |
| # - verify new flow |
| # - verify that unicast still works |
| self.sendIgmpReport(leave=[mcast_groups.ch1], join=[mcast_groups.ch2]) |
| self.removeMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu1.port], ch1_group_id, ch1_cookie) |
| ch2_cookie = self.getCookieBlock() |
| ch2_group_id = 2 |
| self.setupMcastChannel(mcast_groups.ch2, mcast_vlan_id, [onu1.port], ch2_group_id, ch2_cookie) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 11. Add a second channel while keeping the existing one. Verify all what needs to be verified |
| # (similar as above) |
| self.sendIgmpReport(join=[mcast_groups.ch2, mcast_groups.ch3]) |
| ch3_cookie = self.getCookieBlock() |
| ch3_group_id = 3 |
| self.setupMcastChannel(mcast_groups.ch3, mcast_vlan_id, [onu1.port], ch3_group_id, ch3_cookie) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], 10) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 12. Add two more multicast channels, and verify everything again |
| self.sendIgmpReport(join=[mcast_groups.ch2, mcast_groups.ch3, mcast_groups.ch4, mcast_groups.ch5]) |
| ch4_cookie = self.getCookieBlock() |
| ch4_group_id = 4 |
| self.setupMcastChannel(mcast_groups.ch4, mcast_vlan_id, [onu1.port], ch4_group_id, ch4_cookie) |
| ch5_cookie = self.getCookieBlock() |
| ch5_group_id = 5 |
| self.setupMcastChannel(mcast_groups.ch5, mcast_vlan_id, [onu1.port], ch5_group_id, ch5_cookie) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch4, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch5, mcast_vlan_id, [onu1.port], 10) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 13. Flip a channel for one of the multicast channels, and verify everything (ch3 -> ch1) |
| self.sendIgmpReport(join=[mcast_groups.ch1, mcast_groups.ch2, mcast_groups.ch4, mcast_groups.ch5], |
| leave=[mcast_groups.ch3]) |
| self.removeMcastChannel(mcast_groups.ch3, mcast_vlan_id, [onu1.port], ch3_group_id, ch3_cookie) |
| ## reusing the same group id and cookie |
| self.setupMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu1.port], ch1_group_id, ch1_cookie) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch4, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch5, mcast_vlan_id, [onu1.port], 10) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 14. Tear down the test. |
| self.resetOlt() |
| |
| |
| class TestScenario2TwoOnus(OltBaseTest): |
| """ |
| Run a comprehensive test scenario involving the OLT and two ONUs. |
| |
| Plan: |
| |
| 0. Reset the OLT into a clean state |
| |
| 1. Setup the OLT to pass authentication (EAPOL) to controller from ONU1 |
| and test it. |
| 2. Setup the OLT to pass unicast traffic for the ONU1 |
| 3. Verify that unicast traffic works in both directions (use a few hundred frames in both ways) |
| 4. Setup IGMP forwarding toward the controller |
| 5. Send periodic IGMP queries out toward the ONU1 and verify its arrival |
| 6. Send in an IGMP join request for one channel (specific multicast address) and verify that |
| the controller receives it. |
| 7. Setup flows for forwarding multicast traffic from the OLT port toward ONU1 |
| 8. Verify that multicast packets can reach ONU1 |
| 9. Verify that bidirectional unicast traffic still works across the PON |
| 10. Change channel to a new multicast group and verify both multicast receiption as well as |
| unicast traffic works. This step involves: |
| - sending a leave message by the ONU to the controller and verify its reception |
| - sending a join message and verify its reception |
| - removing the existing multicast flow |
| - adding a new multicast flow |
| - verify that original flow no longer flows |
| - verify new flow |
| - verify that unicast still works |
| 11. Add a second channel while keeping the existing one. Verify all what needs to be verified |
| (similar as above) - at this point ONU1 is tuned into ch2 and ch3 |
| |
| 12. Setup the OLT to pass authentication (EAPOL) to controller from ONU2 |
| and test it. |
| 13. Setup the OLT to pass unicast traffic for the ONU2 |
| 14. Verify that unicast traffic works in both directions (use a few hundred frames in both ways) |
| |
| 15. Verify that both ONUs can send/receive unicast and ONU1 can still see its 2 channels |
| |
| 16. Setup IGMP forwarding toward the controller |
| 17. Send periodic IGMP queries out toward the ONU2 and verify its arrival |
| 18. Send in an IGMP join request for one channel (specific multicast address) and verify that |
| the controller receives it. |
| 19. Setup flows for forwarding multicast traffic from the OLT port toward ONU2 |
| 20. Verify that multicast packets can reach ONU2 |
| 21. Verify that bidirectional unicast traffic still works across the PON for both ONUs |
| 22. Change channel to a new multicast group and verify both multicast receiption as well as |
| unicast traffic works. This step involves: |
| - sending a leave message by the ONU to the controller and verify its reception |
| - sending a join message and verify its reception |
| - removing the existing multicast flow |
| - adding a new multicast flow |
| - verify that original flow no longer flows |
| - verify new flow |
| - verify that unicast still works |
| - verify everything for ONU1 too |
| 23. Add a second channel while keeping the existing one. Verify all what needs to be verified |
| (similar as above) - at this point ONU1 is tuned into ch2 and ch3 and ONU2 is |
| tuned to ch2 and ch5 |
| |
| 24. Flip a channel for ONU1 and verify everything |
| 25. Tear down the test. |
| |
| """ |
| |
| def runTest(self): |
| logging.info("Running %s" % self.__class__.__name__) |
| |
| # Some constants |
| s_vlan_id = 111 |
| mcast_vlan_id = 140 |
| mcast_groups = Thing( |
| ch1="230.10.10.10", |
| ch2="231.11.11.11", |
| ch3="232.12.12.12", |
| ch4="233.13.13.13", |
| ch5="234.14.14.14" |
| ) |
| onu1 = Thing( |
| port=onu_port, |
| ip="13.14.14.13", |
| mac="b6:b8:3e:fb:1a:3f", |
| c_vlan_id=13 |
| ) |
| onu2 = Thing( |
| port=onu_port2, |
| ip="113.114.114.113", |
| mac="b6:b8:3e:fb:aa:aa", |
| c_vlan_id=913 |
| ) |
| |
| # 0. Reset the OLT into a clean state |
| self.resetOlt() |
| |
| # 1. Setup the OLT to pass authentication (EAPOL) to controller from ONU1 |
| # and test it. |
| self.installEapolRule() |
| self.sendEapolIn() |
| |
| # 2. Setup the OLT to pass unicast traffic for the ONU1 |
| self.installDoubleTaggingRules(s_vlan_id, onu1.c_vlan_id, self.getCookieBlock()) |
| |
| # 3. Verify that unicast traffic works in both directions (use a few hundred frames in both ways) |
| self.testPacketFlow(s_vlan_id, onu1.c_vlan_id) # this tests just one packet in each way |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 100) |
| |
| # 4. Setup IGMP forwarding toward the controller |
| self.installIgmpRule(self.getCookieBlock()) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 5. Send periodic IGMP queries out toward the ONU1 and verify its arrival |
| self.testIgmpQueryOut() |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 6. Send in an IGMP join request for one channel (specific multicast address) and verify that |
| # the controller receives it. |
| self.sendIgmpReport(join=[mcast_groups.ch1]) |
| |
| # 7. Setup flows for forwarding multicast traffic from the OLT port toward ONU1 |
| ch1_cookie = self.getCookieBlock() |
| ch1_group_id = 1 |
| self.setupMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu1.port], ch1_group_id, ch1_cookie) |
| |
| # 8. Verify that multicast packets can reach ONU1 |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], 10) |
| |
| # 9. Verify that bidirectional unicast traffic still works across the PON |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 10. Change channel to a new multicast group and verify both multicast receiption as well as |
| # unicast traffic works. This step involves: |
| # - sending a leave message by the ONU to the controller and verify its reception |
| # - sending a join message and verify its reception |
| # - removing the existing multicast flow |
| # - adding a new multicast flow |
| # - verify that original flow no longer flows |
| # - verify new flow |
| # - verify that unicast still works |
| self.sendIgmpReport(leave=[mcast_groups.ch1], join=[mcast_groups.ch2]) |
| self.removeMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu1.port], ch1_group_id, ch1_cookie) |
| ch2_cookie = self.getCookieBlock() |
| ch2_group_id = 2 |
| self.setupMcastChannel(mcast_groups.ch2, mcast_vlan_id, [onu1.port], ch2_group_id, ch2_cookie) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 11. Add a second channel while keeping the existing one. Verify all what needs to be verified |
| # (similar as above) - at this point ONU1 is tuned into ch2 and ch3 |
| self.sendIgmpReport(join=[mcast_groups.ch2, mcast_groups.ch3]) |
| ch3_cookie = self.getCookieBlock() |
| ch3_group_id = 3 |
| self.setupMcastChannel(mcast_groups.ch3, mcast_vlan_id, [onu1.port], ch3_group_id, ch3_cookie) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], 10) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 12. Setup the OLT to pass authentication (EAPOL) to controller from ONU2 |
| # and test it. |
| self.installEapolRule(onu_port2) |
| self.sendEapolIn(onu_port2) |
| |
| # 13. Setup the OLT to pass unicast traffic for the ONU2 |
| self.installDoubleTaggingRules(s_vlan_id, onu2.c_vlan_id, self.getCookieBlock(), onu_port2) |
| |
| # 14. Verify that unicast traffic works in both directions (use a few hundred frames in both ways) |
| self.testPacketFlow(s_vlan_id, onu2.c_vlan_id, onu_port2) # this tests just one packet in each way |
| self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, 100, onu=onu_port2) |
| |
| # 15. Verify that both ONU1 can send/receive unicast and ONU1 can still see its 2 channels |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10) |
| self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], 10) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 16. Setup IGMP forwarding toward the controller |
| # Note: this is actually not needed since the rule is not port specific - maybe it should be? |
| #self.installIgmpRule(self.getCookieBlock()) |
| #self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| |
| # 17. Send periodic IGMP queries out toward the ONU2 and verify its arrival |
| self.testIgmpQueryOut(onu_port2) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows |
| self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, 10, onu=onu_port2) # to check that unicast still flows |
| |
| # 18. Send in an IGMP join request for one channel (specific multicast address) and verify that |
| # the controller receives it. |
| self.sendIgmpReport(join=[mcast_groups.ch1], onu=onu_port2) |
| |
| # 19. Setup flows for forwarding multicast traffic from the OLT port toward ONU2: ch1 |
| self.setupMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu2.port], ch1_group_id, ch1_cookie) |
| |
| # 20. Verify that ch1 multicast packets can reach ONU2, but not ONU1 |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu2.port], 10) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True) |
| |
| # 21. Verify that bidirectional unicast traffic still works across the PON for both ONUs |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) |
| self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, 10, onu=onu_port2) |
| |
| # 22. Change channel to a new multicast group and verify both multicast receiption as well as |
| # unicast traffic works. This step involves: |
| # - sending a leave message by the ONU to the controller and verify its reception |
| # - sending a join message and verify its reception |
| # - removing the existing multicast flow |
| # - adding a new multicast flow |
| # - verify that original flow no longer flows |
| # - verify new flow |
| # - verify that unicast still works |
| # - verify everything for ONU1 too |
| self.sendIgmpReport(join=[mcast_groups.ch2], leave=[mcast_groups.ch1], onu=onu2.port) |
| self.removeMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu2.port], ch1_group_id, ch1_cookie) |
| self.updateMcastChannel(ch2_group_id, port_list=[onu1.port, onu2.port]) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port, onu2.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port, onu2.port]) |
| self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port]) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id) |
| self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, onu=onu_port2) |
| |
| # 23. Add a second channel for ONU2 while keeping the existing one. Verify all what needs to be verified |
| # (similar as above) - at this point ONU1 is tuned into ch2 and ch3 and ONU2 is |
| # tuned to ch2 and ch5 |
| self.sendIgmpReport(join=[mcast_groups.ch2, mcast_groups.ch5], onu=onu2.port) |
| ch5_cookie = self.getCookieBlock() |
| ch5_group_id = 5 |
| self.setupMcastChannel(mcast_groups.ch5, mcast_vlan_id, [onu2.port], ch5_group_id, ch5_cookie) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port, onu2.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port, onu2.port]) |
| self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port]) |
| self.testMcastFlow(mcast_groups.ch5, mcast_vlan_id, [onu2.port]) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id) |
| self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, onu=onu_port2) |
| |
| # 24. Flip a channel for ONU1 and verify everything (ch3 -> ch4) |
| self.sendIgmpReport(leave=[mcast_groups.ch3], join=[mcast_groups.ch2, mcast_groups.ch4], onu=onu1.port) |
| self.removeMcastChannel(mcast_groups.ch3, mcast_vlan_id, [onu1.port], ch3_group_id, ch3_cookie) |
| ch4_cookie = self.getCookieBlock() |
| ch4_group_id = 4 |
| self.setupMcastChannel(mcast_groups.ch4, mcast_vlan_id, [onu1.port], ch4_group_id, ch4_cookie) |
| self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port, onu2.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port, onu2.port]) |
| self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port, onu2.port], expect_to_be_blocked=True) |
| self.testMcastFlow(mcast_groups.ch4, mcast_vlan_id, [onu1.port]) |
| self.testMcastFlow(mcast_groups.ch5, mcast_vlan_id, [onu2.port]) |
| self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id) |
| self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, onu=onu_port2) |
| |
| # 25. Tear down the test. |
| self.resetOlt() |