<p>neels <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-hlr/+/15913">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve
  osmith: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add db_upgrade test<br><br>We have a database schema upgrade path, but so far nothing that verifies that<br>we don't break it. It almost seems like the user data weren't important to us!?<br><br>Add a db upgrade test:<br>- Create a db with an .sql dump taken from a db created with an old osmo-hlr,<br>  producing DB schema version 0.<br>- Run osmo-hlr --db-upgrade --db-check<br>- Verify that the upgrade exited successfully.<br>- Verify that restarting with the upgraded DB works.<br><br>If python tests are enabled, also:<br>- create a new database using the new osmo-hlr (just built).<br>- replay a VTY transcript to create subscribers as in the old snapshot.<br>- replay some sql modifications as done in the old snapshot.<br>- Get a list of sorted table names,<br>- a list of their sorted columns with all their properties,<br>- and dump the table contents in a column- and value-sorted way.<br>- Compare the resulting dumps and error if there are any diffs.<br>(This is how I found the difference in the imei column that was fixed in<br>I68a00014a3d603fcba8781470bc5285f78b538d0)<br><br>Change-Id: I0961bab0e17cfde5b030576c5bc243c2b51d9dc4<br>---<br>M configure.ac<br>M tests/Makefile.am<br>A tests/db_upgrade/Makefile.am<br>A tests/db_upgrade/create_subscribers.vty<br>A tests/db_upgrade/create_subscribers_step2.sql<br>A tests/db_upgrade/db_upgrade_test.err<br>A tests/db_upgrade/db_upgrade_test.ok<br>A tests/db_upgrade/db_upgrade_test.sh<br>A tests/db_upgrade/hlr_db_v0.sql<br>A tests/db_upgrade/osmo-hlr.cfg<br>M tests/testsuite.at<br>11 files changed, 417 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/configure.ac b/configure.ac</span><br><span>index 993d4d5..ca78f38 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -186,4 +186,5 @@</span><br><span>   tests/gsup_server/Makefile</span><br><span>   tests/gsup/Makefile</span><br><span>  tests/db/Makefile</span><br><span style="color: hsl(120, 100%, 40%);">+     tests/db_upgrade/Makefile</span><br><span>    )</span><br><span>diff --git a/tests/Makefile.am b/tests/Makefile.am</span><br><span>index 4da8ab1..357fbac 100644</span><br><span>--- a/tests/Makefile.am</span><br><span>+++ b/tests/Makefile.am</span><br><span>@@ -3,6 +3,7 @@</span><br><span>         gsup_server \</span><br><span>        db \</span><br><span>         gsup \</span><br><span style="color: hsl(120, 100%, 40%);">+        db_upgrade \</span><br><span>         $(NULL)</span><br><span> </span><br><span> # The `:;' works around a Bash 3.2 bug when the output is not writeable.</span><br><span>@@ -44,6 +45,7 @@</span><br><span> # don't run vty and ctrl tests concurrently so that the ports don't conflict</span><br><span>      $(MAKE) vty-test</span><br><span>     $(MAKE) ctrl-test</span><br><span style="color: hsl(120, 100%, 40%);">+     $(MAKE) db-upgrade-equivalence-test</span><br><span> else</span><br><span> python-tests:</span><br><span>         echo "Not running python-based external tests (determined at configure-time)"</span><br><span>@@ -81,6 +83,9 @@</span><br><span>  -rm -f $(CTRL_TEST_DB)</span><br><span>       -rm $(CTRL_TEST_DB)-*</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+db-upgrade-equivalence-test:</span><br><span style="color: hsl(120, 100%, 40%);">+       $(MAKE) -C db_upgrade upgrade-equivalence-test</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> check-local: atconfig $(TESTSUITE)</span><br><span>       $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)</span><br><span>    $(MAKE) $(AM_MAKEFLAGS) python-tests</span><br><span>diff --git a/tests/db_upgrade/Makefile.am b/tests/db_upgrade/Makefile.am</span><br><span>new file mode 100644</span><br><span>index 0000000..79136c9</span><br><span>--- /dev/null</span><br><span>+++ b/tests/db_upgrade/Makefile.am</span><br><span>@@ -0,0 +1,14 @@</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_DIST = \</span><br><span style="color: hsl(120, 100%, 40%);">+       db_upgrade_test.sh \</span><br><span style="color: hsl(120, 100%, 40%);">+  db_upgrade_test.err \</span><br><span style="color: hsl(120, 100%, 40%);">+ db_upgrade_test.ok \</span><br><span style="color: hsl(120, 100%, 40%);">+  hlr_db_v0.sql \</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo-hlr.cfg \</span><br><span style="color: hsl(120, 100%, 40%);">+        create_subscribers.vty \</span><br><span style="color: hsl(120, 100%, 40%);">+      $(NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+update_exp:</span><br><span style="color: hsl(120, 100%, 40%);">+        $(srcdir)/db_upgrade_test.sh $(srcdir) $(builddir) >"$(srcdir)/db_upgrade_test.ok" 2>"$(srcdir)/db_upgrade_test.err"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+upgrade-equivalence-test:</span><br><span style="color: hsl(120, 100%, 40%);">+   $(srcdir)/db_upgrade_test.sh $(srcdir) $(builddir) do-equivalence-test</span><br><span>diff --git a/tests/db_upgrade/create_subscribers.vty b/tests/db_upgrade/create_subscribers.vty</span><br><span>new file mode 100644</span><br><span>index 0000000..30eeba6</span><br><span>--- /dev/null</span><br><span>+++ b/tests/db_upgrade/create_subscribers.vty</span><br><span>@@ -0,0 +1,47 @@</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR> enable</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 123456789012345 create</span><br><span style="color: hsl(120, 100%, 40%);">+% Created subscriber 123456789012345</span><br><span style="color: hsl(120, 100%, 40%);">+    ID: 1</span><br><span style="color: hsl(120, 100%, 40%);">+    IMSI: 123456789012345</span><br><span style="color: hsl(120, 100%, 40%);">+    MSISDN: none</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 123456789012345 update msisdn 098765432109876</span><br><span style="color: hsl(120, 100%, 40%);">+% Updated subscriber IMSI='123456789012345' to MSISDN='098765432109876'</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 123456789012345 update aud2g comp128v1 ki BeefedCafeFaceAcedAddedDecadeFee</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 123456789012345 update aud3g milenage k C01ffedC1cadaeAc1d1f1edAcac1aB0a opc CededEffacedAceFacedBadFadedBeef</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 111111111 create</span><br><span style="color: hsl(120, 100%, 40%);">+% Created subscriber 111111111</span><br><span style="color: hsl(120, 100%, 40%);">+    ID: 2</span><br><span style="color: hsl(120, 100%, 40%);">+    IMSI: 111111111</span><br><span style="color: hsl(120, 100%, 40%);">+    MSISDN: none</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 222222222 create</span><br><span style="color: hsl(120, 100%, 40%);">+% Created subscriber 222222222</span><br><span style="color: hsl(120, 100%, 40%);">+    ID: 3</span><br><span style="color: hsl(120, 100%, 40%);">+    IMSI: 222222222</span><br><span style="color: hsl(120, 100%, 40%);">+    MSISDN: none</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 222222222 update msisdn 22222</span><br><span style="color: hsl(120, 100%, 40%);">+% Updated subscriber IMSI='222222222' to MSISDN='22222'</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 333333 create</span><br><span style="color: hsl(120, 100%, 40%);">+% Created subscriber 333333</span><br><span style="color: hsl(120, 100%, 40%);">+    ID: 4</span><br><span style="color: hsl(120, 100%, 40%);">+    IMSI: 333333</span><br><span style="color: hsl(120, 100%, 40%);">+    MSISDN: none</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 333333 update msisdn 3</span><br><span style="color: hsl(120, 100%, 40%);">+% Updated subscriber IMSI='333333' to MSISDN='3'</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 333333 update aud2g comp128v2 ki 33333333333333333333333333333333</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 444444444444444 create</span><br><span style="color: hsl(120, 100%, 40%);">+% Created subscriber 444444444444444</span><br><span style="color: hsl(120, 100%, 40%);">+    ID: 5</span><br><span style="color: hsl(120, 100%, 40%);">+    IMSI: 444444444444444</span><br><span style="color: hsl(120, 100%, 40%);">+    MSISDN: none</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 444444444444444 update msisdn 4444</span><br><span style="color: hsl(120, 100%, 40%);">+% Updated subscriber IMSI='444444444444444' to MSISDN='4444'</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 444444444444444 update aud3g milenage k 44444444444444444444444444444444 op 44444444444444444444444444444444</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 5555555 create</span><br><span style="color: hsl(120, 100%, 40%);">+% Created subscriber 5555555</span><br><span style="color: hsl(120, 100%, 40%);">+    ID: 6</span><br><span style="color: hsl(120, 100%, 40%);">+    IMSI: 5555555</span><br><span style="color: hsl(120, 100%, 40%);">+    MSISDN: none</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 5555555 update msisdn 55555555555555</span><br><span style="color: hsl(120, 100%, 40%);">+% Updated subscriber IMSI='5555555' to MSISDN='55555555555555'</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 5555555 update aud2g xor ki 55555555555555555555555555555555</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoHLR# subscriber imsi 5555555 update aud3g milenage k 55555555555555555555555555555555 opc 55555555555555555555555555555555</span><br><span>diff --git a/tests/db_upgrade/create_subscribers_step2.sql b/tests/db_upgrade/create_subscribers_step2.sql</span><br><span>new file mode 100644</span><br><span>index 0000000..7933e25</span><br><span>--- /dev/null</span><br><span>+++ b/tests/db_upgrade/create_subscribers_step2.sql</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+update subscriber set vlr_number = 'MSC-1' where id = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+update subscriber set ms_purged_cs = 1 where id = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+update subscriber set ms_purged_ps = 1 where id = 3;</span><br><span style="color: hsl(120, 100%, 40%);">+update subscriber set nam_cs = 0 where id = 4;</span><br><span style="color: hsl(120, 100%, 40%);">+update subscriber set nam_ps = 0 where id = 5;</span><br><span style="color: hsl(120, 100%, 40%);">+update subscriber set nam_cs = 0, nam_ps = 0 where id = 6;</span><br><span>diff --git a/tests/db_upgrade/db_upgrade_test.err b/tests/db_upgrade/db_upgrade_test.err</span><br><span>new file mode 100644</span><br><span>index 0000000..e69de29</span><br><span>--- /dev/null</span><br><span>+++ b/tests/db_upgrade/db_upgrade_test.err</span><br><span>diff --git a/tests/db_upgrade/db_upgrade_test.ok b/tests/db_upgrade/db_upgrade_test.ok</span><br><span>new file mode 100644</span><br><span>index 0000000..bce3eb4</span><br><span>--- /dev/null</span><br><span>+++ b/tests/db_upgrade/db_upgrade_test.ok</span><br><span>@@ -0,0 +1,168 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Creating db in schema version 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Version 0 db:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: auc_2g</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+algo_id_2g|INTEGER|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+ki|VARCHAR(32)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber_id|INTEGER|0||1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table auc_2g contents:</span><br><span style="color: hsl(120, 100%, 40%);">+algo_id_2g|ki|subscriber_id</span><br><span style="color: hsl(120, 100%, 40%);">+1|BeefedCafeFaceAcedAddedDecadeFee|1</span><br><span style="color: hsl(120, 100%, 40%);">+2|33333333333333333333333333333333|4</span><br><span style="color: hsl(120, 100%, 40%);">+4|55555555555555555555555555555555|6</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: auc_3g</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+algo_id_3g|INTEGER|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+ind_bitlen|INTEGER|1|5|0</span><br><span style="color: hsl(120, 100%, 40%);">+k|VARCHAR(32)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+op|VARCHAR(32)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+opc|VARCHAR(32)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+sqn|INTEGER|1|0|0</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber_id|INTEGER|0||1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table auc_3g contents:</span><br><span style="color: hsl(120, 100%, 40%);">+algo_id_3g|ind_bitlen|k|op|opc|sqn|subscriber_id</span><br><span style="color: hsl(120, 100%, 40%);">+5|5|C01ffedC1cadaeAc1d1f1edAcac1aB0a||CededEffacedAceFacedBadFadedBeef|0|1</span><br><span style="color: hsl(120, 100%, 40%);">+5|5|44444444444444444444444444444444|44444444444444444444444444444444||0|5</span><br><span style="color: hsl(120, 100%, 40%);">+5|5|55555555555555555555555555555555||55555555555555555555555555555555|0|6</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: subscriber</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+ggsn_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+gmlc_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+hlr_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+id|INTEGER|0||1</span><br><span style="color: hsl(120, 100%, 40%);">+imeisv|VARCHAR|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+imsi|VARCHAR(15)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+lmsi|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+ms_purged_cs|BOOLEAN|1|0|0</span><br><span style="color: hsl(120, 100%, 40%);">+ms_purged_ps|BOOLEAN|1|0|0</span><br><span style="color: hsl(120, 100%, 40%);">+msisdn|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+nam_cs|BOOLEAN|1|1|0</span><br><span style="color: hsl(120, 100%, 40%);">+nam_ps|BOOLEAN|1|1|0</span><br><span style="color: hsl(120, 100%, 40%);">+periodic_lu_tmr|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+periodic_rau_tau_tmr|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+sgsn_address|VARCHAR|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+sgsn_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+smsc_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+vlr_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table subscriber contents:</span><br><span style="color: hsl(120, 100%, 40%);">+ggsn_number|gmlc_number|hlr_number|id|imeisv|imsi|lmsi|ms_purged_cs|ms_purged_ps|msisdn|nam_cs|nam_ps|periodic_lu_tmr|periodic_rau_tau_tmr|sgsn_address|sgsn_number|smsc_number|vlr_number</span><br><span style="color: hsl(120, 100%, 40%);">+|||1||123456789012345||0|0|098765432109876|1|1||||||MSC-1</span><br><span style="color: hsl(120, 100%, 40%);">+|||2||111111111||1|0||1|1||||||</span><br><span style="color: hsl(120, 100%, 40%);">+|||3||222222222||0|1|22222|1|1||||||</span><br><span style="color: hsl(120, 100%, 40%);">+|||4||333333||0|0|3|0|1||||||</span><br><span style="color: hsl(120, 100%, 40%);">+|||5||444444444444444||0|0|4444|1|0||||||</span><br><span style="color: hsl(120, 100%, 40%);">+|||6||5555555||0|0|55555555555555|0|0||||||</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: subscriber_apn</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+apn|VARCHAR(256)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber_id|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table subscriber_apn contents:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: subscriber_multi_msisdn</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+msisdn|VARCHAR(15)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber_id|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table subscriber_multi_msisdn contents:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Launching osmo-hlr to upgrade db:</span><br><span style="color: hsl(120, 100%, 40%);">+osmo-hlr --database $db --db-upgrade --db-check --config-file $srcdir/osmo-hlr.cfg</span><br><span style="color: hsl(120, 100%, 40%);">+rc = 0</span><br><span style="color: hsl(120, 100%, 40%);">+DMAIN hlr starting</span><br><span style="color: hsl(120, 100%, 40%);">+DDB using database: <PATH>test.db</span><br><span style="color: hsl(120, 100%, 40%);">+DDB Database <PATH>test.db' has HLR DB schema version 0</span><br><span style="color: hsl(120, 100%, 40%);">+DDB Database <PATH>test.db' has been upgraded to HLR DB schema version 2</span><br><span style="color: hsl(120, 100%, 40%);">+DMAIN Cmdline option --db-check: Database was opened successfully, quitting.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Resulting db:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: auc_2g</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+algo_id_2g|INTEGER|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+ki|VARCHAR(32)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber_id|INTEGER|0||1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table auc_2g contents:</span><br><span style="color: hsl(120, 100%, 40%);">+algo_id_2g|ki|subscriber_id</span><br><span style="color: hsl(120, 100%, 40%);">+1|BeefedCafeFaceAcedAddedDecadeFee|1</span><br><span style="color: hsl(120, 100%, 40%);">+2|33333333333333333333333333333333|4</span><br><span style="color: hsl(120, 100%, 40%);">+4|55555555555555555555555555555555|6</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: auc_3g</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+algo_id_3g|INTEGER|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+ind_bitlen|INTEGER|1|5|0</span><br><span style="color: hsl(120, 100%, 40%);">+k|VARCHAR(32)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+op|VARCHAR(32)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+opc|VARCHAR(32)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+sqn|INTEGER|1|0|0</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber_id|INTEGER|0||1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table auc_3g contents:</span><br><span style="color: hsl(120, 100%, 40%);">+algo_id_3g|ind_bitlen|k|op|opc|sqn|subscriber_id</span><br><span style="color: hsl(120, 100%, 40%);">+5|5|C01ffedC1cadaeAc1d1f1edAcac1aB0a||CededEffacedAceFacedBadFadedBeef|0|1</span><br><span style="color: hsl(120, 100%, 40%);">+5|5|44444444444444444444444444444444|44444444444444444444444444444444||0|5</span><br><span style="color: hsl(120, 100%, 40%);">+5|5|55555555555555555555555555555555||55555555555555555555555555555555|0|6</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: subscriber</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+ggsn_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+gmlc_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+hlr_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+id|INTEGER|0||1</span><br><span style="color: hsl(120, 100%, 40%);">+imei|VARCHAR(14)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+imeisv|VARCHAR|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+imsi|VARCHAR(15)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+last_lu_seen|TIMESTAMP|0|NULL|0</span><br><span style="color: hsl(120, 100%, 40%);">+lmsi|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+ms_purged_cs|BOOLEAN|1|0|0</span><br><span style="color: hsl(120, 100%, 40%);">+ms_purged_ps|BOOLEAN|1|0|0</span><br><span style="color: hsl(120, 100%, 40%);">+msisdn|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+nam_cs|BOOLEAN|1|1|0</span><br><span style="color: hsl(120, 100%, 40%);">+nam_ps|BOOLEAN|1|1|0</span><br><span style="color: hsl(120, 100%, 40%);">+periodic_lu_tmr|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+periodic_rau_tau_tmr|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+sgsn_address|VARCHAR|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+sgsn_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+smsc_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+vlr_number|VARCHAR(15)|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table subscriber contents:</span><br><span style="color: hsl(120, 100%, 40%);">+ggsn_number|gmlc_number|hlr_number|id|imei|imeisv|imsi|last_lu_seen|lmsi|ms_purged_cs|ms_purged_ps|msisdn|nam_cs|nam_ps|periodic_lu_tmr|periodic_rau_tau_tmr|sgsn_address|sgsn_number|smsc_number|vlr_number</span><br><span style="color: hsl(120, 100%, 40%);">+|||1|||123456789012345|||0|0|098765432109876|1|1||||||MSC-1</span><br><span style="color: hsl(120, 100%, 40%);">+|||2|||111111111|||1|0||1|1||||||</span><br><span style="color: hsl(120, 100%, 40%);">+|||3|||222222222|||0|1|22222|1|1||||||</span><br><span style="color: hsl(120, 100%, 40%);">+|||4|||333333|||0|0|3|0|1||||||</span><br><span style="color: hsl(120, 100%, 40%);">+|||5|||444444444444444|||0|0|4444|1|0||||||</span><br><span style="color: hsl(120, 100%, 40%);">+|||6|||5555555|||0|0|55555555555555|0|0||||||</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: subscriber_apn</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+apn|VARCHAR(256)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber_id|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table subscriber_apn contents:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table: subscriber_multi_msisdn</span><br><span style="color: hsl(120, 100%, 40%);">+name|type|notnull|dflt_value|pk</span><br><span style="color: hsl(120, 100%, 40%);">+msisdn|VARCHAR(15)|1||0</span><br><span style="color: hsl(120, 100%, 40%);">+subscriber_id|INTEGER|0||0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Table subscriber_multi_msisdn contents:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Verify that osmo-hlr can open it:</span><br><span style="color: hsl(120, 100%, 40%);">+osmo-hlr --database $db --db-check --config-file $srcdir/osmo-hlr.cfg</span><br><span style="color: hsl(120, 100%, 40%);">+rc = 0</span><br><span style="color: hsl(120, 100%, 40%);">+DMAIN hlr starting</span><br><span style="color: hsl(120, 100%, 40%);">+DDB using database: <PATH>test.db</span><br><span style="color: hsl(120, 100%, 40%);">+DDB Database <PATH>test.db' has HLR DB schema version 2</span><br><span style="color: hsl(120, 100%, 40%);">+DMAIN Cmdline option --db-check: Database was opened successfully, quitting.</span><br><span>diff --git a/tests/db_upgrade/db_upgrade_test.sh b/tests/db_upgrade/db_upgrade_test.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..bf56c56</span><br><span>--- /dev/null</span><br><span>+++ b/tests/db_upgrade/db_upgrade_test.sh</span><br><span>@@ -0,0 +1,83 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/sh</span><br><span style="color: hsl(120, 100%, 40%);">+srcdir="${1:-.}"</span><br><span style="color: hsl(120, 100%, 40%);">+builddir="${2:-.}"</span><br><span style="color: hsl(120, 100%, 40%);">+do_equivalence_test="$3"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+set -e</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+db="$builddir/test.db"</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_hlr="$builddir/../../src/osmo-hlr"</span><br><span style="color: hsl(120, 100%, 40%);">+cfg="$srcdir/osmo-hlr.cfg"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+dump_sorted_schema(){</span><br><span style="color: hsl(120, 100%, 40%);">+    db_file="$1"</span><br><span style="color: hsl(120, 100%, 40%);">+        tables="$(sqlite3 "$db_file" "SELECT name FROM sqlite_master WHERE type = 'table' order by name")"</span><br><span style="color: hsl(120, 100%, 40%);">+      for table in $tables; do</span><br><span style="color: hsl(120, 100%, 40%);">+              echo</span><br><span style="color: hsl(120, 100%, 40%);">+          echo "Table: $table"</span><br><span style="color: hsl(120, 100%, 40%);">+                sqlite3 -header "$db_file" "SELECT name,type,\"notnull\",dflt_value,pk FROM PRAGMA_TABLE_INFO('$table') order by name;"</span><br><span style="color: hsl(120, 100%, 40%);">+         echo</span><br><span style="color: hsl(120, 100%, 40%);">+          echo "Table $table contents:"</span><br><span style="color: hsl(120, 100%, 40%);">+               columns="$(sqlite3 "$db_file" "SELECT name FROM PRAGMA_TABLE_INFO('$table') order by name;")"</span><br><span style="color: hsl(120, 100%, 40%);">+           sqlite3 -header "$db_file" "SELECT $(echo $columns | sed 's/ /,/g') from $table;"</span><br><span style="color: hsl(120, 100%, 40%);">+ done</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%);">+rm -f "$db"</span><br><span style="color: hsl(120, 100%, 40%);">+echo "Creating db in schema version 0"</span><br><span style="color: hsl(120, 100%, 40%);">+sqlite3 "$db" < "$srcdir/hlr_db_v0.sql"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+echo</span><br><span style="color: hsl(120, 100%, 40%);">+echo "Version 0 db:"</span><br><span style="color: hsl(120, 100%, 40%);">+dump_sorted_schema "$db"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+set +e</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+echo</span><br><span style="color: hsl(120, 100%, 40%);">+echo "Launching osmo-hlr to upgrade db:"</span><br><span style="color: hsl(120, 100%, 40%);">+echo osmo-hlr --database '$db' --db-upgrade --db-check --config-file '$srcdir/osmo-hlr.cfg'</span><br><span style="color: hsl(120, 100%, 40%);">+"$osmo_hlr" --database "$db" --db-upgrade --db-check --config-file "$cfg" >log 2>&1</span><br><span style="color: hsl(120, 100%, 40%);">+echo "rc = $?"</span><br><span style="color: hsl(120, 100%, 40%);">+cat log | sed 's@[^ "]*/@<PATH>@g'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+echo</span><br><span style="color: hsl(120, 100%, 40%);">+echo "Resulting db:"</span><br><span style="color: hsl(120, 100%, 40%);">+dump_sorted_schema "$db"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+echo</span><br><span style="color: hsl(120, 100%, 40%);">+echo "Verify that osmo-hlr can open it:"</span><br><span style="color: hsl(120, 100%, 40%);">+echo osmo-hlr --database '$db' --db-check --config-file '$srcdir/osmo-hlr.cfg'</span><br><span style="color: hsl(120, 100%, 40%);">+"$osmo_hlr" --database "$db" --db-check --config-file "$cfg" >log 2>&1</span><br><span style="color: hsl(120, 100%, 40%);">+echo "rc = $?"</span><br><span style="color: hsl(120, 100%, 40%);">+cat log | sed 's@[^ "]*/@<PATH>@g'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if [ -n "$do_equivalence_test" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+  # this part requires osmo_interact_vty.py, so this test is not part of the normal run</span><br><span style="color: hsl(120, 100%, 40%);">+ set -e -x</span><br><span style="color: hsl(120, 100%, 40%);">+     mint_db="$builddir/mint.db"</span><br><span style="color: hsl(120, 100%, 40%);">+ rm -f "$mint_db"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_verify_transcript_vty.py -v \</span><br><span style="color: hsl(120, 100%, 40%);">+            -n OsmoHLR -p 4258 \</span><br><span style="color: hsl(120, 100%, 40%);">+          -r "$osmo_hlr -c $cfg -l $mint_db" \</span><br><span style="color: hsl(120, 100%, 40%);">+                "$srcdir/create_subscribers.vty"</span><br><span style="color: hsl(120, 100%, 40%);">+    sqlite3 "$mint_db" < "$srcdir/create_subscribers_step2.sql"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  set +x</span><br><span style="color: hsl(120, 100%, 40%);">+        test_dump="$builddir/test.dump"</span><br><span style="color: hsl(120, 100%, 40%);">+     mint_dump="$builddir/mint.dump"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   dump_sorted_schema "$db" > "$test_dump"</span><br><span style="color: hsl(120, 100%, 40%);">+        dump_sorted_schema "$mint_db" > "$mint_dump"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ echo</span><br><span style="color: hsl(120, 100%, 40%);">+  echo "Newly created sorted schema is:"</span><br><span style="color: hsl(120, 100%, 40%);">+      cat "$mint_dump"</span><br><span style="color: hsl(120, 100%, 40%);">+    echo</span><br><span style="color: hsl(120, 100%, 40%);">+  echo "Diff to upgraded schema:"</span><br><span style="color: hsl(120, 100%, 40%);">+     diff -u "$mint_dump" "$test_dump"</span><br><span style="color: hsl(120, 100%, 40%);">+ echo "rc=$?"</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+rm -f log</span><br><span style="color: hsl(120, 100%, 40%);">+rm -f "$db"</span><br><span>diff --git a/tests/db_upgrade/hlr_db_v0.sql b/tests/db_upgrade/hlr_db_v0.sql</span><br><span>new file mode 100644</span><br><span>index 0000000..46c985d</span><br><span>--- /dev/null</span><br><span>+++ b/tests/db_upgrade/hlr_db_v0.sql</span><br><span>@@ -0,0 +1,80 @@</span><br><span style="color: hsl(120, 100%, 40%);">+PRAGMA foreign_keys=OFF;</span><br><span style="color: hsl(120, 100%, 40%);">+BEGIN TRANSACTION;</span><br><span style="color: hsl(120, 100%, 40%);">+CREATE TABLE subscriber (</span><br><span style="color: hsl(120, 100%, 40%);">+-- OsmoHLR's DB scheme is modelled roughly after TS 23.008 version 13.3.0</span><br><span style="color: hsl(120, 100%, 40%);">+       id              INTEGER PRIMARY KEY,</span><br><span style="color: hsl(120, 100%, 40%);">+  -- Chapter 2.1.1.1</span><br><span style="color: hsl(120, 100%, 40%);">+    imsi            VARCHAR(15) UNIQUE NOT NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+  -- Chapter 2.1.2</span><br><span style="color: hsl(120, 100%, 40%);">+      msisdn          VARCHAR(15) UNIQUE,</span><br><span style="color: hsl(120, 100%, 40%);">+   -- Chapter 2.2.3: Most recent / current IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+  imeisv          VARCHAR,</span><br><span style="color: hsl(120, 100%, 40%);">+      -- Chapter 2.4.5</span><br><span style="color: hsl(120, 100%, 40%);">+      vlr_number      VARCHAR(15),</span><br><span style="color: hsl(120, 100%, 40%);">+  -- Chapter 2.4.6</span><br><span style="color: hsl(120, 100%, 40%);">+      hlr_number      VARCHAR(15),</span><br><span style="color: hsl(120, 100%, 40%);">+  -- Chapter 2.4.8.1</span><br><span style="color: hsl(120, 100%, 40%);">+    sgsn_number     VARCHAR(15),</span><br><span style="color: hsl(120, 100%, 40%);">+  -- Chapter 2.13.10</span><br><span style="color: hsl(120, 100%, 40%);">+    sgsn_address    VARCHAR,</span><br><span style="color: hsl(120, 100%, 40%);">+      -- Chapter 2.4.8.2</span><br><span style="color: hsl(120, 100%, 40%);">+    ggsn_number     VARCHAR(15),</span><br><span style="color: hsl(120, 100%, 40%);">+  -- Chapter 2.4.9.2</span><br><span style="color: hsl(120, 100%, 40%);">+    gmlc_number     VARCHAR(15),</span><br><span style="color: hsl(120, 100%, 40%);">+  -- Chapter 2.4.23</span><br><span style="color: hsl(120, 100%, 40%);">+     smsc_number     VARCHAR(15),</span><br><span style="color: hsl(120, 100%, 40%);">+  -- Chapter 2.4.24</span><br><span style="color: hsl(120, 100%, 40%);">+     periodic_lu_tmr INTEGER,</span><br><span style="color: hsl(120, 100%, 40%);">+      -- Chapter 2.13.115</span><br><span style="color: hsl(120, 100%, 40%);">+   periodic_rau_tau_tmr INTEGER,</span><br><span style="color: hsl(120, 100%, 40%);">+ -- Chapter 2.1.1.2: network access mode</span><br><span style="color: hsl(120, 100%, 40%);">+       nam_cs          BOOLEAN NOT NULL DEFAULT 1,</span><br><span style="color: hsl(120, 100%, 40%);">+   nam_ps          BOOLEAN NOT NULL DEFAULT 1,</span><br><span style="color: hsl(120, 100%, 40%);">+   -- Chapter 2.1.8</span><br><span style="color: hsl(120, 100%, 40%);">+      lmsi            INTEGER,</span><br><span style="color: hsl(120, 100%, 40%);">+      -- The below purged flags might not even be stored non-volatile,</span><br><span style="color: hsl(120, 100%, 40%);">+      -- refer to TS 23.012 Chapter 3.6.1.4</span><br><span style="color: hsl(120, 100%, 40%);">+ -- Chapter 2.7.5</span><br><span style="color: hsl(120, 100%, 40%);">+      ms_purged_cs    BOOLEAN NOT NULL DEFAULT 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   -- Chapter 2.7.6</span><br><span style="color: hsl(120, 100%, 40%);">+      ms_purged_ps    BOOLEAN NOT NULL DEFAULT 0</span><br><span style="color: hsl(120, 100%, 40%);">+);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO subscriber VALUES(1,'123456789012345','098765432109876',NULL,'MSC-1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,NULL,0,0);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO subscriber VALUES(2,'111111111',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,NULL,1,0);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO subscriber VALUES(3,'222222222','22222',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,NULL,0,1);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO subscriber VALUES(4,'333333','3',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,NULL,0,0);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO subscriber VALUES(5,'444444444444444','4444',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,NULL,0,0);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO subscriber VALUES(6,'5555555','55555555555555',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,NULL,0,0);</span><br><span style="color: hsl(120, 100%, 40%);">+CREATE TABLE subscriber_apn (</span><br><span style="color: hsl(120, 100%, 40%);">+        subscriber_id   INTEGER,                -- subscriber.id</span><br><span style="color: hsl(120, 100%, 40%);">+      apn             VARCHAR(256) NOT NULL</span><br><span style="color: hsl(120, 100%, 40%);">+);</span><br><span style="color: hsl(120, 100%, 40%);">+CREATE TABLE subscriber_multi_msisdn (</span><br><span style="color: hsl(120, 100%, 40%);">+-- Chapter 2.1.3</span><br><span style="color: hsl(120, 100%, 40%);">+   subscriber_id   INTEGER,                -- subscriber.id</span><br><span style="color: hsl(120, 100%, 40%);">+      msisdn          VARCHAR(15) NOT NULL</span><br><span style="color: hsl(120, 100%, 40%);">+);</span><br><span style="color: hsl(120, 100%, 40%);">+CREATE TABLE auc_2g (</span><br><span style="color: hsl(120, 100%, 40%);">+       subscriber_id   INTEGER PRIMARY KEY,    -- subscriber.id</span><br><span style="color: hsl(120, 100%, 40%);">+      algo_id_2g      INTEGER NOT NULL,       -- enum osmo_auth_algo value</span><br><span style="color: hsl(120, 100%, 40%);">+  ki              VARCHAR(32) NOT NULL    -- hex string: subscriber's secret key (128bit)</span><br><span style="color: hsl(120, 100%, 40%);">+);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO auc_2g VALUES(1,1,'BeefedCafeFaceAcedAddedDecadeFee');</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO auc_2g VALUES(4,2,'33333333333333333333333333333333');</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO auc_2g VALUES(6,4,'55555555555555555555555555555555');</span><br><span style="color: hsl(120, 100%, 40%);">+CREATE TABLE auc_3g (</span><br><span style="color: hsl(120, 100%, 40%);">+    subscriber_id   INTEGER PRIMARY KEY,    -- subscriber.id</span><br><span style="color: hsl(120, 100%, 40%);">+      algo_id_3g      INTEGER NOT NULL,       -- enum osmo_auth_algo value</span><br><span style="color: hsl(120, 100%, 40%);">+  k               VARCHAR(32) NOT NULL,   -- hex string: subscriber's secret key (128bit)</span><br><span style="color: hsl(120, 100%, 40%);">+   op              VARCHAR(32),            -- hex string: operator's secret key (128bit)</span><br><span style="color: hsl(120, 100%, 40%);">+     opc             VARCHAR(32),            -- hex string: derived from OP and K (128bit)</span><br><span style="color: hsl(120, 100%, 40%);">+ sqn             INTEGER NOT NULL DEFAULT 0,     -- sequence number of key usage</span><br><span style="color: hsl(120, 100%, 40%);">+       -- nr of index bits at lower SQN end</span><br><span style="color: hsl(120, 100%, 40%);">+  ind_bitlen      INTEGER NOT NULL DEFAULT 5</span><br><span style="color: hsl(120, 100%, 40%);">+);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO auc_3g VALUES(1,5,'C01ffedC1cadaeAc1d1f1edAcac1aB0a',NULL,'CededEffacedAceFacedBadFadedBeef',0,5);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO auc_3g VALUES(5,5,'44444444444444444444444444444444','44444444444444444444444444444444',NULL,0,5);</span><br><span style="color: hsl(120, 100%, 40%);">+INSERT INTO auc_3g VALUES(6,5,'55555555555555555555555555555555',NULL,'55555555555555555555555555555555',0,5);</span><br><span style="color: hsl(120, 100%, 40%);">+CREATE UNIQUE INDEX idx_subscr_imsi ON subscriber (imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+;</span><br><span style="color: hsl(120, 100%, 40%);">+COMMIT;</span><br><span>diff --git a/tests/db_upgrade/osmo-hlr.cfg b/tests/db_upgrade/osmo-hlr.cfg</span><br><span>new file mode 100644</span><br><span>index 0000000..7fb12c1</span><br><span>--- /dev/null</span><br><span>+++ b/tests/db_upgrade/osmo-hlr.cfg</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+log stderr</span><br><span style="color: hsl(120, 100%, 40%);">+ logging level db notice</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print category-hex 0</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print file 0</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print category 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging color 0</span><br><span>diff --git a/tests/testsuite.at b/tests/testsuite.at</span><br><span>index 70ae7ae..a8efe42 100644</span><br><span>--- a/tests/testsuite.at</span><br><span>+++ b/tests/testsuite.at</span><br><span>@@ -36,3 +36,10 @@</span><br><span> sqlite3 db_test.db < $abs_top_srcdir/sql/hlr.sql</span><br><span> AT_CHECK([$abs_top_builddir/tests/db/db_test], [], [expout], [experr])</span><br><span> AT_CLEANUP</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AT_SETUP([db_upgrade])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_KEYWORDS([db_upgrade])</span><br><span style="color: hsl(120, 100%, 40%);">+cat $abs_srcdir/db_upgrade/db_upgrade_test.ok > expout</span><br><span style="color: hsl(120, 100%, 40%);">+cat $abs_srcdir/db_upgrade/db_upgrade_test.err > experr</span><br><span style="color: hsl(120, 100%, 40%);">+AT_CHECK([$abs_srcdir/db_upgrade/db_upgrade_test.sh $abs_srcdir/db_upgrade $abs_builddir/db_upgrade], [], [expout], [experr])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_CLEANUP</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-hlr/+/15913">change 15913</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/c/osmo-hlr/+/15913"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-hlr </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I0961bab0e17cfde5b030576c5bc243c2b51d9dc4 </div>
<div style="display:none"> Gerrit-Change-Number: 15913 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>