Add subscriber delete command
diff mbox

Message ID 1409523195-15851-1-git-send-email-meskio@sindominio.net
State Changes Requested
Headers show

Commit Message

Ruben Pollan Aug. 31, 2014, 10:13 p.m. UTC
---
 openbsc/src/libmsc/vty_interface_layer3.c | 34 ++++++++++++++++++++++++++++++-
 openbsc/tests/vty_test_runner.py          | 10 ++++++++-
 2 files changed, 42 insertions(+), 2 deletions(-)

Comments

Holger Freyther Sept. 1, 2014, 6:45 p.m. UTC | #1
On Sun, Aug 31, 2014 at 05:13:15PM -0500, Ruben Pollan wrote:

> +	if (subscr->use_count != 1) {
> +		vty_out(vty, "Removing active subscriber%s", VTY_NEWLINE);
> +	}

You could write abort() as well. You should return CMD_ERROR or
such as you can't remove an active subscriber.

> +        # Delte it

		Delete

> +        # Now it should not be there anymore
> +        res = self.vty.command('show subscriber imsi '+imsi)
> +        self.assert_(res != '% No subscriber found for imsi '+imsi)


good!
Ruben Pollan Sept. 2, 2014, 7:07 p.m. UTC | #2
Quoting Holger Hans Peter Freyther (2014-09-01 13:45:02)
> On Sun, Aug 31, 2014 at 05:13:15PM -0500, Ruben Pollan wrote:
> 
> > +     if (subscr->use_count != 1) {
> > +             vty_out(vty, "Removing active subscriber%s", VTY_NEWLINE);
> > +     }
> 
> You could write abort() as well. You should return CMD_ERROR or
> such as you can't remove an active subscriber.

This code is basically copied from openbsc/src/libmsc/ctrl_commands.c where is 
doing:

   if (subscr->use_count != 1) {
       LOGP(DCTRL, LOGL_NOTICE, "Going to remove active subscriber.\n");
       was_used = 1;
   }

   rc = db_subscriber_delete(subscr);

In the ctrl commands interface even if is in use it keeps trying to delete it.  
Maybe I'm missing something and the two interfaces should behave differently, or 
it's a bug on the ctrl interface.

> > +        # Delte it
> 
>                 Delete

Ok.
Holger Freyther Sept. 23, 2014, 2:37 p.m. UTC | #3
On Tue, Sep 02, 2014 at 02:07:25PM -0500, Ruben Pollan wrote:

> This code is basically copied from openbsc/src/libmsc/ctrl_commands.c where is 
> doing:

You are right! my bad!

> >                 Delete
> 

Could you please rebase and send an updated patch? thanks
	holger

Patch
diff mbox

diff --git a/openbsc/src/libmsc/vty_interface_layer3.c b/openbsc/src/libmsc/vty_interface_layer3.c
index 064eca9..8890099 100644
--- a/openbsc/src/libmsc/vty_interface_layer3.c
+++ b/openbsc/src/libmsc/vty_interface_layer3.c
@@ -465,7 +465,38 @@  DEFUN(subscriber_ussd_notify,
 	return CMD_SUCCESS;
 }
 
-DEFUN(ena_subscr_authorizde,
+DEFUN(ena_subscr_delete,
+      ena_subscr_delete_cmd,
+      "subscriber " SUBSCR_TYPES " ID delete",
+	SUBSCR_HELP "Delete subscriber in HLR\n")
+{
+	int rc;
+	struct gsm_network *gsmnet = gsmnet_from_vty(vty);
+	struct gsm_subscriber *subscr =
+			get_subscr_by_argv(gsmnet, argv[0], argv[1]);
+
+	if (!subscr) {
+		vty_out(vty, "%% No subscriber found for %s %s%s",
+			argv[0], argv[1], VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	if (subscr->use_count != 1) {
+		vty_out(vty, "Removing active subscriber%s", VTY_NEWLINE);
+	}
+
+	rc = db_subscriber_delete(subscr);
+	subscr_put(subscr);
+
+	if (rc != 0) {
+		vty_out(vty, "Failed to remove subscriber%s", VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	return CMD_SUCCESS;
+}
+
+DEFUN(ena_subscr_authorized,
       ena_subscr_authorized_cmd,
       "subscriber " SUBSCR_TYPES " ID authorized (0|1)",
 	SUBSCR_HELP "(De-)Authorize subscriber in HLR\n"
@@ -982,6 +1013,7 @@  int bsc_vty_init_extra(void)
 	install_element_ve(&show_stats_cmd);
 	install_element_ve(&show_smsqueue_cmd);
 
+	install_element(ENABLE_NODE, &ena_subscr_delete_cmd);
 	install_element(ENABLE_NODE, &ena_subscr_name_cmd);
 	install_element(ENABLE_NODE, &ena_subscr_extension_cmd);
 	install_element(ENABLE_NODE, &ena_subscr_authorized_cmd);
diff --git a/openbsc/tests/vty_test_runner.py b/openbsc/tests/vty_test_runner.py
index db8294d..c12121b 100644
--- a/openbsc/tests/vty_test_runner.py
+++ b/openbsc/tests/vty_test_runner.py
@@ -247,7 +247,7 @@  class TestVTYNITB(TestVTYGenericBSC):
             if classNum != 10:
                 self.assertEquals(res.find("rach access-control-class " + str(classNum) + " barred"), -1)
 
-    def testSubscriberCreate(self):
+    def testSubscriberCreateDelete(self):
         self.vty.enable()
 
         imsi = "204300854013739"
@@ -263,6 +263,14 @@  class TestVTYNITB(TestVTYGenericBSC):
         res = self.vty.command('show subscriber imsi '+imsi)
         self.assert_(res.find("    IMSI: "+imsi) > 0)
 
+        # Delte it
+        res = self.vty.command('subscriber delete imsi '+imsi)
+        self.assert_(res != "")
+
+        # Now it should not be there anymore
+        res = self.vty.command('show subscriber imsi '+imsi)
+        self.assert_(res != '% No subscriber found for imsi '+imsi)
+
     def testShowPagingGroup(self):
         res = self.vty.command("show paging-group 255 1234567")
         self.assertEqual(res, "% can't find BTS 255")