[PATCH] libosmocore[master]: vty_test: add artificial node levels for better testing

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Wed Sep 20 01:33:30 UTC 2017


Review at  https://gerrit.osmocom.org/3995

vty_test: add artificial node levels for better testing

In vty_test, add three levels of parent nodes (level1, level2, level3) with
each having a leaf child (child1, child2, child3).

Use these to enhance the vty_test cfg files and test more diverse situations.

The current VTY code expects a go_parent_cb() to be present, otherwise it will
bump right back to the CONFIG_NODE, which will not work with more than one node
level below the CONFIG_NODE. Hence provide a minimal go_parent_cb().

Change-Id: Ib9bcf58b655fbd85e196f363fb7d8305d7dfc997
---
M tests/vty/fail_not_de-indented.cfg
M tests/vty/fail_tabs_and_spaces.cfg
M tests/vty/fail_too_much_indent.cfg
M tests/vty/ok.cfg
M tests/vty/ok_empty_parent.cfg
M tests/vty/ok_ignore_blank.cfg
M tests/vty/ok_ignore_comment.cfg
M tests/vty/ok_indented_root.cfg
M tests/vty/ok_more_spaces.cfg
M tests/vty/ok_tabs.cfg
M tests/vty/ok_tabs_and_spaces.cfg
M tests/vty/vty_test.c
M tests/vty/vty_test.ok
13 files changed, 440 insertions(+), 39 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/95/3995/1

diff --git a/tests/vty/fail_not_de-indented.cfg b/tests/vty/fail_not_de-indented.cfg
index 5af833d..ca5a3cd 100644
--- a/tests/vty/fail_not_de-indented.cfg
+++ b/tests/vty/fail_not_de-indented.cfg
@@ -1,3 +1,3 @@
-line vty
- no login
- log stderr
+level1 a
+ child1 a
+ level1 b
diff --git a/tests/vty/fail_tabs_and_spaces.cfg b/tests/vty/fail_tabs_and_spaces.cfg
index fa6ce05..4cb0cf5 100644
--- a/tests/vty/fail_tabs_and_spaces.cfg
+++ b/tests/vty/fail_tabs_and_spaces.cfg
@@ -1,4 +1,4 @@
-line vty
- 		no login
-	 	no login
-log stderr
+level1 a
+ 		child1 a
+	 	child1 b
+level1 b
diff --git a/tests/vty/fail_too_much_indent.cfg b/tests/vty/fail_too_much_indent.cfg
index bacb3e1..3446a05 100644
--- a/tests/vty/fail_too_much_indent.cfg
+++ b/tests/vty/fail_too_much_indent.cfg
@@ -1,3 +1,3 @@
-line vty
-  no login
- log stderr
+level1 a
+  child1 a
+ level1 b
diff --git a/tests/vty/ok.cfg b/tests/vty/ok.cfg
index d5ef23e..f562348 100644
--- a/tests/vty/ok.cfg
+++ b/tests/vty/ok.cfg
@@ -1,3 +1,28 @@
-line vty
- no login
-log stderr
+level1 a
+ child1 a
+ level2 a
+  child2 a
+  level3 a
+   child3 a
+level1 b
+ child1 b
+ level2 b
+  child2 b
+level1 c
+ child1 c
+ level2 c
+  child2 c
+  level3 c
+   child3 c
+ level2 d
+  child2 d
+level1 e
+ child1 e
+ level2 e
+  child2 e
+ level2 f
+  child2 f
+level1 g
+ child1 g
+level1 h
+ child1 h
diff --git a/tests/vty/ok_empty_parent.cfg b/tests/vty/ok_empty_parent.cfg
index fe04fcf..40dd372 100644
--- a/tests/vty/ok_empty_parent.cfg
+++ b/tests/vty/ok_empty_parent.cfg
@@ -1,2 +1,22 @@
-line vty
-log stderr
+level1 a
+ level2 a
+  level3 a
+level1 b
+ level2 b
+level1 c
+level1 d
+ level2 e
+ level2 f
+  level3 f
+  level3 g
+ level2 g
+ level2 h
+level1 h
+level1 i
+level1 j
+ level2 j
+ child1 j
+level1 k
+ level2 k
+  level3 k
+ child1 k
diff --git a/tests/vty/ok_ignore_blank.cfg b/tests/vty/ok_ignore_blank.cfg
index d16ff64..a4a8bcb 100644
--- a/tests/vty/ok_ignore_blank.cfg
+++ b/tests/vty/ok_ignore_blank.cfg
@@ -1,7 +1,14 @@
-line vty
+level1
 
