diff options
Diffstat (limited to 'testing/fulltests/unit-tests/T019_snmp_service_clib.c')
-rw-r--r-- | testing/fulltests/unit-tests/T019_snmp_service_clib.c | 253 |
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); +} |