jolly has uploaded this change for review.

View Change

IPAd: Add test for function ES10b.ExecuteFallbackMechanism

Related: SYS#8101
Change-Id: I66745a24e227ac5c638f6dc5228f7f3fbe2deea1
---
M ipad/IPAd_Tests.ttcn
M library/euicc/SGP32Definitions_Templates.ttcn
M library/euicc/SGP32Definitions_Types.ttcn
3 files changed, 70 insertions(+), 8 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/69/43269/1
diff --git a/ipad/IPAd_Tests.ttcn b/ipad/IPAd_Tests.ttcn
index 31cc164..7276528 100644
--- a/ipad/IPAd_Tests.ttcn
+++ b/ipad/IPAd_Tests.ttcn
@@ -293,23 +293,27 @@

/* Expect a pre-defined request (optional), and send a pre-defined response. This is a shortcut that only works in case
* the response does not depend on the request. */
-private function f_vpcd_transceive(octetstring response, octetstring expected_request := ''O) runs on IPAd_ConnHdlr {
+private function f_vpcd_transceive(octetstring response,
+ octetstring expected_request := ''O) runs on IPAd_ConnHdlr return octetstring {
+ var octetstring request;

/* In case we do not use the VPCD (because we have some other kind of eUICC emulation or even a real card
* present), we just skip. */
if (mp_use_vpcd == false) {
- return;
+ return ''O;
}

- f_vpcd_store_data(expected_request);
+ request := f_vpcd_store_data(expected_request);
f_vpcd_store_data_final_ack(lengthof(response));
if (response != ''O) {
f_vpcd_get_response_multi(response);
}
+ return request;
}

/* Handle the opening of logical channel 1 and the selection of the ISD-R */
-private function f_es10x_init(boolean iot := true) runs on IPAd_ConnHdlr {
+private function f_es10x_init(boolean iot := true,
+ boolean eim_init := true) runs on IPAd_ConnHdlr {
var charstring eim_fqdn := mp_esipa_ip & ":" & int2str(mp_esipa_port);

/* If we decide not to use vpcd, then we must not initialize anything here */
@@ -338,11 +342,14 @@
/* Expect the IPAd to query the eID from the eUICC */
f_vpcd_transceive(enc_GetEuiccDataResponse(valueof(ts_getEuiccDataResponse)), 'BF3E035C015A'O);

- /* Expect the IPAd to query the eIM configuration data from the eUICC */
- f_vpcd_transceive(enc_GetEimConfigurationDataResponse(valueof(ts_getEimConfigurationDataResponse(eim_fqdn))), 'BF5500'O);
+ /* Not all tests expect IPAd to query eUICC data and notfications before talking to eIM. */
+ if (eim_init) {
+ /* Expect the IPAd to query the eIM configuration data from the eUICC */
+ f_vpcd_transceive(enc_GetEimConfigurationDataResponse(valueof(ts_getEimConfigurationDataResponse(eim_fqdn))), 'BF5500'O);

- /* Expect the IPAd to query the eUICC for pending notifications, we respond with an empty list */
- f_vpcd_transceive(enc_RetrieveNotificationsListResponse(valueof(ts_retrieveNotificationsListResponse_empty)), 'BF2B00'O);
+ /* Expect the IPAd to query the eUICC for pending notifications, we respond with an empty list */
+ f_vpcd_transceive(enc_RetrieveNotificationsListResponse(valueof(ts_retrieveNotificationsListResponse_empty)), 'BF2B00'O);
+ }
}

/* Handle the closing of logical channel 1 */
@@ -746,12 +753,39 @@
setverdict(pass);
}

+/* A testcase to tigger the 'execute fallback mechanism' via ES10b interface */
+private function f_TC_func_exec_fallback_mech(charstring id) runs on IPAd_ConnHdlr {
+ f_exec_ipad("execute-fallback-mechanism");
+ f_es10x_init(eim_init := false);
+
+ var octetstring asn := f_vpcd_transceive(enc_ExecuteFallbackMechanismResponse(valueof(ts_executeFallbackMechanismResponse(0))), ''O);
+ var ExecuteFallbackMechanismRequest req := dec_ExecuteFallbackMechanismRequest(asn);
+ if (not match(req, tr_executeFallbackMechanismRequest())) {
+ setverdict(fail, "Unexprected ES10b request: ", req);
+ }
+
+ f_es10x_close();
+ f_stop_ipad();
+
+ setverdict(pass);
+}
+testcase TC_func_exec_fallback_mech() runs on MTC_CT {
+ var charstring id := testcasename();
+ var IPAd_ConnHdlrPars pars := f_init_pars();
+ var IPAd_ConnHdlr vc_conn;
+ f_init(id);
+ vc_conn := f_start_handler(refers(f_TC_func_exec_fallback_mech), pars);
+ vc_conn.done;
+ setverdict(pass);
+}
+
control {
execute ( TC_proc_indirect_prfle_dwnld() );
execute ( TC_proc_euicc_pkg_dwnld_exec() );
execute ( TC_proc_euicc_pkg_dwnld_exec_rollback() );
execute ( TC_proc_euicc_data_req() );
execute ( TC_get_eim_pkg_req_rej() );
+ execute ( TC_func_exec_fallback_mech() );
}

}
diff --git a/library/euicc/SGP32Definitions_Templates.ttcn b/library/euicc/SGP32Definitions_Templates.ttcn
index 7bd36bd..a3e5914 100644
--- a/library/euicc/SGP32Definitions_Templates.ttcn
+++ b/library/euicc/SGP32Definitions_Templates.ttcn
@@ -1631,6 +1631,24 @@
}
}

