<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>