return 1;
typedef bool t_test(void);
- t_test *tests[] = {
- Test_ARP_Basic,
- Test_TCP_Basic,
- NULL
+ struct {
+ t_test *fcn;
+ const char *name;
+ } tests[] = {
+ #define _(fcn) {fcn, #fcn}
+ _(Test_ARP_Basic),
+ _(Test_TCP_Basic),
+ //_(Test_TCP_WindowSizes),
+ _(Test_TCP_Reset),
+ {NULL,NULL}
};
+ // Truncate the two output files
// TODO: Move to stack.c
- FILE *fp;
- fp = fopen("stdout.txt", "w"); fclose(fp);
- fp = fopen("stderr.txt", "w"); fclose(fp);
+ fclose( fopen("stdout.txt", "w") );
+ fclose( fopen("stderr.txt", "w") );
+
+ Net_Open(0, "/tmp/acess2net");
- for(int i = 0; tests[i]; i ++ )
+ int n_pass = 0;
+ int n_fail = 0;
+ for(int i = 0; tests[i].fcn; i ++ )
{
- Net_Open(0, "/tmp/acess2net");
-
Stack_AddDevice("/tmp/acess2net", (char[]){TEST_MAC});
Stack_AddInterface("eth0", 4, (const char[]){TEST_IP}, 24);
Stack_AddRoute(4, "\0\0\0\0", 0, (const char[]){HOST_IP});
- if( Stack_Start("cmdline") )
+ if( Stack_Start(tests[i].name, "cmdline") )
goto teardown;
if( Net_Receive(0, 1, &argc, 1000) == 0 )
goto teardown;
- if( tests[i]() )
- printf("%s: PASS\n", gsTestName);
+ bool result = tests[i].fcn();
+
+ printf("%s: %s\n", gsTestName, (result ? "PASS" : "FAIL"));
+ if(result)
+ n_pass ++;
else
- printf("%s: FAIL\n", gsTestName);
+ n_fail ++;
teardown:
Stack_Kill();
- Net_Close(0);
- unlink("/tmp/acess2net");
}
+ Net_Close(0);
+ unlink("/tmp/acess2net");
+ printf("--- All tests done %i pass, %i fail\n", n_pass, n_fail);
- return 0;
+ return n_fail;
}
void PrintUsage(const char *ProgName)
fprintf(stderr, "\n");
}
+void test_trace(const char *msg, ...)
+{
+ printf("TRACE: [%s] ", gsTestName);
+ va_list args;
+ va_start(args, msg);
+ vfprintf(stdout, msg, args);
+ va_end(args);
+ printf("\n");
+}
+void test_trace_hexdump(const char *hdr, const void *data, size_t len)
+{
+ printf("TRACE: [%s] %s - %zi bytes\n", gsTestName, hdr, len);
+ const uint8_t *data8 = data;
+ while( len > 16 )
+ {
+ printf("TRACE: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
+ data8[0], data8[1], data8[ 2], data8[ 3], data8[ 4], data8[ 5], data8[ 6], data8[ 7],
+ data8[8], data8[9], data8[10], data8[11], data8[12], data8[13], data8[14], data8[15]
+ );
+ len -= 16;
+ data8 += 16;
+ }
+ printf("TRACE: ");
+ while( len > 8 )
+ {
+ printf("%02x %02x %02x %02x %02x %02x %02x %02x ",
+ data8[0], data8[1], data8[ 2], data8[ 3], data8[ 4], data8[ 5], data8[ 6], data8[ 7]
+ );
+ len -= 8;
+ data8 += 8;
+ }
+ while(len > 0)
+ {
+ printf("%02x ", data8[0]);
+ len --;
+ data8 ++;
+ }
+ printf("\n");
+}
+