Ns2中的测试用例Ns2中的测试用例

发表于:2016-01-07来源:uml.org.cn作者:不详点击数: 标签:测试用例
在NS2的源代码包中包含了几乎所有协议的测试代码,全部存放在ns2\tcl\test目录下,即test-suite-*.tcl这样的文件。每个文件基本就对应一个协议,而且有一个对应的输出目录存放供比较用

  1测试用例说明

  在NS2的源代码包中包含了几乎所有协议的测试代码,全部存放在ns2\tcl\test目录下,即test-suite-*.tcl这样的文件。每个文件基本就对应一个协议,而且有一个对应的输出目录存放供比较用的运行结果。在运行test-suite-*.tcl之后将会产生一个 temp.rands文件,只要这个文件和相应目录下的文件比较相一致就说明NS2的安装是正确的。

  如test-suite-adaptive-red.tcl这个文件的对应目录就是test-output-adaptive-red。

  每个测试用的tcl文件中都使用了一个或多个测试用例,因此output目录下也对应有一个或者多个文件,这些供比较用的文件都是用gzip压缩的,比较前应先解压缩。通过ns test-suite-*.tcl这样的命令可以知道每个TCL文件所支持的测试用例。使用ns test-suite-*.tcl test_name这样的格式就可以调用指定的测试用例。

  如Ns test-suite-adaptive-red.tcl red1

  就指明了要调用red1这个测试用例,运行之后在测试目录下生成temp.rands文件,将这个文件与test-output-adaptive-red\red1.Z解压缩后的文件进行比较即可。

  2测试代码

  在此测试目录下同时提供了完整的测试Shell代码,不过很遗憾在windows下没法运行(需要cygwin),于是自己动手写了下面的C++代码进行完整的测试。

  // NsTest.cpp : 定义控制台应用程序的入口点。

  //

  #include "stdafx.h"

  #include

  #include

  #include

  using namespace std;

  #define TEST_PATH "d:\\temp\\test\\"

  #define FIND_MASK "d:\\temp\\test\\test-suite-*.tcl"

  #define NS_PATH "d:\\research\\debug\\ns-2.31.exe"

  void Compare(char* f1, char* f2)

  {

  // 比较两个文件是否相同,之所以不用cmp进行比较,是因为在不同版本生成的数据中输出格式可能会不一致,

  // 主要是科学计数法输出的不一致,如提供的原始数据为.2e-05,而生成的数据为.2e-005

  ifstream s1(f1);

  ifstream s2(f2);

  if(s1.is_open() && s2.is_open())

  {

  char line1[2048], line2[2048];

  int nLine = 0;

  while(!s1.eof() && !s2.eof())

  {

  nLine++;

  s1.getline(line1, 2048);

  s2.getline(line2, 2048);

  if(strcmp(line1, line2) == 0) continue;

  double d[4];

  sscanf(line1, "%lf %lf", &d[0], &d[1]);

  sscanf(line2, "%lf %lf", &d[2], &d[3]);

  if(fabs(d[0] - d[2]) > 0.00005 || fabs(d[1] - d[3]) > 0.005)

  {

  printf("%s and %s compare failed: \nline: %d\n%s\n%s\n", f1, f2, nLine, line1, line2);

  s1.close();

  s2.close();

  exit(1);

  }

  }

  if(s1.eof() && !s2.eof())

  {

  printf("%s and %s compare failed: s1.eof() && !s2.eof()", f1, f2);

  s1.close();

  s2.close();

  exit(1);

  }

  else if(!s1.eof() && s2.eof())

  {

  printf("%s and %s compare failed: !s1.eof() && s2.eof()", f1, f2);

  s1.close();

  s2.close();

  exit(1);

  }

  }

  else

  {

  printf("compare file open failed: \n%s\n%s\n", f1, f2);

  s1.close();

  s2.close();

  exit(1);

  }

  s1.close();

  s2.close();

  }

  void Exec(char *cmd)

  {

  DWORD code = 0;

  STARTUPINFO si;

  PROCESS_INFORMATION pi;

  ZeroMemory( &si, sizeof(si) );

  si.cb = sizeof(si);

  ZeroMemory( &pi, sizeof(pi) );

  // Start the child process.

  if( !CreateProcess( NULL, // No module name (use command line).

  cmd, // Command line.

  NULL, // Process handle not inheritable.

  NULL, // Thread handle not inheritable.

  FALSE, // Set handle inheritance to FALSE.

  0, // No creation flags.

  NULL, // Use parent's environment block.

  TEST_PATH, // Use parent's starting directory.

  &si, // Pointer to STARTUPINFO structure.

  &pi ) // Pointer to PROCESS_INFORMATION structure.

原文转自:http://www.ltesting.net