api: API trace improvements
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>
This commit is contained in:
63
test/test_api_trace.py
Normal file
63
test/test_api_trace.py
Normal file
@ -0,0 +1,63 @@
|
||||
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)
|
Reference in New Issue
Block a user