pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-hlr/+/28316 )


Change subject: Fix db_subscr_create() not returning -EEXIST expected by VTY 
subscriber create cmd
......................................................................

Fix db_subscr_create() not returning -EEXIST expected by VTY subscriber create 
cmd

As a result, the -EEXIST code path printing a specific error for
inserting already existing subscribers was not being triggered.

Change-Id: Id24dc6e0ff5115c8c9025404dd7296250d2b03ee
---
M src/db_hlr.c
M tests/db/db_test.c
M tests/db/db_test.err
3 files changed, 14 insertions(+), 11 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-hlr refs/changes/16/28316/1

diff --git a/src/db_hlr.c b/src/db_hlr.c
index 591908f..540daac 100644
--- a/src/db_hlr.c
+++ b/src/db_hlr.c
@@ -45,7 +45,8 @@
  * \param[in,out] dbc  database context.
  * \param[in] imsi  ASCII string of IMSI digits, is validated.
  * \param[in] flags  Bitmask of DB_SUBSCR_FLAG_*.
- * \returns 0 on success, -EINVAL on invalid IMSI, -EIO on database error.
+ * \returns 0 on success, -EINVAL on invalid IMSI, -EEXIST if subscriber with
+ *         provided imsi already exists, -EIO on other database errors.
  */
 int db_subscr_create(struct db_context *dbc, const char *imsi, uint8_t flags)
 {
@@ -73,6 +74,8 @@
        if (rc != SQLITE_DONE) {
                LOGHLR(imsi, LOGL_ERROR, "Cannot create subscriber: SQL error: 
(%d) %s\n",
                       rc, sqlite3_errmsg(dbc->db));
+               if (rc == SQLITE_CONSTRAINT_UNIQUE)
+                       return -EEXIST;
                return -EIO;
        }

diff --git a/tests/db/db_test.c b/tests/db/db_test.c
index 00434cf..246b7db 100644
--- a/tests/db/db_test.c
+++ b/tests/db/db_test.c
@@ -262,13 +262,13 @@
        ASSERT_RC(db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), 0);
        ASSERT_SEL(imsi, imsi2, 0);
        id2 = g_subscr.id;
-       ASSERT_RC(db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EIO);
+       ASSERT_RC(db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EEXIST);
        ASSERT_SEL(imsi, imsi0, 0);
-       ASSERT_RC(db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EIO);
-       ASSERT_RC(db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EIO);
+       ASSERT_RC(db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EEXIST);
+       ASSERT_RC(db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EEXIST);
        ASSERT_SEL(imsi, imsi1, 0);
-       ASSERT_RC(db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EIO);
-       ASSERT_RC(db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EIO);
+       ASSERT_RC(db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EEXIST);
+       ASSERT_RC(db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | 
DB_SUBSCR_FLAG_NAM_PS), -EEXIST);
        ASSERT_SEL(imsi, imsi2, 0);

        ASSERT_RC(db_subscr_create(dbc, "123456789 000003", 
DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS), -EINVAL);
diff --git a/tests/db/db_test.err b/tests/db/db_test.err
index ddf6d00..186af77 100644
--- a/tests/db/db_test.err
+++ b/tests/db/db_test.err
@@ -27,7 +27,7 @@
   .imsi = '123456789000002',
 }

-db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EIO
+db_subscr_create(dbc, imsi0, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EEXIST
 DAUC IMSI='123456789000000': Cannot create subscriber: SQL error: (2067) 
UNIQUE constraint failed: subscriber.imsi

 db_subscr_get_by_imsi(dbc, imsi0, &g_subscr) --> 0
@@ -36,10 +36,10 @@
   .imsi = '123456789000000',
 }

-db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EIO
+db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EEXIST
 DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) 
UNIQUE constraint failed: subscriber.imsi

-db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EIO
+db_subscr_create(dbc, imsi1, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EEXIST
 DAUC IMSI='123456789000001': Cannot create subscriber: SQL error: (2067) 
UNIQUE constraint failed: subscriber.imsi

 db_subscr_get_by_imsi(dbc, imsi1, &g_subscr) --> 0
@@ -48,10 +48,10 @@
   .imsi = '123456789000001',
 }

-db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EIO
+db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EEXIST
 DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) 
UNIQUE constraint failed: subscriber.imsi

-db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EIO
+db_subscr_create(dbc, imsi2, DB_SUBSCR_FLAG_NAM_CS | DB_SUBSCR_FLAG_NAM_PS) 
--> -EEXIST
 DAUC IMSI='123456789000002': Cannot create subscriber: SQL error: (2067) 
UNIQUE constraint failed: subscriber.imsi

 db_subscr_get_by_imsi(dbc, imsi2, &g_subscr) --> 0

--
To view, visit https://gerrit.osmocom.org/c/osmo-hlr/+/28316
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Change-Id: Id24dc6e0ff5115c8c9025404dd7296250d2b03ee
Gerrit-Change-Number: 28316
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to