pespin submitted this change.
tests: Add unit tests for ss7_asp_peer
Change-Id: I158dd8b8d514ad8a68074a16a0702d3d33f71bbc
---
M tests/ss7/ss7_test.c
M tests/ss7/ss7_test.ok
2 files changed, 136 insertions(+), 0 deletions(-)
diff --git a/tests/ss7/ss7_test.c b/tests/ss7/ss7_test.c
index aec886f..c092d4e 100644
--- a/tests/ss7/ss7_test.c
+++ b/tests/ss7/ss7_test.c
@@ -319,6 +319,131 @@
OSMO_ASSERT(osmo_ss7_as_find_by_name(s7i, "as1") == NULL);
}
+static void test_asp_peer(void)
+{
+ struct osmo_ss7_asp_peer peer;
+ int rc;
+ char buf[1024];
+
+ const char *hosts[] = {
+ "127.0.0.1", "::1"
+ };
+
+ ss7_asp_peer_init(&peer);
+
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ OSMO_ASSERT(peer.idx_primary == -1);
+
+ peer.port = 2905;
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, hosts[0], false) == false);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, hosts[1], true) == false);
+
+ rc = ss7_asp_peer_set_hosts2(&peer, s7i, hosts, ARRAY_SIZE(hosts), 0);
+ OSMO_ASSERT(rc == 0);
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ OSMO_ASSERT(peer.host_cnt == 2);
+ OSMO_ASSERT(peer.idx_primary == 0);
+
+ OSMO_ASSERT(ss7_asp_peer_find_host(&peer, hosts[0]) == 0);
+ OSMO_ASSERT(ss7_asp_peer_find_host(&peer, hosts[1]) == 1);
+ OSMO_ASSERT(ss7_asp_peer_find_host(&peer, "127.0.0.2") < 0);
+ OSMO_ASSERT(ss7_asp_peer_find_host(&peer, "::2") < 0);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, hosts[0], false) == true);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, hosts[1], true) == true);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, "127.0.0.2", false) == false);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, "::2", true) == false);
+
+ /* These should be no-op since the addresses are already there:*/
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, hosts[0], true) == 0);
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, hosts[1], false) == 0);
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ OSMO_ASSERT(peer.host_cnt == 2);
+ OSMO_ASSERT(peer.idx_primary == 0);
+
+ /* This removes the primary from idx=0: */
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, hosts[0], false) == 0);
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ OSMO_ASSERT(peer.host_cnt == 2);
+ OSMO_ASSERT(peer.idx_primary == -1);
+
+ /* This adds the primary to idx=1: */
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, hosts[1], true) == 0);
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ OSMO_ASSERT(peer.host_cnt == 2);
+ OSMO_ASSERT(peer.idx_primary == 1);
+
+ OSMO_ASSERT(ss7_asp_peer_del_host(&peer, "127.0.0.1") == 0);
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ /* Validate the items in the array moved: */
+ OSMO_ASSERT(ss7_asp_peer_find_host(&peer, "::1") == 0);
+ OSMO_ASSERT(peer.host_cnt == 1);
+ OSMO_ASSERT(peer.idx_primary == 0);
+
+ /* Adding an ANY_ADDR should fail, because there's already a specific address: */
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, "0.0.0.0", false) == -EINVAL);
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, "::", false) == -EINVAL);
+ OSMO_ASSERT(peer.host_cnt == 1);
+ OSMO_ASSERT(peer.idx_primary == 0);
+
+ OSMO_ASSERT(ss7_asp_peer_del_host(&peer, "::1") == 0);
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ OSMO_ASSERT(peer.host_cnt == 0);
+ OSMO_ASSERT(peer.idx_primary == -1);
+
+ /* Test IPv4 ANY_ADDR */
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, "0.0.0.0", false) == 0);
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ OSMO_ASSERT(peer.host_cnt == 1);
+ OSMO_ASSERT(peer.idx_primary == -1);
+ OSMO_ASSERT(ss7_asp_peer_find_host(&peer, "0.0.0.0") == 0);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, "0.0.0.0", false) == true);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, "127.0.0.2", false) == true);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, "::2", true) == false);
+
+ /* Adding an ANY_ADDR again should fail (be it IPv4 or IPv6), because there's already a specific address: */
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, "0.0.0.0", false) == -EINVAL);
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, "::", false) == -EINVAL);
+ OSMO_ASSERT(peer.host_cnt == 1);
+ OSMO_ASSERT(peer.idx_primary == -1);
+
+ OSMO_ASSERT(ss7_asp_peer_del_host(&peer, "0.0.0.0") == 0);
+ OSMO_ASSERT(peer.host_cnt == 0);
+ OSMO_ASSERT(peer.idx_primary == -1);
+
+ /* Test IPv6 ANY_ADDR */
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, "::", false) == 0);
+ OSMO_ASSERT(ss7_asp_peer_snprintf(buf, sizeof(buf), &peer) > 0);
+ printf("ss7_asp_peer_snprintf: %s\n", buf);
+ OSMO_ASSERT(peer.host_cnt == 1);
+ OSMO_ASSERT(peer.idx_primary == -1);
+ OSMO_ASSERT(ss7_asp_peer_find_host(&peer, "::") == 0);
+ OSMO_ASSERT(ss7_asp_peer_find_host(&peer, "0.0.0.0") < 0);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, "0.0.0.0", false) == true);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, "127.0.0.2", false) == true);
+ OSMO_ASSERT(ss7_asp_peer_match_host(&peer, "::2", true) == true);
+
+ /* Adding an ANY_ADDR again should fail (be it IPv4 or IPv6), because there's already a specific address: */
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, "0.0.0.0", false) == -EINVAL);
+ OSMO_ASSERT(ss7_asp_peer_add_host2(&peer, s7i, "::", false) == -EINVAL);
+ OSMO_ASSERT(peer.host_cnt == 1);
+ OSMO_ASSERT(peer.idx_primary == -1);
+
+ OSMO_ASSERT(ss7_asp_peer_del_host(&peer, "::") == 0);
+ OSMO_ASSERT(peer.host_cnt == 0);
+ OSMO_ASSERT(peer.idx_primary == -1);
+}
+
/***********************************************************************
* Initialization
***********************************************************************/
@@ -369,6 +494,7 @@
test_route();
test_linkset();
test_as();
+ test_asp_peer();
/* destroy */
osmo_ss7_instance_destroy(s7i);
diff --git a/tests/ss7/ss7_test.ok b/tests/ss7/ss7_test.ok
index 1f8c0d8..532d6f0 100644
--- a/tests/ss7/ss7_test.ok
+++ b/tests/ss7/ss7_test.ok
@@ -28,3 +28,13 @@
route with partial mask: 0.1.0/11
route with non-consecutive mask: 0.1.0/7.255.1
Testing SS7 linkset/link
+ss7_asp_peer_snprintf: :0
+ss7_asp_peer_snprintf: :2905
+ss7_asp_peer_snprintf: (127.0.0.1*|::1):2905
+ss7_asp_peer_snprintf: (127.0.0.1*|::1):2905
+ss7_asp_peer_snprintf: (127.0.0.1|::1):2905
+ss7_asp_peer_snprintf: (127.0.0.1|::1*):2905
+ss7_asp_peer_snprintf: ::1*:2905
+ss7_asp_peer_snprintf: :2905
+ss7_asp_peer_snprintf: 0.0.0.0:2905
+ss7_asp_peer_snprintf: :::2905
To view, visit change 43796. To unsubscribe, or for help writing mail filters, visit settings.