+/* GSMA SGP.32, section 5.9.20 */
+template (present) ExecuteFallbackMechanismRequest
+tr_executeFallbackMechanismRequest(template (present) boolean refreshFlag := ?) := {
+ refreshFlag := refreshFlag
+}
+template (value) ExecuteFallbackMechanismRequest
+ts_executeFallbackMechanismRequest(template (value) boolean refreshFlag := false) := {
+ refreshFlag := refreshFlag
+}
+template (present) ExecuteFallbackMechanismResponse
+tr_executeFallbackMechanismResponse(template (present) integer errorCode := ?) := {
+ executeFallbackMechanismResult := errorCode
+}
+template (value) ExecuteFallbackMechanismResponse
+ts_executeFallbackMechanismResponse(template (value) integer errorCode := 127) := {
+ executeFallbackMechanismResult := errorCode
+}
+
/* GSMA SGP.32, section 5.9.4 */
template (present) AddInitialEimResponse
tr_addInitialEimResponse := {
diff --git a/library/euicc/SGP32Definitions_Types.ttcn b/library/euicc/SGP32Definitions_Types.ttcn
index c344823..4dc53f9 100644
--- a/library/euicc/SGP32Definitions_Types.ttcn
+++ b/library/euicc/SGP32Definitions_Types.ttcn
@@ -48,4 +48,14 @@
external function enc_ProfileRollbackResponse(in ProfileRollbackResponse msg) return octetstring
with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };

+external function dec_ExecuteFallbackMechanismRequest(in octetstring stream) return ExecuteFallbackMechanismRequest
+with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" };
+external function enc_ExecuteFallbackMechanismRequest(in ExecuteFallbackMechanismRequest msg) return octetstring
+with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
+
+external function dec_ExecuteFallbackMechanismResponse(in octetstring stream) return ExecuteFallbackMechanismResponse
+with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" };
+external function enc_ExecuteFallbackMechanismResponse(in ExecuteFallbackMechanismResponse msg) return octetstring
+with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" };
+
}

To view, visit change 43269. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I66745a24e227ac5c638f6dc5228f7f3fbe2deea1
Gerrit-Change-Number: 43269
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas@eversberg.eu>