summaryrefslogtreecommitdiff
path: root/tests/TestSuite_cmdline.py
blob: 13b0e63f203a709f9e77ffed8600c950647c9329 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# BSD LICENSE
#
# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
#   * Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
#   * Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in
#     the documentation and/or other materials provided with the
#     distribution.
#   * Neither the name of Intel Corporation nor the names of its
#     contributors may be used to endorse or promote products derived
#     from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

"""
DPDK Test suite.
Test cmdline.
"""

import dts


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')
        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')
        coreMask = dts.create_mask(cores)
        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()