[PATCH] openbsc[master]: oap_client_test: show bug: disabled state does not reject me...

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Fri Dec 9 00:38:27 UTC 2016


Review at  https://gerrit.osmocom.org/1394

oap_client_test: show bug: disabled state does not reject message

There is a hole in OAP where a disabled OAP still accepts at least a
Registration Reject message, after which it will do things it shouldn't. Show
this by expecting the bugs, to be adjusted with the upcoming fix.

Change-Id: I4a5fde308b876946fea2571ea1a550f0cc7ee136
---
M openbsc/tests/oap/oap_client_test.c
M openbsc/tests/oap/oap_client_test.err
2 files changed, 41 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/94/1394/1

diff --git a/openbsc/tests/oap/oap_client_test.c b/openbsc/tests/oap/oap_client_test.c
index 8ae92bb..d847f15 100644
--- a/openbsc/tests/oap/oap_client_test.c
+++ b/openbsc/tests/oap/oap_client_test.c
@@ -37,6 +37,12 @@
 	struct osmo_oap_client_state _state;
 	struct osmo_oap_client_state *state = &_state;
 
+	struct osmo_oap_message oap_rx;
+	struct msgb *msg_rx;
+
+	struct osmo_oap_message oap_tx;
+	struct msgb *msg_tx;
+
 	memset(config, 0, sizeof(*config));
 	memset(state, 0, sizeof(*state));
 
@@ -46,7 +52,38 @@
 	fprintf(stderr, "- make sure filling with zeros means uninitialized\n");
 	OSMO_ASSERT(state->state == OAP_UNINITIALIZED);
 
+	fprintf(stderr, "- reject messages in uninitialized state EXPECTING BUGS\n");
+	memset(&oap_rx, 0, sizeof(oap_rx));
+	state->client_id = 1;
+	oap_rx.message_type = OAP_MSGT_REGISTER_ERROR;
+	msg_rx = osmo_oap_client_encoded(&oap_rx);
+	/* ATTENTION: This shows a bug in OAP: the rc should be < 0, but OAP
+	 * happily accepts this message and breaks the uninitialized state. The
+	 * expected rc, state and msg_tx will be fixed along with the fix. */
+	OSMO_ASSERT(osmo_oap_client_handle(state, msg_rx, &msg_tx) == 0 /* BUG, expecting < 0 */);
+	OSMO_ASSERT(state->state == OAP_REQUESTED_CHALLENGE /* BUG, expecting OAP_UNINITIALIZED */);
+	msgb_free(msg_rx);
+	OSMO_ASSERT(msg_tx /* BUG, expecting NULL */);
+	msgb_free(msg_tx);
+
+	fprintf(stderr, "- reject messages in disabled state\n");
+	memset(state, 0, sizeof(*state));
+	memset(&oap_rx, 0, sizeof(oap_rx));
+	state->state = OAP_DISABLED;
+	state->client_id = 1;
+	oap_rx.message_type = OAP_MSGT_REGISTER_ERROR;
+	msg_rx = osmo_oap_client_encoded(&oap_rx);
+	/* ATTENTION: This shows a bug in OAP: the rc should be < 0, but OAP
+	 * happily accepts this message and breaks the uninitialized state. The
+	 * expected rc, state and msg_tx will be fixed along with the fix. */
+	OSMO_ASSERT(osmo_oap_client_handle(state, msg_rx, &msg_tx) == 0 /* BUG, expecting < 0 */);
+	OSMO_ASSERT(state->state == OAP_REQUESTED_CHALLENGE /* BUG, expecting OAP_DISABLED */);
+	msgb_free(msg_rx);
+	OSMO_ASSERT(msg_tx /* BUG, expecting NULL */);
+	msgb_free(msg_tx);
+
 	fprintf(stderr, "- invalid client_id and shared secret\n");
+	memset(state, 0, sizeof(*state));
 	config->client_id = 0;
 	config->secret_k_present = 0;
 	config->secret_opc_present = 0;
@@ -92,10 +129,6 @@
 	OSMO_ASSERT( osmo_oap_client_init(config, state) == 0 );
 	OSMO_ASSERT(state->state == OAP_INITIALIZED);
 
-	struct osmo_oap_message oap_rx;
-	struct osmo_oap_message oap_tx;
-	struct msgb *msg_rx;
-	struct msgb *msg_tx;
 
 	fprintf(stderr, "- Missing challenge data\n");
 	memset(&oap_rx, 0, sizeof(oap_rx));
diff --git a/openbsc/tests/oap/oap_client_test.err b/openbsc/tests/oap/oap_client_test.err
index 248808e..9e52357 100644
--- a/openbsc/tests/oap/oap_client_test.err
+++ b/openbsc/tests/oap/oap_client_test.err
@@ -1,4 +1,8 @@
 - make sure filling with zeros means uninitialized
+- reject messages in uninitialized state EXPECTING BUGS
+DLOAP OAP registration failed
+- reject messages in disabled state
+DLOAP OAP registration failed
 - invalid client_id and shared secret
 - reset state
 - only client_id is invalid

-- 
To view, visit https://gerrit.osmocom.org/1394
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4a5fde308b876946fea2571ea1a550f0cc7ee136
Gerrit-PatchSet: 1
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list