| ///////////////////////////////////////////////////////////////////////////////
|
| // //
|
| // 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: MyMessageTypeRingBuffer_Demo
|
| //
|
| // Purpose:
|
| // This module demonstrates how to handle a ring buffer built from an arbitrary
|
| // user defined type.
|
| //
|
| // Module depends on:
|
| // <MyMessageTypeRingBuffer.ttcnpp>
|
| //
|
| // Current Owner:
|
| // Istvan Falusi (eistfal)
|
| //
|
| // Last Review Date:
|
| // 2007-11-19
|
| //
|
| ///////////////////////////////////////////////////////////
|
|
|
| module MyMessageTypeRingBuffer_Demo
|
| {
|
|
|
| import from MyMessageTypeRingBuffer_Functions all;
|
|
|
| const MyMessageType c_MyGoodMessage := { OK, "Something good happened" }
|
| const MyMessageType c_MyErrorMessage := { ERROR, "Something went wrong" }
|
|
|
| type component MTC_CT {};
|
|
|
| // function to generate a message:
|
| // good message with 97% probability, or error message with 3% probability
|
| function f_GenerateMessage(out MyMessageType pl_message)
|
| {
|
| if (rnd() > 0.03)
|
| {
|
| pl_message := c_MyGoodMessage;
|
| }
|
| else
|
| {
|
| pl_message := c_MyErrorMessage;
|
| }
|
| }
|
|
|
| // Implementation of the demo use case:
|
| // it stores incoming messages in a ring buffer, until an error message arrives.
|
| // In case of error message, it logs the whole content of the buffer.
|
| testcase tc_MyMessageTypeRingBuffer_Demo() runs on MTC_CT system MTC_CT
|
| {
|
| var MyMessageTypeRingBuffer v_buffer;
|
| var MyMessageType v_myMessage;
|
|
|
| log("================================================================================");
|
| log("Init buffer with capacity of 50 elements...");
|
| f_EPTF_MyMessageType_RB_init(v_buffer, 50);
|
|
|
| log("================================================================================");
|
| log("Generate messages and put them into ring buffer until error message received...");
|
|
|
| do
|
| {
|
| f_GenerateMessage(v_myMessage);
|
| f_EPTF_MyMessageType_RB_push_back(v_buffer, v_myMessage);
|
| }
|
| while ( v_myMessage.severity != ERROR);
|
|
|
| log("================================================================================");
|
| log("Error message received, dump the ring buffer");
|
| log("The ring buffer contains " & int2str(f_EPTF_MyMessageType_RB_size(v_buffer)) & " messages");
|
|
|
| while (not f_EPTF_MyMessageType_RB_empty(v_buffer))
|
| {
|
| log( f_EPTF_MyMessageType_RB_front(v_buffer) );
|
| f_EPTF_MyMessageType_RB_pop_front(v_buffer);
|
| }
|
|
|
| log("================================ End of demo =====================================");
|
| setverdict(pass);
|
| }
|
|
|
|
|
| // The following test case implements a similar use case, as the previous one,
|
| // but logs the stored messages with reverse order.
|
| testcase tc_MyMessageTypeRingBuffer_Demo_Reverse() runs on MTC_CT system MTC_CT
|
| {
|
| var MyMessageTypeRingBuffer v_buffer;
|
| var MyMessageType v_myMessage;
|
|
|
| log("================================================================================");
|
| log("Init buffer with capacity of 50 elements...");
|
| f_EPTF_MyMessageType_RB_init(v_buffer, 50);
|
|
|
| log("================================================================================");
|
| log("Generate messages and put them into ring buffer until error message received...");
|
|
|
| do
|
| {
|
| f_GenerateMessage(v_myMessage);
|
| f_EPTF_MyMessageType_RB_push_back(v_buffer, v_myMessage);
|
| }
|
| while ( v_myMessage.severity != ERROR);
|
|
|
| log("================================================================================");
|
| log("Error message received, dump the ring buffer with reverse order (from end to begin)");
|
| log("The ring buffer contains " & int2str(f_EPTF_MyMessageType_RB_size(v_buffer)) & " messages");
|
|
|
| while (not f_EPTF_MyMessageType_RB_empty(v_buffer))
|
| {
|
| log( f_EPTF_MyMessageType_RB_back(v_buffer) );
|
| f_EPTF_MyMessageType_RB_pop_back(v_buffer);
|
| }
|
|
|
| log("================================ End of demo =====================================");
|
| setverdict(pass);
|
| }
|
|
|
|
|
| control
|
| {
|
| execute(tc_MyMessageTypeRingBuffer_Demo());
|
| execute(tc_MyMessageTypeRingBuffer_Demo_Reverse());
|
| }
|
|
|
| } // end of module
|