vlib: improvement to automatic core pinning
[vpp.git] / test / test_container.py
1 #!/usr/bin/env python3
2 """ Container integration tests """
3
4 import unittest
5 from config import config
6 from framework import VppTestCase
7 from asfframework import VppTestRunner
8 from scapy.layers.inet import UDP
9 from socket import AF_INET, AF_INET6
10 from util import L4_Conn
11
12
13 class Conn(L4_Conn):
14     # for now same as L4_Conn
15     pass
16
17
18 @unittest.skipUnless(config.extended, "part of extended tests")
19 class ContainerIntegrationTestCase(VppTestCase):
20     """Container integration extended testcases"""
21
22     @classmethod
23     def setUpClass(cls):
24         super(ContainerIntegrationTestCase, cls).setUpClass()
25         # create pg0 and pg1
26         cls.create_pg_interfaces(range(2))
27         for i in cls.pg_interfaces:
28             i.admin_up()
29             i.config_ip4()
30             i.config_ip6()
31             i.resolve_arp()
32             i.resolve_ndp()
33
34     @classmethod
35     def tearDownClass(cls):
36         super(ContainerIntegrationTestCase, cls).tearDownClass()
37
38     def tearDown(self):
39         """Run standard test teardown and log various show commands"""
40         super(ContainerIntegrationTestCase, self).tearDown()
41
42     def show_commands_at_teardown(self):
43         self.logger.info(self.vapi.cli("show ip neighbors"))
44
45     def run_basic_conn_test(self, af, acl_side):
46         """Basic connectivity test"""
47         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
48         conn1.send_through(0)
49         # the return packets should pass
50         conn1.send_through(1)
51
52     def run_negative_conn_test(self, af, acl_side):
53         """Packets with local spoofed address"""
54         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
55         try:
56             p2 = conn1.send_through(0).command()
57         except:
58             # If we asserted while waiting, it's good.
59             # the conn should have timed out.
60             p2 = None
61         self.assert_equal(p2, None, ": packet should have been dropped")
62
63     def test_0010_basic_conn_test(self):
64         """IPv4 basic connectivity test"""
65         self.run_basic_conn_test(AF_INET, 0)
66
67     def test_0011_basic_conn_test(self):
68         """IPv6 basic connectivity test"""
69         self.run_basic_conn_test(AF_INET6, 0)
70
71     def test_0050_loopback_prepare_test(self):
72         """Create loopbacks overlapping with remote addresses"""
73         self.create_loopback_interfaces(2)
74         for i in range(2):
75             intf = self.lo_interfaces[i]
76             intf.admin_up()
77             intf.local_ip4 = self.pg_interfaces[i].remote_ip4
78             intf.local_ip4_prefix_len = 32
79             intf.config_ip4()
80             intf.local_ip6 = self.pg_interfaces[i].remote_ip6
81             intf.local_ip6_prefix_len = 128
82             intf.config_ip6()
83
84     def test_0110_basic_conn_test(self):
85         """IPv4 local-spoof connectivity test"""
86         self.run_negative_conn_test(AF_INET, 0)
87
88     def test_0111_basic_conn_test(self):
89         """IPv6 local-spoof connectivity test"""
90         self.run_negative_conn_test(AF_INET, 1)
91
92     def test_0200_basic_conn_test(self):
93         """Configure container commands"""
94         for i in range(2):
95             for addr in [
96                 self.pg_interfaces[i].remote_ip4,
97                 self.pg_interfaces[i].remote_ip6,
98             ]:
99                 self.vapi.ppcli(
100                     "ip container " + addr + " " + self.pg_interfaces[i].name
101                 )
102                 self.vapi.ppcli(
103                     "stn rule address "
104                     + addr
105                     + " interface "
106                     + self.pg_interfaces[i].name
107                 )
108
109     def test_0210_basic_conn_test(self):
110         """IPv4 test after configuring container"""
111         self.run_basic_conn_test(AF_INET, 0)
112
113     def test_0211_basic_conn_test(self):
114         """IPv6 test after configuring container"""
115         self.run_basic_conn_test(AF_INET, 1)
116
117     def test_0300_unconfigure_commands(self):
118         """Unconfigure container commands"""
119         for i in range(2):
120             for addr in [
121                 self.pg_interfaces[i].remote_ip4,
122                 self.pg_interfaces[i].remote_ip6,
123             ]:
124                 self.vapi.ppcli(
125                     "ip container " + addr + " " + self.pg_interfaces[i].name + " del"
126                 )
127                 self.vapi.ppcli(
128                     "stn rule address "
129                     + addr
130                     + " interface "
131                     + self.pg_interfaces[i].name
132                     + " del"
133                 )
134
135     def test_0410_spoof_test(self):
136         """IPv4 local-spoof after unconfig test"""
137         self.run_negative_conn_test(AF_INET, 0)
138
139     def test_0411_spoof_test(self):
140         """IPv6 local-spoof after unconfig test"""
141         self.run_negative_conn_test(AF_INET, 1)