36217e3ca8
Type: improvement * add support for JSON format in API trace * add ability to replay JSON API trace in both VPP and VAT2 * use CRC for backward compatibility check during JSON API replay * fix API trace CLI (and remove duplicits) * remove custom dump * remove vppapitrace.py * update docs accordingly Change-Id: I5294f68bebe6cbe738630f457f3a87720e06486b Signed-off-by: Filip Tehlar <ftehlar@cisco.com> Signed-off-by: Ole Troan <ot@cisco.com>
64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
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)
|