summaryrefslogtreecommitdiff
path: root/testing/fulltests/unit-tests/T004snmp_enum_clib.c
diff options
context:
space:
mode:
Diffstat (limited to 'testing/fulltests/unit-tests/T004snmp_enum_clib.c')
-rw-r--r--testing/fulltests/unit-tests/T004snmp_enum_clib.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/testing/fulltests/unit-tests/T004snmp_enum_clib.c b/testing/fulltests/unit-tests/T004snmp_enum_clib.c
new file mode 100644
index 0000000..d28b19b
--- /dev/null
+++ b/testing/fulltests/unit-tests/T004snmp_enum_clib.c
@@ -0,0 +1,105 @@
+/* HEADER Testing snmp_enum */
+
+#define CONFIG_TYPE "snmp-enum-unit-test"
+#define STRING1 "life, and everything"
+#define STRING2 "restaurant at the end of the universe"
+#define STRING3 "label3"
+#define LONG_STRING "a-string-of-255-characters-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"
+
+#define STORE_AND_COMPARE(maj, min, s) \
+ { \
+ FILE *fp; \
+ int read = 0; \
+ char *p, contents[4096]; \
+ \
+ se_store_list(maj, min, CONFIG_TYPE); \
+ fp = fopen(tmp_persist_file, "r"); \
+ if (fp) { \
+ read = fread(contents, 1, sizeof(contents) - 1, fp); \
+ fclose(fp); \
+ } \
+ contents[read > 0 ? read : 0] = '\0'; \
+ for (p = contents; *p; ++p) \
+ if (*p == '\n') \
+ *p = '|'; \
+ OKF(strcmp(contents, (s)) == 0, \
+ ("stored list %s <> %s", (s), contents)); \
+ remove(tmp_persist_file); \
+ }
+
+char tmp_persist_file[256];
+char *se_find_result;
+
+sprintf(tmp_persist_file, "/tmp/snmp-enum-unit-test-%d", getpid());
+netsnmp_setenv("SNMP_PERSISTENT_FILE", tmp_persist_file, 1);
+
+init_snmp_enum("snmp");
+
+STORE_AND_COMPARE(1, 1, "enum 1:1|");
+
+se_add_pair(1, 1, strdup("hi"), 1);
+
+STORE_AND_COMPARE(1, 1, "enum 1:1 1:hi|");
+
+se_add_pair(1, 1, strdup("there"), 2);
+
+STORE_AND_COMPARE(1, 1, "enum 1:1 1:hi 2:there|");
+
+se_add_pair(1, 1, strdup(LONG_STRING), 3);
+se_add_pair(1, 1, strdup(LONG_STRING), 4);
+se_add_pair(1, 1, strdup(LONG_STRING), 5);
+se_add_pair(1, 1, strdup(LONG_STRING), 6);
+se_add_pair(1, 1, strdup(LONG_STRING), 7);
+se_add_pair(1, 1, strdup(LONG_STRING), 8);
+se_add_pair(1, 1, strdup(LONG_STRING), 9);
+
+STORE_AND_COMPARE(1, 1, "enum 1:1 1:hi 2:there 3:" LONG_STRING " 4:" LONG_STRING
+ " 5:" LONG_STRING " 6:" LONG_STRING " 7:" LONG_STRING
+ " 8:" LONG_STRING " 9:" LONG_STRING "|");
+
+se_add_pair(1, 1, strdup(LONG_STRING), 10);
+
+STORE_AND_COMPARE(1, 1, "enum 1:1 1:hi 2:there 3:" LONG_STRING " 4:" LONG_STRING
+ " 5:" LONG_STRING " 6:" LONG_STRING " 7:" LONG_STRING
+ " 8:" LONG_STRING " 9:" LONG_STRING "|"
+ "enum 1:1 10:" LONG_STRING "|");
+
+OK(se_find_value(1, 1, "hi") == 1,
+ "lookup by number #1 should be the proper string");
+OK(strcmp(se_find_label(1, 1, 2), "there") == 0,
+ "lookup by string #1 should be the proper number");
+
+
+se_add_pair_to_slist("testing", strdup(STRING1), 42);
+se_add_pair_to_slist("testing", strdup(STRING2), 2);
+se_add_pair_to_slist("testing", strdup(STRING3), 2);
+
+OK(se_find_value_in_slist("testing", STRING1) == 42,
+ "lookup by number should be the proper string");
+OK(strcmp(se_find_label_in_slist("testing", 2), STRING2) == 0,
+ "lookup by string should be the proper number");
+
+se_clear_slist("testing");
+
+
+se_read_conf("enum",
+ NETSNMP_REMOVE_CONST(char *, "2:3 1:apple 2:pear 3:kiwifruit"));
+OK(se_find_list(2, 3), "list (2, 3) should be present");
+if (se_find_list(2, 3)) {
+ OK(se_find_value(2, 3, "kiwifruit") == 3,
+ "lookup by string should return the proper value");
+ se_find_result = se_find_label(2, 3, 2);
+ OK(se_find_result && strcmp(se_find_result, "pear") == 0,
+ "lookup by label should return the proper string");
+}
+
+se_read_conf("enum",
+ NETSNMP_REMOVE_CONST(char *, "fruit 1:apple 2:pear 3:kiwifruit"));
+OK(se_find_value_in_slist("fruit", "kiwifruit") == 3,
+ "lookup by string should return the proper value");
+se_find_result = se_find_label_in_slist("fruit", 2);
+OK(se_find_result && strcmp(se_find_result, "pear") == 0,
+ "lookup by value should return the proper string");
+
+clear_snmp_enum();
+unregister_all_config_handlers();