@@ -6882,7 +6882,6 @@ test_CS104Slave_handleTestCommand_asduReceivedHandler (void* parameter, int addr
68826882void
68836883test_CS104Slave_handleTestCommandWithTimestamp ()
68846884{
6885- //TODO install asduHandler to intercept
68866885 CS101_ASDU receivedASDU = NULL ;
68876886
68886887 CS104_Slave slave = CS104_Slave_create (10 , 10 );
@@ -7160,6 +7159,114 @@ test_CS104Slave_rejectCommandWithUnknownCA()
71607159 CS104_Slave_destroy (slave );
71617160}
71627161
7162+ bool
7163+ test_ResetProcessHandler (void * parameter , IMasterConnection connection , CS101_ASDU asdu , uint8_t qrp )
7164+ {
7165+ int * resetProcessHandlerCalled = (int * )parameter ;
7166+
7167+ if (resetProcessHandlerCalled )
7168+ {
7169+ * resetProcessHandlerCalled = * resetProcessHandlerCalled + 1 ;
7170+ }
7171+
7172+ IMasterConnection_sendACT_CON (connection , asdu , false);
7173+
7174+ return true;
7175+ }
7176+
7177+ void
7178+ test_CS104Slave_handleResetProcessCommand ()
7179+ {
7180+ CS101_ASDU receivedASDU = NULL ;
7181+ int resetProcessHandlerCalled = 0 ;
7182+
7183+ CS104_Slave slave = CS104_Slave_create (10 , 10 );
7184+
7185+ CS104_Slave_setServerMode (slave , CS104_MODE_SINGLE_REDUNDANCY_GROUP );
7186+ CS104_Slave_setLocalPort (slave , 20004 );
7187+
7188+ CS104_Slave_start (slave );
7189+
7190+ CS101_AppLayerParameters alParams = CS104_Slave_getAppLayerParameters (slave );
7191+
7192+ CS104_Connection con = CS104_Connection_create ("127.0.0.1" , 20004 );
7193+
7194+ bool result = CS104_Connection_connect (con );
7195+ TEST_ASSERT_TRUE (result );
7196+
7197+ CS104_Connection_setASDUReceivedHandler (con , test_CS104Slave_handleTestCommand_asduReceivedHandler , & receivedASDU );
7198+
7199+ CS104_Connection_sendStartDT (con );
7200+
7201+ ResetProcessCommand rpc = ResetProcessCommand_create (NULL , 0 , 0 );
7202+
7203+ CS101_ASDU asdu = CS101_ASDU_create (& defaultAppLayerParameters , false, CS101_COT_ACTIVATION , 0 , 1 , false, false);
7204+
7205+ CS101_ASDU_addInformationObject (asdu , (InformationObject ) rpc );
7206+ ResetProcessCommand_destroy (rpc );
7207+ TEST_ASSERT_TRUE (CS104_Connection_sendASDU (con , asdu ));
7208+ CS101_ASDU_destroy (asdu );
7209+
7210+ Thread_sleep (500 );
7211+
7212+ TEST_ASSERT_NOT_NULL (receivedASDU );
7213+ TEST_ASSERT_EQUAL_INT (C_RP_NA_1 , CS101_ASDU_getTypeID (receivedASDU ));
7214+ TEST_ASSERT_EQUAL_INT (CS101_COT_UNKNOWN_TYPE_ID , CS101_ASDU_getCOT (receivedASDU ));
7215+ TEST_ASSERT_TRUE (CS101_ASDU_isNegative (receivedASDU ));
7216+
7217+ if (receivedASDU ) {
7218+ CS101_ASDU_destroy (receivedASDU );
7219+ receivedASDU = NULL ;
7220+ }
7221+
7222+ CS104_Slave_setResetProcessHandler (slave , test_ResetProcessHandler , & resetProcessHandlerCalled );
7223+
7224+ rpc = ResetProcessCommand_create (NULL , 0 , 0 );
7225+
7226+ asdu = CS101_ASDU_create (& defaultAppLayerParameters , false, CS101_COT_ACTIVATION , 0 , 1 , false, false);
7227+
7228+ CS101_ASDU_addInformationObject (asdu , (InformationObject ) rpc );
7229+ ResetProcessCommand_destroy (rpc );
7230+ TEST_ASSERT_TRUE (CS104_Connection_sendASDU (con , asdu ));
7231+ CS101_ASDU_destroy (asdu );
7232+
7233+ Thread_sleep (500 );
7234+
7235+ TEST_ASSERT_NOT_NULL (receivedASDU );
7236+ TEST_ASSERT_EQUAL_INT (C_RP_NA_1 , CS101_ASDU_getTypeID (receivedASDU ));
7237+ TEST_ASSERT_EQUAL_INT (CS101_COT_ACTIVATION_CON , CS101_ASDU_getCOT (receivedASDU ));
7238+ TEST_ASSERT_FALSE (CS101_ASDU_isNegative (receivedASDU ));
7239+ TEST_ASSERT_EQUAL_INT (1 , resetProcessHandlerCalled );
7240+
7241+ /* send reset process command with invalid IOA (!= 0) */
7242+
7243+ rpc = ResetProcessCommand_create (NULL , 1 , 0 );
7244+
7245+ asdu = CS101_ASDU_create (& defaultAppLayerParameters , false, CS101_COT_ACTIVATION , 0 , 1 , false, false);
7246+
7247+ CS101_ASDU_addInformationObject (asdu , (InformationObject ) rpc );
7248+ ResetProcessCommand_destroy (rpc );
7249+ TEST_ASSERT_TRUE (CS104_Connection_sendASDU (con , asdu ));
7250+ CS101_ASDU_destroy (asdu );
7251+
7252+ Thread_sleep (500 );
7253+
7254+ TEST_ASSERT_NOT_NULL (receivedASDU );
7255+ TEST_ASSERT_EQUAL_INT (C_RP_NA_1 , CS101_ASDU_getTypeID (receivedASDU ));
7256+ TEST_ASSERT_EQUAL_INT (CS101_COT_UNKNOWN_IOA , CS101_ASDU_getCOT (receivedASDU ));
7257+ TEST_ASSERT_TRUE (CS101_ASDU_isNegative (receivedASDU ));
7258+ TEST_ASSERT_EQUAL_INT (1 , resetProcessHandlerCalled );
7259+
7260+ CS104_Connection_close (con );
7261+
7262+ CS104_Connection_destroy (con );
7263+
7264+ if (receivedASDU )
7265+ CS101_ASDU_destroy (receivedASDU );
7266+
7267+ CS104_Slave_destroy (slave );
7268+ }
7269+
71637270int
71647271main (int argc , char * * argv )
71657272{
@@ -7299,5 +7406,7 @@ main(int argc, char** argv)
72997406
73007407 RUN_TEST (test_CS104Slave_rejectCommandWithUnknownCA );
73017408
7409+ RUN_TEST (test_CS104Slave_handleResetProcessCommand );
7410+
73027411 return UNITY_END ();
73037412}
0 commit comments