[FA_dev #1678479] No error in f_EPTF_Var_direct2content: return code added + tests
Change-Id: I5521cec0d070487e670edf2fb097631e037f0b01
Signed-off-by: József Gyürüsi <jozsef.gyurusi@ericsson.com>
diff --git a/src/Variable/EPTF_CLL_Variable_Functions.ttcn b/src/Variable/EPTF_CLL_Variable_Functions.ttcn
index 9f9d3e0..1c36642 100644
--- a/src/Variable/EPTF_CLL_Variable_Functions.ttcn
+++ b/src/Variable/EPTF_CLL_Variable_Functions.ttcn
@@ -2257,7 +2257,10 @@
//
///////////////////////////////////////////////////////////
public function f_EPTF_Var_setContent(in integer pl_idx, in EPTF_Var_DirectContent pl_newContent) runs on EPTF_Var_CT {
- f_EPTF_Var_direct2content(pl_newContent,v_EPTF_Vars[pl_idx].content);
+ if (not f_EPTF_Var_direct2content(pl_newContent,v_EPTF_Vars[pl_idx].content)) {
+ f_EPTF_Var_error(log2str("ERROR:","Cannot set direct content ",pl_newContent," into variable #", pl_idx, " : ", v_EPTF_Vars[pl_idx]));
+ //f_EPTF_Base_stop();
+ };
}
//////////////////////////////////////////////////////////
@@ -4174,7 +4177,9 @@
//f_EPTF_Var_getContent(pl_idx,vl_currentContent);
// try to set new content into current:
var EPTF_Var_Content vl_content := {direct := vl_currentContent};
- f_EPTF_Var_direct2content(pl_newContent,vl_content);
+ if (not f_EPTF_Var_direct2content(pl_newContent,vl_content)) {
+ return false;
+ };
for(var integer i:=0; i<sizeof(v_EPTF_Vars[pl_idx].guardFns); i:=i+1) {
if (v_EPTF_Vars[pl_idx].guardFns[i].funcRef != null) {
@@ -6415,119 +6420,124 @@
//
// Purpose:
// Converts a direct content of an EPTF variable to content (dereferences if it is a reference)
+ // Returns true on success, fail on error
///////////////////////////////////////////////////////////
- private function f_EPTF_Var_direct2content(in EPTF_Var_DirectContent pl_directContent, inout EPTF_Var_Content pl_content) runs on EPTF_Var_CT {
+ private function f_EPTF_Var_direct2content(in EPTF_Var_DirectContent pl_directContent, inout EPTF_Var_Content pl_content) runs on EPTF_Var_CT
+ return boolean {
if (ischosen(pl_content.invalid)) {
if (not ischosen(pl_directContent.unknownVal)) {
- f_EPTF_Var_error(log2str("ERROR:","Cannot convert direct content ",pl_directContent," to invalid content."));
+ f_EPTF_Var_warning(log2str("ERROR:","Cannot convert direct content ",pl_directContent," to invalid content."));
+ return false;
//f_EPTF_Base_stop();
} else {
- return; // Do nothing, leave it invalid
+ return true; // Do nothing, leave it invalid
}
}
if (ischosen(pl_content.direct)) {
if (ischosen(pl_content.direct.intVal) and ischosen(pl_directContent.intVal)) {
pl_content.direct.intVal := pl_directContent.intVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.floatVal) and ischosen(pl_directContent.floatVal)) {
pl_content.direct.floatVal := pl_directContent.floatVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.boolVal) and ischosen(pl_directContent.boolVal)) {
pl_content.direct.boolVal := pl_directContent.boolVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.charstringVal) and ischosen(pl_directContent.charstringVal)) {
pl_content.direct.charstringVal := pl_directContent.charstringVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.octetstringVal) and ischosen(pl_directContent.octetstringVal)) {
pl_content.direct.octetstringVal := pl_directContent.octetstringVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.hexstringVal) and ischosen(pl_directContent.hexstringVal)) {
pl_content.direct.hexstringVal := pl_directContent.hexstringVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.bitstringVal) and ischosen(pl_directContent.bitstringVal)) {
pl_content.direct.bitstringVal := pl_directContent.bitstringVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.integerlistVal) and ischosen(pl_directContent.integerlistVal)) {
pl_content.direct.integerlistVal := pl_directContent.integerlistVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.floatlistVal) and ischosen(pl_directContent.floatlistVal)) {
pl_content.direct.floatlistVal := pl_directContent.floatlistVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.charstringlistVal) and ischosen(pl_directContent.charstringlistVal)) {
pl_content.direct.charstringlistVal := pl_directContent.charstringlistVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.statusLEDVal) and ischosen(pl_directContent.statusLEDVal)) {
pl_content.direct.statusLEDVal := pl_directContent.statusLEDVal;
- return;
+ return true;
}
if (ischosen(pl_content.direct.unknownVal) and ischosen(pl_directContent.unknownVal)) {
pl_content.direct.unknownVal := pl_directContent.unknownVal;
- return;
+ return true;
}
//...
- f_EPTF_Var_error(log2str("ERROR:","Cannot convert direct content ",pl_directContent," to direct content ",pl_content,". Types are incompatible"));
+ f_EPTF_Var_warning(log2str("ERROR:","Cannot convert direct content ",pl_directContent," to direct content ",pl_content,". Types are incompatible"));
+ return false;
//f_EPTF_Base_stop();
}
// referenced content
if (not f_EPTF_Base_cleanupIsInProgress()) {
- return;// cleanup is in progress: referred variable is not modified
+ return true;// cleanup is in progress: referred variable is not modified
}
if ((pl_content.reference.refType == intType) and ischosen(pl_directContent.intVal)) {
f_EPTF_Var_modifyIntRefValue(pl_content.reference.valueRef, pl_directContent.intVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == floatType) and ischosen(pl_directContent.floatVal)) {
f_EPTF_Var_modifyFloatRefValue(pl_content.reference.valueRef, pl_directContent.floatVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == boolType) and ischosen(pl_directContent.boolVal)) {
f_EPTF_Var_modifyBoolRefValue(pl_content.reference.valueRef, pl_directContent.boolVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == charstringType) and ischosen(pl_directContent.charstringVal)) {
f_EPTF_Var_modifyCharstringRefValue(pl_content.reference.valueRef, pl_directContent.charstringVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == octetstringType) and ischosen(pl_directContent.octetstringVal)) {
f_EPTF_Var_modifyOctetstringRefValue(pl_content.reference.valueRef, pl_directContent.octetstringVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == hexstringType) and ischosen(pl_directContent.hexstringVal)) {
f_EPTF_Var_modifyHexstringRefValue(pl_content.reference.valueRef, pl_directContent.hexstringVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == bitstringType) and ischosen(pl_directContent.bitstringVal)) {
f_EPTF_Var_modifyBitstringRefValue(pl_content.reference.valueRef, pl_directContent.bitstringVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == integerlistType) and ischosen(pl_directContent.integerlistVal)) {
f_EPTF_Var_modifyIntegerlistRefValue(pl_content.reference.valueRef, pl_directContent.integerlistVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == floatlistType) and ischosen(pl_directContent.floatlistVal)) {
f_EPTF_Var_modifyFloatlistRefValue(pl_content.reference.valueRef, pl_directContent.floatlistVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == charstringlistType) and ischosen(pl_directContent.charstringlistVal)) {
f_EPTF_Var_modifyCharstringlistRefValue(pl_content.reference.valueRef, pl_directContent.charstringlistVal);
- return;
+ return true;
}
if ((pl_content.reference.refType == statusLEDType) and ischosen(pl_directContent.statusLEDVal)) {
f_EPTF_Var_modifyStatusLEDRefValue(pl_content.reference.valueRef, pl_directContent.statusLEDVal);
- return;
+ return true;
}
//...
- f_EPTF_Var_error(log2str("ERROR:","Cannot convert direct content ",pl_directContent," to referenced content ",pl_content));
+ f_EPTF_Var_warning(log2str("ERROR:","Cannot convert direct content ",pl_directContent," to referenced content ",pl_content));
+ return false;
//f_EPTF_Base_stop();
}
diff --git a/test/DsRestAPI/EPTF_DsRestAPI_Test_Definitions.ttcn b/test/DsRestAPI/EPTF_DsRestAPI_Test_Definitions.ttcn
index a9564fc..d55eeab 100644
--- a/test/DsRestAPI/EPTF_DsRestAPI_Test_Definitions.ttcn
+++ b/test/DsRestAPI/EPTF_DsRestAPI_Test_Definitions.ttcn
@@ -256,6 +256,9 @@
const charstring c_DsRestAPI_Test_dataElementTcStop := "TcStop";
const charstring c_DsRestAPI_Test_varNameTcStop := "stopTC";
+ // datalements level 2: for getData:
+ const charstring c_DsRestAPI_Test_dataElementTcCPS := "TcCPS";
+ const charstring c_DsRestAPI_Test_varNameTcCPS := "TcCPS";
} // group DsRestAPI_Test_DataSource
} //module
diff --git a/test/DsRestAPI/EPTF_DsRestAPI_Test_Functions.ttcn b/test/DsRestAPI/EPTF_DsRestAPI_Test_Functions.ttcn
index f83d71a..1bd4ac0 100644
--- a/test/DsRestAPI/EPTF_DsRestAPI_Test_Functions.ttcn
+++ b/test/DsRestAPI/EPTF_DsRestAPI_Test_Functions.ttcn
@@ -125,6 +125,7 @@
if(pl_dataSource_compRef != null){
f_EPTF_DsRestAPI_Test_getDSfromFile();
f_EPTF_DataSourceClient_init_CT(f_EPTF_Base_selfName(), pl_dataSource_compRef);
+ f_EPTF_DataSourceClient_registerData(v_DsRestAPI_Test_DSMock.DSClientName, f_EPTF_Base_selfName(), refers(f_EPTF_DsRestAPI_Test_DSProcessGetData), pl_dataSource_compRef);
f_EPTF_DataSourceClient_registerDataValue(v_DsRestAPI_Test_DSMock.DSClientName, f_EPTF_Base_selfName(), refers(f_EPTF_DsRestAPI_Test_DSProcessDataValue), pl_dataSource_compRef);
f_EPTF_DataSourceClient_registerSetDataValue(v_DsRestAPI_Test_DSMock.DSClientName, f_EPTF_Base_selfName(), refers(f_EPTF_DsRestAPI_Test_DSProcessSetDataValue), pl_dataSource_compRef);
f_EPTF_DataSourceClient_sendReady(v_DsRestAPI_Test_DSMock.DSClientName, f_EPTF_Base_selfName());
@@ -386,6 +387,49 @@
}
}
+function f_EPTF_DsRestAPI_Test_DSProcessGetData(
+ out charstring pl_dataVarName,
+ in charstring pl_source,
+ in charstring pl_ptcName,
+ in charstring pl_element,
+ in EPTF_DataSource_Params pl_params
+) runs on DsRestAPI_Test_CT return integer {
+ var integer vl_errorCode := -1;
+ var EPTF_CharstringList pl_result := {};
+ pl_dataVarName := log2str("Error: variable not found for dataSource: source: ", pl_source, " element: ", pl_element, " params: ", pl_params); // set it to error message
+
+ select(pl_element) {
+ case (c_DsRestAPI_Test_dataElementTcCPS) {
+ if(0 == f_EPTF_DsRestAPI_Test_DSgetParams(pl_params,{c_DsRestAPI_Test_paramNameEntityGroup, c_DsRestAPI_Test_paramNameScenario, c_DsRestAPI_Test_paramNameTrafficCase}, pl_result)){
+ for(var integer j := 0; j < sizeof(v_DsRestAPI_Test_DSMock.EntityGroups); j := j + 1) {
+ if (pl_result[0] == v_DsRestAPI_Test_DSMock.EntityGroups[j].Value) {
+ for(var integer i := 0; i < sizeof(v_DsRestAPI_Test_DSMock.EntityGroups[j].Scenarios); i := i + 1) {
+ if (pl_result[1] == v_DsRestAPI_Test_DSMock.EntityGroups[j].Scenarios[i].Value) {
+ for(var integer k := 0; k < sizeof(v_DsRestAPI_Test_DSMock.EntityGroups[j].Scenarios[i].TrafficCases); k := k + 1) {
+ if (pl_result[2] == v_DsRestAPI_Test_DSMock.EntityGroups[j].Scenarios[i].TrafficCases[k].Value) {
+ var integer vl_idx := f_EPTF_Var_getId(c_DsRestAPI_Test_varNameTcCPS);
+ if (-1 == vl_idx) {
+ f_EPTF_Var_newFloat(c_DsRestAPI_Test_varNameTcCPS, 10.0, vl_idx);
+ }
+ pl_dataVarName := c_DsRestAPI_Test_varNameTcCPS;
+ vl_errorCode := 0;
+ return vl_errorCode;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ case else {
+
+ }
+ }
+ return vl_errorCode;
+}
+
+
function f_EPTF_DsRestAPI_Test_DSProcessDataValue(out EPTF_Var_DirectContent pl_dataValue,
in charstring pl_source,
in charstring pl_ptcName := "",
diff --git a/test/DsRestAPI/JSON_reqResp/test48.request b/test/DsRestAPI/JSON_reqResp/test48.request
new file mode 100644
index 0000000..a28c122
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test48.request
@@ -0,0 +1,23 @@
+requests.test48 = {
+ "requests" : [
+ {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcCPS",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "TrafficCase_0"
+ }
+ ]
+ }
+ }
+ ]
+}
+
+descriptions.test48 = "Get data for getData handler"
diff --git a/test/DsRestAPI/JSON_reqResp/test48.response b/test/DsRestAPI/JSON_reqResp/test48.response
new file mode 100644
index 0000000..7fc2ba4
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test48.response
@@ -0,0 +1,10 @@
+responses.test48 = {
+ "contentList" : [
+ {
+ "node": {
+ "val": "10.000000",
+ "tp": 2
+ }
+ }
+]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test49.request b/test/DsRestAPI/JSON_reqResp/test49.request
new file mode 100644
index 0000000..ba878e3
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test49.request
@@ -0,0 +1,25 @@
+requests.test49 = {
+ "requests" : [
+ {
+ "setData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcCPS",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "TrafficCase_0"
+ }
+ ],
+ "content": "11.0",
+ "tp": 2
+ }
+ }
+ ]
+}
+
+descriptions.test48 = "Set data for getData handler"
diff --git a/test/DsRestAPI/JSON_reqResp/test49.response b/test/DsRestAPI/JSON_reqResp/test49.response
new file mode 100644
index 0000000..8de4bf7
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test49.response
@@ -0,0 +1,10 @@
+responses.test49 = {
+ "contentList" : [
+ {
+ "node": {
+ "val": "11.000000",
+ "tp": 2
+ }
+ }
+]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test50.request b/test/DsRestAPI/JSON_reqResp/test50.request
new file mode 100644
index 0000000..d022bcb
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test50.request
@@ -0,0 +1,25 @@
+requests.test50 = {
+ "requests" : [
+ {
+ "setData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcCPS",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "TrafficCase_0"
+ }
+ ],
+ "content": "12",
+ "tp": 1
+ }
+ }
+ ]
+}
+
+descriptions.test48 = "Invalid Set data for getData handler: variable type is not correct"
diff --git a/test/DsRestAPI/JSON_reqResp/test50.response b/test/DsRestAPI/JSON_reqResp/test50.response
new file mode 100644
index 0000000..70036a5
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test50.response
@@ -0,0 +1,10 @@
+responses.test50 = {
+ "contentList" : [
+ {
+ "node": {
+ "val": "f_EPTF_DataSourceClient_handleSetDataValue: Invalid iterator or externalData or parameter: \nSource: \"DsRestAPI_Test_DataSource\"\nPTC : \"tc_EPTF_DsRestAPI_Test_DSServer_JSON\"\nElement Name : \"TcCPS\"\nParams: { { paramName := \"EntityGroup\", paramValue := \"EntityGroup_0\" }, { paramName := \"Scenario\", paramValue := \"Scenario_0\" }, { paramName := \"TrafficCase\", paramValue := \"TrafficCase_0\" } }\nValue to Set: { intVal := 12 }\nIndex List: { }\nReason: Source Variable \"TcCPS\" is read-only or value is not allowed",
+ "tp": 4
+ }
+ }
+]
+}