import os import unittest from framework import VppTestCase, VppTestRunner from vpp_papi import VppEnum import json class TestJsonApiTrace(VppTestCase): """ JSON API trace related tests """ @classmethod def setUpClass(cls): super(TestJsonApiTrace, cls).setUpClass() def setUp(self): self.vapi.cli("api trace free") self.vapi.cli("api trace on") self.vapi.cli("api trace tx on") @classmethod def tearDownClass(cls): super(TestJsonApiTrace, cls).tearDownClass() def test_json_api_trace_save(self): self.vapi.show_version() fname = 'test_api_trace-%d.json' % self.vpp.pid tmp_api_trace = "/tmp/%s" % fname fpath = '%s/%s' % (self.tempdir, fname) self.vapi.cli("api trace save-json {}".format(fname)) os.rename(tmp_api_trace, fpath) with open(fpath, encoding='utf-8') as f: s = f.read() trace = json.loads(s) found = False for o in trace: if o['_msgname'] == 'show_version': found = True break self.assertTrue(found) self.assertEquals(o['_msgname'], 'show_version') def test_json_api_trace_replay(self): fname = '/tmp/create_loop.json' req = """ [ { "_msgname": "create_loopback", "_crc": "42bb5d22", "mac_address": "00:00:00:00:00:00" }] """ with open(fname, 'w') as f: f.write(req) self.vapi.cli("api trace replay-json {}".format(fname)) r = self.vapi.sw_interface_dump(name_filter='loop', name_filter_valid=True) self.assertEqual(len(r), 1) self.assertEqual(r[0].interface_name, 'loop0') if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)