先来看看项目结构
ttcn代码如下:
module Codec_A {
//1.端口定义
type port common_port message {
inout all
}
//2.成分定义
type component MyMTC{
port common_port mtc_port;
}
type component MySUT{
port common_port sut_port;
}
// 定义测试例
testcase Basic_TC () runs on MyMTC system MySUT
{
mtc_port.clear;
//不能操作sut_port,这个端口在SUT,并不在MTC的控制下
//sut_port.clear;
map(mtc:mtc_port, system:sut_port);
mtc_port.start;
//不能操作sut_port,这个端口在SUT,并不在MTC的控制下
//sut_port.start;
mtc_port.send('ABCD'O);
mtc_port.receive('ABCD'O)
setverdict(pass);
stop;
}
//控制部分
control {
execute(Basic_TC());
}
} // Module Codec_A end
在这个例子里面,mtc通过端口发送‘ABCD’,然后检测自己是否接收到了‘ABCD’,然后判断测试例通过。
要完成该例子,在t3tri_template.c文件中需要将triSAReset(),triExecuteTestcase(),triEndTestcase(),triMap()返回值设为TRI_OK,
另外在triSend()函数中加入 语句
triEnqueueMsg(tsiPortId, sutAddress, componentId, sendMessage);
并设返回值为TRI_OK,上面语句的实现将发送的数据放到自身接收队列之中。
接下来就是主要的编解码模块实现了。
在该例子中,测试例子运行时会经过下列几步:1,将‘ABCD’O这中TTCN-3数据类型转换成二进制码,添加到发送队列中;2,通过发送端口发送二进制数据;3,接收端口接收到二进制数据,将其解码为TTCN-3数据类型;4,进行匹配并判断测试例是否通过
二进制码与TTCN-3数据格式之间的转换就是编解码模块完成的工作,当然TTCN-3有不同的很多数据类型,在此例子中以octetstring