summaryrefslogtreecommitdiff
path: root/testing/fulltests/unit-tests/T019_snmp_service_clib.c
diff options
context:
space:
mode:
Diffstat (limited to 'testing/fulltests/unit-tests/T019_snmp_service_clib.c')
-rw-r--r--testing/fulltests/unit-tests/T019_snmp_service_clib.c253
1 files changed, 253 insertions, 0 deletions
diff --git a/testing/fulltests/unit-tests/T019_snmp_service_clib.c b/testing/fulltests/unit-tests/T019_snmp_service_clib.c
new file mode 100644
index 0000000..42ec8d3
--- /dev/null
+++ b/testing/fulltests/unit-tests/T019_snmp_service_clib.c
@@ -0,0 +1,253 @@
+/* HEADER Testing domain and target registrations from snmp_service. */
+
+/* Setup configuration reading */
+netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE, "testprog");
+
+netsnmp_register_service_handlers();
+
+netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_HAVE_READ_CONFIG, 1);
+
+/* Clear all default values */
+netsnmp_clear_default_domain();
+netsnmp_clear_default_target();
+
+/* Test domain lookup */
+
+OK(netsnmp_register_default_domain("a", "") == 0,
+ "register an empty token in domain 'a'");
+
+OK(netsnmp_register_default_domain("b", "alfa") == 0,
+ "register a single token in domain 'b'");
+
+OK(netsnmp_register_default_domain("c", "alfa beta") == 0,
+ "register two tokens in domain 'c'");
+
+#define OK_STRCMP(name, value, expected) \
+ OKF(value != NULL && strcmp(expected, value) == 0, \
+ ("Lookup of '" #name "' expected '" expected "', got %s%s%s", \
+ value ? "'" : "", value ? value : "NULL", value ? "'" : ""))
+
+#define OK_STR_IS_NULL(name, value) \
+ OKF(value == NULL, \
+ ("Lookup of '" #name "' expected NULL, got %s%s%s", \
+ value ? "'" : "", value ? value : "NULL", value ? "'" : ""))
+
+#define OK_IS_NULL(name, value) \
+ OKF(value == NULL, ("Lookup of '" #name "' expected NULL, got %p", value))
+
+#define OK_IS_NOT_NULL(name, value) \
+ OKF(value != NULL, ("Lookup of '" #name "' expected non-NULL, got %p", value))
+
+{
+ const char *t;
+
+ t = netsnmp_lookup_default_domain("a");
+ OK_STRCMP(a, t, "");
+
+ t = netsnmp_lookup_default_domain("b");
+ OK_STRCMP(b, t, "alfa");
+
+ t = netsnmp_lookup_default_domain("c");
+ OK_STRCMP(c, t, "alfa");
+
+ t = netsnmp_lookup_default_domain("d");
+ OK_STR_IS_NULL(d, t);
+}
+
+{
+ const char *const *t;
+
+ t = netsnmp_lookup_default_domains("a");
+ OK_IS_NOT_NULL(a, t);
+ OK_STRCMP(a[0], t[0], "");
+ OK_STR_IS_NULL(a[1], t[1]);
+
+ t = netsnmp_lookup_default_domains("b");
+ OK_IS_NOT_NULL(b, t);
+ OK_STRCMP(b[0], t[0], "alfa");
+ OK_STR_IS_NULL(b[1], t[1]);
+
+ t = netsnmp_lookup_default_domains("c");
+ OK_IS_NOT_NULL(c, t);
+ OK_STRCMP(c[0], t[0], "alfa");
+ OK_STRCMP(c[1], t[1], "beta");
+ OK_STR_IS_NULL(c[2], t[2]);
+
+ t = netsnmp_lookup_default_domains("d");
+ OK_IS_NULL(d, t);
+}
+
+{
+ char cfg[] = "defDomain=b gamma";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "register user domain for 'b'");
+}
+
+{
+ char cfg[] = "defDomain=c gamma delta";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "register user domains for 'c'");
+}
+
+{
+ char cfg[] = "defDomain=b2 gamma";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "register user domain for 'b2'");
+}
+
+{
+ char cfg[] = "defDomain=c2 gamma delta";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "register user domains for 'c2'");
+}
+
+{
+ const char *t;
+
+ t = netsnmp_lookup_default_domain("b");
+ OK_STRCMP(b, t, "gamma");
+
+ t = netsnmp_lookup_default_domain("b2");
+ OK_STRCMP(b2, t, "gamma");
+
+ t = netsnmp_lookup_default_domain("c");
+ OK_STRCMP(c, t, "gamma");
+
+ t = netsnmp_lookup_default_domain("c2");
+ OK_STRCMP(c2, t, "gamma");
+}
+
+{
+ const char *const *t;
+
+ t = netsnmp_lookup_default_domains("b");
+ OK_IS_NOT_NULL(b, t);
+ OK_STRCMP(b[0], t[0], "gamma");
+ OK_STR_IS_NULL(b[1], t[1]);
+
+ t = netsnmp_lookup_default_domains("b2");
+ OK_IS_NOT_NULL(b2, t);
+ OK_STRCMP(b2[0], t[0], "gamma");
+ OK_STR_IS_NULL(b2[1], t[1]);
+
+ t = netsnmp_lookup_default_domains("c");
+ OK_IS_NOT_NULL(c, t);
+ OK_STRCMP(c[0], t[0], "gamma");
+ OK_STRCMP(c[1], t[1], "delta");
+ OK_STR_IS_NULL(c[2], t[2]);
+
+ t = netsnmp_lookup_default_domains("c2");
+ OK_IS_NOT_NULL(c2, t);
+ OK_STRCMP(c2[0], t[0], "gamma");
+ OK_STRCMP(c2[1], t[1], "delta");
+ OK_STR_IS_NULL(c2[2], t[2]);
+}
+
+{
+ char cfg[] = "defDomain=";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "Empty config line");
+}
+
+{
+ const char* t;
+ char cfg[] = "defDomain=e";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "Incomplete config line");
+ t = netsnmp_lookup_default_domain("e");
+ OK_STR_IS_NULL(e, t);
+}
+
+/* Test target lookup */
+
+OK(netsnmp_register_default_target("b", "alfa", "alfa-domain:b") == 0,
+ "register a 'alfa:alfa-domain:b' for application 'b'");
+
+OK(netsnmp_register_default_target("b", "beta", "beta-domain:b") == 0,
+ "register a 'beta:beta-domain:b' for application 'b'");
+
+OK(netsnmp_register_default_target("c", "alfa", "alfa-domain:c") == 0,
+ "register a 'alfa:alfa-domain:c' for application 'c'");
+
+{
+ const char *t;
+
+ t = netsnmp_lookup_default_target("b", "alfa");
+ OK_STRCMP(b:alfa, t, "alfa-domain:b");
+
+ t = netsnmp_lookup_default_target("b", "beta");
+ OK_STRCMP(b:beta, t, "beta-domain:b");
+
+ t = netsnmp_lookup_default_target("c", "alfa");
+ OK_STRCMP(c:alfa, t, "alfa-domain:c");
+
+ t = netsnmp_lookup_default_target("a", "alfa");
+ OK_STR_IS_NULL(a:alfa, t);
+
+ t = netsnmp_lookup_default_target("b", "gamma");
+ OK_STR_IS_NULL(b:gamma, t);
+
+ t = netsnmp_lookup_default_target("c", "beta");
+ OK_STR_IS_NULL(c:beta, t);
+}
+
+{
+ char cfg[] = "defTarget=b alfa user-alfa:b";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS,
+ "register user target 'alfa:user-alfa:b' for application 'b'");
+}
+
+{
+ char cfg[] = "defTarget=b gamma user-gamma:b";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS,
+ "register user target 'gamma:user-gamma:b' for application 'b'");
+}
+
+{
+ char cfg[] = "defTarget=c alfa user-alfa:c";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS,
+ "register user target 'alfa:user-alfa:c' for application 'c'");
+}
+
+
+{
+ const char *t;
+
+ t = netsnmp_lookup_default_target("b", "alfa");
+ OK_STRCMP(b:alfa, t, "user-alfa:b");
+
+ t = netsnmp_lookup_default_target("b", "beta");
+ OK_STRCMP(b:beta, t, "beta-domain:b");
+
+ t = netsnmp_lookup_default_target("c", "alfa");
+ OK_STRCMP(c:alfa, t, "user-alfa:c");
+
+ t = netsnmp_lookup_default_target("a", "alfa");
+ OK_STR_IS_NULL(a:alfa, t);
+
+ t = netsnmp_lookup_default_target("b", "gamma");
+ OK_STRCMP(b:gamma, t, "user-gamma:b");
+
+ t = netsnmp_lookup_default_target("b", "delta");
+ OK_STR_IS_NULL(b:delta, t);
+
+ t = netsnmp_lookup_default_target("c", "beta");
+ OK_STR_IS_NULL(c:beta, t);
+}
+
+{
+ char cfg[] = "defTarget=";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "Empty config line");
+}
+
+{
+ const char* t;
+ char cfg[] = "defTarget=e1";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "Incomplete config line #1");
+ t = netsnmp_lookup_default_target("e1", "");
+ OK_STR_IS_NULL(e1:, t);
+}
+
+{
+ const char* t;
+ char cfg[] = "defTarget=e2 omega";
+ OK(netsnmp_config(cfg) == SNMPERR_SUCCESS, "Incomplete config line #2");
+ t = netsnmp_lookup_default_target("e2", "omega");
+ OK_STR_IS_NULL(e2:omega, t);
+}