summaryrefslogtreecommitdiffstats
path: root/test/discover_tests.py
blob: 6dea20e3de516b35e6cec9ad6ffad91f705c9c1a (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
#!/usr/bin/env python

import sys
import os
import unittest
import importlib
import argparse


def discover_tests(directory, callback, ignore_path):
    do_insert = True
    for _f in os.listdir(directory):
        f = "%s/%s" % (directory, _f)
        if os.path.isdir(f):
            if ignore_path is not None and f.startswith(ignore_path):
                continue
            discover_tests(f, callback, ignore_path)
            continue
        if not os.path.isfile(f):
            continue
        if do_insert:
            sys.path.insert(0, directory)
            do_insert = False
        if not _f.startswith("test_") or not _f.endswith(".py"):
            continue
        name = "".join(f.split("/")[-1].split(".")[:-1])
        module = importlib.import_module(name)
        for name, cls in module.__dict__.items():
            if not isinstance(cls, type):
                continue
            if not issubclass(cls, unittest.TestCase):
                continue
            if name == "VppTestCase" or name.startswith("Template"):
                continue
            for method in dir(cls):
                if not callable(getattr(cls, method)):
                    continue
                if method.startswith("test_"):
                    callback(_f, cls, method)


def print_callback(file_name, cls, method):
    print("%s.%s.%s" % (file_name, cls.__name__, method))


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Discover VPP unit tests")
    parser.add_argument("-d", "--dir", action='append', type=str,
                        help="directory containing test files "
                             "(may be specified multiple times)")
    args = parser.parse_args()
    if args.dir is None:
        args.dir = "."

    ignore_path = os.getenv("VENV_PATH", "")
    suite = unittest.TestSuite()
    for d in args.dir:
        discover_tests(d, print_callback, ignore_path)
nterface state") \ _(TUNNEL_EXIST, -75, "Tunnel already exists") \ _(INVALID_DECAP_NEXT, -76, "Invalid decap-next") \ _(RESPONSE_NOT_READY, -77, "Response not ready") \ _(NOT_CONNECTED, -78, "Not connected to the data plane") \ _(IF_ALREADY_EXISTS, -79, "Interface already exists") \ _(BOND_SLAVE_NOT_ALLOWED, -80, "Operation not allowed on slave of BondEthernet") \ _(VALUE_EXIST, -81, "Value already exists") \ _(SAME_SRC_DST, -82, "Source and destination are the same") \ _(IP6_MULTICAST_ADDRESS_NOT_PRESENT, -83, "IP6 multicast address required") \ _(SR_POLICY_NAME_NOT_PRESENT, -84, "Segement routing policy name required") \ _(NOT_RUNNING_AS_ROOT, -85, "Not running as root") \ _(ALREADY_CONNECTED, -86, "Connection to the data plane already exists") \ _(UNSUPPORTED_JNI_VERSION, -87, "Unsupported JNI version") \ _(FAILED_TO_ATTACH_TO_JAVA_THREAD, -88, "Failed to attach to Java thread") \ _(INVALID_WORKER, -89, "Invalid worker thread") \ _(LISP_DISABLED, -90, "LISP is disabled") \ _(CLASSIFY_TABLE_NOT_FOUND, -91, "Classify table not found") \ _(INVALID_EID_TYPE, -92, "Unsupported LSIP EID type") \ _(CANNOT_CREATE_PCAP_FILE, -93, "Cannot create pcap file") \ _(INCORRECT_ADJACENCY_TYPE, -94, "Invalid adjacency type for this operation") \ _(EXCEEDED_NUMBER_OF_RANGES_CAPACITY, -95, "Operation would exceed configured capacity of ranges") \ _(EXCEEDED_NUMBER_OF_PORTS_CAPACITY, -96, "Operation would exceed capacity of number of ports") \ _(INVALID_ADDRESS_FAMILY, -97, "Invalid address family") \ _(INVALID_SUB_SW_IF_INDEX, -98, "Invalid sub-interface sw_if_index") \ _(TABLE_TOO_BIG, -99, "Table too big") \ _(CANNOT_ENABLE_DISABLE_FEATURE, -100, "Cannot enable/disable feature") \ _(BFD_EEXIST, -101, "Duplicate BFD object") \ _(BFD_ENOENT, -102, "No such BFD object") \ _(BFD_EINUSE, -103, "BFD object in use") \ _(BFD_NOTSUPP, -104, "BFD feature not supported") \ _(ADDRESS_IN_USE, -105, "Address in use") \ _(ADDRESS_NOT_IN_USE, -106, "Address not in use") \ _(QUEUE_FULL, -107, "Queue full") \ _(APP_UNSUPPORTED_CFG, -108, "Unsupported application config") \ _(URI_FIFO_CREATE_FAILED, -109, "URI FIFO segment create failed") \ _(LISP_RLOC_LOCAL, -110, "RLOC address is local") \ _(BFD_EAGAIN, -111, "BFD object cannot be manipulated at this time") \ _(INVALID_GPE_MODE, -112, "Invalid GPE mode") \ _(LISP_GPE_ENTRIES_PRESENT, -113, "LISP GPE entries are present") \ _(ADDRESS_FOUND_FOR_INTERFACE, -114, "Address found for interface") \ _(SESSION_CONNECT, -115, "Session failed to connect") \ _(ENTRY_ALREADY_EXISTS, -116, "Entry already exists") \ _(SVM_SEGMENT_CREATE_FAIL, -117, "svm segment create fail") \ _(APPLICATION_NOT_ATTACHED, -118, "application not attached") \ _(BD_ALREADY_EXISTS, -119, "Bridge domain already exists") \ _(BD_IN_USE, -120, "Bridge domain has member interfaces") \ _(BD_NOT_MODIFIABLE, -121, "Bridge domain 0 can't be deleted/modified") \ _(BD_ID_EXCEED_MAX, -122, "Bridge domain ID exceed 16M limit") \ _(SUBIF_DOESNT_EXIST, -123, "Subinterface doesn't exist") \ _(L2_MACS_EVENT_CLINET_PRESENT, -124, "Client already exist for L2 MACs events") \ _(INVALID_QUEUE, -125, "Invalid queue") \ _(UNSUPPORTED, -126, "Unsupported") \ _(DUPLICATE_IF_ADDRESS, -127, "Address already present on another interface") \ _(APP_INVALID_NS, -128, "Invalid application namespace") \ _(APP_WRONG_NS_SECRET, -129, "Wrong app namespace secret") \ _(APP_CONNECT_SCOPE, -130, "Connect scope") \ _(APP_ALREADY_ATTACHED, -131, "App already attached") \ _(SESSION_REDIRECT, -132, "Redirect failed") \ _(ILLEGAL_NAME, -133, "Illegal name") \ _(NO_NAME_SERVERS, -134, "No name servers configured") \ _(NAME_SERVER_NOT_FOUND, -135, "Name server not found") \ _(NAME_RESOLUTION_NOT_ENABLED, -136, "Name resolution not enabled") \ _(NAME_SERVER_FORMAT_ERROR, -137, "Server format error (bug!)") \ _(NAME_SERVER_NO_SUCH_NAME, -138, "No such name") \ _(NAME_SERVER_NO_ADDRESSES, -139, "No addresses available") \ _(NAME_SERVER_NEXT_SERVER, -140, "Retry with new server") \ _(APP_CONNECT_FILTERED, -141, "Connect was filtered") \ _(ACL_IN_USE_INBOUND, -142, "Inbound ACL in use") \ _(ACL_IN_USE_OUTBOUND, -143, "Outbound ACL in use") \ _(INIT_FAILED, -144, "Initialization Failed") \ _(NETLINK_ERROR, -145, "netlink error") \ _(BIER_BSL_UNSUP, -146, "BIER bit-string-length unsupported") \ _(INSTANCE_IN_USE, -147, "Instance in use") \ _(INVALID_SESSION_ID, -148, "session ID out of range") \ _(ACL_IN_USE_BY_LOOKUP_CONTEXT, -149, "ACL in use by a lookup context") \ typedef enum { #define _(a,b,c) VNET_API_ERROR_##a = (b), foreach_vnet_api_error #undef _ VNET_API_N_ERROR, } vnet_api_error_t; /* *INDENT-OFF* */ static inline u8 * format_vnet_api_errno (u8 * s, va_list * args) { vnet_api_error_t api_error = va_arg (*args, vnet_api_error_t); #ifdef _ #undef _ #endif #define _(a, b, c) \ case b: \ s = format (s, "%s", c); \ break; switch (api_error) { foreach_vnet_api_error default: s = format (s, "UNKNOWN"); break; } return s; #undef _ } /* *INDENT-ON* */ #endif /* included_vnet_api_errno_h */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */