libbsc: Add command to set MNC/MCC and apply it if something changed
Change the splitting of the ctrl_test_runner.py. Make sure that we get one element and all the rest.
This commit is contained in:
parent
6ca9f4f5c3
commit
3adb772853
|
@ -93,6 +93,64 @@ static int set_net_apply_config(struct ctrl_cmd *cmd, void *data)
|
|||
|
||||
CTRL_CMD_DEFINE(net_apply_config, "apply-configuration");
|
||||
|
||||
static int verify_net_mcc_mnc_apply(struct ctrl_cmd *cmd, const char *value, void *d)
|
||||
{
|
||||
char *tmp, *saveptr, *mcc, *mnc;
|
||||
|
||||
tmp = talloc_strdup(cmd, value);
|
||||
if (!tmp)
|
||||
return 1;
|
||||
|
||||
mcc = strtok_r(tmp, ",", &saveptr);
|
||||
mnc = strtok_r(NULL, ",", &saveptr);
|
||||
talloc_free(tmp);
|
||||
|
||||
if (!mcc || !mnc)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_net_mcc_mnc_apply(struct ctrl_cmd *cmd, void *data)
|
||||
{
|
||||
cmd->reply = "Write only attribute";
|
||||
return CTRL_CMD_ERROR;
|
||||
}
|
||||
|
||||
static int set_net_mcc_mnc_apply(struct ctrl_cmd *cmd, void *data)
|
||||
{
|
||||
struct gsm_network *net = cmd->node;
|
||||
char *tmp, *saveptr, *mcc_str, *mnc_str;
|
||||
int mcc, mnc;
|
||||
|
||||
tmp = talloc_strdup(cmd, cmd->value);
|
||||
if (!tmp)
|
||||
goto oom;
|
||||
|
||||
|
||||
mcc_str = strtok_r(tmp, ",", &saveptr);
|
||||
mnc_str = strtok_r(NULL, ",", &saveptr);
|
||||
|
||||
mcc = atoi(mcc_str);
|
||||
mnc = atoi(mnc_str);
|
||||
|
||||
talloc_free(tmp);
|
||||
|
||||
if (net->network_code == mnc && net->country_code == mcc) {
|
||||
cmd->reply = "Nothing changed";
|
||||
return CTRL_CMD_REPLY;
|
||||
}
|
||||
|
||||
net->network_code = mnc;
|
||||
net->country_code = mcc;
|
||||
|
||||
return set_net_apply_config(cmd, data);
|
||||
|
||||
oom:
|
||||
cmd->reply = "OOM";
|
||||
return CTRL_CMD_ERROR;
|
||||
}
|
||||
CTRL_CMD_DEFINE(net_mcc_mnc_apply, "mcc-mnc-apply");
|
||||
|
||||
int bsc_base_ctrl_cmds_install(void)
|
||||
{
|
||||
int rc = 0;
|
||||
|
@ -101,6 +159,7 @@ int bsc_base_ctrl_cmds_install(void)
|
|||
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_short_name);
|
||||
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_long_name);
|
||||
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_apply_config);
|
||||
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_mcc_mnc_apply);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# (C) 2013 by Jacob Erlbeck <jerlbeck@sysmocom.de>
|
||||
# (C) 2014 by Holger Hans Peter Freyther
|
||||
# based on vty_test_runner.py:
|
||||
# (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com>
|
||||
# (C) 2013 by Holger Hans Peter Freyther
|
||||
|
@ -131,7 +132,7 @@ class TestCtrlBase(unittest.TestCase):
|
|||
if mtype == "ERROR":
|
||||
rsp['error'] = msg
|
||||
else:
|
||||
[rsp['var'], rsp['value']] = msg.split(None, 2)
|
||||
[rsp['var'], rsp['value']] = msg.split(None, 1)
|
||||
|
||||
responses[id] = rsp
|
||||
|
||||
|
@ -239,6 +240,49 @@ class TestCtrlBSC(TestCtrlBase):
|
|||
self.assertEquals(r['var'], 'bts.0.timezone')
|
||||
self.assertEquals(r['value'], 'off')
|
||||
|
||||
def testMccMncApply(self):
|
||||
# Test some invalid input
|
||||
r = self.do_set('mcc-mnc-apply', 'WRONG')
|
||||
self.assertEquals(r['mtype'], 'ERROR')
|
||||
|
||||
r = self.do_set('mcc-mnc-apply', '1,')
|
||||
self.assertEquals(r['mtype'], 'ERROR')
|
||||
|
||||
r = self.do_set('mcc-mnc-apply', '200,3')
|
||||
self.assertEquals(r['mtype'], 'SET_REPLY')
|
||||
self.assertEquals(r['var'], 'mcc-mnc-apply')
|
||||
self.assertEquals(r['value'], 'Tried to drop the BTS')
|
||||
|
||||
# Set it again
|
||||
r = self.do_set('mcc-mnc-apply', '200,3')
|
||||
self.assertEquals(r['mtype'], 'SET_REPLY')
|
||||
self.assertEquals(r['var'], 'mcc-mnc-apply')
|
||||
self.assertEquals(r['value'], 'Nothing changed')
|
||||
|
||||
# Change it
|
||||
r = self.do_set('mcc-mnc-apply', '200,4')
|
||||
self.assertEquals(r['mtype'], 'SET_REPLY')
|
||||
self.assertEquals(r['var'], 'mcc-mnc-apply')
|
||||
self.assertEquals(r['value'], 'Tried to drop the BTS')
|
||||
|
||||
# Change it
|
||||
r = self.do_set('mcc-mnc-apply', '201,4')
|
||||
self.assertEquals(r['mtype'], 'SET_REPLY')
|
||||
self.assertEquals(r['var'], 'mcc-mnc-apply')
|
||||
self.assertEquals(r['value'], 'Tried to drop the BTS')
|
||||
|
||||
# Verify
|
||||
r = self.do_get('mnc')
|
||||
self.assertEquals(r['mtype'], 'GET_REPLY')
|
||||
self.assertEquals(r['var'], 'mnc')
|
||||
self.assertEquals(r['value'], '4')
|
||||
|
||||
r = self.do_get('mcc')
|
||||
self.assertEquals(r['mtype'], 'GET_REPLY')
|
||||
self.assertEquals(r['var'], 'mcc')
|
||||
self.assertEquals(r['value'], '201')
|
||||
|
||||
|
||||
def add_bsc_test(suite, workdir):
|
||||
if not os.path.isfile(os.path.join(workdir, "src/osmo-bsc/osmo-bsc")):
|
||||
print("Skipping the BSC test")
|
||||
|
|
Loading…
Reference in New Issue