diff options
-rw-r--r-- | test/framework.py | 50 | ||||
-rw-r--r-- | test/test_punt.py | 4 | ||||
-rw-r--r-- | test/vpp_config.py | 233 |
3 files changed, 29 insertions, 258 deletions
diff --git a/test/framework.py b/test/framework.py index 2505057472e..7633ca04d0b 100644 --- a/test/framework.py +++ b/test/framework.py @@ -20,10 +20,8 @@ from traceback import format_exception from logging import FileHandler, DEBUG, Formatter from scapy.packet import Raw from hook import StepHook, PollHook, VppDiedError -from vpp_config import VppTestCaseVppConfig -from vpp_interface import VppInterface -from vpp_sub_interface import VppSubInterface from vpp_pg_interface import VppPGInterface +from vpp_sub_interface import VppSubInterface from vpp_lo_interface import VppLoInterface from vpp_papi_provider import VppPapiProvider from vpp_papi.vpp_stats import VPPStats @@ -207,8 +205,8 @@ class VppTestCase(unittest.TestCase): classes. It provides methods to create and run test case. """ - CLI_LISTEN_DEFAULT = 'localhost:5002' - config = VppTestCaseVppConfig() + extra_vpp_punt_config = [] + extra_vpp_plugin_config = [] @property def packet_infos(self): @@ -303,26 +301,32 @@ class VppTestCase(unittest.TestCase): plugin_path = cls.plugin_path elif cls.extern_plugin_path is not None: plugin_path = cls.extern_plugin_path - + debug_cli = "" if cls.step or cls.debug_gdb or cls.debug_gdbserver: - cls.config.add('unix', 'cli-listen', cls.CLI_LISTEN_DEFAULT) - + debug_cli = "cli-listen localhost:5002" coredump_size = None size = os.getenv("COREDUMP_SIZE") - cls.config.add('unix', 'coredump-size', - size if size is not None else 'unlimited') - - cls.config.add('unix', 'runtime-dir', cls.tempdir) - cls.config.add('api-segment', 'prefix', cls.shm_prefix) - cls.config.add('cpu', 'main-core', str(cls.get_least_used_cpu())) - cls.config.add('statseg', 'socket-name', cls.stats_sock) - + if size is not None: + coredump_size = "coredump-size %s" % size + if coredump_size is None: + coredump_size = "coredump-size unlimited" + + cpu_core_number = cls.get_least_used_cpu() + + cls.vpp_cmdline = [cls.vpp_bin, "unix", + "{", "nodaemon", debug_cli, "full-coredump", + coredump_size, "runtime-dir", cls.tempdir, "}", + "api-trace", "{", "on", "}", "api-segment", "{", + "prefix", cls.shm_prefix, "}", "cpu", "{", + "main-core", str(cpu_core_number), "}", "statseg", + "{", "socket-name", cls.stats_sock, "}", "plugins", + "{", "plugin", "dpdk_plugin.so", "{", "disable", + "}", "plugin", "unittest_plugin.so", "{", "enable", + "}"] + cls.extra_vpp_plugin_config + ["}", ] + if cls.extra_vpp_punt_config is not None: + cls.vpp_cmdline.extend(cls.extra_vpp_punt_config) if plugin_path is not None: - cls.config.add('plugins', 'path', plugin_path) - cls.config.add_plugin('dpdk_plugin.so', 'disable') - cls.config.add_plugin('unittest_plugin.so', 'enable') - - cls.vpp_cmdline = [cls.vpp_bin] + cls.config.shlex() + cls.vpp_cmdline.extend(["plugin_path", plugin_path]) cls.logger.info("vpp_cmdline args: %s" % cls.vpp_cmdline) cls.logger.info("vpp_cmdline: %s" % " ".join(cls.vpp_cmdline)) @@ -853,8 +857,8 @@ class VppTestCase(unittest.TestCase): for cf in checksum_fields: if hasattr(layer, cf): if ignore_zero_udp_checksums and \ - 0 == getattr(layer, cf) and \ - layer.name in udp_layers: + 0 == getattr(layer, cf) and \ + layer.name in udp_layers: continue delattr(layer, cf) checksums.append((counter, cf)) diff --git a/test/test_punt.py b/test/test_punt.py index b20dc76c61d..d57a847ef0c 100644 --- a/test/test_punt.py +++ b/test/test_punt.py @@ -121,8 +121,8 @@ class TestPuntSocket(VppTestCase): @classmethod def setUpConstants(cls): - tempdir = cls.tempdir - cls.config.add('punt', 'socket', '%s/socket_punt' % cls.tempdir) + cls.extra_vpp_punt_config = [ + "punt", "{", "socket", cls.tempdir+"/socket_punt", "}"] super(TestPuntSocket, cls).setUpConstants() def setUp(self): diff --git a/test/vpp_config.py b/test/vpp_config.py deleted file mode 100644 index 03cddf80ade..00000000000 --- a/test/vpp_config.py +++ /dev/null @@ -1,233 +0,0 @@ -# Copyright 2018 Vinci Consulting Corp. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import shlex -import unittest - - -class VppConfig(object): - stanzas = ['unix', 'api-trace', 'api-segment', - 'socksvr', 'cpu', 'statseg', 'dpdk', 'plugins', 'tuntap', - 'punt'] - kw = {'unix': ['interactive', 'nodaemon', 'log', 'full-coredump', - 'coredump-size', 'cli-listen', 'runtime-dir', 'gid'], - 'acl-plugin': ['connection hash buckets', 'connection hash memory', - 'connection count max', 'main heap size', - 'hash lookup heap size', 'hash lookup hash buckets', - 'hash lookup hash memory', 'use tuple merge', - 'tuple merge split threshold', 'reclassify sessions'], - 'api-queue': ['len', 'length'], - 'api-trace': ['on', 'enable, ''nitems', 'save-api-table'], - 'api-segment': ['prefix', 'gid'], - 'cj': ['on', 'records'], - 'cpu': ['main-core', 'corelist-workers', 'skip-cores', - 'workers', 'scheduler-policy', 'scheduler-priority'], - 'dns': ['max-cache-size', 'max-ttl'], - 'dpdk': ['dev', 'vdev', 'name', 'hqos', 'rss', - 'no-multi-seg', - 'num-mbufs', 'num-rx-queues', 'num-tx-queues', - 'num-rx-desc', 'num-tx-desc', - 'socket-mem', 'no-tx-checksum-offload', 'uio-driver', - 'vlan-strip-offload', 'workers'], - # currently don't support dynamic keys - # 'heapsize': [], - 'l2learn': ['limit'], - 'l2tp': ['lookup-v6-src', 'lookup-v6-dst', - 'lookup-session-id'], - 'nat': ['connection tracking', 'deterministic', 'dslite ce', - 'endpoint-dependent', 'inside VRF id', - 'max translations per user', - 'nat64 bib hash bucket', 'nat64 bib hash memory', - 'nat64 st hash buckets', - 'outside ip6 VRF id', 'outside VRF id', 'out2in dpo' - 'static mapping only', - 'translation hash buckets', - 'translation hash memory', - 'user hash buckets', 'user hash memory', - ], - 'mactime': ['lookup-table-buckets', 'lookup-table-memory', - 'timezone_offset'], - 'mc': ['interface', 'no-delay', 'no-validate', 'max-delay', - 'min-delay', 'n-bytes', 'n-packets', - 'max-n-bytes', - 'min-n-bytes', - 'seed', 'window', 'verbose', ], - 'oam': ['interval', 'misses-allowed'], - 'plugins': ['path', 'plugin'], - 'punt': ['socket'], - 'session': ['event-queue-length', 'preallocated-sessions', - 'v4-session-table-buckets', 'v4-halfopen-table-buckets', - 'v6-session-table-buckets', 'v6-halfopen-table-buckets', - 'v6-halfopen-table-buckets' - ], - 'socksvr': ['default', 'socket-name'], - 'statseg': ['socket-name'], - 'tapcli': ['disable', 'mtu'], - 'tcp': ['buffer-fail-fraction', 'cc-algo', 'max-rx-fifo', - 'no-tx-pacing', 'preallocated-connections', - 'preallocated-half-open-connections', - ], - 'tuntap': ['name', 'mtu', 'enable', 'disable', - 'ether', 'ethernet', - 'have-normal', 'have-normal-interface' - ], - 'vhost-user': ['coalesce-frames', 'coalesce-time', - 'dont-dump-memory'] - - - } - default_values = {'unix': {'interactive': None, - } - } - - def __init__(self): - self.values = type(self).default_values - self.plugins = [] - - def add(self, stanza, key, val): - if stanza not in type(self).stanzas: - raise ValueError("stanza '%s' must be in %s" % - (stanza, type(self).stanzas)) - if key not in type(self).kw[stanza]: - raise ValueError("key '%s' must be in %s" % - (key, type(self).kw[stanza])) - self.values[stanza][key] = val - - def add_plugin(self, key, val): - self.plugins.append((key, val,)) - - def __str__(self): - result = '' - for stanza in type(self).stanzas: - try: - if self.values[stanza]: - result = '%s\n%s {' % (result, stanza) - for key in type(self).kw[stanza]: - try: - if key in self.values[stanza]: - result = '%s\n %s %s' % ( - result, key, - self.values[stanza][key] - if self.values[stanza][key] is not - None else '') - except KeyError: - # no key: nothing to do - pass - if stanza == 'plugins' and key == 'plugin': - for plugin, val in self.plugins: - result = '%s\n plugin %s { % s }' % ( - result, plugin, - val if val is not None else '') - result = '%s\n}\n' % result - except KeyError: - # no stanza not in self.values: nothing to do - pass - return result - - def shlex(self): - return shlex.split(str(self)) - - -class MinimalVppConfig(VppConfig): - default_values = {'unix': {'interactive': None, - 'cli-listen': 'run/vpp/cli.sock', - 'gid': 1000 - } - } - - -class VppTestCaseVppConfig(VppConfig): - default_values = {'unix': {'nodaemon': None, - 'full-coredump': None, - }, - 'acl-plugin': {}, - 'api-queue': {}, - 'api-trace': {'on': None}, - 'api-segment': {}, - 'cj': {}, - 'cpu': {}, - 'dns': {}, - 'dpdk': {}, - # currently don't support dynamic keys - # 'heapsize': {}, - 'l2learn': {}, - 'l2tp': {}, - 'mactime': {}, - 'mc': {}, - 'nat': {}, - 'oam': {}, - 'plugins': {}, - 'punt': {}, - 'session': {}, - 'socksvr': {'default': None}, - 'statseg': {}, - 'tapcli': {}, - 'tcp': {}, - 'tuntap': {}, - 'vhost-user': {}, - } - - -class TestVppConfig(unittest.TestCase): - - def setUp(self): - self.config = VppTestCaseVppConfig() - - def test_unix(self): - size = None - tempdir = '/tmp' - - # reset default values for this test. - self.config.default_values['unix'] = {} - self.config.add('unix', 'coredump-size', size - if size is not None else 'unlimited') - self.assertIn('unix {\n coredump-size unlimited\n}\n', - str(self.config)) - - self.config.add('unix', 'runtime-dir', tempdir) - self.assertIn('runtime-dir /tmp', str(self.config)) - - def test_api_segment(self): - shm_prefix = '/dev/shm' - self.config.add('api-segment', 'prefix', shm_prefix) - self.assertIn('api-segment {\n prefix /dev/shm\n}\n', - str(self.config)) - - def test_cpu(self): - luc = 0 - self.config.add('cpu', 'main-core', str(luc)) - self.assertIn('cpu {\n main-core 0\n}\n', str(self.config)) - - def test_statseg(self): - stats_sock = '/stats.sock' - self.config.add('statseg', 'socket-name', stats_sock) - self.assertIn('statseg {\n socket-name /stats.sock\n}\n', - str(self.config)) - - def test_plugin(self): - plugin_path = '/foo' - self.config.add('plugins', 'path', plugin_path) - self.assertIn('plugins {\n path /foo\n}\n', - str(self.config)) - - self.config.add_plugin('dpdk_plugin.so', 'disable') - self.config.add_plugin('unittest_plugin.so', 'enable') - self.assertIn('plugin dpdk_plugin.so { disable }\n', - str(self.config)) - self.assertIn('plugin unittest_plugin.so { enable }\n', - str(self.config)) - - -if __name__ == '__main__': - unittest.main() |