From aa7cf268c5ee3da3674314eb0eaac72221a7235c Mon Sep 17 00:00:00 2001
From: Christian Breunig <christian@breunig.cc>
Date: Sat, 27 Jul 2024 21:14:20 +0200
Subject: smoketest: T6614: initial support for op-mode command testing

(cherry picked from commit 33156c675f1bce0d2b3b1836a7d85abe25cd7f61)
---
 smoketest/scripts/cli/base_vyostest_shim.py | 15 ++++++++++-
 smoketest/scripts/cli/test_op-mode_show.py  | 39 +++++++++++++++++++++++++++++
 2 files changed, 53 insertions(+), 1 deletion(-)
 create mode 100755 smoketest/scripts/cli/test_op-mode_show.py

diff --git a/smoketest/scripts/cli/base_vyostest_shim.py b/smoketest/scripts/cli/base_vyostest_shim.py
index 5acfe20fd..940306ac3 100644
--- a/smoketest/scripts/cli/base_vyostest_shim.py
+++ b/smoketest/scripts/cli/base_vyostest_shim.py
@@ -15,6 +15,7 @@
 import os
 import unittest
 import paramiko
+import pprint
 
 from time import sleep
 from typing import Type
@@ -87,13 +88,25 @@ class VyOSUnitTestSHIM:
             while run(f'sudo lsof -nP {commit_lock}') == 0:
                 sleep(0.250)
 
+        def op_mode(self, path : list) -> None:
+            """
+            Execute OP-mode command and return stdout
+            """
+            if self.debug:
+                print('commit')
+            path = ' '.join(path)
+            out = cmd(f'/opt/vyatta/bin/vyatta-op-cmd-wrapper {path}')
+            if self.debug:
+                print(f'\n\ncommand "{path}" returned:\n')
+                pprint.pprint(out)
+            return out
+
         def getFRRconfig(self, string=None, end='$', endsection='^!', daemon=''):
             """ Retrieve current "running configuration" from FRR """
             command = f'vtysh -c "show run {daemon} no-header"'
             if string: command += f' | sed -n "/^{string}{end}/,/{endsection}/p"'
             out = cmd(command)
             if self.debug:
-                import pprint
                 print(f'\n\ncommand "{command}" returned:\n')
                 pprint.pprint(out)
             return out
diff --git a/smoketest/scripts/cli/test_op-mode_show.py b/smoketest/scripts/cli/test_op-mode_show.py
new file mode 100755
index 000000000..fba60cc01
--- /dev/null
+++ b/smoketest/scripts/cli/test_op-mode_show.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2024 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 unittest
+from base_vyostest_shim import VyOSUnitTestSHIM
+
+from vyos.version import get_version
+
+base_path = ['show']
+
+class TestOPModeShow(VyOSUnitTestSHIM.TestCase):
+    def test_op_mode_show_version(self):
+        # Retrieve output of "show version" OP-mode command
+        tmp = self.op_mode(base_path + ['version'])
+        # Validate
+        version = get_version()
+        self.assertIn(f'Version:          VyOS {version}', tmp)
+
+    def test_op_mode_show_vrf(self):
+        # Retrieve output of "show version" OP-mode command
+        tmp = self.op_mode(base_path + ['vrf'])
+        # Validate
+        self.assertIn('VRF is not configured', tmp)
+
+if __name__ == '__main__':
+    unittest.main(verbosity=2)
-- 
cgit v1.2.3