diff options
author | Alfred E. Heggestad <aeh@db.org> | 2016-04-03 17:35:05 +0200 |
---|---|---|
committer | Alfred E. Heggestad <aeh@db.org> | 2016-04-03 17:35:05 +0200 |
commit | 31baf6937aee6f449a6675e102d6f0831bfb1fbe (patch) | |
tree | b31e792b04b746497cb42df90dfb07ce8d0a7035 /test/ua.c | |
parent | 059b6a9f597419adc331ca7e1e2b40b090d907a1 (diff) |
test: added test-case for authenticated register
Diffstat (limited to 'test/ua.c')
-rw-r--r-- | test/ua.c | 92 |
1 files changed, 92 insertions, 0 deletions
@@ -7,6 +7,7 @@ #include <re.h> #include <baresip.h> #include "test.h" +#include "sip/sipsrv.h" struct test { @@ -46,6 +47,8 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev, if (ev == UA_EVENT_REGISTER_OK) { + re_printf("event: Register OK!\n"); + ++t->got_register_ok; /* verify register success */ @@ -57,6 +60,11 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev, t->ua = mem_deref(t->ua); } + else if (ev == UA_EVENT_REGISTER_FAIL) { + + err = EAUTH; + re_cancel(); + } out: if (err) { @@ -243,6 +251,10 @@ static int reg_dns(enum sip_transp tp) goto out; } + err = domain_add(t.srvv[0], domain); + if (err) + goto out; + err = sip_transp_laddr(t.srvv[i]->sip, &sip_addr, tp, NULL); TEST_ERR(err); @@ -330,3 +342,83 @@ int test_ua_register_dns(void) out: return err; } + + +#define USER "alfredh" +#define PASS "password" +#define DOMAIN "localhost" + +int test_ua_register_auth(void) +{ + struct sa laddr; + enum sip_transp tp = SIP_TRANSP_UDP; + struct test t; + char aor[256]; + int err; + + memset(&t, 0, sizeof t); + + err = sip_server_alloc(&t.srvv[0]); + if (err) { + warning("failed to create sip server (%d/%m)\n", err, err); + goto out; + } + + err = domain_add(t.srvv[0], DOMAIN); + TEST_ERR(err); + + err = user_add(domain_lookup(t.srvv[0], DOMAIN)->ht_usr, + "alfredh", "password", DOMAIN); + TEST_ERR(err); + + t.srvv[0]->auth_enabled = true; + + err = sip_transp_laddr(t.srvv[0]->sip, &laddr, tp, NULL); + if (err) + return err; + + /* NOTE: angel brackets needed to parse ;transport parameter */ + if (re_snprintf(aor, sizeof(aor), + "<sip:%s:%s@%s>;outbound=\"sip:%J\"", + USER, + PASS, + DOMAIN, + &laddr) < 0) + return ENOMEM; + + err = ua_init("test", true, true, true, false); + TEST_ERR(err); + + err = ua_alloc(&t.ua, aor); + TEST_ERR(err); + + err = uag_event_register(ua_event_handler, &t); + if (err) + goto out; + + /* run main-loop with timeout, wait for events */ + err = re_main_timeout(5000); + if (err) + goto out; + + if (t.err) { + err = t.err; + goto out; + } + + ASSERT_TRUE(t.srvv[0]->n_register_req > 0); + ASSERT_EQ(tp, t.srvv[0]->tp_last); + ASSERT_TRUE(t.got_register_ok > 0); + + out: + if (err) { + warning("selftest: ua_register test failed (%m)\n", err); + } + uag_event_unregister(ua_event_handler); + test_reset(&t); + + ua_stop_all(true); + ua_close(); + + return err; +} |