-  no login
+  level2
 
-  no login
+    child2
+    
 
-log stderr
+  	  
+    level3
+
+    	  
+        child3
+
+level1
diff --git a/tests/vty/ok_ignore_comment.cfg b/tests/vty/ok_ignore_comment.cfg
index 5813fc7..1d6d87e 100644
--- a/tests/vty/ok_ignore_comment.cfg
+++ b/tests/vty/ok_ignore_comment.cfg
@@ -1,7 +1,8 @@
-line vty
+level1
   ! comment
-  no login
+  child1
 ! comment
-  no login
+  level2
      ! comment
-log stderr
+    child2
+level1
diff --git a/tests/vty/ok_indented_root.cfg b/tests/vty/ok_indented_root.cfg
index 313c674..b7487f6 100644
--- a/tests/vty/ok_indented_root.cfg
+++ b/tests/vty/ok_indented_root.cfg
@@ -1,3 +1,5 @@
-	line vty
-	 no login
-	log stderr
+	level1 a
+	 child1
+	 level2
+	  child2
+	level1 b
diff --git a/tests/vty/ok_more_spaces.cfg b/tests/vty/ok_more_spaces.cfg
index b66a9c2..263c682 100644
--- a/tests/vty/ok_more_spaces.cfg
+++ b/tests/vty/ok_more_spaces.cfg
@@ -1,4 +1,28 @@
-line vty
-  no login
-  no login
-log stderr
+level1 a
+    child1 a
+    level2 a
+        child2 a
+        level3 a
+            child3 a
+level1 b
+    child1 b
+    level2 b
+        child2 b
+level1 c
+    child1 c
+    level2 c
+        child2 c
+        level3 c
+            child3 c
+    level2 d
+        child2 d
+level1 e
+    child1 e
+    level2 e
+        child2 e
+    level2 f
+        child2 f
+level1 g
+    child1 g
+level1 h
+    child1 h
diff --git a/tests/vty/ok_tabs.cfg b/tests/vty/ok_tabs.cfg
index e94609b..3f6085d 100644
--- a/tests/vty/ok_tabs.cfg
+++ b/tests/vty/ok_tabs.cfg
@@ -1,4 +1,28 @@
-line vty
-	no login
-	no login
-log stderr
+level1 a
+	child1 a
+	level2 a
+		child2 a
+		level3 a
+			child3 a
+level1 b
+	child1 b
+	level2 b
+		child2 b
+level1 c
+	child1 c
+	level2 c
+		child2 c
+		level3 c
+			child3 c
+	level2 d
+		child2 d
+level1 e
+	child1 e
+	level2 e
+		child2 e
+	level2 f
+		child2 f
+level1 g
+	child1 g
+level1 h
+	child1 h
diff --git a/tests/vty/ok_tabs_and_spaces.cfg b/tests/vty/ok_tabs_and_spaces.cfg
index 2049b73..1922aad 100644
--- a/tests/vty/ok_tabs_and_spaces.cfg
+++ b/tests/vty/ok_tabs_and_spaces.cfg
@@ -1,4 +1,28 @@
-line vty
-	  no login
-	  no login
-log stderr
+level1 a
+	  child1 a
+	  level2 a
+	  	  child2 a
+	  	  level3 a
+	  	  	  child3 a
+level1 b
+	  child1 b
+	  level2 b
+	  	  child2 b
+level1 c
+	  child1 c
+	  level2 c
+	  	  child2 c
+	  	  level3 c
+	  	  	  child3 c
+	  level2 d
+	  	  child2 d
+level1 e
+	  child1 e
+	  level2 e
+	  	  child2 e
+	  level2 f
+	  	  child2 f
+level1 g
+	  child1 g
+level1 h
+	  child1 h
diff --git a/tests/vty/vty_test.c b/tests/vty/vty_test.c
index d9af6ae..fe50e4c 100644
--- a/tests/vty/vty_test.c
+++ b/tests/vty/vty_test.c
@@ -298,12 +298,128 @@
 	OSMO_ASSERT(rc == expect_rc);
 }
 
