From 085a92584fa95da2694052237f6c43a6909dc397 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Wed, 27 Oct 2021 10:57:41 +0200 Subject: heighbor_ident: add/del neighbor cells via ctrl interface The VTY allows flexible control over the neighbor cell information via the neighbor command, which can be found in the configure terminal under the bts node. Lets add pendant of this command on the control interface as well. Change-Id: I343a40e18fa9b91e6c381912c0426a002841e079 Related: SYS#5641 --- tests/ctrl_test_runner.py | 172 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) (limited to 'tests') diff --git a/tests/ctrl_test_runner.py b/tests/ctrl_test_runner.py index bd2cb1061..5e9bcefe3 100755 --- a/tests/ctrl_test_runner.py +++ b/tests/ctrl_test_runner.py @@ -562,6 +562,177 @@ class TestCtrlBSCNeighbor(TestCtrlBase): self.assertEqual(r['var'], 'neighbor_resolve_cgi_ps_from_lac_ci.1.6969.23.32') self.assertEqual(r['value'], '023-42-423-2-5') + +class TestCtrlBSCNeighborCell(TestCtrlBase): + + def tearDown(self): + TestCtrlBase.tearDown(self) + os.unlink("tmp_dummy_sock") + + def ctrl_command(self): + return ["./src/osmo-bsc/osmo-bsc", "-r", "tmp_dummy_sock", "-c", + "tests/ctrl/osmo-bsc-neigh-test.cfg"] + + def ctrl_app(self): + return (4249, "./src/osmo-bsc/osmo-bsc", "OsmoBSC", "bsc") + + def testCtrlAddDelBTS(self): + r = self.do_set('bts.0.neighbor-bts.add', '1') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-bts.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-bts.del', '1') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-bts.del') + self.assertEqual(r['value'], 'OK') + + def testCtrlAddDelLAC(self): + # without ARFCN+BSIC: + r = self.do_set('bts.0.neighbor-lac.add', '100') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-lac.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-lac.del', '100') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-lac.del') + self.assertEqual(r['value'], 'OK') + + # with ARFCN+BSIC: + r = self.do_set('bts.0.neighbor-lac.add', '100-123-4') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-lac.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-lac.del', '100-123-4') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-lac.del') + self.assertEqual(r['value'], 'OK') + + def testCtrlAddDelLACCI(self): + # without ARFCN+BSIC: + r = self.do_set('bts.0.neighbor-lac-ci.add', '100-200') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-lac-ci.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-lac-ci.del', '100-200') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-lac-ci.del') + self.assertEqual(r['value'], 'OK') + + # with ARFCN+BSIC: + r = self.do_set('bts.0.neighbor-lac-ci.add', '100-200-123-any') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-lac-ci.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-lac-ci.del', '100-200-123-any') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-lac-ci.del') + self.assertEqual(r['value'], 'OK') + + def testCtrlAddDelCGI(self): + # without ARFCN+BSIC: + r = self.do_set('bts.0.neighbor-cgi.add', '001-01-100-200') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-cgi.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-cgi.del', '001-01-100-200') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-cgi.del') + self.assertEqual(r['value'], 'OK') + + # with ARFCN+BSIC: + r = self.do_set('bts.0.neighbor-cgi.add', '001-01-100-200-123-4') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-cgi.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-cgi.del', '001-01-100-200-123-4') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-cgi.del') + self.assertEqual(r['value'], 'OK') + + def testCtrlAddDelCGIPS(self): + # without ARFCN+BSIC: + r = self.do_set('bts.0.neighbor-cgi-ps.add', '001-01-100-33-200') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-cgi-ps.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-cgi-ps.del', '001-01-100-33-200') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-cgi-ps.del') + self.assertEqual(r['value'], 'OK') + + # with ARFCN+BSIC: + r = self.do_set('bts.0.neighbor-cgi-ps.add', '001-01-100-33-200-123-any') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-cgi-ps.add') + self.assertEqual(r['value'], 'OK') + r = self.do_set('bts.0.neighbor-cgi-ps.del', '001-01-100-33-200-123-any') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-cgi-ps.del') + self.assertEqual(r['value'], 'OK') + + def testCtrlClearNeighbors(self): + r = self.do_set('bts.0.neighbor-clear', 'ignored') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'SET_REPLY') + self.assertEqual(r['var'], 'bts.0.neighbor-clear') + self.assertEqual(r['value'], 'OK') + + def testCtrlErrs(self): + # Missing BSIC + r = self.do_set('bts.0.neighbor-lac.add', '100-123') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'ERROR') + self.assertEqual(r['error'], 'Value failed verification.') + + # Short value (missing RAC) + r = self.do_set('bts.0.neighbor-cgi-ps.del', '001-01-100-200-123-1') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'ERROR') + self.assertEqual(r['error'], 'Value failed verification.') + + # Long value + r = self.do_set('bts.0.neighbor-cgi-ps.del', '001-01-100-33-200-123-1-2') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'ERROR') + self.assertEqual(r['error'], 'Value failed verification.') + + # Out of range values + r = self.do_set('bts.0.neighbor-cgi.add', '100001-1123401-100-200') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'ERROR') + self.assertEqual(r['error'], 'Value failed verification.') + + # Garbage + r = self.do_set('bts.0.neighbor-lac-ci.add', '0G1-Z1-1U0-a3-2p0') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'ERROR') + self.assertEqual(r['error'], 'Value failed verification.') + + # Delete something that shouldn't be there + r = self.do_set('bts.0.neighbor-cgi-ps.del', '001-01-100-33-200-123-any') + print('respose: ' + str(r)) + self.assertEqual(r['mtype'], 'ERROR') + self.assertEqual(r['error'], 'Failed to delete neighbor') + + def add_bsc_test(suite, workdir, klass): if not os.path.isfile(os.path.join(workdir, "src/osmo-bsc/osmo-bsc")): print("Skipping the BSC test") @@ -601,5 +772,6 @@ if __name__ == '__main__': suite = unittest.TestSuite() add_bsc_test(suite, workdir, TestCtrlBSC) add_bsc_test(suite, workdir, TestCtrlBSCNeighbor) + add_bsc_test(suite, workdir, TestCtrlBSCNeighborCell) res = unittest.TextTestRunner(verbosity=verbose_level).run(suite) sys.exit(len(res.errors) + len(res.failures)) -- cgit v1.2.3