Tools/NetTest - Add TCP Window test (not passing)
[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                 NULL
31                 };
32
33         // TODO: Move to stack.c
34         FILE    *fp;
35         fp = fopen("stdout.txt", "w");  fclose(fp);
36         fp = fopen("stderr.txt", "w");  fclose(fp);
37         
38         Net_Open(0, "/tmp/acess2net");
39
40         for(int i = 0; tests[i]; i ++ )
41         {
42                 Stack_AddDevice("/tmp/acess2net", (char[]){TEST_MAC});
43                 Stack_AddInterface("eth0", 4, (const char[]){TEST_IP}, 24);
44                 Stack_AddRoute(4, "\0\0\0\0", 0, (const char[]){HOST_IP});
45                 if( Stack_Start("cmdline") )
46                         goto teardown;
47                 
48                 if( Net_Receive(0, 1, &argc, 1000) == 0 )
49                         goto teardown;
50                 
51                 if( tests[i]() )
52                         printf("%s: PASS\n", gsTestName);
53                 else
54                         printf("%s: FAIL\n", gsTestName);
55         
56         teardown:
57                 Stack_Kill();
58         }
59         Net_Close(0);
60         unlink("/tmp/acess2net");
61
62         return 0;
63 }
64
65 void PrintUsage(const char *ProgName)
66 {
67         fprintf(stderr, "Usage: %s\n", ProgName);
68 }
69
70 int ParseCommandline(int argc, char *argv[])
71 {
72         const char      *progname = argv[0];
73         for( int i = 1; i < argc; i ++ )
74         {
75                 const char      *arg = argv[i];
76                 if( arg[0] != '-' ) {
77                         // bare args
78                 }
79                 else if( arg[1] != '-' ) {
80                         // short args
81                 }
82                 else {
83                         // long args
84                         if( strcmp(arg, "--help") == 0 ) {
85                                 PrintUsage(progname);
86                                 exit(0);
87                         }
88                         else {
89                                 fprintf(stderr, "Unknown option: %s\n", arg);
90                                 PrintUsage(progname);
91                                 return 1;
92                         }
93                 }
94         }
95         return 0;
96 }
97
98 void test_setname(const char *name)
99 {
100         gsTestName = name;
101 }
102
103 void test_message(const char *filename, int line, const char *msg, ...)
104 {
105         fprintf(stderr, "%s:%i [%s] - ", filename, line, gsTestName);
106         va_list args;
107         va_start(args, msg);
108         vfprintf(stderr, msg, args);
109         va_end(args);
110         fprintf(stderr, "\n");
111 }
112
113 void test_assertion_fail(const char *filename, int line, const char *fmt, ...)
114 {
115         fprintf(stderr, "%s:%i [%s] - ASSERT FAIL ", filename, line, gsTestName);
116         va_list args;
117         va_start(args, fmt);
118         vfprintf(stderr, fmt, args);
119         va_end(args);
120         fprintf(stderr, "\n");
121 }
122
123 void test_trace(const char *msg, ...)
124 {
125         printf("TRACE: [%s] ", gsTestName);
126         va_list args;
127         va_start(args, msg);
128         vfprintf(stdout, msg, args);
129         va_end(args);
130         printf("\n");
131 }
132 void test_trace_hexdump(const char *hdr, const void *data, size_t len)
133 {
134         printf("TRACE: [%s] %s - %zi bytes\n", gsTestName, hdr, len);
135         const uint8_t   *data8 = data;
136         while( len > 16 )
137         {
138                 printf("TRACE: %02x %02x %02x %02x %02x %02x %02x %02x  %02x %02x %02x %02x %02x %02x %02x %02x\n",
139                         data8[0], data8[1], data8[ 2], data8[ 3], data8[ 4], data8[ 5], data8[ 6], data8[ 7],
140                         data8[8], data8[9], data8[10], data8[11], data8[12], data8[13], data8[14], data8[15]
141                         );
142                 len -= 16;
143                 data8 += 16;
144         }
145         printf("TRACE: ");
146         while( len > 8 )
147         {
148                 printf("%02x %02x %02x %02x %02x %02x %02x %02x  ",
149                         data8[0], data8[1], data8[ 2], data8[ 3], data8[ 4], data8[ 5], data8[ 6], data8[ 7]
150                         );
151                 len -= 8;
152                 data8 += 8;
153         }
154         while(len > 0)
155         {
156                 printf("%02x ", data8[0]);
157                 len --;
158                 data8 ++;
159         }
160         printf("\n");
161 }
162

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