cmdline.py
""" DPDK Test suite. Test cmdline. """ import utils from test_case import TestCase class TestCmdline(TestCase): def set_up_all(self): """ Run at the start of each test suite. Cmdline Prerequisites: cmdline build pass At least one core in DUT """ out = self.dut.build_dpdk_apps('examples/cmdline') ''' rm -rf ./app/test/test_resource_c.res.o dut.10.240.176.254: rm -rf ./app/test/test_resource_tar.res.o dut.10.240.176.254: rm -rf ./app/test/test_pci_sysfs.res.o dut.10.240.176.254: make -j 70 -C examples/cmdline ''' self.verify('make: Leaving directory' in out, "Compilation failed") self.verify("Error" not in out, "compilation error 1") self.verify("No such file" not in out, "compilation error 2") # Run cmdline app cores = self.dut.get_core_list('1S/1C/1T') #['1'] ''' (Pdb) self.dut.get_core_list('1S/3C/1T') ['1', '2', '3'] (Pdb) self.dut.get_core_list('2S/3C/1T') ['1', '2', '3', '32', '33', '34'] (Pdb) self.dut.get_core_list('1S/5C/1T') ['1', '2', '3', '4', '5'] (Pdb) self.dut.get_core_list('1S/3C/1T') ['1', '2', '3'] ''' coreMask = utils.create_mask(cores) ''' ['1'] -> '0x2' #转换为16进制 ['1', '2', '3'] -> '0xe' ['1', '2', '3', '32', '33', '34'] -> '0x70000000e' ''' self.dut.send_expect("./examples/cmdline/build/app/cmdline -n 1 -c " + coreMask, "> ", 10) def set_up(self): """ Run before each test case. Nothing to do. """ pass def test_cmdline_sample_commands(self): """ Sample commands test. """ # add a test object with an IP address associated out = self.dut.send_expect("add object 192.168.0.1", "example> ") self.verify("Object object added, ip=192.168.0.1" in out, "add command error") # verify the object existance out = self.dut.send_expect("add object 192.168.0.1", "example> ") self.verify("Object object already exist" in out, "double add command error") # show the object result by 'show' command out = self.dut.send_expect("show object", "example> ") self.verify("Object object, ip=192.168.0.1" in out, "show command error") # delete the object in cmdline out = self.dut.send_expect("del object", "example> ") self.verify("Object object removed, ip=192.168.0.1" in out, "del command error") # double delete the object to verify the correctness out = self.dut.send_expect("del object", "example> ", 1) self.verify("Bad arguments" in out, "double del command error") # verify no such object anymore out = self.dut.send_expect("show object", "example> ", 1) self.verify("Bad arguments" in out, "final show command error") # verify the help command out = self.dut.send_expect("help", "example> ", 1) """ Demo example of command line interface in RTE This is a readline-like interface that can be used to debug your RTE application. It supports some features of GNU readline like completion, cut/paste, and some other special bindings. This demo shows how rte_cmdline library can be extended to handle a list of objects. There are 3 commands: - add obj_name IP - del obj_name - show obj_name """ self.verify(" " in out, "help command error") out = self.dut.send_expect("?", "example> ", 1) """ show [Mul-choice STRING]: Show/del an object del [Mul-choice STRING]: Show/del an object add [Fixed STRING]: Add an object (name, val) help [Fixed STRING]: show help """ self.verify(" " in out, "? command error") def tear_down(self): """ Run after each test case. Nothing to do. """ pass def tear_down_all(self): """ Run after each test suite. Stop cmdline app. """ self.dut.kill_all()
测试的目的:
Test Case: cmdline sample commands test ======================================= Add a test object with an IP address associated to it:: example>add object 192.168.0.1 Object object added, ip=192.168.0.1 Verify the object existence:: example>add object 192.168.0.1 Object object already exist Show the object result by ``show`` command:: example>show object Object object, ip=192.168.0.1 Verify the output matches the configuration. Delete the object in cmdline and show the result again:: example>del object Object object removed, ip=192.168.0.1 Double delete the object to verify the correctness:: example>del object Bad arguments Verify no such object exist now.:: example>show object Bad arguments Verify the hidden command ? and help command:: example>help Demo example of command line interface in RTE This is a readline-like interface that can be used to debug your RTE application. It supports some features of GNU readline like completion, cut/paste, and some other special bindings. This demo shows how rte_cmdline library can be extended to handle a list of objects. There are 3 commands: - add obj_name IP - del obj_name - show obj_name example>? show [Mul-choice STRING]: Show/del an object del [Mul-choice STRING]: Show/del an object add [Fixed STRING]: Add an object (name, val) help [Fixed STRING]: show help cmdline.py # add a test object with an IP address associated out = self.dut.send_expect("add object 192.168.0.1", "example> ") self.verify("Object object added, ip=192.168.0.1" in out, "add command error") # verify the object existance out = self.dut.send_expect("add object 192.168.0.1", "example> ") self.verify("Object object already exist" in out, "double add command error") # show the object result by 'show' command out = self.dut.send_expect("show object", "example> ") self.verify("Object object, ip=192.168.0.1" in out, "show command error") # delete the object in cmdline out = self.dut.send_expect("del object", "example> ") self.verify("Object object removed, ip=192.168.0.1" in out, "del command error") # double delete the object to verify the correctness out = self.dut.send_expect("del object", "example> ", 1) self.verify("Bad arguments" in out, "double del command error") # verify no such object anymore out = self.dut.send_expect("show object", "example> ", 1) self.verify("Bad arguments" in out, "final show command error") # verify the help command out = self.dut.send_expect("help", "example> ", 1) """ Demo example of command line interface in RTE This is a readline-like interface that can be used to debug your RTE application. It supports some features of GNU readline like completion, cut/paste, and some other special bindings. This demo shows how rte_cmdline library can be extended to handle a list of objects. There are 3 commands: - add obj_name IP - del obj_name - show obj_name """ self.verify(" " in out, "help command error") out = self.dut.send_expect("help", "example> ", 1) """ show [Mul-choice STRING]: Show/del an object del [Mul-choice STRING]: Show/del an object add [Fixed STRING]: Add an object (name, val) help [Fixed STRING]: show help """ self.verify(" " in out, "? command error")
dut:执行详细信息
[root@localhost cmdline]# ./examples/cmdline/build/app/cmdline -n 1 -c 0x2
EAL: PCI device 0000:82:00.0 on NUMA socket 1
EAL: probe driver: 8086:10fb net_ixgbe
EAL: PCI device 0000:82:00.1 on NUMA socket 1
EAL: probe driver: 8086:10fb net_ixgbe
example> add object 192.168.0.1
Object object added, ip=192.168.0.1
example> add object 192.168.0.1
Object object already exist
example> show object 192.168.0.1
Bad arguments
example> show object
Object object, ip=192.168.0.1
example> del object
Object object removed, ip=192.168.0.1
example> del object
Bad arguments
example> show object
Bad arguments
example> help
Demo example of command line interface in RTE
This is a readline-like interface that can be used to
debug your RTE application. It supports some features
of GNU readline like completion, cut/paste, and some
other special bindings.
This demo shows how rte_cmdline library can be
extended to handle a list of objects. There are
3 commands:
- add obj_name IP
- del obj_name
- show obj_name
example>
show [Mul-choice STRING]: Show/del an object
del [Mul-choice STRING]: Show/del an object
add [Fixed STRING]: Add an object (name, val)
help [Fixed STRING]: show help