Skip to content

Commit

Permalink
Extracting the test framework in a separate include file. Refactoring…
Browse files Browse the repository at this point in the history
… tests to avoid code duplication.
  • Loading branch information
CIPop committed Aug 22, 2023
1 parent f782250 commit b92042e
Show file tree
Hide file tree
Showing 7 changed files with 309 additions and 729 deletions.
18 changes: 10 additions & 8 deletions MQTTPacket/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ ENDIF ()
# transport.h/c are reused from ../samples:
include_directories(../src ../src/V5 ../samples)

# test1 - MQTTv3 serializer test
ADD_EXECUTABLE(
test1
test1.c
Expand All @@ -39,6 +40,7 @@ SET_TESTS_PROPERTIES(
PROPERTIES TIMEOUT 540
)

# test2 - MQTTv5 serializer test
ADD_EXECUTABLE(
test2
test2.c
Expand All @@ -63,28 +65,28 @@ SET_TESTS_PROPERTIES(
PROPERTIES TIMEOUT 540
)


# test4 - MQTTv5 broker test
ADD_EXECUTABLE(
test3
test3.c
test4
test4.c
../samples/transport.c
)

# Disabling deprecation warnings:
# warning: ‘ftime’ is deprecated [-Wdeprecated-declarations]
target_compile_options(test3 PRIVATE -Wno-deprecated-declarations)
target_compile_options(test4 PRIVATE -Wno-deprecated-declarations)

TARGET_LINK_LIBRARIES(
test3
test4
paho-embed-mqtt5c
)

ADD_TEST(
NAME test3
COMMAND "test3" "--connection" ${MQTT_TEST_BROKER}
NAME test4
COMMAND "test4" "--connection" ${MQTT_TEST_BROKER}
)

SET_TESTS_PROPERTIES(
test3
test4
PROPERTIES TIMEOUT 540
)
8 changes: 0 additions & 8 deletions MQTTPacket/test/build_test

This file was deleted.

231 changes: 4 additions & 227 deletions MQTTPacket/test/test1.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,235 +14,12 @@
* Ian Craggs - initial API and implementation and/or initial documentation
*******************************************************************************/

/***
Tests for MQTTV3 serialization and deserialization
***/

#include "test_framework.h"
#include "MQTTPacket.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#if !defined(_WINDOWS)
#include <sys/time.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#else
#include <winsock2.h>
#include <ws2tcpip.h>
#define MAXHOSTNAMELEN 256
#define EAGAIN WSAEWOULDBLOCK
#define EINTR WSAEINTR
#define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTCONN WSAENOTCONN
#define ECONNRESET WSAECONNRESET
#endif

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))

struct Options
{
char* connection; /**< connection to system under test. */
char** haconnections;
int hacount;
int verbose;
int test_no;
} options =
{
"tcp://localhost:1883",
NULL,
0,
0,
0,
};

void usage()
{

}

void getopts(int argc, char** argv)
{
int count = 1;

while (count < argc)
{
if (strcmp(argv[count], "--test_no") == 0)
{
if (++count < argc)
options.test_no = atoi(argv[count]);
else
usage();
}
else if (strcmp(argv[count], "--connection") == 0)
{
if (++count < argc)
{
options.connection = argv[count];
printf("\nSetting connection to %s\n", options.connection);
}
else
usage();
}
else if (strcmp(argv[count], "--haconnections") == 0)
{
if (++count < argc)
{
char* tok = strtok(argv[count], " ");
options.hacount = 0;
options.haconnections = malloc(sizeof(char*) * 5);
while (tok)
{
options.haconnections[options.hacount] = malloc(strlen(tok) + 1);
strcpy(options.haconnections[options.hacount], tok);
options.hacount++;
tok = strtok(NULL, " ");
}
}
else
usage();
}
else if (strcmp(argv[count], "--verbose") == 0)
{
options.verbose = 1;
printf("\nSetting verbose on\n");
}
count++;
}
}


#define LOGA_DEBUG 0
#define LOGA_INFO 1
#include <stdarg.h>
#include <time.h>
#include <sys/timeb.h>
void MyLog(int LOGA_level, char* format, ...)
{
static char msg_buf[256];
va_list args;
struct timeb ts;

struct tm *timeinfo;

if (LOGA_level == LOGA_DEBUG && options.verbose == 0)
return;

ftime(&ts);
timeinfo = localtime(&ts.time);
strftime(msg_buf, 80, "%Y%m%d %H%M%S", timeinfo);

sprintf(&msg_buf[strlen(msg_buf)], ".%.3hu ", ts.millitm);

va_start(args, format);
vsnprintf(&msg_buf[strlen(msg_buf)], sizeof(msg_buf) - strlen(msg_buf), format, args);
va_end(args);

printf("%s\n", msg_buf);
fflush(stdout);
}


#if defined(WIN32) || defined(_WINDOWS)
#define mqsleep(A) Sleep(1000*A)
#define START_TIME_TYPE DWORD
static DWORD start_time = 0;
START_TIME_TYPE start_clock(void)
{
return GetTickCount();
}
#elif defined(AIX)
#define mqsleep sleep
#define START_TIME_TYPE struct timespec
START_TIME_TYPE start_clock(void)
{
static struct timespec start;
clock_gettime(CLOCK_REALTIME, &start);
return start;
}
#else
#define mqsleep sleep
#define START_TIME_TYPE struct timeval
START_TIME_TYPE start_clock(void)
{
struct timeval start_time;
gettimeofday(&start_time, NULL);
return start_time;
}
#endif


#if defined(WIN32)
long elapsed(START_TIME_TYPE start_time)
{
return GetTickCount() - start_time;
}
#elif defined(AIX)
#define assert(a)
long elapsed(struct timespec start)
{
struct timespec now, res;

clock_gettime(CLOCK_REALTIME, &now);
ntimersub(now, start, res);
return (res.tv_sec)*1000L + (res.tv_nsec)/1000000L;
}
#else
long elapsed(START_TIME_TYPE start_time)
{
struct timeval now, res;

gettimeofday(&now, NULL);
timersub(&now, &start_time, &res);
return (res.tv_sec)*1000 + (res.tv_usec)/1000;
}
#endif


#define assert(a, b, c, d) myassert(__FILE__, __LINE__, a, b, c, d)
#define assert1(a, b, c, d, e) myassert(__FILE__, __LINE__, a, b, c, d, e)

int tests = 0;
int failures = 0;
FILE* xml;
START_TIME_TYPE global_start_time;
char output[3000];
char* cur_output = output;


void write_test_result()
{
long duration = elapsed(global_start_time);

fprintf(xml, " time=\"%ld.%.3ld\" >\n", duration / 1000, duration % 1000);
if (cur_output != output)
{
fprintf(xml, "%s", output);
cur_output = output;
}
fprintf(xml, "</testcase>\n");
}


void myassert(char* filename, int lineno, char* description, int value, char* format, ...)
{
++tests;
if (!value)
{
va_list args;

++failures;
printf("Assertion failed, file %s, line %d, description: %s\n", filename, lineno, description);

va_start(args, format);
vprintf(format, args);
va_end(args);

cur_output += sprintf(cur_output, "<failure type=\"%s\">file %s, line %d </failure>\n",
description, filename, lineno);
}
else
MyLog(LOGA_DEBUG, "Assertion succeeded, file %s, line %d, description: %s", filename, lineno, description);
}

#define min(a, b) ((a < b) ? a : b)

Expand Down
Loading

0 comments on commit b92042e

Please sign in to comment.