83ab6530a9d1918f6e46ff086e5b633368a3d35f
[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                 NULL
30                 };
31
32         // TODO: Move to stack.c
33         FILE    *fp;
34         fp = fopen("stdout.txt", "w");  fclose(fp);
35         fp = fopen("stderr.txt", "w");  fclose(fp);
36
37         for(int i = 0; tests[i]; i ++ )
38         {
39                 Net_Open(0, "/tmp/acess2net");
40                 
41                 Stack_AddDevice("/tmp/acess2net", (char[]){TEST_MAC});
42                 Stack_AddInterface("eth0", 4, (const char[]){TEST_IP}, 24);
43                 Stack_AddRoute(4, "\0\0\0\0", 0, (const char[]){HOST_IP});
44                 if( Stack_Start("cmdline") )
45                         goto teardown;
46                 
47                 if( Net_Receive(0, 1, &argc, 1000) == 0 )
48                         goto teardown;
49                 
50                 if( tests[i]() )
51                         printf("%s: PASS\n", gsTestName);
52                 else
53                         printf("%s: FAIL\n", gsTestName);
54         
55         teardown:
56                 Stack_Kill();
57                 Net_Close(0);
58                 unlink("/tmp/acess2net");
59         }
60
61         return 0;
62 }
63
64 void PrintUsage(const char *ProgName)
65 {
66         fprintf(stderr, "Usage: %s\n", ProgName);
67 }
68
69 int ParseCommandline(int argc, char *argv[])
70 {
71         const char      *progname = argv[0];
72         for( int i = 1; i < argc; i ++ )
73         {
74                 const char      *arg = argv[i];
75                 if( arg[0] != '-' ) {
76                         // bare args
77                 }
78                 else if( arg[1] != '-' ) {
79                         // short args
80                 }
81                 else {
82                         // long args
83                         if( strcmp(arg, "--help") == 0 ) {
84                                 PrintUsage(progname);
85                                 exit(0);
86                         }
87                         else {
88                                 fprintf(stderr, "Unknown option: %s\n", arg);
89                                 PrintUsage(progname);
90                                 return 1;
91                         }
92                 }
93         }
94         return 0;
95 }
96
97 void test_setname(const char *name)
98 {
99         gsTestName = name;
100 }
101
102 void test_message(const char *filename, int line, const char *msg, ...)
103 {
104         fprintf(stderr, "%s:%i [%s] - ", filename, line, gsTestName);
105         va_list args;
106         va_start(args, msg);
107         vfprintf(stderr, msg, args);
108         va_end(args);
109         fprintf(stderr, "\n");
110 }
111
112 void test_assertion_fail(const char *filename, int line, const char *fmt, ...)
113 {
114         fprintf(stderr, "%s:%i [%s] - ASSERT FAIL ", filename, line, gsTestName);
115         va_list args;
116         va_start(args, fmt);
117         vfprintf(stderr, fmt, args);
118         va_end(args);
119         fprintf(stderr, "\n");
120 }
121

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