+enum test_nodes {
+	LEVEL1_NODE = _LAST_OSMOVTY_NODE + 1,
+	LEVEL2_NODE,
+	LEVEL3_NODE,
+};
+
+struct cmd_node level1_node = {
+	LEVEL1_NODE,
+	"%s(config-level1)# ",
+	1
+};
+
+struct cmd_node level2_node = {
+	LEVEL2_NODE,
+	"%s(config-level1-level2)# ",
+	1
+};
+
+struct cmd_node level3_node = {
+	LEVEL3_NODE,
+	"%s(config-level1-level2-level3)# ",
+	1
+};
+
+DEFUN(cfg_level1, cfg_level1_cmd,
+	"level1 [MARKER]",
+	"Level 1 node for VTY testing purposes\n"
+	"optional string to mark the line for test debugging\n")
+{
+	vty->index = NULL;
+	vty->node = LEVEL1_NODE;
+	printf("called level1 node %s\n", argc? argv[0] : "");
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_level1_child, cfg_level1_child_cmd,
+	"child1 [MARKER]",
+	"Level 1 child cmd for VTY testing purposes\n"
+	"optional string to mark the line for test debugging\n")
+{
+	printf("called level1 child cmd %s\n", argc? argv[0] : "");
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_level2, cfg_level2_cmd,
+	"level2 [MARKER]",
+	"Level 2 node for VTY testing purposes\n"
+	"optional string to mark the line for test debugging\n")
+{
+	vty->index = NULL;
+	vty->node = LEVEL2_NODE;
+	printf("called level2 node %s\n", argc? argv[0] : "");
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_level2_child, cfg_level2_child_cmd,
+	"child2 [MARKER]",
+	"Level 2 child cmd for VTY testing purposes\n"
+	"optional string to mark the line for test debugging\n")
+{
+	printf("called level2 child cmd %s\n", argc? argv[0] : "");
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_level3, cfg_level3_cmd,
+	"level3 [MARKER]",
+	"Level 3 node for VTY testing purposes\n"
+	"optional string to mark the line for test debugging\n")
+{
+	vty->index = NULL;
+	vty->node = LEVEL3_NODE;
+	printf("called level3 node %s\n", argc? argv[0] : "");
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_level3_child, cfg_level3_child_cmd,
+	"child3 [MARKER]",
+	"Level 3 child cmd for VTY testing purposes\n"
+	"optional string to mark the line for test debugging\n")
+{
+	printf("called level3 child cmd %s\n", argc? argv[0] : "");
+	return CMD_SUCCESS;
+}
+
+void test_vty_add_cmds()
+{
+	install_element(CONFIG_NODE, &cfg_level1_cmd);
+	install_node(&level1_node, NULL);
+	vty_install_default(LEVEL1_NODE);
+	install_element(LEVEL1_NODE, &cfg_level1_child_cmd);
+	install_element(LEVEL1_NODE, &cfg_level2_cmd);
+
+	install_node(&level2_node, NULL);
+	vty_install_default(LEVEL2_NODE);
+	install_element(LEVEL2_NODE, &cfg_level2_child_cmd);
+	install_element(LEVEL2_NODE, &cfg_level3_cmd);
+
+	install_node(&level3_node, NULL);
+	vty_install_default(LEVEL3_NODE);
+	install_element(LEVEL3_NODE, &cfg_level3_child_cmd);
+}
+
+static int go_parent_cb(struct vty *vty)
+{
+	/*
+	 * - For the interactive VTY tests above, it is expected to bounce back to
+	 *   the CONFIG_NODE. Hence do so in go_parent_cb().
+	 * - In the config file parsing tests, setting vty->node in go_parent_cb() has no
+	 *   effect, because we will subsequently pop a parent node from the parent stack
+	 *   and override to go to the node that was recorded as the actual parent.
+	 */
+	vty->node = CONFIG_NODE;
+	vty->index = NULL;
+	return 0;
+}
+
 int main(int argc, char **argv)
 {
 	struct vty_app_info vty_info = {
 		.name		= "VtyTest",
 		.version	= 0,
-		.go_parent_cb	= NULL,
+		.go_parent_cb	= go_parent_cb,
 		.is_config_node	= NULL,
 	};
 
@@ -329,6 +445,8 @@
 	logging_vty_add_cmds();
 	osmo_stats_vty_add_cmds();
 
+	test_vty_add_cmds();
+
 	test_cmd_string_from_valstr();
 	test_node_tree_structure();
 	test_stats_vty();
diff --git a/tests/vty/vty_test.ok b/tests/vty/vty_test.ok
index f9fea34..bd6c5d6 100644
--- a/tests/vty/vty_test.ok
+++ b/tests/vty/vty_test.ok
@@ -109,25 +109,181 @@
 Going to execute 'no stats reporter statsd'
 Returned: 0, Current node: 4 '%s(config)# '
 reading file ok.cfg, expecting rc=0
+called level1 node a
+called level1 child cmd a
+called level2 node a
+called level2 child cmd a
+called level3 node a
+called level3 child cmd a
+called level1 node b
+called level1 child cmd b
+called level2 node b
+called level2 child cmd b
+called level1 node c
+called level1 child cmd c
+called level2 node c
+called level2 child cmd c
+called level3 node c
+called level3 child cmd c
+called level2 node d
+called level2 child cmd d
+called level1 node e
+called level1 child cmd e
+called level2 node e
+called level2 child cmd e
+called level2 node f
+called level2 child cmd f
+called level1 node g
+called level1 child cmd g
+called level1 node h
+called level1 child cmd h
 got rc=0
 reading file ok_more_spaces.cfg, expecting rc=0
+called level1 node a
+called level1 child cmd a
+called level2 node a
+called level2 child cmd a
+called level3 node a
+called level3 child cmd a
+called level1 node b
+called level1 child cmd b
+called level2 node b
+called level2 child cmd b
+called level1 node c
+called level1 child cmd c
+called level2 node c
+called level2 child cmd c
+called level3 node c
+called level3 child cmd c
+called level2 node d
+called level2 child cmd d
+called level1 node e
+called level1 child cmd e
+called level2 node e
+called level2 child cmd e
+called level2 node f
+called level2 child cmd f
+called level1 node g
+called level1 child cmd g
+called level1 node h
+called level1 child cmd h
 got rc=0
 reading file ok_tabs.cfg, expecting rc=0
+called level1 node a
+called level1 child cmd a
+called level2 node a
+called level2 child cmd a
+called level3 node a
+called level3 child cmd a
+called level1 node b
+called level1 child cmd b
+called level2 node b
+called level2 child cmd b
+called level1 node c
+called level1 child cmd c
+called level2 node c
+called level2 child cmd c
+called level3 node c
+called level3 child cmd c
+called level2 node d
+called level2 child cmd d
+called level1 node e
+called level1 child cmd e
+called level2 node e
+called level2 child cmd e
+called level2 node f
+called level2 child cmd f
+called level1 node g
+called level1 child cmd g
+called level1 node h
+called level1 child cmd h
 got rc=0
 reading file ok_tabs_and_spaces.cfg, expecting rc=0
+called level1 node a
+called level1 child cmd a
+called level2 node a
+called level2 child cmd a
+called level3 node a
+called level3 child cmd a
+called level1 node b
+called level1 child cmd b
+called level2 node b
+called level2 child cmd b
+called level1 node c
+called level1 child cmd c
+called level2 node c
+called level2 child cmd c
+called level3 node c
+called level3 child cmd c
+called level2 node d
+called level2 child cmd d
+called level1 node e
+called level1 child cmd e
+called level2 node e
+called level2 child cmd e
+called level2 node f
+called level2 child cmd f
+called level1 node g
+called level1 child cmd g
+called level1 node h
+called level1 child cmd h
 got rc=0
 reading file ok_ignore_comment.cfg, expecting rc=0
+called level1 node 
+called level1 child cmd 
+called level2 node 
+called level2 child cmd 
+called level1 node 
 got rc=0
 reading file ok_ignore_blank.cfg, expecting rc=0
+called level1 node 
+called level2 node 
+called level2 child cmd 
+called level3 node 
+called level3 child cmd 
+called level1 node 
 got rc=0
 reading file fail_not_de-indented.cfg, expecting rc=-22
+called level1 node a
+called level1 child cmd a
 got rc=-22
 reading file fail_too_much_indent.cfg, expecting rc=-22
+called level1 node a
+called level1 child cmd a
 got rc=-22
 reading file fail_tabs_and_spaces.cfg, expecting rc=-22
+called level1 node a
+called level1 child cmd a
 got rc=-22
 reading file ok_indented_root.cfg, expecting rc=0
+called level1 node a
+called level1 child cmd 
+called level2 node 
+called level2 child cmd 
+called level1 node b
 got rc=0
 reading file ok_empty_parent.cfg, expecting rc=0
+called level1 node a
+called level2 node a
+called level3 node a
+called level1 node b
+called level2 node b
+called level1 node c
+called level1 node d
+called level2 node e
+called level2 node f
+called level3 node f
+called level3 node g
+called level2 node g
+called level2 node h
+called level1 node h
+called level1 node i
+called level1 node j
+called level2 node j
+called level1 child cmd j
+called level1 node k
+called level2 node k
+called level3 node k
+called level1 child cmd k
 got rc=0
 All tests passed

-- 
To view, visit https://gerrit.osmocom.org/3995
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib9bcf58b655fbd85e196f363fb7d8305d7dfc997
Gerrit-PatchSet: 1
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list