summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-10-27 20:07:24 +0100
committerGitHub <noreply@github.com>2020-10-27 20:07:24 +0100
commit9cf806a8b60af3b9ce5f1d8141099879c8faef69 (patch)
treed47afd878455ee447308665313ff7b8854dfedb0
parentec099db69f5841e5fff1cbe1d5f8570155946a54 (diff)
parentda8ad8fb1bbd3a162d3d17887889b0fd84f6283a (diff)
downloadvyos-1x-9cf806a8b60af3b9ce5f1d8141099879c8faef69.tar.gz
vyos-1x-9cf806a8b60af3b9ce5f1d8141099879c8faef69.zip
Merge pull request #583 from jestabro/vyos-configtest
smoketest: T3003: extend framework to load arbitrary config file
-rwxr-xr-xdebian/rules4
-rw-r--r--debian/vyos-1x-smoketest.install2
-rwxr-xr-xsmoketest/bin/vyos-configtest82
-rwxr-xr-xsmoketest/configs/pppoe-client62
-rwxr-xr-xsmoketest/configs/pppoe-server94
-rw-r--r--vyos-configtest0
6 files changed, 244 insertions, 0 deletions
diff --git a/debian/rules b/debian/rules
index 6b982fd8e..a0cc7a99b 100755
--- a/debian/rules
+++ b/debian/rules
@@ -97,6 +97,10 @@ override_dh_auto_install:
mkdir -p $(DIR)/$(VYOS_LIBEXEC_DIR)/tests/smoke/
cp -r smoketest/scripts/* $(DIR)/$(VYOS_LIBEXEC_DIR)/tests/smoke
+ # Install smoke test configs
+ mkdir -p $(DIR)/$(VYOS_LIBEXEC_DIR)/tests/config/
+ cp -r smoketest/configs/* $(DIR)/$(VYOS_LIBEXEC_DIR)/tests/config
+
# Install system programs
mkdir -p $(DIR)/$(VYOS_BIN_DIR)
cp -r smoketest/bin/* $(DIR)/$(VYOS_BIN_DIR)
diff --git a/debian/vyos-1x-smoketest.install b/debian/vyos-1x-smoketest.install
index fdf949557..3739763b9 100644
--- a/debian/vyos-1x-smoketest.install
+++ b/debian/vyos-1x-smoketest.install
@@ -1,2 +1,4 @@
usr/bin/vyos-smoketest
+usr/bin/vyos-configtest
usr/libexec/vyos/tests/smoke
+usr/libexec/vyos/tests/config
diff --git a/smoketest/bin/vyos-configtest b/smoketest/bin/vyos-configtest
new file mode 100755
index 000000000..3e42b0380
--- /dev/null
+++ b/smoketest/bin/vyos-configtest
@@ -0,0 +1,82 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2020 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import sys
+import time
+import logging
+import unittest
+
+from vyos.configsession import ConfigSession, ConfigSessionError
+from vyos import ConfigError
+
+config_dir = '/usr/libexec/vyos/tests/config'
+save_config = '/tmp/vyos-configtest-save'
+
+class DynamicClassBase(unittest.TestCase):
+ def setUp(self):
+ self._start_time = time.time()
+ self.session = ConfigSession(os.getpid())
+ self.session.save_config(save_config)
+
+ def tearDown(self):
+ self.session.migrate_and_load_config(save_config)
+ self.session.commit()
+ log.info(f" time: {time.time() - self._start_time:.3f}")
+ del self.session
+ try:
+ os.remove(save_config)
+ except OSError:
+ pass
+
+def make_test_function(filename):
+ def test_config_load(self):
+ config_path = os.path.join(config_dir, filename)
+ self.session.migrate_and_load_config(config_path)
+ try:
+ self.session.commit()
+ except (ConfigError, ConfigSessionError):
+ self.session.discard()
+ self.fail()
+ return test_config_load
+
+def class_name_from_func_name(s):
+ res = ''.join(str.capitalize(x) for x in s.split('_'))
+ return res
+
+if __name__ == '__main__':
+ logging.basicConfig(stream=sys.stdout, level=logging.DEBUG,
+ format='%(message)s')
+ log = logging.getLogger("TestConfigLog")
+
+ start_time = time.time()
+ log.info("Generating tests")
+
+ (_, _, config_list) = next(iter(os.walk(config_dir)))
+ config_list.sort()
+
+ for config in config_list:
+ test_func = make_test_function(config)
+
+ func_name = config.replace('-', '_')
+ klassname = f'TestConfig{class_name_from_func_name(func_name)}'
+ globals()[klassname] = type(klassname,
+ (DynamicClassBase,),
+ {f'test_{func_name}': test_func})
+
+ log.info(f"... completed: {time.time() - start_time:.6f}")
+
+ unittest.main(verbosity=2)
diff --git a/smoketest/configs/pppoe-client b/smoketest/configs/pppoe-client
new file mode 100755
index 000000000..ef6a26423
--- /dev/null
+++ b/smoketest/configs/pppoe-client
@@ -0,0 +1,62 @@
+interfaces {
+ ethernet eth0 {
+ }
+ loopback lo {
+ }
+ pppoe pppoe0 {
+ authentication {
+ password bar
+ user foo
+ }
+ connect-on-demand
+ default-route auto
+ mtu 1492
+ source-interface eth0
+ }
+}
+service {
+ ssh {
+ }
+}
+system {
+ config-management {
+ commit-revisions 100
+ }
+ console {
+ device ttyS0 {
+ speed 115200
+ }
+ }
+ host-name vyos
+ login {
+ user vyos {
+ authentication {
+ encrypted-password $6$2Ta6TWHd/U$NmrX0x9kexCimeOcYK1MfhMpITF9ELxHcaBU/znBq.X2ukQOj61fVI2UYP/xBzP4QtiTcdkgs7WOQMHWsRymO/
+ plaintext-password ""
+ }
+ }
+ }
+ ntp {
+ server 0.pool.ntp.org {
+ }
+ server 1.pool.ntp.org {
+ }
+ server 2.pool.ntp.org {
+ }
+ }
+ syslog {
+ global {
+ facility all {
+ level info
+ }
+ facility protocols {
+ level debug
+ }
+ }
+ }
+}
+
+
+// Warning: Do not remove the following line.
+// vyos-config-version: "broadcast-relay@1:cluster@1:config-management@1:conntrack@1:conntrack-sync@1:dhcp-relay@2:dhcp-server@5:dhcpv6-server@1:dns-forwarding@3:firewall@5:https@2:interfaces@13:ipoe-server@1:ipsec@5:l2tp@3:lldp@1:mdns@1:nat@5:ntp@1:pppoe-server@5:pptp@2:qos@1:quagga@6:salt@1:snmp@2:ssh@2:sstp@3:system@19:vrrp@2:vyos-accel-ppp@2:wanloadbalance@3:webgui@1:webproxy@2:zone-policy@1"
+// Release version: 1.3-rolling-202010241631
diff --git a/smoketest/configs/pppoe-server b/smoketest/configs/pppoe-server
new file mode 100755
index 000000000..7e4ccc80e
--- /dev/null
+++ b/smoketest/configs/pppoe-server
@@ -0,0 +1,94 @@
+interfaces {
+ ethernet eth0 {
+ address dhcp
+ }
+ ethernet eth1 {
+ address 192.168.0.1/24
+ }
+ ethernet eth2 {
+ }
+ loopback lo {
+ }
+}
+nat {
+ source {
+ rule 100 {
+ outbound-interface eth0
+ source {
+ address 192.168.0.0/24
+ }
+ translation {
+ address masquerade
+ }
+ }
+ }
+}
+service {
+ pppoe-server {
+ access-concentrator ACN
+ authentication {
+ local-users {
+ username foo {
+ password bar
+ rate-limit {
+ download 20480
+ upload 10240
+ }
+ }
+ }
+ mode local
+ }
+ client-ip-pool {
+ start 192.168.0.100
+ stop 192.168.0.200
+ }
+ gateway-address 192.168.0.2
+ interface eth2 {
+ }
+ name-server 192.168.0.1
+ }
+ ssh {
+ }
+}
+system {
+ config-management {
+ commit-revisions 100
+ }
+ console {
+ device ttyS0 {
+ speed 115200
+ }
+ }
+ host-name vyos
+ login {
+ user vyos {
+ authentication {
+ encrypted-password $6$O5gJRlDYQpj$MtrCV9lxMnZPMbcxlU7.FI793MImNHznxGoMFgm3Q6QP3vfKJyOSRCt3Ka/GzFQyW1yZS4NS616NLHaIPPFHc0
+ plaintext-password ""
+ }
+ }
+ }
+ ntp {
+ server 0.pool.ntp.org {
+ }
+ server 1.pool.ntp.org {
+ }
+ server 2.pool.ntp.org {
+ }
+ }
+ syslog {
+ global {
+ facility all {
+ level info
+ }
+ facility protocols {
+ level debug
+ }
+ }
+ }
+}
+
+
+// Warning: Do not remove the following line.
+// vyos-config-version: "broadcast-relay@1:cluster@1:config-management@1:conntrack@1:conntrack-sync@1:dhcp-relay@2:dhcp-server@5:dhcpv6-server@1:dns-forwarding@3:firewall@5:https@2:interfaces@13:ipoe-server@1:ipsec@5:l2tp@3:lldp@1:mdns@1:nat@5:ntp@1:pppoe-server@5:pptp@2:qos@1:quagga@6:salt@1:snmp@2:ssh@2:sstp@3:system@19:vrrp@2:vyos-accel-ppp@2:wanloadbalance@3:webgui@1:webproxy@2:zone-policy@1"
+// Release version: 1.3-rolling-202010260127
diff --git a/vyos-configtest b/vyos-configtest
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vyos-configtest