Tests - Cleanup (disabling TCP Window Size module test)
[tpg/acess2.git] / Tools / NetTest_Runner / main.c
1 /*
2  */
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include "net.h"
7 #include "stack.h"
8 #include "tests.h"
9 #include "test.h"
10 #include <stdarg.h>
11 #include <unistd.h>
12
13 // === PROTOTYPES ===
14  int    ParseCommandline(int argc, char *argv[]);
15
16 // === GLOBALS ===
17 const char *gsTestName;
18
19 // === CODE ===
20 int main(int argc, char *argv[])
21 {
22         if( ParseCommandline(argc, argv) )
23                 return 1;
24
25         typedef bool t_test(void);
26         t_test  *tests[] = {
27                 Test_ARP_Basic,
28                 Test_TCP_Basic,
29                 //Test_TCP_WindowSizes,
30                 Test_TCP_Reset,
31                 NULL
32                 };
33
34         // Truncate the two output files
35         // TODO: Move to stack.c
36         fclose( fopen("stdout.txt", "w") );
37         fclose( fopen("stderr.txt", "w") );
38         
39         Net_Open(0, "/tmp/acess2net");
40
41          int    n_pass = 0;
42          int    n_fail = 0;
43         for(int i = 0; tests[i]; i ++ )
44         {
45                 Stack_AddDevice("/tmp/acess2net", (char[]){TEST_MAC});
46                 Stack_AddInterface("eth0", 4, (const char[]){TEST_IP}, 24);
47                 Stack_AddRoute(4, "\0\0\0\0", 0, (const char[]){HOST_IP});
48                 if( Stack_Start("cmdline") )
49                         goto teardown;
50                 
51                 if( Net_Receive(0, 1, &argc, 1000) == 0 )
52                         goto teardown;
53                 
54                 bool    result = tests[i]();
55                 
56                 printf("%s: %s\n", gsTestName, (result ? "PASS" : "FAIL"));
57                 if(result)
58                         n_pass ++;
59                 else
60                         n_fail ++;
61         
62         teardown:
63                 Stack_Kill();
64         }
65         Net_Close(0);
66         unlink("/tmp/acess2net");
67         printf("--- All tests done %i pass, %i fail\n", n_pass, n_fail);
68
69         return n_fail;
70 }
71
72 void PrintUsage(const char *ProgName)
73 {
74         fprintf(stderr, "Usage: %s\n", ProgName);
75 }
76
77 int ParseCommandline(int argc, char *argv[])
78 {
79         const char      *progname = argv[0];
80         for( int i = 1; i < argc; i ++ )
81         {
82                 const char      *arg = argv[i];
83                 if( arg[0] != '-' ) {
84                         // bare args
85                 }
86                 else if( arg[1] != '-' ) {
87                         // short args
88                 }
89                 else {
90                         // long args
91                         if( strcmp(arg, "--help") == 0 ) {
92                                 PrintUsage(progname);
93                                 exit(0);
94                         }
95                         else {
96                                 fprintf(stderr, "Unknown option: %s\n", arg);
97                                 PrintUsage(progname);
98                                 return 1;
99                         }
100                 }
101         }
102         return 0;
103 }
104
105 void test_setname(const char *name)
106 {
107         gsTestName = name;
108 }
109
110 void test_message(const char *filename, int line, const char *msg, ...)
111 {
112         fprintf(stderr, "%s:%i [%s] - ", filename, line, gsTestName);
113         va_list args;
114         va_start(args, msg);
115         vfprintf(stderr, msg, args);
116         va_end(args);
117         fprintf(stderr, "\n");
118 }
119
120 void test_assertion_fail(const char *filename, int line, const char *fmt, ...)
121 {
122         fprintf(stderr, "%s:%i [%s] - ASSERT FAIL ", filename, line, gsTestName);
123         va_list args;
124         va_start(args, fmt);
125         vfprintf(stderr, fmt, args);
126         va_end(args);
127         fprintf(stderr, "\n");
128 }
129
130 void test_trace(const char *msg, ...)
131 {
132         printf("TRACE: [%s] ", gsTestName);
133         va_list args;
134         va_start(args, msg);
135         vfprintf(stdout, msg, args);
136         va_end(args);
137         printf("\n");
138 }
139 void test_trace_hexdump(const char *hdr, const void *data, size_t len)
140 {
141         printf("TRACE: [%s] %s - %zi bytes\n", gsTestName, hdr, len);
142         const uint8_t   *data8 = data;
143         while( len > 16 )
144         {
145                 printf("TRACE: %02x %02x %02x %02x %02x %02x %02x %02x  %02x %02x %02x %02x %02x %02x %02x %02x\n",
146                         data8[0], data8[1], data8[ 2], data8[ 3], data8[ 4], data8[ 5], data8[ 6], data8[ 7],
147                         data8[8], data8[9], data8[10], data8[11], data8[12], data8[13], data8[14], data8[15]
148                         );
149                 len -= 16;
150                 data8 += 16;
151         }
152         printf("TRACE: ");
153         while( len > 8 )
154         {
155                 printf("%02x %02x %02x %02x %02x %02x %02x %02x  ",
156                         data8[0], data8[1], data8[ 2], data8[ 3], data8[ 4], data8[ 5], data8[ 6], data8[ 7]
157                         );
158                 len -= 8;
159                 data8 += 8;
160         }
161         while(len > 0)
162         {
163                 printf("%02x ", data8[0]);
164                 len --;
165                 data8 ++;
166         }
167         printf("\n");
168 }
169

UCC git Repository :: git.ucc.asn.au