<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12226">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add tests for IMSI ACLs<br><br>Change-Id: Ia782f12b49bed6428bc9b9f513237e4e6aefdec9<br>---<br>M tests/sgsn/sgsn_test.c<br>M tests/sgsn/sgsn_test.ok<br>2 files changed, 115 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/26/12226/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/sgsn/sgsn_test.c b/tests/sgsn/sgsn_test.c</span><br><span>index 4c0dc00..21bff5c 100644</span><br><span>--- a/tests/sgsn/sgsn_test.c</span><br><span>+++ b/tests/sgsn/sgsn_test.c</span><br><span>@@ -1337,6 +1337,108 @@</span><br><span> cleanup_test();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static bool add_check_acl(const char *imsi, struct sgsn_config *cfg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct imsi_acl_entry *e;</span><br><span style="color: hsl(120, 100%, 40%);">+ size_t old = sgsn_acl_count(cfg), new;</span><br><span style="color: hsl(120, 100%, 40%);">+ int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("[%zu] Adding ACL %s [%zu]... ", old, imsi, strlen(imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = sgsn_acl_add(imsi, cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+ new = sgsn_acl_count(cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("failed to add acl %s, total entries %zu\n", imsi, new);</span><br><span style="color: hsl(120, 100%, 40%);">+ return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (new - old != 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("failed to add acl %s: incorrect number of total entries %zu\n", imsi, new);</span><br><span style="color: hsl(120, 100%, 40%);">+ return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ e = sgsn_acl_lookup(imsi, cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (e)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("added as %s [%zu], total entries %zu\n", e->imsi, strlen(e->imsi), new);</span><br><span style="color: hsl(120, 100%, 40%);">+ else {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("failed to obtain added %s entry, total entries %zu\n", imsi, new);</span><br><span style="color: hsl(120, 100%, 40%);">+ return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return true;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static bool del_check_acl(const char *imsi, struct sgsn_config *cfg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ size_t old = sgsn_acl_count(cfg), new;</span><br><span style="color: hsl(120, 100%, 40%);">+ int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("[%zu] Removing ACL %s... ", old, imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = sgsn_acl_del(imsi, cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+ new = sgsn_acl_count(cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("failed to remove acl %s, total entries %zu\n", imsi, sgsn_acl_count(cfg));</span><br><span style="color: hsl(120, 100%, 40%);">+ if (new != old)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("\tincorrect number of total entries %zu\n", new);</span><br><span style="color: hsl(120, 100%, 40%);">+ return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (old - new != 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("failed to remove acl %s: incorrect number of total entries %zu\n", imsi, new);</span><br><span style="color: hsl(120, 100%, 40%);">+ return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("OK, total entries %zu\n", new);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return true;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void test_imsi_acl(struct sgsn_config *cfg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Testing IMSI ACLs\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* add short IMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!add_check_acl("1010000000016", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* add complete IMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!add_check_acl("001010000000011", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!add_check_acl("001010000000012", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!add_check_acl("001010000000013", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* delete non-existent - should fail: */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (del_check_acl("666010000000012", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* delete existent short */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!del_check_acl("1010000000016", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* delete existent complete */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!del_check_acl("001010000000012", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!del_check_acl("001010000000011", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!del_check_acl("001010000000013", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* double-delete - should fail: */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (del_check_acl("001010000000013", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* add long IMSI - should fail: */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (add_check_acl("00101002222222222222222200000011", cfg))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ cleanup_test();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void test_apn_matching(void)</span><br><span> {</span><br><span> struct apn_ctx *actx, *actxs[9];</span><br><span>@@ -1660,6 +1762,7 @@</span><br><span> test_gmm_cancel();</span><br><span> test_apn_matching();</span><br><span> test_ggsn_selection();</span><br><span style="color: hsl(120, 100%, 40%);">+ test_imsi_acl(&sgsn->cfg);</span><br><span> printf("Done\n");</span><br><span> </span><br><span> talloc_report_full(osmo_sgsn_ctx, stderr);</span><br><span>diff --git a/tests/sgsn/sgsn_test.ok b/tests/sgsn/sgsn_test.ok</span><br><span>index e7e7cf6..3d63a63 100644</span><br><span>--- a/tests/sgsn/sgsn_test.ok</span><br><span>+++ b/tests/sgsn/sgsn_test.ok</span><br><span>@@ -24,4 +24,16 @@</span><br><span> Testing cancellation</span><br><span> Testing APN matching</span><br><span> Testing GGSN selection</span><br><span style="color: hsl(120, 100%, 40%);">+Testing IMSI ACLs</span><br><span style="color: hsl(120, 100%, 40%);">+[0] Adding ACL 1010000000016 [13]... added as 1010000000016 [13], total entries 1</span><br><span style="color: hsl(120, 100%, 40%);">+[1] Adding ACL 001010000000011 [15]... added as 001010000000011 [15], total entries 2</span><br><span style="color: hsl(120, 100%, 40%);">+[2] Adding ACL 001010000000012 [15]... added as 001010000000012 [15], total entries 3</span><br><span style="color: hsl(120, 100%, 40%);">+[3] Adding ACL 001010000000013 [15]... added as 001010000000013 [15], total entries 4</span><br><span style="color: hsl(120, 100%, 40%);">+[4] Removing ACL 666010000000012... failed to remove acl 666010000000012, total entries 4</span><br><span style="color: hsl(120, 100%, 40%);">+[4] Removing ACL 1010000000016... OK, total entries 3</span><br><span style="color: hsl(120, 100%, 40%);">+[3] Removing ACL 001010000000012... OK, total entries 2</span><br><span style="color: hsl(120, 100%, 40%);">+[2] Removing ACL 001010000000011... OK, total entries 1</span><br><span style="color: hsl(120, 100%, 40%);">+[1] Removing ACL 001010000000013... OK, total entries 0</span><br><span style="color: hsl(120, 100%, 40%);">+[0] Removing ACL 001010000000013... failed to remove acl 001010000000013, total entries 0</span><br><span style="color: hsl(120, 100%, 40%);">+[0] Adding ACL 00101002222222222222222200000011 [32]... failed to obtain added 00101002222222222222222200000011 entry, total entries 1</span><br><span> Done</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12226">change 12226</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/12226"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-sgsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ia782f12b49bed6428bc9b9f513237e4e6aefdec9 </div>
<div style="display:none"> Gerrit-Change-Number: 12226 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>