master
c 122 lines 3.87 KB
Raw
1 /*++
2
3 Copyright (c) Microsoft. All rights reserved.
4
5 Module Name:
6
7 unittests.c
8
9 Abstract:
10
11 This file contains the entrypoint for the unittest executable.
12
13 --*/
14
15 #include "unittests.h"
16 #include <stdio.h>
17 #include <string.h>
18
19 static const LXT_TEST LxtTests[] = {
20 {"auxv", false, AuxvTestEntry},
21 {"binfmt", false, BinFmtTestEntry},
22 {"brk", false, BrkTestEntry},
23 {"cgroup", false, CgroupTestEntry},
24 {"dev_pt", false, DevPtTestEntry},
25 {"dev_pt_2", false, DevPtTwoTestEntry},
26 {"drvfs", false, DrvfsTestEntry},
27 {"dup", false, DupTestEntry},
28 {"epoll", false, EpollTestEntry},
29 {"eventfd", false, EventfdTestEntry},
30 {"execve", true, .Handler = {.TestHandlerEnvp = ExecveTestEntry}},
31 {"flock", false, FlockTestEntry},
32 {"fork", false, ForkTestEntry},
33 {"fscommon", false, FsCommonTestEntry},
34 {"fstab", false, FstabTestEntry},
35 {"get_set_id", false, GetSetIdTestEntry},
36 {"get_addr_info", false, GetAddrInfoTestEntry},
37 {"get_time", false, GetTimeTestEntry},
38 {"inotify", false, InotifyTestEntry},
39 {"interop", false, InteropTestEntry},
40 {"ioprio", false, IoprioTestEntry},
41 {"keymgmt", false, KeymgmtTestEntry},
42 {"madvise", false, MadviseTestEntry},
43 {"mprotect", false, MprotectTestEntry},
44 {"mremap", false, MremapTestEntry},
45 {"namespace", false, NamespaceTestEntry},
46 {"netlink", false, NetlinkTestEntry},
47 {"overlayfs", false, OverlayFsTestEntry},
48 {"pipe", false, PipeTestEntry},
49 {"poll", false, PollTestEntry},
50 {"random", false, RandomTestEntry},
51 {"resourcelimits", false, ResourceLimitsTestEntry},
52 {"sched", false, SchedTestEntry},
53 #if !defined(__aarch64__)
54 {"select", false, SelectTestEntry},
55 #endif
56 {"sem", false, SemTestEntry},
57 {"shm", false, ShmTestEntry},
58 {"socket", false, SocketTestEntry},
59 {"socket_nonblock", false, SocketNonblockTestEntry},
60 {"splice", false, SpliceTestEntry},
61 {"sysfs", false, SysfsTestEntry},
62 {"sysinfo", false, SysInfoTestEntry},
63 {"timer", false, TimerTestEntry},
64 {"timerfd", false, TimerFdTestEntry},
65 {"tty", false, TtyTestEntry},
66 {"ttys", false, TtysTestEntry},
67 {"user", false, UserTestEntry},
68 {"utimensat", false, UtimensatTestEntry},
69 {"vfsaccess", false, VfsAccessTestEntry},
70 {"vnet", false, VnetTestEntry},
71 {"waitpid", false, WaitPidTestEntry},
72 {"wslpath", false, WslPathTestEntry},
73 {"xattr", false, XattrTestEntry}};
74
75 int main(int Argc, char* Argv[], char** Envp)
76 {
77
78 unsigned int Itr = 0;
79 int Result = 1;
80
81 // parse arguments as:
82 // [0 - binary name] [1 - test name] [2.. - test name params]
83 if (Argc < 2)
84 {
85 // throw error
86 LxtLogError(
87 "Error: too few arguments\n \
88 example usage: ./unittests [testname] [testparam1] [testparam..]\n");
89 goto ErrorExit;
90 }
91
92 // decrement Argc when passing it to the test
93 // tests view themselves as the binaries being called
94 // main(Argc = 3, Argv = ["unittests", false, "exampletest", false, "param1"]) -->
95 // ex. ExampleTestEntry(Argc = 2, Argv = ["exampletest", false, "param1"])
96 Argc--;
97
98 for (Itr = 0; Itr < LXT_COUNT_OF(LxtTests); Itr++)
99 {
100 if (strcmp(Argv[1], LxtTests[Itr].Name) == 0)
101 {
102 Result = (LxtTests[Itr].Envp) ? (LxtTests[Itr].Handler.TestHandlerEnvp(Argc, Argv + 1, Envp))
103 : (LxtTests[Itr].Handler.TestHandler(Argc, Argv + 1));
104
105 if (LXT_SUCCESS(Result))
106 {
107 LxtLogPassed("%s", LxtTests[Itr].Name);
108 }
109 else
110 {
111 LxtLogError("%s", LxtTests[Itr].Name);
112 }
113
114 goto ErrorExit;
115 }
116 }
117
118 LxtLogError("Test name [%s] could not be recognized", Argv[1]);
119
120 ErrorExit:
121 return Result;
122 }