|
1 | 1 | import time
|
2 | 2 | import pytest
|
| 3 | +import logging |
3 | 4 |
|
4 | 5 | from swsscommon import swsscommon
|
5 | 6 |
|
6 | 7 |
|
| 8 | +logging.basicConfig(level=logging.INFO) |
| 9 | +acllogger = logging.getLogger(__name__) |
| 10 | + |
| 11 | + |
| 12 | +@pytest.fixture(autouse=True, scope="class") |
| 13 | +def dvs_api(request, dvs_acl): |
| 14 | + # Fixtures are created when first requested by a test, and are destroyed based on their scope |
| 15 | + if request.cls is None: |
| 16 | + yield |
| 17 | + return |
| 18 | + acllogger.info("Initialize DVS API: ACL") |
| 19 | + request.cls.dvs_acl = dvs_acl |
| 20 | + yield |
| 21 | + acllogger.info("Deinitialize DVS API: ACL") |
| 22 | + del request.cls.dvs_acl |
| 23 | + |
| 24 | + |
| 25 | +@pytest.mark.usefixtures("dvs_lag_manager") |
| 26 | +class TestAclInterfaceBinding: |
| 27 | + @pytest.mark.parametrize("stage", ["ingress", "egress"]) |
| 28 | + def test_AclTablePortChannelMemberBinding(self, testlog, stage): |
| 29 | + """Verify that LAG member creation is prohibited when ACL binding is configured |
| 30 | +
|
| 31 | + The test flow: |
| 32 | + 1. Create ACL table and bind Ethernet124 |
| 33 | + 2. Verify ACL table has been successfully added |
| 34 | + 3. Create LAG |
| 35 | + 4. Verify LAG has been successfully added |
| 36 | + 5. Create LAG member Ethernet120 |
| 37 | + 6. Verify LAG member has been successfully added |
| 38 | + 7. Create LAG member Ethernet124 |
| 39 | + 8. Verify LAG member hasn't been added because of active ACL binding |
| 40 | +
|
| 41 | + Args: |
| 42 | + testlog: test start/end log record injector |
| 43 | + stage: ACL table stage (e.g., ingress/egress) |
| 44 | + """ |
| 45 | + try: |
| 46 | + acllogger.info("Create ACL table: acl_table") |
| 47 | + self.dvs_acl.create_acl_table( |
| 48 | + table_name="acl_table", |
| 49 | + table_type="L3", |
| 50 | + ports=["Ethernet124"], |
| 51 | + stage=stage |
| 52 | + ) |
| 53 | + self.dvs_acl.verify_acl_table_count(1) |
| 54 | + |
| 55 | + acllogger.info("Create LAG: PortChannel0001") |
| 56 | + self.dvs_lag.create_port_channel("0001") |
| 57 | + self.dvs_lag.get_and_verify_port_channel(1) |
| 58 | + |
| 59 | + acllogger.info("Create LAG member: Ethernet120") |
| 60 | + self.dvs_lag.create_port_channel_member("0001", "Ethernet120") |
| 61 | + self.dvs_lag.get_and_verify_port_channel_members(1) |
| 62 | + |
| 63 | + acllogger.info("Create LAG member: Ethernet124") |
| 64 | + self.dvs_lag.create_port_channel_member("0001", "Ethernet124") |
| 65 | + acllogger.info("Verify LAG member hasn't been created: Ethernet124") |
| 66 | + self.dvs_lag.get_and_verify_port_channel_members(1) |
| 67 | + finally: |
| 68 | + acllogger.info("Remove LAG member: Ethernet124") |
| 69 | + self.dvs_lag.remove_port_channel_member("0001", "Ethernet124") |
| 70 | + self.dvs_lag.get_and_verify_port_channel_members(1) |
| 71 | + |
| 72 | + acllogger.info("Remove LAG member: Ethernet120") |
| 73 | + self.dvs_lag.remove_port_channel_member("0001", "Ethernet120") |
| 74 | + self.dvs_lag.get_and_verify_port_channel_members(0) |
| 75 | + |
| 76 | + acllogger.info("Remove LAG: PortChannel0001") |
| 77 | + self.dvs_lag.remove_port_channel("0001") |
| 78 | + self.dvs_lag.get_and_verify_port_channel(0) |
| 79 | + |
| 80 | + acllogger.info("Remove ACL table: acl_table") |
| 81 | + self.dvs_acl.remove_acl_table("acl_table") |
| 82 | + self.dvs_acl.verify_acl_table_count(0) |
| 83 | + |
| 84 | + |
7 | 85 | class TestPortChannelAcl(object):
|
8 | 86 | def setup_db(self, dvs):
|
9 | 87 | self.pdb = swsscommon.DBConnector(0, dvs.redis_sock, 0)
|
|
0 commit comments