blob: 6e8438f2aa0cd980fb6a57417941abc8dea48c66 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2018 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Module: EPTF_Variable_Test_Testcases
//
// Purpose:
// This module contains the testcases of generic EPTF Variable.
//
// Module depends on:
// <EPTF_Variable_Test_Definitions>
// <EPTF_Variable_Test_Functions>
// <EPTF_CLL_Variable_Definitions>
// <EPTF_CLL_Variable_Functions>
// <EPTF_CLL_Base_Functions>
// <EPTF_CLL_Common_Definitions>
//
//
// Current Owner:
// EFLOATT
//
// Last Review Date:
// 2010-xx-xx
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////////
module EPTF_Variable_Test_Testcases {
//=========================================================================
// Import part
//=========================================================================
import from EPTF_Variable_Test_Definitions all;
import from EPTF_Variable_Test_Functions all;
import from EPTF_CLL_Variable_Definitions all;
import from EPTF_CLL_Variable_Functions all;
import from EPTF_CLL_Base_Functions all;
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_Logging_Functions all;
//=========================================================================
// Testcases
//=========================================================================
// check if the various EPTF Var types are working perfectly
testcase tc_EPTF_Var_CreateAndModifyTest() runs on VariableTest_CT {
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
vlc_VarTest1_CT.start(f_EPTF_Var_CreateAndModifyTest("test1",{}));
vlc_VarTest1_CT.done;
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_SubscribeTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create("PTC1");
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create("PTC2");
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_SubscribeTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_SubscribeTest_SubscriberComponent("test2",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_SubscribeTestPull() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create("PTC1");
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create("PTC2");
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_SubscribeTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_SubscribeTest_SubscriberComponent("test2",{vlc_VarTest1_CT},pull));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_AdjustTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_AdjustTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_AdjustTest_SubscriberComponent("test2",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_AdjustTestPull() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_AdjustTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_AdjustTest_SubscriberComponent("test2",{vlc_VarTest1_CT},pull));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_UnsubscribeTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_UnsubscribeTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_UnsubscribeTest_SubscriberComponent("test2",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_GuardfunctionTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_GuardfunctionTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_GuardfunctionTest_SubscriberComponent("test2",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_CalculationfunctionTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_CalculationfunctionTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_CalculationfunctionTest_SubscriberComponent("test2",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_PostprocfunctionTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_PostprocfunctionTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_PostprocfunctionTest_SubscriberComponent("test2",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_BufferedTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_BufferedVariableTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_BufferedVariableTest_SubscriberComponent("test2",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_LongBufferedTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_LongBufferedVariableTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_LongBufferedVariableTest_SubscriberComponent("test2",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_ComplexSubscribeTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest3_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
connect(vlc_VarTest2_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_complexSubscribeTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_complexSubscribeTest_SubscriberComponent1("test2",{vlc_VarTest1_CT,vlc_VarTest3_CT}));
vlc_VarTest3_CT.start(f_EPTF_Var_complexSubscribeTest_SubscriberComponent2("test3",{vlc_VarTest2_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
vlc_VarTest3_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
disconnect(vlc_VarTest2_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_ComplexAdjustTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest3_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
connect(vlc_VarTest2_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_complexAdjustTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_complexAdjustTest_SubscriberComponent1("test2",{vlc_VarTest1_CT,vlc_VarTest3_CT}));
vlc_VarTest3_CT.start(f_EPTF_Var_complexAdjustTest_SubscriberComponent2("test3",{vlc_VarTest2_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
vlc_VarTest3_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
disconnect(vlc_VarTest2_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_ComplexBufferedTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest3_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
connect(vlc_VarTest2_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_complexBufferedVariableTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_complexBufferedVariableTest_SubscriberComponent1("test2",{vlc_VarTest1_CT,vlc_VarTest3_CT}));
vlc_VarTest3_CT.start(f_EPTF_Var_complexBufferedVariableTest_SubscriberComponent2("test3",{vlc_VarTest2_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
vlc_VarTest3_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
disconnect(vlc_VarTest2_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_ComplexDoubleBufferedTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest3_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
connect(vlc_VarTest2_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_complexDoubleBufferedVariableTest_ProviderComponent("test1",{vlc_VarTest2_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_complexDoubleBufferedVariableTest_SubscriberComponent1("test2",{vlc_VarTest1_CT,vlc_VarTest3_CT}));
vlc_VarTest3_CT.start(f_EPTF_Var_complexDoubleBufferedVariableTest_SubscriberComponent2("test3",{vlc_VarTest2_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
vlc_VarTest3_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
disconnect(vlc_VarTest2_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_ComplexParalelAdjustTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest3_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
connect(vlc_VarTest1_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_complexParalelAdjustTest_ProviderComponent("test1",{vlc_VarTest2_CT,vlc_VarTest3_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_complexParalelAdjustTest_SubscriberComponent1("test2",{vlc_VarTest1_CT}));
vlc_VarTest3_CT.start(f_EPTF_Var_complexParalelAdjustTest_SubscriberComponent2("test3",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
vlc_VarTest3_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
disconnect(vlc_VarTest1_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_ComplexParalelSubscribeTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest3_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
connect(vlc_VarTest1_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_complexParalelSubscribeTest_ProviderComponent("test1",{vlc_VarTest2_CT,vlc_VarTest3_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_complexParalelSubscribeTest_SubscriberComponent1("test2",{vlc_VarTest1_CT}));
vlc_VarTest3_CT.start(f_EPTF_Var_complexParalelSubscribeTest_SubscriberComponent2("test3",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
vlc_VarTest3_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
disconnect(vlc_VarTest1_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_ComplexParalelUnsubscribeTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest3_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
connect(vlc_VarTest1_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_complexParalelUnsubscribeTest_ProviderComponent("test1",{vlc_VarTest2_CT,vlc_VarTest3_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_complexParalelUnsubscribeTest_SubscriberComponent1("test2",{vlc_VarTest1_CT}));
vlc_VarTest3_CT.start(f_EPTF_Var_complexParalelUnsubscribeTest_SubscriberComponent2("test3",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
vlc_VarTest3_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
disconnect(vlc_VarTest1_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_ComplexParalelBufferedTest() runs on VariableTest_CT{
f_EPTF_Var_init_CT("MTC");
var VariableTest_CT vlc_VarTest1_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest2_CT := VariableTest_CT.create;
var VariableTest_CT vlc_VarTest3_CT := VariableTest_CT.create;
connect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
connect(vlc_VarTest1_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
vlc_VarTest1_CT.start(f_EPTF_Var_complexParalelBufferedTest_ProviderComponent("test1",{vlc_VarTest2_CT,vlc_VarTest3_CT}));
vlc_VarTest2_CT.start(f_EPTF_Var_complexParalelBufferedTest_SubscriberComponent1("test2",{vlc_VarTest1_CT}));
vlc_VarTest3_CT.start(f_EPTF_Var_complexParalelBufferedTest_SubscriberComponent2("test3",{vlc_VarTest1_CT}));
vlc_VarTest1_CT.done;
vlc_VarTest2_CT.done;
vlc_VarTest3_CT.done;
disconnect(vlc_VarTest1_CT:statusPort1,vlc_VarTest2_CT:statusPort1);
disconnect(vlc_VarTest1_CT:statusPort2,vlc_VarTest3_CT:statusPort1);
f_EPTF_Base_stop(pass);
}
testcase tc_EPTF_Var_SimpleHashMapTest() runs on VariableTest_CT {
f_EPTF_Var_init_CT("MTC");
f_EPTF_Var_CT_LogAll("----- START -------");
f_EPTF_Var_init_CT("SimpleHashMapTest");
f_EPTF_Var_CT_LogAll("----- INIT -------");
f_EPTF_Var_SimpleHashMap();
f_EPTF_Base_cleanup_CT();
}
///////////////////////////////////////////////////////////
// Testcase: tc_EPTF_Var_Test_createVarFromCfg
//
// Purpose:
// to test f_EPTF_Var_createVarFromCfg() function
//
// Requirement:
// -
//
// Action:
// - calls f_EPTF_Var_init_CT() function with tsp_EPTF_Test_selfname
// - creates a <EPTF_Var_DirectContent> array using tsp_EPTF_Var_cfg, (name not contains tsp_EPTF_Test_selfname)
// - calls several times the f_EPTF_Var_createVarFromCfg() function with the created array
// - calls the f_EPTF_Var_getContent() function to get the content of the created EPTF Variable
// - matches the content with the expected one
// - matches the initiated RBtree with the expected one
// - creates a <EPTF_Var_DirectContent> array using tsp_EPTF_Var_cfg, (name contains tsp_EPTF_Test_selfname)
// - calls several times the f_EPTF_Var_createVarFromCfg() function with the created array and 3rd parameter set to false
// - calls the f_EPTF_Var_getContent() function to get the content of the created EPTF Variable
// - matches the content with the expected one
//
// Expected Result:
// created EPTF variable as same as the expected one
///////////////////////////////////////////////////////////
testcase tc_EPTF_Var_Test_createVarFromCfg() runs on VariableTest_CT {
var integer vl_success := -1;
var EPTF_Var_InitialValueList vl_init;
var EPTF_Var_DirectContent vl_content;
f_EPTF_Var_init_CT(tsp_EPTF_Test_selfname);
for (var integer i := 0; i < sizeof(tsp_EPTF_Var_cfg); i := i + 1) {
vl_init[i] := tsp_EPTF_Var_cfg[i];
vl_init[i].name := substr(tsp_EPTF_Var_cfg[i].name, lengthof(tsp_EPTF_Test_selfname) + 1, lengthof(tsp_EPTF_Var_cfg[i].name) - lengthof(tsp_EPTF_Test_selfname) - 1);
vl_init[i].initValue := tsp_EPTF_Var_cfg[i].initValue;
vl_success := f_EPTF_Var_createVarFromCfg(vl_init[i].name);
if (vl_success != -1) {
f_EPTF_Var_getContent(vl_success, vl_content);
if(vl_content == vl_init[i].initValue) {
setverdict(pass);
} else {
log("Error: wrong variable created: ", f_EPTF_Var_getName(vl_success), "expected: ", vl_init[i]);
setverdict(fail);
}
} else {
log("Error: variable not created: ", vl_init[i].name);
setverdict(fail);
}
}
vl_init := tsp_EPTF_Var_cfg;
for (var integer i := 0; i < sizeof(tsp_EPTF_Var_cfg); i := i + 1) {
vl_success := f_EPTF_Var_createVarFromCfg(vl_init[i].name, tsp_EPTF_Var_cfg, false);
if (vl_success != -1) {
f_EPTF_Var_getContent(vl_success, vl_content);
if(vl_content == vl_init[i].initValue) {
setverdict(pass);
} else {
log("Error: wrong variable created: ", f_EPTF_Var_getName(vl_success), "expected: ", vl_init[i]);
setverdict(fail);
}
} else {
log("Error: variable not created: ", vl_init[i].name);
setverdict(fail);
}
}
f_EPTF_Base_cleanup_CT();
}
///////////////////////////////////////////////////////////
// Testcase: tc_EPTF_Var_Test_loadVarFromCfg
//
// Purpose:
// to test f_EPTF_Var_loadVarFromCfg() function
//
// Requirement:
// -
//
// Action:
// - calls f_EPTF_Var_init_CT() function with tsp_EPTF_Test_selfname
// - creates a <EPTF_Var_DirectContent> array using tsp_EPTF_Var_cfg, (name not contains tsp_EPTF_Test_selfname)
// - calls several times the f_EPTF_Var_createVarFromCfg() function with the created array
// - calls several times the f_EPTF_Var_loadVarFromCfg() function with the created array
// - calls the f_EPTF_Var_getContent() function to get the content of the loaded EPTF Variable
// - matches the content with the expected one
// - matches the initiated RBtree with the expected one
// - creates a <EPTF_Var_DirectContent> array using tsp_EPTF_Var_cfg, (name contains tsp_EPTF_Test_selfname)
// - calls several times the f_EPTF_Var_createVarFromCfg() function with the created array and 3rd parameter set to false
// - calls several times the f_EPTF_Var_loadVarFromCfg() function with the created array and 3rd parameter set to false
// - calls the f_EPTF_Var_getContent() function to get the content of the loaded EPTF Variable
// - matches the content with the expected one
//
// Expected Result:
// loaded EPTF variable as same as the expected one
///////////////////////////////////////////////////////////
testcase tc_EPTF_Var_Test_loadVarFromCfg() runs on VariableTest_CT {
var integer vl_success := -1;
var EPTF_Var_InitialValueList vl_init;
var EPTF_Var_DirectContent vl_content;
f_EPTF_Var_init_CT(tsp_EPTF_Test_selfname);
for (var integer i := 0; i < sizeof(tsp_EPTF_Var_cfg); i := i + 1) {
vl_init[i] := tsp_EPTF_Var_cfg[i];
vl_init[i].name := substr(tsp_EPTF_Var_cfg[i].name, lengthof(tsp_EPTF_Test_selfname) + 1, lengthof(tsp_EPTF_Var_cfg[i].name) - lengthof(tsp_EPTF_Test_selfname) - 1);
vl_init[i].initValue := tsp_EPTF_Var_cfg[i].initValue;
vl_success := f_EPTF_Var_createVarFromCfg(vl_init[i].name);
vl_success := f_EPTF_Var_loadVarFromCfg(vl_init[i].name);
if (vl_success != -1) {
f_EPTF_Var_getContent(vl_success, vl_content);
if(vl_content == vl_init[i].initValue) {
setverdict(pass);
} else {
log("Error: wrong variable loaded: ", f_EPTF_Var_getName(vl_success), "expected: ", vl_init[i]);
setverdict(fail);
}
} else {
log("Error: variable not loaded: ", vl_init[i].name);
setverdict(fail);
}
}
vl_init := tsp_EPTF_Var_cfg;
for (var integer i := 0; i < sizeof(tsp_EPTF_Var_cfg); i := i + 1) {
vl_success := f_EPTF_Var_createVarFromCfg(vl_init[i].name, tsp_EPTF_Var_cfg, false);
vl_success := f_EPTF_Var_loadVarFromCfg(vl_init[i].name, tsp_EPTF_Var_cfg, false);
if (vl_success != -1) {
f_EPTF_Var_getContent(vl_success, vl_content);
if(vl_content == vl_init[i].initValue) {
setverdict(pass);
} else {
log("Error: wrong variable loaded: ", f_EPTF_Var_getName(vl_success), "expected: ", vl_init[i]);
setverdict(fail);
}
} else {
log("Error: variable not loaded: ", vl_init[i].name);
setverdict(fail);
}
}
f_EPTF_Base_cleanup_CT();
}
///////////////////////////////////////////////////////////
// Testcase: tc_EPTF_Var_getRemote(_local)
//
// Purpose:
// to test parallel call of the f_EPTF_Var_getRemoteContent() function
//
// Requirement:
// -
//
// Action:
// - calls f_EPTF_Var_init_CT() function with tsp_EPTF_Test_selfname
// - creates three EPTF variables
// - activates an altstep that calls f_EPTF_Var_getRemoteContent in parallel for each variables
// - the altstep checks if the f_EPTF_Var_getRemoteContent is called parallel indeed
// - the altstep checks if the content retuned by f_EPTF_Var_getRemoteContent is the correct value
// - the testcase checks if the f_EPTF_Var_getRemoteContent is called for all three variables
//
// Expected Result:
// the testcase should pass, the content retuned by f_EPTF_Var_getRemoteContent is the correct value
// The tc_EPTF_Var_getRemote_local will not block execution => no parallel getRemote is running
///////////////////////////////////////////////////////////
type component Var_GetRemote_CT extends EPTF_Var_CT {
timer t_getRemote := 0.0;
var integer v_getRemoteCounter := 0;
var Var_GetRemote_CT v_remoteComp;
}
altstep as_EPTF_Var_getRemote() runs on Var_GetRemote_CT {
[] t_getRemote.timeout {
if(v_getRemoteCounter==3) {
repeat; // runs only three times
}
t_getRemote.start;
var EPTF_Var_DirectContent vl_remoteValue;
v_getRemoteCounter := v_getRemoteCounter + 1;
var charstring vl_varName := "intVar"&int2str(v_getRemoteCounter);
f_EPTF_Var_getRemoteContent(v_remoteComp,vl_varName, vl_remoteValue);
// if v_remoteComp == self => f_EPTF_Var_getRemoteContent will not block
if (v_remoteComp != self) {
f_setverdictFail(v_getRemoteCounter==1); // the altstep should be activated inside f_EPTF_Var_getRemoteContent also
}
var EPTF_Var_DirectContent vl_currentContent;
f_EPTF_Var_getContent(f_EPTF_Var_getId(vl_varName),vl_currentContent);
log("remote/current content of intVar is: ", vl_remoteValue,"/",vl_currentContent);
f_setverdictFail(vl_remoteValue!=vl_currentContent); // the two contents should be the same
repeat;
}
}
testcase tc_EPTF_Var_getRemote_local() runs on Var_GetRemote_CT {
f_EPTF_Var_init_CT("getRemote_local");
v_remoteComp := self;
var integer vl_idx;
f_EPTF_Var_newInt("intVar1",1,vl_idx);
f_EPTF_Var_newInt("intVar2",2,vl_idx);
f_EPTF_Var_newInt("intVar3",3,vl_idx);
t_getRemote.start;
var default vl_def := activate(as_EPTF_Var_getRemote());
timer t_wait := 2.0;
t_wait.start; t_wait.timeout;
f_setverdictFail(v_getRemoteCounter!=3); // the test should be executed for all three variables
f_EPTF_Base_stop(pass);
}
function f_EPTF_Var_getRemote_behaviour() runs on Var_GetRemote_CT {
f_EPTF_Var_init_CT("getRemote_behaviour");
var integer vl_idx;
f_EPTF_Var_newInt("intVar1",1,vl_idx);
f_EPTF_Var_newInt("intVar2",2,vl_idx);
f_EPTF_Var_newInt("intVar3",3,vl_idx);
f_EPTF_Base_wait4Shutdown();
}
testcase tc_EPTF_Var_getRemote() runs on Var_GetRemote_CT {
f_EPTF_Var_init_CT("getRemote");
v_remoteComp := Var_GetRemote_CT.create;
v_remoteComp.start(f_EPTF_Var_getRemote_behaviour());
var integer vl_idx;
f_EPTF_Var_newInt("intVar1",1,vl_idx);
f_EPTF_Var_newInt("intVar2",2,vl_idx);
f_EPTF_Var_newInt("intVar3",3,vl_idx);
t_getRemote.start;
var default vl_def := activate(as_EPTF_Var_getRemote());
timer t_wait := 2.0;
t_wait.start; t_wait.timeout;
f_setverdictFail(v_getRemoteCounter!=3); // the test should be executed for all three variables
f_EPTF_Base_stop(pass);
}
///////////////////////////////////////////////////////////
// Testcase: tc_EPTF_Var_adjustRemote_blocking
//
// Purpose:
// to test parallel call of the f_EPTF_Var_adjustRemoteContent_Blocking() function
//
// Requirement:
// -
//
// Action:
// - calls f_EPTF_Var_init_CT() function with tsp_EPTF_Test_selfname
// - creates three EPTF variables
// - activates an altstep that calls f_EPTF_Var_adjustRemoteContent_Blocking in parallel for each variables
// - the altstep checks if the f_EPTF_Var_adjustRemoteContent_Blocking is called parallel indeed
// - the altstep checks if the content retuned by f_EPTF_Var_adjustRemoteContent_Blocking is the correct value
// - the testcase checks if the f_EPTF_Var_adjustRemoteContent_Blocking is called for all three variables
// - the testcase checks if the f_EPTF_Var_adjustRemoteContent_Blocking retuns false if the remote variable does not exsit
// - the testcase checks if the f_EPTF_Var_adjustRemoteContent_Blocking retuns false if the remote variable has a local provider
//
// Expected Result:
// the testcase should pass, the content retuned by f_EPTF_Var_adjustRemoteContent_Blocking is the correct value
///////////////////////////////////////////////////////////
type component Var_AdjustRemote_CT extends EPTF_Var_CT {
timer t_getRemote := 0.0;
var integer v_getRemoteCounter := 0;
timer t_exit := 3.0;
}
altstep as_EPTF_Var_adjustRemote_Blocking() runs on Var_AdjustRemote_CT {
[] t_getRemote.timeout {
if(v_getRemoteCounter==3) {
repeat; // runs only three times
}
t_getRemote.start;
v_getRemoteCounter := v_getRemoteCounter + 1;
var EPTF_Var_DirectContent vl_remoteValue := {intVal:=v_getRemoteCounter+1};
var charstring vl_varName := "intVar"&int2str(v_getRemoteCounter);
f_setverdictFail(not f_EPTF_Var_adjustRemoteContent_Blocking(self,vl_varName, vl_remoteValue)); // should return true
f_setverdictFail(v_getRemoteCounter==1); // the altstep should be activated inside f_EPTF_Var_getRemoteContent also
var EPTF_Var_DirectContent vl_currentContent;
f_EPTF_Var_getContent(f_EPTF_Var_getId(vl_varName),vl_currentContent);
log("remote/current content of intVar is: ", vl_remoteValue,"/",vl_currentContent);
f_setverdictFail(vl_remoteValue!=vl_currentContent); // the two contents should be the same
repeat;
}
[] t_exit.timeout {
log("Deadlock is detected. Exiting...");
f_EPTF_Base_stopAll(fail);
}
}
testcase tc_EPTF_Var_adjustRemote_blocking() runs on Var_AdjustRemote_CT {
f_EPTF_Var_init_CT("getRemote");
var integer vl_idx;
f_EPTF_Var_newInt("intVar1",1,vl_idx);
f_EPTF_Var_newInt("intVar2",2,vl_idx);
f_EPTF_Var_newInt("intVar3",3,vl_idx);
t_getRemote.start;
t_exit.start;
var default vl_def := activate(as_EPTF_Var_adjustRemote_Blocking());
// below are two false tests (they should generate warnings also)
// adjusting a nonexistent variable:
var EPTF_Var_DirectContent vl_remoteValue := {intVal:=10};
f_setverdictFail(f_EPTF_Var_adjustRemoteContent_Blocking(self,"intVar", vl_remoteValue)); // should return false
// adjusting a existing variable with calcfn:
f_EPTF_Var_subscribeLocal(vl_idx,{calcFn := {null,{},{}}});
f_setverdictFail(f_EPTF_Var_adjustRemoteContent_Blocking(self,"intVar3", vl_remoteValue)); // should return false
timer t_wait := 2.0;
t_wait.start; t_wait.timeout;
f_setverdictFail(v_getRemoteCounter!=3); // the test should be executed for all three variables
f_EPTF_Base_stop(pass);
}
///////////////////////////////////////////////////////////
// Testcase: tc_EPTF_Var_Test_directContent_EmptyOctetString
//
// Purpose:
// to test if there is a problem in the f_EPTF_Var_direct2content function
// when a variable has an empty octetstring
//
// Requirement:
// -
//
// Action:
// A new variable with the type octetstring is created and then an empty
// octetstring type DirectContent will be adjusted to it.
//
// Expected Result:
// the testcase should pass or if the error exists then it will cause
// assertion failed error
///////////////////////////////////////////////////////////
testcase tc_EPTF_Var_Test_directContent_EmptyOctetString()
runs on EPTF_Var_CT
{
f_EPTF_Var_init_CT("pl_selfName")
var EPTF_Var_DirectContent vl_content;
vl_content.octetstringVal := ''O;
var integer vl_varIdOfMsg := -1;
f_EPTF_Var_newOctetstring("pl_name", '12'O, vl_varIdOfMsg)
//there sould be a problem in this function
f_EPTF_Var_adjustContent(vl_varIdOfMsg, vl_content);
timer t_wait;
t_wait.start( 15.0 );
t_wait.timeout;
setverdict ( pass );
f_EPTF_Base_cleanup_CT();
}
///////////////////////////////////////////////////////////
// Testcase: tc_EPTF_Variable_Test_directContent_unknownVal
//
// Purpose:
// to test if the newly introduced unknown value in directcontent
//
// Requirement:
// -
//
// Action:
// -
//
// Expected Result:
// -
///////////////////////////////////////////////////////////
testcase tc_EPTF_Var_Test_directContent_unknownVal()
runs on EPTF_Var_CT
{
f_EPTF_Var_init_CT("Variable Component")
var EPTF_Var_DirectContent vl_content;
vl_content.unknownVal := {intType};
log("\n vl_content: ", vl_content, "\n");
vl_content.unknownVal := {dataType := floatType};
log("\n vl_content: ", vl_content, "\n");
vl_content := {unknownVal := {boolType}};
log("\n vl_content: ", vl_content, "\n");
vl_content := {unknownVal := {dataType := charstringType}};
log("\n vl_content: ", vl_content, "\n");
vl_content.unknownVal := {omit};
log("\n vl_content: ", vl_content, "\n");
vl_content.unknownVal := {dataType := omit};
log("\n vl_content: ", vl_content, "\n");
setverdict ( pass );
f_EPTF_Base_cleanup_CT();
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkPeriodLength() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_init_CT("subscribeWithCustomPeriod_checkPeriodLength");
var default vl_def := activate(as_EPTF_Var_Test_subscribeWithCustomPeriod_updateVars());
f_EPTF_Var_newInt("intVar1",1,vl_intVarIdx);
// set default sync period to 3.0 sec
f_EPTF_Var_setSyncInterval(3.0);
// set elementary period to 1.0 sec
f_EPTF_Var_setMinSyncInterval(1.0);
f_EPTF_Var_subscribeRemote(self,"intVar1",sampled, v_remoteIntSubscrIdx,-,-);
f_EPTF_Var_subscribeRemote(self,"intVar1",sampled, v_intVarRefreshA_10Idx,"intVarRefreshA_10",10);
f_EPTF_Var_subscribeRemote(self,"intVar1",sampled, v_intVarRefreshB_10Idx,"intVarRefreshB_10",10);
f_EPTF_Var_subscribeRemote(self,"intVar1",sampled, v_intVarRefresh_20Idx,"intVarRefresh_20",20);
timer t_wait;
t_wait.start(5.0); t_wait.timeout;
// add postproc to subscribers
f_EPTF_Var_addPostProcFn(v_remoteIntSubscrIdx, {refers(f_EPTF_Var_Test_remoteIntSubscr_PostProc), {}});
f_EPTF_Var_addPostProcFn(v_intVarRefreshA_10Idx, {refers(f_EPTF_Var_Test_intVarRefreshA_10_PostProc), {}});
f_EPTF_Var_addPostProcFn(v_intVarRefreshB_10Idx, {refers(f_EPTF_Var_Test_intVarRefreshB_10_PostProc), {}});
f_EPTF_Var_addPostProcFn(v_intVarRefresh_20Idx, {refers(f_EPTF_Var_Test_intVarRefresh_20_PostProc), {}});
t_updateVars.start;
//We can't expect high precision since there are network communication elements
const float c_EPTF_Var_requiredPrecision := 0.5;
// start an alt for 35 secs.
t_wait.start(35.2); t_wait.timeout;
// check if the variables were updated correct number of times
if (f_getDifference(v_remoteIntSubscr_Period,3.0)>c_EPTF_Var_requiredPrecision) {
setverdict(fail, "Incorrect sync period: ",v_remoteIntSubscr_Period," instead of 3.0");
} else
if (f_getDifference(v_intVarRefreshA_10_Period,1.0*10.0)>c_EPTF_Var_requiredPrecision) {
setverdict(fail, "Incorrect sync period for intVarRefreshA_10: ",v_intVarRefreshA_10_Period,
" instead of 10.0");
} else
if (f_getDifference(v_intVarRefreshB_10_Period,1.0*10.0)>c_EPTF_Var_requiredPrecision) {
setverdict(fail, "Incorrect sync period for intVarRefreshB_10: ",v_intVarRefreshB_10_Period,
" instead of 10.0");
} else
if (f_getDifference(v_intVarRefresh_20_Period,1.0*20.0)>c_EPTF_Var_requiredPrecision) {
setverdict(fail, "Incorrect sync period for intVarRefresh_20: ",v_intVarRefresh_20_Period,
" instead of 20.0");
} else {
setverdict(pass);
}
f_EPTF_Base_cleanup_CT();
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange(sampled, false);
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange_timelined() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange(timeLine, false);
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange_sampledAtSync() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange(sampledAtSync, false);
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange_realtime() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange(realtime, false);
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange_chained() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange(sampled, true);
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange_sampledAtSync_chained() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange(sampledAtSync, true);
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange_realtime_chained() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange(realtime, true);
}
testcase tc_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange_timelined_chained() runs on Var_Test_SubscribeWithCustomPeriod_CT {
f_EPTF_Var_Test_subscribeWithCustomPeriod_checkContentChange(timeLine, true);
}
private function f_EPTF_Var_UIVars_resetvariable(
in integer pl_idx,
in EPTF_IntegerList pl_argList)
runs on EPTF_Var_CT
{
var integer vl_start := f_EPTF_Var_getIntValue(pl_idx);
action("f_EPTF_Var_UIVars_resetvariable [", pl_idx,":",vl_start, "]" , f_EPTF_Var_getName(pl_idx));
if (vl_start!=0)
{
action("Reseting [", pl_idx, "]");
f_EPTF_Var_setContent(pl_idx, {intVal := 0});
}
}
testcase tc_EPTF_Var_Test_adjustSubscribedVarsInPostproc() runs on EPTF_Var_CT {
f_EPTF_Var_init_CT("adjustSubscribedVarsInPostproc");
var integer i,j,k;
f_EPTF_Var_newInt("i",-1,i);
f_EPTF_Var_addPostProcFn(i, { refers(f_EPTF_Var_UIVars_resetvariable), {}} );
f_EPTF_Var_subscribeRemote(self,"i",realtime,j,"j");
f_EPTF_Var_subscribeRemote(self,"j",realtime,k,"k");
f_EPTF_Var_adjustContent(i,{intVal:=1});
timer t_wait := 11.0;
t_wait.start; t_wait.timeout;
action("tc_EPTF_Var_Test_adjustSubscribedVarsInPostproc - i:", f_EPTF_Var_getIntValue(i)," - j:", f_EPTF_Var_getIntValue(j)," - k:", f_EPTF_Var_getIntValue(k));
if (f_EPTF_Var_getIntValue(k)==0) {
setverdict(pass);
} else {
setverdict(fail);
}
f_EPTF_Base_stop(none);
}
//Negative tests testing tha case when the subscribe times out
group subscribeTimeout{
const charstring c_varname := "var2Subscribe"
const charstring c_refVarname := "refVar2Subscribe"
function f_EPTF_Var_Test_subscribeServerBehavior() runs on EPTF_Var_CT {
f_EPTF_Var_init_CT("subscribeServerBlocking");
var integer vl_varId;
f_EPTF_Var_newInt(c_varname, 1, vl_varId)
timer t_preparation := 1.0;
t_preparation.start;
t_preparation.timeout;
timer t1
t1.start( 9.0 )
while(t1.read < 2.0){}
f_EPTF_Base_wait4Shutdown()
}
function f_EPTF_Var_Test_checkServer(in EPTF_Var_CT pl_server)runs on EPTF_Var_CT{
// just make an initial connection:
timer t_preparation := 2.0;
t_preparation.start;
var EPTF_Var_DirectContent vl_content;
f_EPTF_Var_getRemoteContent(pl_server,c_varname,vl_content);
if (vl_content != {intVal:=1}) {
setverdict(fail,"remote variable does not exist");
f_EPTF_Base_stop(none);
}
t_preparation.timeout; // here server will not send answers
}
testcase tc_EPTF_Var_Test_subscribeTimeout() runs on EPTF_Var_CT{
f_EPTF_Var_init_CT("MTC");
f_EPTF_Var_setMaxWaitTime(0.2)
f_EPTF_Base_setNegativeTestMode();
f_EPTF_Base_setExpectedErrorMsg("*No response received for subscribe with data: *\"var2Subscribe\"realtime*");
var EPTF_Var_CT vl_server := EPTF_Var_CT.create;
vl_server.start( f_EPTF_Var_Test_subscribeServerBehavior() );
// just make an initial connection:
f_EPTF_Var_Test_checkServer(vl_server);
var integer vl_varId;
f_EPTF_Var_subscribeRemote(vl_server, c_varname, realtime, vl_varId)
timer t1;
t1.start( 1.0 )
t1.timeout
f_EPTF_Base_cleanup_CT()
}
// f_EPTF_Var_resubscribeRemote no longer blocks execution
testcase tc_EPTF_Var_Test_resubscribeTimeout() runs on EPTF_Var_CT{
f_EPTF_Var_init_CT("MTC");
f_EPTF_Var_setMaxWaitTime(0.2)
//f_EPTF_Base_setNegativeTestMode();
//f_EPTF_Base_setExpectedErrorMsg("*No response received for subscribe with data: *\"var2Subscribe\"realtime*");
var EPTF_Var_CT vl_server := EPTF_Var_CT.create;
vl_server.start( f_EPTF_Var_Test_subscribeServerBehavior() );
// just make an initial connection:
f_EPTF_Var_Test_checkServer(vl_server);
var integer vl_varId;
f_EPTF_Var_newInt("bubu", 11, vl_varId)
timer t1;
t1.start( 1.0 )
f_EPTF_Var_resubscribeRemote(vl_server, c_varname, realtime, vl_varId)
if (t1.read < 0.2) {
setverdict(pass, "resubscribe did not block execution")
} else {
setverdict(fail, "resubscribe should not block execution. Execution time was longer than 0.2 sec.")
}
t1.timeout
f_EPTF_Base_cleanup_CT()
}
testcase tc_EPTF_Var_Test_subscribeRefTimeout() runs on EPTF_Var_CT{
f_EPTF_Var_init_CT("MTC");
f_EPTF_Var_setMaxWaitTime(0.2)
f_EPTF_Base_setNegativeTestMode();
f_EPTF_Base_setExpectedErrorMsg("*No response received for subscribe with data: *\"var2Subscribe\"realtime*");
var EPTF_Var_CT vl_server := EPTF_Var_CT.create;
vl_server.start( f_EPTF_Var_Test_subscribeServerBehavior() );
// just make an initial connection:
f_EPTF_Var_Test_checkServer(vl_server);
var integer vl_varId;
var EPTF_Var_ReferencedContent vl_local2subs := {intType, ''O};
f_EPTF_Var_subscribeRemoteRef(vl_local2subs, vl_server, c_varname, realtime, vl_varId)
timer t1;
t1.start( 1.0 )
t1.timeout
f_EPTF_Base_cleanup_CT()
}
}
testcase tc_EPTF_Var_Test_subscribeRemote_negative() runs on VariableTest_CT {
f_EPTF_Var_init_CT("MTC");
f_EPTF_Var_setMaxWaitTime(0.2)
f_EPTF_Base_setNegativeTestMode();
f_EPTF_Base_setExpectedErrorMsg("*Variable *non-existent var* on component mtc does not exist. Subscribe failed by the subscriber*");
// subscribe to nonexistent var in pull mode:
var integer vl_subscriber_idx;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "non-existent var",
pl_subscriptionMode := pull,
pl_idx := vl_subscriber_idx,
pl_localName := "subscriber of non-existent var"
);
timer t1;
t1.start( 1.0 )
t1.timeout
f_EPTF_Base_cleanup_CT()
}
// to test f_EPTF_Var_subscribeRemote_nonBlocking during connect & subscribe as well (artf542055)
testcase tc_EPTF_Var_Test_subscribeRemote_nonBlocking() runs on VariableTest_CT {
f_EPTF_Var_init_CT("Test_subscribeRemote_nonBlocking");
f_EPTF_Var_setMaxWaitTime(0.2);
var VariableTest_CT vl_server := VariableTest_CT.create;
vl_server.start( f_EPTF_Var_Test_subscribeServerBehavior() );
var EPTF_Var_resubscribeRemoteResp_handler vl_subscribeCallback := {
handlerFn := refers(f_EPTF_Var_Test_subscribeRemote_nonBlocking_callBack),
argList := {}
}
timer t1 := 1.0;
t1.start;
t1.timeout;
var default vl_default := activate(as_EPTF_Var_Test_subscribeRemote_nonBlocking());
t_subscribeRemote_nonblocking.start;
v_subscribeRemote_nonblockingHandlerCalled := 0;
f_EPTF_Var_subscribeRemote_nonBlocking(vl_server, c_varname, realtime, "", -1, vl_subscribeCallback);
if(v_subscribeRemote_nonblockingHandlerCalled == 0){
v_subscribeRemote_nonblockingHandlerCalled := 2;
}
timer t2;
t2.start(1.0);
t2.timeout;
deactivate(vl_default);
f_EPTF_Base_cleanup_CT();
}
// callback function for tc_EPTF_Var_Test_subscribeRemote_nonBlocking
function f_EPTF_Var_Test_subscribeRemote_nonBlocking_callBack(in integer pl_idx, in boolean pl_result, in EPTF_IntegerList pl_argList) runs on VariableTest_CT {
if(pl_result != true or pl_idx < 0){
setverdict(fail,"Unsuccessful subscribe.");
f_EPTF_Base_stop(fail);
return;
}
if(v_subscribeRemote_nonblockingHandlerCalled == 2){
setverdict(pass,"Non-blocking mode works properly. Code is not blocked.");
f_EPTF_Base_stop(pass);
}else {
setverdict(fail,"Non-blocking mode does not work. Code is blocked.");
f_EPTF_Base_stop(fail);
}
}
// default altstep for tc_EPTF_Var_Test_subscribeRemote_nonBlocking & tc_EPTF_Var_Test_subscribeRemote_nonBlocking_parallel
altstep as_EPTF_Var_Test_subscribeRemote_nonBlocking() runs on VariableTest_CT {
[] t_subscribeRemote_nonblocking.timeout{
if(v_subscribeRemote_nonblockingHandlerCalled == 0){
v_subscribeRemote_nonblockingHandlerCalled := 1;
}
repeat;
}
}
// to test buffering in case of non blocking parallel subscribes(artf542055)
testcase tc_EPTF_Var_Test_subscribeRemote_nonBlocking_parallel() runs on VariableTest_CT {
f_EPTF_Var_init_CT("Test_subscribeRemote_nonBlocking_parallel");
f_EPTF_Var_setMaxWaitTime(0.2);
var VariableTest_CT vl_server1 := VariableTest_CT.create;
var VariableTest_CT vl_server2 := VariableTest_CT.create;
vl_server1.start( f_EPTF_Var_Test_subscribeServerBehavior_nonBlocking() );
vl_server2.start( f_EPTF_Var_Test_subscribeServerBehavior_nonBlocking() );
var EPTF_Var_resubscribeRemoteResp_handler vl_subscribeCallback := {
handlerFn := refers(f_EPTF_Var_Test_subscribeRemote_nonBlocking_parallel_callBack),
argList := {}
}
timer t1 := 1.0;
t1.start;
t1.timeout;
var default vl_default := activate(as_EPTF_Var_Test_subscribeRemote_nonBlocking());
t_subscribeRemote_nonblocking.start;
v_subscribeRemote_nonblockingHandlerCalled := 0;
var charstring vl_localVarName := "localVar";
for(var integer i:=0; i<100; i:=i+1) {
f_EPTF_Var_subscribeRemote_nonBlocking(vl_server1, c_varname&int2str(i), realtime, vl_localVarName&"_server1_"&int2str(i), -1, vl_subscribeCallback);
}
for(var integer i:=0; i<100; i:=i+1) {
f_EPTF_Var_subscribeRemote_nonBlocking(vl_server2, c_varname&int2str(i), realtime, vl_localVarName&"_server2_"&int2str(i), -1, vl_subscribeCallback);
}
if(v_subscribeRemote_nonblockingHandlerCalled == 0){
v_subscribeRemote_nonblockingHandlerCalled := 2;
}
timer t2 := 1.0;
t2.start;
t2.timeout;
var integer vl_remoteValue := -1;
// check the values from server1
for(var integer i:=0; i<100; i:=i+1) {
vl_remoteValue := f_EPTF_Var_getIntValue(i);
if(vl_remoteValue != i){
setverdict(fail,"Value of local var: ",i," does not match with the remote value: ",vl_remoteValue);
f_EPTF_Base_stop(fail)
}
}
// check the values from server2
for(var integer i:=100; i<200; i:=i+1) {
vl_remoteValue := f_EPTF_Var_getIntValue(i);
if(vl_remoteValue != i-100){
setverdict(fail,"Value of local var: ",i," does not match with the remote value: ",vl_remoteValue);
f_EPTF_Base_stop(fail)
}
}
deactivate(vl_default);
setverdict(pass,"All subscription to remote variable was OK. Non-blocking mode works properly in case of parallel subscribes.");
f_EPTF_Base_stop(pass);
}
// server behavior function for tc_EPTF_Var_Test_subscribeRemote_nonBlocking_parallel
function f_EPTF_Var_Test_subscribeServerBehavior_nonBlocking() runs on VariableTest_CT {
f_EPTF_Var_init_CT("subscribeServerBehavior_nonBlocking");
var integer vl_remoteVarIndex := -1;
for(var integer i:=0; i<100; i:=i+1) {
f_EPTF_Var_newInt(c_varname&int2str(i), i, vl_remoteVarIndex); // vl_remoteVarIndex value does not matter
}
timer t1;
t1.start( 9.0 );
while(t1.read < 2.0){};
f_EPTF_Base_wait4Shutdown();
}
// callback function for tc_EPTF_Var_Test_subscribeRemote_nonBlocking_parallel
function f_EPTF_Var_Test_subscribeRemote_nonBlocking_parallel_callBack(in integer pl_idx, in boolean pl_result, in EPTF_IntegerList pl_argList) runs on VariableTest_CT {
if(pl_result != true or pl_idx < 0){
setverdict(fail,"Unsuccessful subscribe.");
f_EPTF_Base_stop(fail);
return;
}
if(v_subscribeRemote_nonblockingHandlerCalled == 2){
// Non-blocking mode works properly. Code is not blocked. Continue the execution.
}else {
setverdict(fail,"Non-blocking mode does not work. Code is blocked.");
f_EPTF_Base_stop(fail);
}
}
group SubsCanAdjust {
function f_EPTF_Var_Test_subsCanAdjust_wait(in float pl_time) {
timer t_wait := pl_time;
t_wait.start; t_wait.timeout;
}
testcase tc_EPTF_Var_Test_subsCanAdjust_flagTest() runs on EPTF_Var_CT{
f_EPTF_Var_init_CT("MTC");
var integer vl_mainVarIdx := -1;
f_EPTF_Var_newInt("mainVar",0,vl_mainVarIdx);
var integer vl_subs1Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "mainVar",
pl_subscriptionMode := realtime,
pl_idx := vl_subs1Idx,
pl_localName := "subs1"
);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=true) {
setverdict(fail,"Initial value of subsCanAdjust flag is incorrect");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=f_EPTF_Var_getSubsCanAdjust(vl_subs1Idx)) {
setverdict(fail,"The subsCanAdjust flag is different in the subscriber after subscribe");
f_EPTF_Base_stop(fail);
}
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, false);
var integer vl_subs2Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "mainVar",
pl_subscriptionMode := realtime,
pl_idx := vl_subs2Idx,
pl_localName := "subs2"
);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=false) {
setverdict(fail,"Updated value of subsCanAdjust flag is incorrect");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=f_EPTF_Var_getSubsCanAdjust(vl_subs1Idx)) {
setverdict(fail,"The subsCanAdjust flag is different in the subscriber after f_EPTF_Var_setSubsCanAdjustubscribe");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=f_EPTF_Var_getSubsCanAdjust(vl_subs2Idx)) {
setverdict(fail,"The subsCanAdjust flag is different in the subscriber after subscribe after f_EPTF_Var_setSubsCanAdjustubscribe");
f_EPTF_Base_stop(fail);
}
var integer vl_subs21Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "subs2",
pl_subscriptionMode := realtime,
pl_idx := vl_subs21Idx,
pl_localName := "subs21"
);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=f_EPTF_Var_getSubsCanAdjust(vl_subs21Idx)) {
setverdict(fail,"The subsCanAdjust flag is different in the subscriber of the subscriber");
f_EPTF_Base_stop(fail);
}
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, true);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=true) {
setverdict(fail,"Changed value of subsCanAdjust flag is incorrect");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=f_EPTF_Var_getSubsCanAdjust(vl_subs1Idx)) {
setverdict(fail,"The subsCanAdjust flag is different in the subscriber after f_EPTF_Var_setSubsCanAdjustubscribe 2");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=f_EPTF_Var_getSubsCanAdjust(vl_subs2Idx)) {
setverdict(fail,"The subsCanAdjust flag is different in the subscriber after subscribe after f_EPTF_Var_setSubsCanAdjustubscribe");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getSubsCanAdjust(vl_mainVarIdx)!=f_EPTF_Var_getSubsCanAdjust(vl_subs21Idx)) {
setverdict(fail,"The subsCanAdjust flag is different in the subscriber of the subscriber");
f_EPTF_Base_stop(fail);
}
setverdict(pass);
f_EPTF_Base_cleanup_CT()
}
testcase tc_EPTF_Var_Test_subsCanAdjust_adjustMainTest() runs on EPTF_Var_CT{
f_EPTF_Var_init_CT("MTC");
var integer vl_mainVarIdx := -1;
f_EPTF_Var_newInt("mainVar",0,vl_mainVarIdx);
var integer vl_subs1Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "mainVar",
pl_subscriptionMode := realtime,
pl_idx := vl_subs1Idx,
pl_localName := "subs1"
);
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, false);
f_EPTF_Var_adjustContent(vl_mainVarIdx,{intVal := 1});
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getIntValue(vl_subs1Idx)!=1) {
setverdict(fail,"Content of subscriber is not updated after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
var integer vl_subs2Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "mainVar",
pl_subscriptionMode := realtime,
pl_idx := vl_subs2Idx,
pl_localName := "subs2"
);
f_EPTF_Var_adjustContent(vl_mainVarIdx,{intVal := 2});
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getIntValue(vl_subs2Idx)!=2) {
setverdict(fail,"Content of subscriber is not updated after subscribed after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
var integer vl_subs21Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "subs2",
pl_subscriptionMode := realtime,
pl_idx := vl_subs21Idx,
pl_localName := "subs21"
);
f_EPTF_Var_adjustContent(vl_mainVarIdx,{intVal := 3});
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getIntValue(vl_subs21Idx)!=3) {
setverdict(fail,"Content of subscriber of subscriber is not updated after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
setverdict(pass);
f_EPTF_Base_cleanup_CT()
}
testcase tc_EPTF_Var_Test_subsCanAdjust_adjustSubsTest() runs on EPTF_Var_CT{
f_EPTF_Var_init_CT("MTC");
var integer vl_mainVarIdx := -1;
f_EPTF_Var_newInt("mainVar",0,vl_mainVarIdx);
var integer vl_subs1Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "mainVar",
pl_subscriptionMode := realtime,
pl_idx := vl_subs1Idx,
pl_localName := "subs1"
);
var integer vl_subs11Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "subs1",
pl_subscriptionMode := realtime,
pl_idx := vl_subs11Idx,
pl_localName := "subs11"
);
// adjusting subscriber
// CanAdjust: false
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, false);
// no wait: check adjust Nack
//f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
f_EPTF_Var_adjustContent(vl_subs1Idx,{intVal := 1});
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getIntValue(vl_mainVarIdx)!=0) {
setverdict(fail,"Content of main var is updated after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs1Idx)!=0) {
setverdict(fail,"Content of subscriber is updated after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs11Idx)!=0) {
setverdict(fail,"Content of subscriber of subsciber is updated after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
// no wait: check adjust_Blocking Nack
//f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (true == f_EPTF_Var_adjustContent_Blocking(vl_subs1Idx,{intVal := 1})) {
setverdict(fail,"The return value of adjustContent_Blocking is wrong (should be false) after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getIntValue(vl_mainVarIdx)!=0) {
setverdict(fail,"Content of main var is updated after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs1Idx)!=0) {
setverdict(fail,"Content of subscriber is updated after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs11Idx)!=0) {
setverdict(fail,"Content of subscriber of subsciber is updated after subsCanAdjust flag is set to false");
f_EPTF_Base_stop(fail);
}
// CanAdjust: true
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, true);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
f_EPTF_Var_adjustContent(vl_subs1Idx,{intVal := 2});
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getIntValue(vl_mainVarIdx)!=2) {
setverdict(fail,"Content of main var is not updated after subsCanAdjust flag is set to true");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs1Idx)!=2) {
setverdict(fail,"Content of subscriber is not updated after subsCanAdjust flag is set to true");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs11Idx)!=2) {
setverdict(fail,"Content of subscriber of subsciber is not updated after subsCanAdjust flag is set to true");
f_EPTF_Base_stop(fail);
}
// adjusting subscriber of subscriber
// CanAdjust: true
f_EPTF_Var_adjustContent(vl_subs11Idx,{intVal := 3});
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getIntValue(vl_mainVarIdx)!=3) {
setverdict(fail,"Content of main var is not updated after adjusting content of subscriber of subscriber");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs1Idx)!=f_EPTF_Var_getIntValue(vl_mainVarIdx)) {
setverdict(fail,"Content of subscriber is not updated after adjusting content of subscriber of subscriber");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs11Idx)!=f_EPTF_Var_getIntValue(vl_mainVarIdx)) {
setverdict(fail,"Content of subscriber of subscriber is not updated after adjusting content of subscriber of subscriber");
f_EPTF_Base_stop(fail);
}
// CanAdjust: false
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, false);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
f_EPTF_Var_adjustContent(vl_subs11Idx,{intVal := 4});
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if (f_EPTF_Var_getIntValue(vl_mainVarIdx)!=3) {
setverdict(fail,"Content of main var is not updated after adjusting content of subscriber of subscriber");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs1Idx)!=f_EPTF_Var_getIntValue(vl_mainVarIdx)) {
setverdict(fail,"Content of subscriber is not updated after adjusting content of subscriber of subscriber");
f_EPTF_Base_stop(fail);
}
if (f_EPTF_Var_getIntValue(vl_subs11Idx)!=f_EPTF_Var_getIntValue(vl_mainVarIdx)) {
setverdict(fail,"Content of subscriber of subscriber is not updated after adjusting content of subscriber of subscriber");
f_EPTF_Base_stop(fail);
}
setverdict(pass);
f_EPTF_Base_cleanup_CT()
}
function f_EPTF_Var_Test_subsCanAdjust_callBack(in integer pl_idx, in EPTF_IntegerList pl_argList) runs on EPTF_Var_CT {
var integer vl_ctrVarIdx := pl_argList[0];
if (vl_ctrVarIdx==-1) {
return;
}
f_EPTF_Var_adjustContent(vl_ctrVarIdx,{intVal := 1+f_EPTF_Var_getIntValue(vl_ctrVarIdx)});
}
testcase tc_EPTF_Var_Test_subsCanAdjust_callBack() runs on EPTF_Var_CT{
f_EPTF_Var_init_CT("MTC");
var integer vl_ctrVarIdx := -1;
f_EPTF_Var_newInt("callbackCounter",0,vl_ctrVarIdx);
var integer vl_mainVarIdx := -1;
f_EPTF_Var_newInt("mainVar",0,vl_mainVarIdx);
var integer vl_subs1Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "mainVar",
pl_subscriptionMode := realtime,
pl_idx := vl_subs1Idx,
pl_localName := "subs1"
);
var integer vl_subs11Idx := -1;
f_EPTF_Var_subscribeRemote(
pl_remoteCompRef := self,
pl_remoteProviderVarName := "subs1",
pl_subscriptionMode := realtime,
pl_idx := vl_subs11Idx,
pl_localName := "subs11"
);
f_EPTF_Var_addSubsCanAdjustNotifyFn(vl_ctrVarIdx,{refers(f_EPTF_Var_Test_subsCanAdjust_callBack),{vl_ctrVarIdx}});
f_EPTF_Var_addSubsCanAdjustNotifyFn(vl_mainVarIdx,{refers(f_EPTF_Var_Test_subsCanAdjust_callBack),{vl_ctrVarIdx}});
f_EPTF_Var_addSubsCanAdjustNotifyFn(vl_subs1Idx,{refers(f_EPTF_Var_Test_subsCanAdjust_callBack),{vl_ctrVarIdx}});
f_EPTF_Var_addSubsCanAdjustNotifyFn(vl_subs11Idx,{refers(f_EPTF_Var_Test_subsCanAdjust_callBack),{vl_ctrVarIdx}});
// CanAdjust: false
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, false);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if( 3!=f_EPTF_Var_getIntValue(vl_ctrVarIdx)) {
setverdict(fail,"Callbacks were called "&log2str(f_EPTF_Var_getIntValue(vl_ctrVarIdx))&" times instead of 3");
f_EPTF_Base_stop(fail);
}
// CanAdjust: re-set to false, callbacks should not be called:
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, false);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if( 3!=f_EPTF_Var_getIntValue(vl_ctrVarIdx)) {
setverdict(fail,"Callbacks were called "&log2str(f_EPTF_Var_getIntValue(vl_ctrVarIdx))&" times instead of 3 after re-set");
f_EPTF_Base_stop(fail);
}
// CanAdjust: true
f_EPTF_Var_setSubsCanAdjust(vl_mainVarIdx, true);
f_EPTF_Var_Test_subsCanAdjust_wait(0.1);
if( 6!=f_EPTF_Var_getIntValue(vl_ctrVarIdx)) {
setverdict(fail,"Callbacks were called "&log2str(f_EPTF_Var_getIntValue(vl_ctrVarIdx))&" times instead of 6");
f_EPTF_Base_stop(fail);
}
setverdict(pass);
f_EPTF_Base_cleanup_CT()
}
} // group SubsCanAdjust
group MaxWaitTimeForByeAck {
type component EPTF_Var_Test_MaxWaitTimeForByeAck_CT extends EPTF_Var_CT {
var float v_byeAckWaitTime := 20.0;
var float v_startTime := 0.0;
}
function f_EPTF_Var_Test_logging_preamble(in charstring pl_message) runs on EPTF_Var_Test_MaxWaitTimeForByeAck_CT {
if (match(pl_message,pattern "*--VAR CLEANUP TIMEOUT-- Not all responses received for bye messages.")) {
var float vl_currentTime := f_EPTF_Base_getRelTimeInSecs();
var float vl_warningTime := vl_currentTime-v_startTime;
var float vl_error := vl_warningTime-v_byeAckWaitTime;
if (vl_error*vl_error<0.01) {
setverdict(pass, "ByeAck received in correct time");
} else {
setverdict(fail, "ByeAck received in incorrect time. The difference is: ", vl_error);
}
}
}
function f_EPTF_Var_Test_maxWaitTimeForByeAck_behaviour(in float pl_waitTime) runs on EPTF_Var_Test_MaxWaitTimeForByeAck_CT {
f_EPTF_Var_init_CT("MTC");
v_byeAckWaitTime := pl_waitTime;
f_EPTF_Logging_registerPreambleFn(refers(f_EPTF_Var_Test_logging_preamble));
var integer vl_idx;
f_EPTF_Var_subscribeRemote(mtc, "int", realtime, vl_idx);
f_EPTF_Var_setMaxWaitTimeForByeAck(pl_waitTime);
timer t_wait := 1.0;
t_wait.start; t_wait.timeout;
// it is not possible to check if the warning was received or not, because when the custom cleanup is executed, the var cleanup has not yet been started! =>
// in this case the verdict of the testcase will be none
v_startTime := f_EPTF_Base_getRelTimeInSecs();
f_EPTF_Base_stop(none);
}
// wait a given time without handling other events:
function f_EPTF_Var_Test_wait(in float pl_waitTime) runs on EPTF_Var_CT {
timer t_restart := 0.0;
t_restart.start;
var float vl_startTime := f_EPTF_Base_getRelTimeInSecs();
alt {
[] t_restart.timeout {
for(var integer i:=0; i<10000000; i:=i+1) {
var float f:=1.234;
f:=f*f;
}
if (f_EPTF_Base_getRelTimeInSecs()-vl_startTime < pl_waitTime) {
t_restart.start;
repeat;
}
}
}
}
testcase tc_EPTF_Var_Test_maxWaitTimeForByeAck() runs on EPTF_Var_CT{
const float c_waitTime := 2.0;
f_EPTF_Var_init_CT("MTC");
var integer vl_idx;
f_EPTF_Var_newInt("int", 1, vl_idx);
var EPTF_Var_Test_MaxWaitTimeForByeAck_CT vl_comp := EPTF_Var_Test_MaxWaitTimeForByeAck_CT.create;
vl_comp.start(f_EPTF_Var_Test_maxWaitTimeForByeAck_behaviour(c_waitTime));
timer t_wait := 0.5;
t_wait.start; t_wait.timeout;
f_EPTF_Var_Test_wait(c_waitTime + 2.0);
f_EPTF_Base_stop(none);
}
} // group MaxWaitTimeForByeAck
group StringConversion {
// tests the f_EPTF_Var_str2directContent function for all types.
// converts a directContent to str and back, then checks if the two are the same
testcase tc_EPTF_Var_Test_toStringConversion() runs on VariableTest_CT {
f_EPTF_Var_init_CT("toStringConversion");
// check conversionFinctions:
var EPTF_Var_DirectContent vl_currentContent;
var charstring vl_strValue;
var EPTF_Var_DirectContent vl_newContent;
//integer:
vl_currentContent := {intVal := 1};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {intVal := 0};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//float:
vl_currentContent := {floatVal := 1.0};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatVal := 0.0};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//bool:
vl_currentContent := {boolVal := true};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {boolVal := false};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//charstring:
vl_currentContent := {charstringVal := " 1.0 2.0 "};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {charstringVal := ""};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//charstring:
vl_currentContent := {charstringVal := ""};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {charstringVal := " "};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//hexstring:
vl_currentContent := {hexstringVal := 'ABD'H};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {hexstringVal := ''H};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//octetstring:
vl_currentContent := {octetstringVal := 'ABCD'O};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {octetstringVal := ''O};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//bitstring:
vl_currentContent := {bitstringVal := '10101'B};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {bitstringVal := ''B};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//integerList:
vl_currentContent := {integerlistVal := {1,2}};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {integerlistVal := {}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//floatList:
vl_currentContent := {floatlistVal := {1.0,2.0}};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatlistVal := {}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//charstringList:
vl_currentContent := {charstringlistVal := {"1.0","2.0"}};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {charstringlistVal := {}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//statusLED:
vl_currentContent := {statusLEDVal := {led_green, "green"}};
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {statusLEDVal := {led_black, omit}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent) {
setverdict(fail, "Conversion failed for value "&log2str(vl_currentContent)&". Converted value: "&log2str(vl_newContent));
f_EPTF_Base_stop(none);
}
//...
f_EPTF_Base_stop(pass);
}
// tests the f_EPTF_Var_str2directContent function for all types.
// converts a string to directContent, then converts the resulting directContent to str and back, then checks if the two directContents are the same
testcase tc_EPTF_Var_Test_fromStringConversion() runs on VariableTest_CT {
f_EPTF_Var_init_CT("toStringConversion");
// check conversionFinctions:
var EPTF_Var_DirectContent vl_currentContent;
var charstring vl_currentStrValue;
var charstring vl_strValue;
var EPTF_Var_DirectContent vl_newContent;
//integer:
vl_currentContent := {intVal := 0};
vl_currentStrValue := " 1 ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {intVal := 0};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "1" or vl_newContent != {intVal := 1}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//float:
vl_currentContent := {floatVal := 0.0};
vl_currentStrValue := " 1.0 ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatVal := 0.0};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "1.000000" or vl_newContent != {floatVal := 1.0}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//float:
vl_currentContent := {floatVal := 0.0};
vl_currentStrValue := " 12 ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatVal := 0.0};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "12.000000" or vl_newContent != {floatVal := 12.0}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//float:
vl_currentContent := {floatVal := 0.0};
vl_currentStrValue := " 1.0e+3 ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatVal := 0.0};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "1000.000000" or vl_newContent != {floatVal := 1000.0}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//float:
vl_currentContent := {floatVal := 0.0};
vl_currentStrValue := " 1.0e-3 ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatVal := 0.0};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "0.001000" or vl_newContent != {floatVal := 0.001}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//bool:
vl_currentContent := {boolVal := false};
vl_currentStrValue := " true ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {boolVal := false};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "true" or vl_newContent != {boolVal := true}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//charstring:
vl_currentContent := {charstringVal := ""};
vl_currentStrValue := " 1.0 2.0 ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {charstringVal := ""};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != " 1.0 2.0 " or vl_newContent != {charstringVal := " 1.0 2.0 "}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//charstring:
vl_currentContent := {charstringVal := ""};
vl_currentStrValue := "";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {charstringVal := " AA "};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "" or vl_newContent != {charstringVal := ""}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//hexstring:
vl_currentContent := {hexstringVal := ''H};
vl_currentStrValue := " ABD ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {hexstringVal := ''H};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "ABD" or vl_newContent != {hexstringVal := 'ABD'H}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//hexstring:
vl_currentContent := {hexstringVal := ''H};
vl_currentStrValue := "";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {hexstringVal := 'AA'H};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "" or vl_newContent != {hexstringVal := ''H}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//octetstring:
vl_currentContent := {octetstringVal := ''O};
vl_currentStrValue := " ABCD ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {octetstringVal := ''O};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "ABCD" or vl_newContent != {octetstringVal := 'ABCD'O}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//octetstring:
vl_currentContent := {octetstringVal := ''O};
vl_currentStrValue := "";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {octetstringVal := 'AA'O};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "" or vl_newContent != {octetstringVal := ''O}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//bitstring:
vl_currentContent := {bitstringVal := ''B};
vl_currentStrValue := " 010101 ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {bitstringVal := ''B};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "010101" or vl_newContent != {bitstringVal := '010101'B}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//bitstring:
vl_currentContent := {bitstringVal := ''B};
vl_currentStrValue := "";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {bitstringVal := '11'B};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "" or vl_newContent != {bitstringVal := ''B}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//integerList:
vl_currentContent := {integerlistVal := {}};
vl_currentStrValue := " {1,2} ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {integerlistVal := {}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "{ 1, 2 }" or vl_newContent != {integerlistVal := {1,2}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//integerList:
vl_currentContent := {integerlistVal := {1}};
vl_currentStrValue := " { } ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {integerlistVal := {1}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "{ }" or vl_newContent != {integerlistVal := {}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//floatList:
vl_currentContent := {floatlistVal := {}};
vl_currentStrValue := " {1.0,2.0} ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatlistVal := {}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "{ 1.000000, 2.000000 }" or vl_newContent != {floatlistVal := {1.0,2.0}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//floatList:
vl_currentContent := {floatlistVal := {}};
vl_currentStrValue := " {-1.0e-1,2.0E1} ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatlistVal := {}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "{ -0.100000, 20.000000 }" or vl_newContent != {floatlistVal := {-0.1,20.0}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//floatList:
vl_currentContent := {floatlistVal := {1.0}};
vl_currentStrValue := " { } ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {floatlistVal := {1.0}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "{ }" or vl_newContent != {floatlistVal := {}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//charstringList:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {""1.0"", ""a"",""2.0""} ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {charstringlistVal := {}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "{ ""1.0"", ""a"", ""2.0"" }" or vl_newContent != {charstringlistVal := {"1.0","a","2.0"}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//charstringList:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {"""", """",""a""} ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {charstringlistVal := {}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "{ """", """", ""a"" }" or vl_newContent != {charstringlistVal := {"","","a"}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//charstringList:
vl_currentContent := {charstringlistVal := {"A"}};
vl_currentStrValue := " { } ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {charstringlistVal := {"A"}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "{ }" or vl_newContent != {charstringlistVal := {}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//statusLED:
vl_currentContent := {statusLEDVal := {led_black, omit}};
vl_currentStrValue := " [led:green] green ";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {statusLEDVal := {led_black, omit}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "[led:green] green " or vl_newContent != {statusLEDVal := {led_green," green "}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//statusLED:
vl_currentContent := {statusLEDVal := {led_black, "AAA"}};
vl_currentStrValue := " [led:red]";
f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent);
vl_strValue := f_EPTF_Var_directContent2str(vl_currentContent);
vl_newContent := {statusLEDVal := {led_black, "AAA"}};
f_EPTF_Var_str2directContent(vl_strValue, vl_newContent);
if (vl_newContent!=vl_currentContent or vl_strValue != "[led:red]" or vl_newContent != {statusLEDVal := {led_red,omit}}) {
setverdict(fail, "Conversion failed for value "&vl_currentStrValue&". Converted value: "&vl_strValue);
f_EPTF_Base_stop(none);
}
//...
f_EPTF_Base_stop(pass);
}
// negativ test for the f_EPTF_Var_str2directContent function
// wrong string values are used as the parameter for all variable types
testcase tc_EPTF_Var_Test_fromStringConversion_neg() runs on VariableTest_CT {
f_EPTF_Var_init_CT("toStringConversion");
var EPTF_Var_DirectContent vl_currentContent;
var charstring vl_currentStrValue;
var charstring vl_strValue;
var EPTF_Var_DirectContent vl_newContent;
//integer:
vl_currentContent := {intVal := 0};
vl_currentStrValue := " A 1 ";
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//float:
vl_currentContent := {floatVal := 0.0};
vl_currentStrValue := " 1..2 ";
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//bool:
vl_currentContent := {boolVal := false};
vl_currentStrValue := " 124 ";
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstring: always successful
//hexstring:
vl_currentContent := {hexstringVal := ''H};
vl_currentStrValue := " 124X "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//octetstring:
vl_currentContent := {octetstringVal := ''O};
vl_currentStrValue := " 124X "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//octetstring:
vl_currentContent := {octetstringVal := ''O};
vl_currentStrValue := " 123 "; // odd number of chars
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//bitstring:
vl_currentContent := {bitstringVal := ''B};
vl_currentStrValue := " 12 "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//integerlist:
vl_currentContent := {integerlistVal := {}};
vl_currentStrValue := " 1 2 "; // missing "," and "{}"
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//integerlist:
vl_currentContent := {integerlistVal := {}};
vl_currentStrValue := " { A1 } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//integerlist:
vl_currentContent := {integerlistVal := {}};
vl_currentStrValue := " {1A, 2 } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//integerlist:
vl_currentContent := {integerlistVal := {}};
vl_currentStrValue := " {1, A2 } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//integerlist:
vl_currentContent := {integerlistVal := {}};
vl_currentStrValue := " {1, 2A , 3 } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//floatlist:
vl_currentContent := {floatlistVal := {}};
vl_currentStrValue := " {1.0, ""2"" } "; // wrong datatype
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//floatlist:
vl_currentContent := {floatlistVal := {}};
vl_currentStrValue := " 1.0, 2.0 } "; // missing "{}"
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//floatlist:
vl_currentContent := {floatlistVal := {}};
vl_currentStrValue := " {A1.0, 2.0 } } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//floatlist:
vl_currentContent := {floatlistVal := {}};
vl_currentStrValue := " {1.0A, 2.0 } } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//floatlist:
vl_currentContent := {floatlistVal := {}};
vl_currentStrValue := " {1.0, A2.0 } } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//floatlist:
vl_currentContent := {floatlistVal := {}};
vl_currentStrValue := " {1.0, 2.0A } } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " ""a"", ""bb"" "; // missing "{}"
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {a, bb } "; // missing "
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {""a, bb } "; // missing "
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {""a, bb } "; // missing "
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {""a"", bb } "; // missing "
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {""a"", ""bb } "; // missing "
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {""a"", bb"" } "; // missing "
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {""a"",, ""b"" } "; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//charstringlist:
vl_currentContent := {charstringlistVal := {}};
vl_currentStrValue := " {""a\\""A"", ""b"" } "; // invalid char: \" is not allowed in string
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//statusLED:
vl_currentContent := {statusLEDVal := {led_black, omit}};
vl_currentStrValue := " [led:greeen] green"; // invalid color
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//statusLED:
vl_currentContent := {statusLEDVal := {led_black, omit}};
vl_currentStrValue := " [ledAA:green] green"; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//statusLED:
vl_currentContent := {statusLEDVal := {led_black, omit}};
vl_currentStrValue := " [[led:green] green"; // invalid char
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
//statusLED:
vl_currentContent := {statusLEDVal := {led_black, omit}};
vl_currentStrValue := " led:red green"; // missing "[]"
if (0!=f_EPTF_Var_str2directContent(vl_currentStrValue,vl_currentContent)) {
setverdict(pass);
} else {
setverdict(fail, "The value "&vl_currentStrValue&" is wrong, the conversion should be unsuccessful, but it succeeded");
}
f_EPTF_Base_stop(pass);
}
// tests the f_EPTF_Var_content2str function for all types.
// converts the content of the variable to string, then checks the result
testcase tc_EPTF_Var_Test_content2StrConversion() runs on VariableTest_CT {
f_EPTF_Var_init_CT("toStringConversion");
f_initVariables();
var charstring vl_strValue;
// integer
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("intVar"));
if (vl_strValue!="1") {
setverdict(fail,"Content conversion of var failed. Expected: 1, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// float
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("floatVar"));
if (vl_strValue!="1.000000") {
setverdict(fail,"Content conversion of var failed. Expected: 1.000000, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// bool
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("boolVar"));
if (vl_strValue!="true") {
setverdict(fail,"Content conversion of var failed. Expected: true, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// charstring
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("charstringVar"));
if (vl_strValue!="1.0") {
setverdict(fail,"Content conversion of var failed. Expected: ""1.0"", Got: "&vl_strValue)
} else {
setverdict(pass);
}
// octetstring
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("octetstringVar"));
if (vl_strValue!="01") {
setverdict(fail,"Content conversion of var failed. Expected: 01, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// hexstring
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("hexstringVar"));
if (vl_strValue!="01") {
setverdict(fail,"Content conversion of var failed. Expected: 01, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// bitstring
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("bitstringVar"));
if (vl_strValue!="01") {
setverdict(fail,"Content conversion of var failed. Expected: 01, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// integerlist
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("integerlistVar"));
if (vl_strValue!="{ 0, 1 }") {
setverdict(fail,"Content conversion of var failed. Expected: { 0, 1 }, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// floatlistVar
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("floatlistVar"));
if (vl_strValue!="{ 0.000000, 1.000000 }") {
setverdict(fail,"Content conversion of var failed. Expected: { 0.000000, 1.000000 }, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// charstringlistVar
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("charstringlistVar"));
if (vl_strValue!="{ ""0"", ""1"" }") {
setverdict(fail,"Content conversion of var failed. Expected: { ""0"", ""1"" }, Got: "&vl_strValue)
} else {
setverdict(pass);
}
// statusLED
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("statusLEDVar"));
if (vl_strValue!="[led:blue]1") {
setverdict(fail,"Content conversion of var failed. Expected: [led:blue]1, Got: "&vl_strValue)
} else {
setverdict(pass);
}
f_EPTF_Base_stop(pass);
}
// tests the f_EPTF_Var_str2content function for all types.
// sets the value of the Variables from string, then converts the resulting varibale's content to str and checks if the two strings are the same
testcase tc_EPTF_Var_Test_str2contentConversion() runs on VariableTest_CT {
f_EPTF_Var_init_CT("toStringConversion");
f_initVariables();
var charstring vl_strValue;
var integer vl_errorCode;
// integer
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("intVar"),"2");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("intVar"));
if (vl_errorCode != 0 or vl_strValue!="2") {
setverdict(fail,"Content conversion of var failed. Expected: 2, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// float
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("floatVar"),"2.0");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("floatVar"));
if (vl_errorCode != 0 or vl_strValue!="2.000000") {
setverdict(fail,"Content conversion of var failed. Expected: 2.000000, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// bool
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("boolVar"),"false");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("boolVar"));
if (vl_errorCode != 0 or vl_strValue!="false") {
setverdict(fail,"Content conversion of var failed. Expected: false, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// charstring
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("charstringVar"),"2.0");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("charstringVar"));
if (vl_errorCode != 0 or vl_strValue!="2.0") {
setverdict(fail,"Content conversion of var failed. Expected: ""2.0"", Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// octetstring
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("octetstringVar"),"0101");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("octetstringVar"));
if (vl_errorCode != 0 or vl_strValue!="0101") {
setverdict(fail,"Content conversion of var failed. Expected: 0101, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// hexstring
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("hexstringVar"),"010");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("hexstringVar"));
if (vl_errorCode != 0 or vl_strValue!="010") {
setverdict(fail,"Content conversion of var failed. Expected: 010, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// bitstring
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("bitstringVar"),"010");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("bitstringVar"));
if (vl_errorCode != 0 or vl_strValue!="010") {
setverdict(fail,"Content conversion of var failed. Expected: 010, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// integerlist
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("integerlistVar"),"{1,2,3}");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("integerlistVar"));
if (vl_errorCode != 0 or vl_strValue!="{ 1, 2, 3 }") {
setverdict(fail,"Content conversion of var failed. Expected: { 1, 2, 3 }, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// floatlistVar
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("floatlistVar"),"{1.000000,2.000000,3.000000}");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("floatlistVar"));
if (vl_errorCode != 0 or vl_strValue!="{ 1.000000, 2.000000, 3.000000 }") {
setverdict(fail,"Content conversion of var failed. Expected: { 1.000000, 2.000000, 3.000000 }, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// charstringlistVar
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("charstringlistVar"),"{""A"", ""B"" , ""C"" }");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("charstringlistVar"));
if (vl_errorCode != 0 or vl_strValue!="{ ""A"", ""B"", ""C"" }") {
setverdict(fail,"Content conversion of var failed. Expected: { ""A"", ""B"", ""C"" }, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
// statusLED
vl_errorCode := f_EPTF_Var_str2content(f_EPTF_Var_getId("statusLEDVar"),"[led:green]gr");
vl_strValue := f_EPTF_Var_content2str(f_EPTF_Var_getId("statusLEDVar"));
if (vl_errorCode != 0 or vl_strValue!="[led:green]gr") {
setverdict(fail,"Content conversion of var failed. Expected: [led:green]gr, Got: "&vl_strValue&" Error code: "&int2str(vl_errorCode));
} else {
setverdict(pass);
}
f_EPTF_Base_stop(pass);
}
}// group StringConversion
group CleanupDuringSubscribe {
function f_EPTF_Var_Test_cleanupDuringSubscribe_checkExpectedWarning_preamble_FT(in charstring pl_message) runs on EPTF_Var_CT {
if (not match(pl_message,pattern "*Warning*")) {
return;
}
if (match(pl_message,pattern "*EPTF_Var*No response received for hello*")) {
setverdict(pass); // verdict is only pass, if the hello was not answered at least once
}
}
function f_EPTF_Var_Test_cleanupDuringSubscribe_subscriberCTBehaviour(in integer pl_id, in EPTF_Var_CT pl_exitCT) runs on EPTF_Var_CT {
timer t_start := 2.0;
t_start.start;
var integer vl_idx;
f_EPTF_Var_init_CT("cleanupDuringSubscribe_subscriberCTBehaviour_"&int2str(pl_id));
f_EPTF_Var_setMaxWaitTime(10.0);
f_EPTF_Base_setNegativeTestMode(); // if there is no response to the subscribe, variable would set the verdict to fail. The negative test mode prevents it
f_EPTF_Logging_registerPreambleFn(refers(f_EPTF_Var_Test_cleanupDuringSubscribe_checkExpectedWarning_preamble_FT));
alt {
[] t_start.timeout {
f_EPTF_Var_subscribeRemote(pl_exitCT,"intVar", realtime,vl_idx); // the connection should be closed during this function call
}
}
t_start.start;
t_start.timeout;
f_EPTF_Base_stop(none); // this should generate a DTE when sending bye to pl_exitCT
}
function f_EPTF_Var_Test_cleanupDuringSubscribe_exitCTBehaviour() runs on EPTF_Var_CT {
timer t_start := 2.0;
t_start.start;
var integer vl_idx;
f_EPTF_Var_init_CT("cleanupDuringSubscribe_subscriberCTBehaviour");
f_EPTF_Var_newInt("intVar", 1, vl_idx);
alt {
[] t_start.timeout {
f_EPTF_Base_stop(none);
}
}
}
// Tests the following erroneous behaviour:
// A DTE happens when the other component does not reply to the subscribe message
// but it exits before handling it. It does not send the bye message to the original component, because the incoming subscribe was not handled.
// It is still in the queue when the cleanup starts.
// Later, when the subscriber component exits it sends a bye message to the
// exited component, because it does not know that the other component exited, which results in the following DTE:
// Dynamic test case error: Data cannot be sent on port EPTF_Var_MgmtIf to component 3 because there is no connection towards component 3
//
// The testcase sets up a component which holds a variable, and starts c_subsCTNum other components
// which subscribe to the variable. At the time of the subscription the original component
// exits. One or more of the c_subsCTNum components should subscribe in a way that there will be no
// response from the original component. If that happens, they will run into DTE during the Variable cleanup.
// The test should pass, even if there were unanswered subscriptions if this problem is corrected.
// Without the fix, the test exits with the DTE above.
testcase tc_EPTF_Var_Test_cleanupDuringSubscribe() runs on VariableTest_CT {
const integer c_subsCTNum := 10;
f_EPTF_Base_init_CT("cleanupDuringSubscribe");
var EPTF_Var_CT vl_subscriberCT[c_subsCTNum]
var EPTF_Var_CT vl_exitCT := EPTF_Var_CT.create;
for (var integer i:=0; i<c_subsCTNum; i:=i+1) {
vl_subscriberCT[i]:= EPTF_Var_CT.create;
}
for (var integer i:=0; i<c_subsCTNum; i:=i+1) {
vl_subscriberCT[i].start(f_EPTF_Var_Test_cleanupDuringSubscribe_subscriberCTBehaviour(i,vl_exitCT));
}
vl_exitCT.start(f_EPTF_Var_Test_cleanupDuringSubscribe_exitCTBehaviour());
all component.done
f_EPTF_Base_stop(none);
}
function f_EPTF_Var_Test_cleanupDuringConnectionSetup_checkExpectedDebug_preamble_FT(in charstring pl_message) runs on EPTF_Var_CT {
if (not match(pl_message,pattern "*Debug*")) {
return;
}
if (match(pl_message,pattern "*EPTF_Var*Waiting for*number of pending hello messages...*")) {
setverdict(pass); // verdict is only pass, if the hello was not answered at least once in the cleanup
}
}
function f_EPTF_Var_Test_cleanupDuringConnectionSetup_subscriberCTBehaviour(in integer pl_id, in EPTF_Var_CT pl_exitCT) runs on EPTF_Var_CT {
timer t_start := 2.0;
t_start.start;
var integer vl_idx;
f_EPTF_Var_init_CT("cleanupDuringSubscribe_subscriberCTBehaviour_"&int2str(pl_id));
f_EPTF_Var_enableDebug();
f_EPTF_Logging_registerPreambleFn(refers(f_EPTF_Var_Test_cleanupDuringConnectionSetup_checkExpectedDebug_preamble_FT));
alt {
[] t_start.timeout {
f_EPTF_Var_subscribeRemote(pl_exitCT,"intVar", realtime,vl_idx); // the connection should be closed during this function call
}
}
t_start.start;
t_start.timeout;
f_EPTF_Base_stop(none); // this should generate a DTE when sending bye to pl_exitCT
}
// Tests if no DTE happens when the MTC component does reply to the hello message
// but the other component receives a stopRemote during connection setup.
//
// The testcase sets up a component subscribe to the variable on the MTC. At the time of the connection setup the MTC component
// exits. One or more of the c_subsCTNum components should subscribe in a way that there will be no
// stops the system. The subscriber and the MTC component should exit without DTE.
// The test should pass, when there are interrupted connection establishments.
// Without the fix, the test exits with the DTE on MTC.
// THE TEST SHOULD BE COMPILED with EPTF_DEBUG !!
testcase tc_EPTF_Var_Test_cleanupDuringConnectionSetup() runs on VariableTest_CT {
const integer c_subsCTNum := 1;
f_EPTF_Base_init_CT("cleanupDuringConnectionSetup");
if (c_EPTF_Common_debugSwitch==false) {
setverdict(inconc,"The test is not compiled in debug mode")
}
f_EPTF_Logging_registerPreambleFn(refers(f_EPTF_Var_Test_cleanupDuringConnectionSetup_checkExpectedDebug_preamble_FT));
var EPTF_Var_CT vl_subscriberCT[c_subsCTNum]
for (var integer i:=0; i<c_subsCTNum; i:=i+1) {
vl_subscriberCT[i]:= EPTF_Var_CT.create;
}
for (var integer i:=0; i<c_subsCTNum; i:=i+1) {
vl_subscriberCT[i].start(f_EPTF_Var_Test_cleanupDuringConnectionSetup_subscriberCTBehaviour(i,mtc));
}
f_EPTF_Var_Test_cleanupDuringSubscribe_exitCTBehaviour();
all component.done
f_EPTF_Base_stop(none);
}
} //group CleanupDuringSubscribe
group SubscribeAfterBye {
function f_EPTF_Var_Test_subscribeAfterByeBehavior(in float pl_executionTime) runs on EPTF_Var_CT{
f_EPTF_Var_init_CT("subscribeAfterByeBehavior");
var integer vl_varId;
f_EPTF_Var_newInt(c_varname, 1, vl_varId)
timer t1
t1.start( pl_executionTime );
t1.timeout;
f_EPTF_Base_stop(none);
}
testcase tc_EPTF_Var_Test_subscribeAfterBye() runs on VariableTest_CT {
f_EPTF_Var_init_CT("subscribeAfterBye");
var float vl_executionTime := 1.0;
var EPTF_Var_CT vl_server := EPTF_Var_CT.create;
vl_server.start( f_EPTF_Var_Test_subscribeAfterByeBehavior(vl_executionTime) );
var integer vl_varId;
timer t_wait;
t_wait.start(vl_executionTime*0.2);
t_wait.timeout;
t_wait.start(vl_executionTime*1.2);
f_EPTF_Var_subscribeRemote(vl_server, c_varname, realtime, vl_varId);
f_EPTF_Var_unsubscribe(vl_varId);
t_wait.timeout; // now the server comp terminated
t_wait.start(vl_executionTime*0.2);
//try to resubscribe, no DTE should happen here:
f_EPTF_Var_resubscribeRemote(vl_server, c_varname, realtime, vl_varId);
t_wait.timeout;
f_EPTF_Base_stop(pass);
}
} // group SubscribeAfterBye
// If a local provider added later by f_EPTF_Var_addLocalProviders with index larger than the index of the variable, then
// the f_EPTF_Var_addVarToUpdate function will add it before the current position
// and the update of this variable will be omitted
// This is to test the artf282815 (Total Counters not working) problem
group AddLocalProvidersWithLargerID {
testcase tc_EPTF_Var_Test_addLocalProvidersWithLargerID() runs on VariableTest_CT {
// var0, var1
// var2: localSubsr(sum of var3)
// var3: localSubsr(sum of var0 and var1)
// var4 var5
// var6: localSubsr(sum of var4 and var5)
// var0,var1,var4,var5 updated, var2, var3 and var6 should show the correct values
f_EPTF_Var_init_CT("addLocalProvidersWithLargerID");
timer t_wait := 3.0;
var integer vl_var0Idx,vl_var1Idx,vl_var2Idx,vl_var3Idx,vl_var4Idx,vl_var5Idx,vl_var6Idx;
f_EPTF_Var_newInt("var0",0,vl_var0Idx);
f_EPTF_Var_newInt("var1",0,vl_var1Idx);
f_EPTF_Var_newInt("var2",0,vl_var2Idx);
f_EPTF_Var_newInt("var3",0,vl_var3Idx);
f_EPTF_Var_newInt("var4",0,vl_var4Idx);
f_EPTF_Var_newInt("var5",0,vl_var5Idx);
f_EPTF_Var_newInt("var6",0,vl_var6Idx);
f_EPTF_Var_subscribeLocal(vl_var2Idx,{{refers(f_calculationSum),{vl_var3Idx},{}}});
f_EPTF_Var_subscribeLocal(vl_var3Idx,{{refers(f_calculationSum),{vl_var0Idx,vl_var1Idx},{}}});
f_EPTF_Var_subscribeLocal(vl_var6Idx,{{refers(f_calculationSum),{vl_var4Idx,vl_var5Idx},{}}});
f_EPTF_Var_adjustContent(vl_var0Idx,{intVal:=1});
f_EPTF_Var_adjustContent(vl_var5Idx,{intVal:=6});
t_wait.start; t_wait.timeout;
// now the values should be like this:
// var2: 1
// var3: 1
// var6: 6
if(f_EPTF_Var_getIntValue(vl_var2Idx)!=1) {
setverdict(fail,"Incorrect value of var2: ", f_EPTF_Var_getIntValue(vl_var2Idx), ". Should be: 1");
//f_EPTF_Base_stop(none);
}
if(f_EPTF_Var_getIntValue(vl_var3Idx)!=1) {
setverdict(fail,"Incorrect value of var3: ", f_EPTF_Var_getIntValue(vl_var3Idx), ". Should be: 1");
//f_EPTF_Base_stop(none);
}
if(f_EPTF_Var_getIntValue(vl_var6Idx)!=6) {
setverdict(fail,"Incorrect value of var6: ", f_EPTF_Var_getIntValue(vl_var6Idx), ". Should be: 6");
//f_EPTF_Base_stop(none);
}
f_EPTF_Var_adjustContent(vl_var1Idx,{intVal:=2});
f_EPTF_Var_adjustContent(vl_var4Idx,{intVal:=5});
// wait to update the values
t_wait.start; t_wait.timeout;
// now the values should be like this:
// var2: 3
// var3: 3
// var6: 11
if(f_EPTF_Var_getIntValue(vl_var2Idx)!=3) {
setverdict(fail,"Incorrect value of var2: ", f_EPTF_Var_getIntValue(vl_var2Idx), ". Should be: 3");
//f_EPTF_Base_stop(none);
}
if(f_EPTF_Var_getIntValue(vl_var3Idx)!=3) {
setverdict(fail,"Incorrect value of var3: ", f_EPTF_Var_getIntValue(vl_var3Idx), ". Should be: 3");
//f_EPTF_Base_stop(none);
}
if(f_EPTF_Var_getIntValue(vl_var6Idx)!=11) {
setverdict(fail,"Incorrect value of var6: ", f_EPTF_Var_getIntValue(vl_var6Idx), ". Should be: 11");
//f_EPTF_Base_stop(none);
}
f_EPTF_Base_stop(pass);
}