add initial test code for idle-mode

This commit is contained in:
Sukchan Lee 2017-07-25 16:22:53 +09:00
parent 10096d2a3c
commit b96f06b63a
2 changed files with 278 additions and 9 deletions

View File

@ -416,12 +416,241 @@ static void nas_sm_test2(abts_case *tc, void *data)
mongoc_collection_destroy(collection); mongoc_collection_destroy(collection);
} }
/**************************************************************
* Attach -> Release -> Service Request */
static void nas_sm_test3(abts_case *tc, void *data)
{
status_t rv;
net_sock_t *sock;
pkbuf_t *sendbuf;
pkbuf_t *recvbuf;
s1ap_message_t message;
int rc;
int i;
int msgindex = 2;
c_uint8_t tmp[MAX_SDU_LEN];
char *_authentication_request =
"000b"
"403b000003000000 05c0020000c80008 00020002001a0025 2407520042200639"
"1c0021554d444928 4a1a062e10e543cb 257f1f800021f4f9 2d522a5b87";
char *_security_mode_command =
"000b"
"4027000003000000 05c0020000c80008 00020002001a0011 103744bcbbd20007"
"5d010005f0f00000 00";
char *_esm_information_request =
"000b"
"4020000003000000 05c0020000c80008 00020002001a000a 09277330e06c0102"
"01d9";
char *_initial_context_setup_request =
"00090080c8000006 00000005c0020000 c800080002000200 42000a183e800000"
"603e800000001800 7700003400724540 0920000000000000 00000f800a0123d8"
"000000035b27a23a 27b4020742024906 4000f1102b670032 5201c10509ffffff"
"ff0908696e746572 6e657405012d2d2d 035e060000000004 04270f80000d0408"
"080808000d040404 0404500bf600f110 0002010000000353 12172c5949640125"
"006b00051e000e00 000049002040964d eb63a0afb5d0d374 c1da505f6252d1f9"
"05ff9c6791b8503a 032c6effa7";
char *_emm_information =
"000b"
"402a000003000000 05c0020000c80008 00020002001a0014 1327dc833e850307"
"6147717042911120 8a490100";
mongoc_collection_t *collection = NULL;
bson_error_t error;
const char *json =
"{"
"\"_id\" : { \"$oid\" : \"597223158b8861d7605378c6\" }, "
"\"imsi\" : \"001010123456797\", "
"\"pdn\" : ["
"{"
"\"apn\" : \"internet\", "
"\"_id\" : { \"$oid\" : \"597223158b8861d7605378c7\" }, "
"\"pdn_ambr\" : {"
"\"max_bandwidth_ul\" : 1024000, "
"\"max_bandwidth_dl\" : 1024000 "
"},"
"\"qos\" : { "
"\"qci\" : 9, "
"\"arp\" : { "
"\"priority_level\" : 8,"
"\"pre_emption_vulnerability\" : 1, "
"\"pre_emption_capability\" : 1"
"} "
"}, "
"\"type\" : 0"
"}"
"],"
"\"ue_ambr\" : { "
"\"max_bandwidth_ul\" : 1024000, "
"\"max_bandwidth_dl\" : 1024000 "
"},"
"\"subscribed_rau_tau_timer\" : 12,"
"\"network_access_mode\" : 2, "
"\"subscriber_status\" : 0, "
"\"access_restriction_data\" : 32, "
"\"security\" : { "
"\"k\" : \"465B5CE8 B199B49F AA5F0A2E E238A6BC\", "
"\"op\" : \"5F1D289C 5D354D0A 140C2548 F5F3E3BA\", "
"\"amf\" : \"8000\", "
"\"sqn\" : { \"$numberLong\" : \"64\" }, "
"\"rand\" : \"42200639 1c002155 4d444928 4a1a062e\" "
"}, "
"\"__v\" : 0 "
"}";
bson_t *doc = bson_new_from_json((const uint8_t *)json, -1, &error);;
ABTS_PTR_NOTNULL(tc, doc);
collection = mongoc_client_get_collection(
context_self()->db_client,
context_self()->db_name, "subscribers");
ABTS_PTR_NOTNULL(tc, collection);
ABTS_TRUE(tc, mongoc_collection_insert(collection,
MONGOC_INSERT_NONE, doc, NULL, &error));
bson_destroy(doc);
d_log_set_level(D_MSG_TO_STDOUT, D_LOG_LEVEL_ERROR);
/* eNB connects to MME */
sock = tests1ap_enb_connect();
ABTS_PTR_NOTNULL(tc, sock);
/* Send S1-Setup Reqeust */
rv = tests1ap_build_setup_req(&sendbuf, 0x54f64);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
/* Receive S1-Setup Response */
recvbuf = pkbuf_alloc(0, MAX_SDU_LEN);
rc = tests1ap_enb_read(sock, recvbuf);
ABTS_INT_NEQUAL(tc, 0, rc);
rv = s1ap_decode_pdu(&message, recvbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
s1ap_free_pdu(&message);
pkbuf_free(recvbuf);
/* Send Initial-UE Message */
mme_self()->mme_ue_s1ap_id = 33554631;
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
/* Receive Authentication Request */
recvbuf = pkbuf_alloc(0, MAX_SDU_LEN);
rc = tests1ap_enb_read(sock, recvbuf);
ABTS_INT_NEQUAL(tc, 0, rc);
recvbuf->len = 63;
ABTS_TRUE(tc, memcmp(recvbuf->payload,
CORE_HEX(_authentication_request, strlen(_authentication_request), tmp),
recvbuf->len) == 0);
pkbuf_free(recvbuf);
/* Send Authentication Response */
rv = tests1ap_build_authentication_response(&sendbuf, msgindex);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
/* Receive Security mode Command */
recvbuf = pkbuf_alloc(0, MAX_SDU_LEN);
rc = tests1ap_enb_read(sock, recvbuf);
recvbuf->len = 43;
ABTS_TRUE(tc, memcmp(recvbuf->payload,
CORE_HEX(_security_mode_command, strlen(_security_mode_command), tmp),
recvbuf->len) == 0);
ABTS_INT_NEQUAL(tc, 0, rc);
pkbuf_free(recvbuf);
/* Send Security mode Complete */
rv = tests1ap_build_security_mode_complete(&sendbuf, msgindex);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
/* Receive ESM Information Request */
recvbuf = pkbuf_alloc(0, MAX_SDU_LEN);
rc = tests1ap_enb_read(sock, recvbuf);
recvbuf->len = 36;
ABTS_TRUE(tc, memcmp(recvbuf->payload,
CORE_HEX(_esm_information_request, strlen(_security_mode_command), tmp),
recvbuf->len) == 0);
pkbuf_free(recvbuf);
/* Send ESM Information Response */
rv = tests1ap_build_esm_information_response(&sendbuf, msgindex);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
/* Receive Initial Context Setup Request +
* Attach Accept +
* Activate Default Bearer Context Request */
recvbuf = pkbuf_alloc(0, MAX_SDU_LEN);
rc = tests1ap_enb_read(sock, recvbuf);
recvbuf->len = 205;
ABTS_TRUE(tc, memcmp(recvbuf->payload,
CORE_HEX(_initial_context_setup_request,
strlen(_initial_context_setup_request), tmp),
recvbuf->len) == 0);
pkbuf_free(recvbuf);
/* Send UE Capability Info Indication */
rv = tests1ap_build_ue_capability_info_indication(&sendbuf, msgindex);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
core_sleep(time_from_msec(300));
/* Send Initial Context Setup Response */
rv = tests1ap_build_initial_context_setup_response(&sendbuf, msgindex);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
/* Send Attach Complete + Activate default EPS bearer cotext accept */
rv = tests1ap_build_attach_complete(&sendbuf, msgindex);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
/* Receive EMM information */
recvbuf = pkbuf_alloc(0, MAX_SDU_LEN);
rc = tests1ap_enb_read(sock, recvbuf);
recvbuf->len = 46;
CORE_HEX(_emm_information, strlen(_emm_information), tmp);
ABTS_TRUE(tc, memcmp(recvbuf->payload, tmp, 28) == 0);
ABTS_TRUE(tc, memcmp(recvbuf->payload+43, tmp+43, 3) == 0);
pkbuf_free(recvbuf);
/* eNB disonncect from MME */
rv = tests1ap_enb_close(sock);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
core_sleep(time_from_msec(300));
d_log_set_level(D_MSG_TO_STDOUT, D_LOG_LEVEL_FULL);
doc = BCON_NEW("imsi", BCON_UTF8("001010123456797"));
ABTS_PTR_NOTNULL(tc, doc);
ABTS_TRUE(tc, mongoc_collection_remove(collection,
MONGOC_REMOVE_SINGLE_REMOVE, doc, NULL, &error))
bson_destroy(doc);
mongoc_collection_destroy(collection);
}
abts_suite *test_nas_sm(abts_suite *suite) abts_suite *test_nas_sm(abts_suite *suite)
{ {
suite = ADD_SUITE(suite) suite = ADD_SUITE(suite)
abts_run_test(suite, nas_sm_test1, NULL); abts_run_test(suite, nas_sm_test1, NULL);
abts_run_test(suite, nas_sm_test2, NULL); abts_run_test(suite, nas_sm_test2, NULL);
abts_run_test(suite, nas_sm_test3, NULL);
return suite; return suite;
} }

View File

@ -125,10 +125,16 @@ status_t tests1ap_build_initial_ue_msg(pkbuf_t **pkbuf, int i)
"600021023cd011d1 271a808021100100 0010810600000000 830600000000000d" "600021023cd011d1 271a808021100100 0010810600000000 830600000000000d"
"00000a005c0a0090 11034f18a6f15d01 00004300060000f1 1030390064400800" "00000a005c0a0090 11034f18a6f15d01 00004300060000f1 1030390064400800"
"00f110002343d000 86400130", "00f110002343d000 86400130",
"000c"
"404c000005000800 020002001a002423 0741710809101010 3254767905f0f000"
"0000000e0201d011 d1270780000a0000 0d00c10043000600 00f1102b67006440"
"080000f11054f640 100086400130",
}; };
c_uint16_t len[TESTS1AP_MAX_MESSAGE] = { c_uint16_t len[TESTS1AP_MAX_MESSAGE] = {
92, 92,
108, 108,
80,
}; };
char hexbuf[MAX_SDU_LEN]; char hexbuf[MAX_SDU_LEN];
@ -150,12 +156,17 @@ status_t tests1ap_build_authentication_response(pkbuf_t **pkbuf, int i)
"5ba0", "5ba0",
"000d403500000500 0000020001000800 02001f001a000c0b 07530831c964f076" "000d403500000500 0000020001000800 02001f001a000c0b 07530831c964f076"
"1378760064400800 00f110002343d000 4340060000f11030 39" "1378760064400800 00f110002343d000 4340060000f11030 39",
"000d"
"4038000005000000 05c0020000c80008 00020002001a000c 0b0753087dc78e7c"
"421f9eb900644008 0000f11054f64010 004340060000f110 2b67",
}; };
c_uint16_t len[TESTS1AP_MAX_MESSAGE] = { c_uint16_t len[TESTS1AP_MAX_MESSAGE] = {
66, 66,
57, 57,
60,
}; };
char hexbuf[MAX_SDU_LEN]; char hexbuf[MAX_SDU_LEN];
@ -178,10 +189,15 @@ status_t tests1ap_build_security_mode_complete(pkbuf_t **pkbuf, int i)
"000d403200000500 0000020001000800 02001f001a000908 473c0c819e00075e" "000d403200000500 0000020001000800 02001f001a000908 473c0c819e00075e"
"006440080000f110 002343d000434006 0000f1103039", "006440080000f110 002343d000434006 0000f1103039",
"000d"
"4035000005000000 05c0020000c80008 00020002001a0009 0847c0eb1eb80007"
"5e006440080000f1 1054f64010004340 060000f1102b67",
}; };
c_uint16_t len[TESTS1AP_MAX_MESSAGE] = { c_uint16_t len[TESTS1AP_MAX_MESSAGE] = {
57, 57,
54, 54,
57,
}; };
char hexbuf[MAX_SDU_LEN]; char hexbuf[MAX_SDU_LEN];
@ -206,11 +222,17 @@ status_t tests1ap_build_esm_information_response(pkbuf_t **pkbuf, int i)
"000d403e00000500 0000020001000800 02001f001a001514 27505a0b5301023c" "000d403e00000500 0000020001000800 02001f001a001514 27505a0b5301023c"
"da280908696e7465 726e657400644008 0000f110002343d0 004340060000f110" "da280908696e7465 726e657400644008 0000f110002343d0 004340060000f110"
"3039" "3039",
"000d"
"4041000005000000 05c0020000c80008 00020002001a0015 142793b2bedc0102"
"01da280908696e74 65726e6574006440 080000f11054f640 10004340060000f1"
"102b67"
}; };
c_uint16_t len[TESTS1AP_MAX_MESSAGE] = { c_uint16_t len[TESTS1AP_MAX_MESSAGE] = {
146, 146,
66, 66,
69,
}; };
char hexbuf[MAX_SDU_LEN]; char hexbuf[MAX_SDU_LEN];
@ -235,11 +257,17 @@ status_t tests1ap_build_ue_capability_info_indication(pkbuf_t **pkbuf, int i)
"0831c1a53432b259 ef989007000cdd9c 6331200e0019a332 c662401c003200", "0831c1a53432b259 ef989007000cdd9c 6331200e0019a332 c662401c003200",
"0016402d00000300 0000020001000800 02001f004a401a19 00b801014c598080" "0016402d00000300 0000020001000800 02001f004a401a19 00b801014c598080"
"9c000bf06ec4d001 40302c0000000000 000000" "9c000bf06ec4d001 40302c0000000000 000000",
"0016"
"403f000003000000 05c0020000c80008 00020002004a4029 28013001023cd980"
"00bc000ff06ec4d0 0141b82c00000000 07d404000ef08020 00012a0300008800"
"00",
}; };
c_uint16_t len[TESTS1AP_MAX_MESSAGE] = { c_uint16_t len[TESTS1AP_MAX_MESSAGE] = {
161, 161,
51, 51,
67,
}; };
char hexbuf[MAX_SDU_LEN]; char hexbuf[MAX_SDU_LEN];
@ -262,10 +290,16 @@ status_t tests1ap_build_initial_context_setup_response(pkbuf_t **pkbuf, int i)
"2009002200000300 0040020001000840 02001f0033400f00 0032400a0a1f0a01" "2009002200000300 0040020001000840 02001f0033400f00 0032400a0a1f0a01"
"23c501000508", "23c501000508",
"2009"
"0025000003000040 05c0020000c80008 400200020033400f 000032400a0a1f0a"
"0123a701000008",
}; };
c_uint16_t len[TESTS1AP_MAX_MESSAGE] = { c_uint16_t len[TESTS1AP_MAX_MESSAGE] = {
41, 41,
38, 38,
41,
}; };
char hexbuf[MAX_SDU_LEN]; char hexbuf[MAX_SDU_LEN];
@ -281,14 +315,20 @@ status_t tests1ap_build_initial_context_setup_response(pkbuf_t **pkbuf, int i)
status_t tests1ap_build_attach_complete(pkbuf_t **pkbuf, int i) status_t tests1ap_build_attach_complete(pkbuf_t **pkbuf, int i)
{ {
char *payload[TESTS1AP_MAX_MESSAGE] = { "000d" char *payload[TESTS1AP_MAX_MESSAGE] = {
"000d"
"403a000005000000 05c00100009d0008 00020001001a000e 0d27c183eb950207" "403a000005000000 05c00100009d0008 00020001001a000e 0d27c183eb950207"
"4300035200c20064 40080000f1101079 baf0004340060000 f1105ba0", "4300035200c20064 40080000f1101079 baf0004340060000 f1105ba0",
"", "",
"000d"
"403a000005000000 05c0020000c80008 00020002001a000e 0d27f190fc2b0207"
"4300035200c20064 40080000f11054f6 4010004340060000 f1102b67",
}; };
c_uint16_t len[TESTS1AP_MAX_MESSAGE] = { c_uint16_t len[TESTS1AP_MAX_MESSAGE] = {
62, 62,
0, 0,
62,
}; };
char hexbuf[MAX_SDU_LEN]; char hexbuf[MAX_SDU_LEN];