1 # Copyright (c) 2019. Vinci Consulting Corp. All Rights Reserved.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
16 import multiprocessing as mp
19 from unittest import mock
21 from vpp_papi import vpp_papi
22 from vpp_papi import vpp_transport_shmem
25 class TestVppPapiVPPApiClient(unittest.TestCase):
26 def test_getcontext(self):
27 vpp_papi.VPPApiClient.apidir = '.'
28 c = vpp_papi.VPPApiClient(testmode=True, use_socket=True)
30 # reset initialization at module load time.
31 c.get_context.context = mp.Value(ctypes.c_uint, 0)
34 self.assertEqual(11, c.get_context())
37 class TestVppPapiVPPApiClientMp(unittest.TestCase):
38 # Test under multiple processes to simulate running forked under
39 # run_tests.py (eg. make test TEST_JOBS=10)
41 def test_get_context_mp(self):
42 vpp_papi.VPPApiClient.apidir = '.'
43 c = vpp_papi.VPPApiClient(testmode=True, use_socket=True)
45 # reset initialization at module load time.
46 c.get_context.context = mp.Value(ctypes.c_uint, 0)
47 procs = [mp.Process(target=c.get_context, args=()) for i in range(10)]
54 # AssertionError: 11 != 1
55 self.assertEqual(11, c.get_context())
58 class TestVppTypes(unittest.TestCase):
59 def test_enum_from_json(self):
81 "IF_API_TYPE_HARDWARE",
103 processor = vpp_papi.VPPApiJSONFiles()
105 # add the types to vpp_serializer
106 processor.process_json_str(json_api)
108 vpp_transport_shmem.VppTransport = mock.MagicMock()
109 ac = vpp_papi.VPPApiClient(apifiles=[], testmode=True)
110 type_name = "vl_api_if_type_t"
111 t = ac.get_type(type_name)
112 self.assertTrue(str(t).startswith("VPPEnumType"))
113 self.assertEqual(t.name, type_name)
115 def test_enumflagmixed_from_json(self):
140 "IF_API_TYPE_HARDWARE",
163 processor = vpp_papi.VPPApiJSONFiles()
165 # add the types to vpp_serializer
166 processor.process_json_str(json_api)
168 vpp_transport_shmem.VppTransport = mock.MagicMock()
169 ac = vpp_papi.VPPApiClient(apifiles=[], testmode=True)
171 type_name = "vl_api_if_type_t"
172 t = ac.get_type(type_name)
174 self.assertTrue(str(t).startswith("VPPEnumType"))
175 self.assertEqual(t.name, type_name)
177 def test_enumflag_from_json(self):
199 "IF_API_TYPE_HARDWARE",
221 processor = vpp_papi.VPPApiJSONFiles()
223 # add the types to vpp_serializer
224 processor.process_json_str(json_api)
226 vpp_transport_shmem.VppTransport = mock.MagicMock()
227 ac = vpp_papi.VPPApiClient(apifiles=[], testmode=True)
228 type_name = "vl_api_if_type_t"
229 t = ac.get_type(type_name)
230 self.assertTrue(str(t).startswith("VPPEnumType"))
231 self.assertEqual(t.name, type_name)
234 class TestVppPapiLogging(unittest.TestCase):
235 def test_logger(self):
240 transport = Transport()
242 def disconnect(self):
246 with self.assertLogs('vpp_papi', level='DEBUG') as cm:
247 vpp_papi.vpp_atexit(client)
248 self.assertEqual(cm.output, ['DEBUG:vpp_papi:Cleaning up VPP on exit'])
250 with self.assertRaises(AssertionError):
251 with self.assertLogs('vpp_papi.serializer', level='DEBUG') as cm:
252 vpp_papi.vpp_atexit(client)
253 self.assertEqual(cm.output, [])