<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/20466">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tests/vty: verify 'show vty-attributes' / 'list' commands<br><br>Change-Id: I397cf642b323a9a99b2406aabaa67a7786dc2a50<br>Related: SYS#4937<br>---<br>M tests/vty/vty_transcript_test.c<br>M tests/vty/vty_transcript_test.vty<br>2 files changed, 157 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/vty/vty_transcript_test.c b/tests/vty/vty_transcript_test.c</span><br><span>index 6651097..abe3702 100644</span><br><span>--- a/tests/vty/vty_transcript_test.c</span><br><span>+++ b/tests/vty/vty_transcript_test.c</span><br><span>@@ -142,9 +142,34 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Application specific VTY attributes */</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+ TEST_ATTR_UNBELIEVABLE,</span><br><span style="color: hsl(120, 100%, 40%);">+       TEST_ATTR_MAGNIFICENT,</span><br><span style="color: hsl(120, 100%, 40%);">+        TEST_ATTR_WONDERFUL,</span><br><span style="color: hsl(120, 100%, 40%);">+  TEST_ATTR_UNUSED,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct vty_app_info vty_info = {</span><br><span>   .name           = "vty_transcript_test",</span><br><span>   .version        = PACKAGE_VERSION,</span><br><span style="color: hsl(120, 100%, 40%);">+    .usr_attr_desc  = {</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Some random description strings, who cares... */</span><br><span style="color: hsl(120, 100%, 40%);">+           [TEST_ATTR_UNBELIEVABLE]        = \</span><br><span style="color: hsl(120, 100%, 40%);">+                   "Unbelievable: not able to be believed; unlikely to be true",</span><br><span style="color: hsl(120, 100%, 40%);">+               [TEST_ATTR_MAGNIFICENT]         = \</span><br><span style="color: hsl(120, 100%, 40%);">+                   "Magnificent: impressively beautiful, elaborate, or extravagant",</span><br><span style="color: hsl(120, 100%, 40%);">+           [TEST_ATTR_WONDERFUL]           = \</span><br><span style="color: hsl(120, 100%, 40%);">+                   "Wonderful: inspiring delight, pleasure, or admiration",</span><br><span style="color: hsl(120, 100%, 40%);">+            [TEST_ATTR_UNUSED]              = \</span><br><span style="color: hsl(120, 100%, 40%);">+                   "Intentionally unused attribute, ignore me",</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+    .usr_attr_letters = {</span><br><span style="color: hsl(120, 100%, 40%);">+         [TEST_ATTR_UNBELIEVABLE]        = 'u',</span><br><span style="color: hsl(120, 100%, 40%);">+                [TEST_ATTR_MAGNIFICENT]         = 'm',</span><br><span style="color: hsl(120, 100%, 40%);">+                [TEST_ATTR_WONDERFUL]           = 'w',</span><br><span style="color: hsl(120, 100%, 40%);">+                [TEST_ATTR_UNUSED]              = 'n',</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span> };</span><br><span> </span><br><span> static const struct log_info_cat default_categories[] = {};</span><br><span>@@ -186,12 +211,106 @@</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define X(f) (1 << f)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+   ATTR_TEST_NODE = _LAST_OSMOVTY_NODE + 1,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct cmd_node attr_test_node = {</span><br><span style="color: hsl(120, 100%, 40%);">+     ATTR_TEST_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+       "%s(config-attr-test)# ",</span><br><span style="color: hsl(120, 100%, 40%);">+   1</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_attr_test, cfg_attr_test_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "attribute-test",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Enter attribute test node\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        vty->index = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ vty->node = ATTR_TEST_NODE;</span><br><span style="color: hsl(120, 100%, 40%);">+        return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_attr_immediate, cfg_attr_immediate_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "foo-immediate",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Applies immediately\n",</span><br><span style="color: hsl(120, 100%, 40%);">+    CMD_ATTR_IMMEDIATE)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_ATTR(cfg_attr_node_exit, cfg_attr_node_exit_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         "foo-node-exit",</span><br><span style="color: hsl(120, 100%, 40%);">+    "Applies on node exit\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           CMD_ATTR_NODE_EXIT)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_app_attr_unbelievable,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_app_attr_unbelievable_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        X(TEST_ATTR_UNBELIEVABLE),</span><br><span style="color: hsl(120, 100%, 40%);">+            "app-unbelievable",</span><br><span style="color: hsl(120, 100%, 40%);">+         "Unbelievable help message\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_app_attr_magnificent,</span><br><span style="color: hsl(120, 100%, 40%);">+           cfg_app_attr_magnificent_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+         X(TEST_ATTR_MAGNIFICENT),</span><br><span style="color: hsl(120, 100%, 40%);">+             "app-magnificent",</span><br><span style="color: hsl(120, 100%, 40%);">+          "Magnificent help message\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_app_attr_wonderful,</span><br><span style="color: hsl(120, 100%, 40%);">+             cfg_app_attr_wonderful_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+           X(TEST_ATTR_WONDERFUL),</span><br><span style="color: hsl(120, 100%, 40%);">+       "app-wonderful",</span><br><span style="color: hsl(120, 100%, 40%);">+            "Wonderful help message\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_app_attr_unbelievable_magnificent,</span><br><span style="color: hsl(120, 100%, 40%);">+              cfg_app_attr_unbelievable_magnificent_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(TEST_ATTR_UNBELIEVABLE) | X(TEST_ATTR_MAGNIFICENT),</span><br><span style="color: hsl(120, 100%, 40%);">+         "app-unbelievable-magnificent",</span><br><span style="color: hsl(120, 100%, 40%);">+             "Unbelievable & magnificent help message\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_app_attr_unbelievable_wonderful,</span><br><span style="color: hsl(120, 100%, 40%);">+        cfg_app_attr_unbelievable_wonderful_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+              X(TEST_ATTR_UNBELIEVABLE) | X(TEST_ATTR_WONDERFUL),</span><br><span style="color: hsl(120, 100%, 40%);">+           "app-unbelievable-wonderful",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Unbelievable & wonderful help message\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void init_vty_cmds()</span><br><span> {</span><br><span>         install_element_ve(&single0_cmd);</span><br><span>        install_element_ve(&multi0_cmd);</span><br><span>         install_element_ve(&multi1_cmd);</span><br><span>         install_element_ve(&multi2_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        install_element(CONFIG_NODE, &cfg_attr_test_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_node(&attr_test_node, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+      install_element(ATTR_TEST_NODE, &cfg_attr_immediate_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(ATTR_TEST_NODE, &cfg_attr_node_exit_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       install_element(ATTR_TEST_NODE, &cfg_app_attr_unbelievable_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+  install_element(ATTR_TEST_NODE, &cfg_app_attr_magnificent_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(ATTR_TEST_NODE, &cfg_app_attr_wonderful_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(ATTR_TEST_NODE, &cfg_app_attr_unbelievable_magnificent_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+      install_element(ATTR_TEST_NODE, &cfg_app_attr_unbelievable_wonderful_cmd);</span><br><span> }</span><br><span> </span><br><span> int main(int argc, char **argv)</span><br><span>diff --git a/tests/vty/vty_transcript_test.vty b/tests/vty/vty_transcript_test.vty</span><br><span>index db58830..28edf29 100644</span><br><span>--- a/tests/vty/vty_transcript_test.vty</span><br><span>+++ b/tests/vty/vty_transcript_test.vty</span><br><span>@@ -84,3 +84,41 @@</span><br><span> </span><br><span> vty_transcript_test> single0</span><br><span> ok argc=0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+vty_transcript_test> show vty-attributes</span><br><span style="color: hsl(120, 100%, 40%);">+  Global attributes:</span><br><span style="color: hsl(120, 100%, 40%);">+    .  This command is deprecated</span><br><span style="color: hsl(120, 100%, 40%);">+    .  This command is hidden</span><br><span style="color: hsl(120, 100%, 40%);">+    .  This command applies immediately</span><br><span style="color: hsl(120, 100%, 40%);">+    .  This command applies on VTY node exit</span><br><span style="color: hsl(120, 100%, 40%);">+  Library specific attributes:</span><br><span style="color: hsl(120, 100%, 40%);">+    A  This command applies on ASP restart</span><br><span style="color: hsl(120, 100%, 40%);">+  Application specific attributes:</span><br><span style="color: hsl(120, 100%, 40%);">+    u  Unbelievable: not able to be believed; unlikely to be true</span><br><span style="color: hsl(120, 100%, 40%);">+    m  Magnificent: impressively beautiful, elaborate, or extravagant</span><br><span style="color: hsl(120, 100%, 40%);">+    w  Wonderful: inspiring delight, pleasure, or admiration</span><br><span style="color: hsl(120, 100%, 40%);">+    n  Intentionally unused attribute, ignore me</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+vty_transcript_test> en</span><br><span style="color: hsl(120, 100%, 40%);">+vty_transcript_test# configure terminal</span><br><span style="color: hsl(120, 100%, 40%);">+vty_transcript_test(config)# attribute-test</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+vty_transcript_test(config-attr-test)# list</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+  foo-immediate</span><br><span style="color: hsl(120, 100%, 40%);">+  foo-node-exit</span><br><span style="color: hsl(120, 100%, 40%);">+  app-unbelievable</span><br><span style="color: hsl(120, 100%, 40%);">+  app-magnificent</span><br><span style="color: hsl(120, 100%, 40%);">+  app-wonderful</span><br><span style="color: hsl(120, 100%, 40%);">+  app-unbelievable-magnificent</span><br><span style="color: hsl(120, 100%, 40%);">+  app-unbelievable-wonderful</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+vty_transcript_test(config-attr-test)# list with-flags</span><br><span style="color: hsl(120, 100%, 40%);">+...</span><br><span style="color: hsl(120, 100%, 40%);">+  ...  foo-immediate</span><br><span style="color: hsl(120, 100%, 40%);">+  ...  foo-node-exit</span><br><span style="color: hsl(120, 100%, 40%);">+  u..  app-unbelievable</span><br><span style="color: hsl(120, 100%, 40%);">+  .m.  app-magnificent</span><br><span style="color: hsl(120, 100%, 40%);">+  ..w  app-wonderful</span><br><span style="color: hsl(120, 100%, 40%);">+  um.  app-unbelievable-magnificent</span><br><span style="color: hsl(120, 100%, 40%);">+  u.w  app-unbelievable-wonderful</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/20466">change 20466</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/20466"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I397cf642b323a9a99b2406aabaa67a7786dc2a50 </div>
<div style="display:none"> Gerrit-Change-Number: 20466 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>