xref: /xnu-11417.121.6/tests/static_if.c (revision a1e26a70f38d1d7daa7b49b258e2f8538ad81650)
1 #include <darwintest.h>
2 #include <darwintest_utils.h>
3 
4 #define STATIC_IF_TEST
5 #define MARK_AS_FIXUP_TEXT
6 
7 #include "../osfmk/kern/static_if_common.c"
8 
9 T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true), T_META_TAG_VM_PREFERRED);
10 
11 T_DECL(static_if_boot_arg, "Check the static if boot-arg parser")
12 {
13 	uint64_t v;
14 
15 	v = static_if_boot_arg_uint64("key=2", "key", 0);
16 	T_EXPECT_EQ(v, 2ull, "parsing key correctly");
17 
18 	v = static_if_boot_arg_uint64("key=2 key=1", "key", 0);
19 	T_EXPECT_EQ(v, 1ull, "parsing overrides");
20 
21 	v = static_if_boot_arg_uint64("-key", "key", 0);
22 	T_EXPECT_EQ(v, 1ull, "parsing -key");
23 
24 	v = static_if_boot_arg_uint64("key", "key", 0);
25 	T_EXPECT_EQ(v, 1ull, "parsing arg-less key");
26 
27 	v = static_if_boot_arg_uint64("key=2 k", "key", 0);
28 	T_EXPECT_EQ(v, 2ull, "parsing ignoring prefixes at the end");
29 
30 	v = static_if_boot_arg_uint64("key=0", "key", 1);
31 	T_EXPECT_EQ(v, 0ull, "parsing key=0 correctly");
32 	/* this should be rejected but PE_parse_boot_argn accepts it */
33 	v = static_if_boot_arg_uint64("key=0b", "key", 1);
34 	T_EXPECT_EQ(v, 0ull, "be bug to bug compatible with PE_parse_boot_argn");
35 
36 	v = static_if_boot_arg_uint64("key=0x", "key", 1);
37 	T_EXPECT_EQ(v, 0ull, "be bug to bug compatible with PE_parse_boot_argn");
38 
39 	v = static_if_boot_arg_uint64("key=0b1010", "key", 1);
40 	T_EXPECT_EQ(v, 10, "parsing binary correctly");
41 
42 	v = static_if_boot_arg_uint64("key=-0b1010", "key", 1);
43 	T_EXPECT_EQ(v, -10, "parsing binary correctly");
44 
45 	v = static_if_boot_arg_uint64("key=012", "key", 1);
46 	T_EXPECT_EQ(v, 10, "parsing fake octal correctly");
47 
48 	v = static_if_boot_arg_uint64("key=-012", "key", 1);
49 	T_EXPECT_EQ(v, -10, "parsing hex correctly");
50 
51 	v = static_if_boot_arg_uint64("key=0xa", "key", 1);
52 	T_EXPECT_EQ(v, 10, "parsing hex correctly");
53 
54 	v = static_if_boot_arg_uint64("key=-0xa", "key", 1);
55 	T_EXPECT_EQ(v, -10, "parsing hex correctly");
56 
57 	v = static_if_boot_arg_uint64("key=0xA", "key", 1);
58 	T_EXPECT_EQ(v, 10, "parsing hex correctly");
59 
60 	v = static_if_boot_arg_uint64("key=-0xA", "key", 1);
61 	T_EXPECT_EQ(v, -10, "parsing hex correctly");
62 
63 	/* invalid values */
64 	v = static_if_boot_arg_uint64("key=09", "key", 1);
65 	T_EXPECT_EQ(v, 1ull, "rejecting 09");
66 
67 	v = static_if_boot_arg_uint64("key=8a9", "key", 1);
68 	T_EXPECT_EQ(v, 1ull, "rejecting 8a9");
69 
70 	v = static_if_boot_arg_uint64("key=a", "key", 1);
71 	T_EXPECT_EQ(v, 1ull, "rejecting a");
72 }
73