blob: a3125beeff7e1e69c37a83c17863e11bb042a85c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
|
open OUnit2
open Reference_tree
let get_dir test_ctxt = in_testdata_dir test_ctxt ["validators"]
let ok_or_failure result = match result with
| Ok value -> value
| Error msg -> assert_failure msg
let raises_validation_error f =
try ignore @@ f (); false
with Validation_error _ -> true
let test_load_valid_definition test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (Vylist.in_list (Vytree.list_children r) "system") true;
assert_equal (Vylist.in_list (Vytree.list_children r) "interfaces") true
(* Path validation tests *)
let test_validate_path_leaf_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (validate_path (get_dir test_ctxt) r ["system"; "host-name"; "test"]) (["system"; "host-name"], Some "test")
let test_validate_path_leaf_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (raises_validation_error (fun () -> ignore @@ validate_path (get_dir test_ctxt) r ["system"; "host-name"; "1234"])) true
let test_validate_path_leaf_incomplete test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (raises_validation_error (fun () -> ignore @@ validate_path (get_dir test_ctxt) r ["system"; "host-name"])) true
let test_validate_path_tag_node_complete_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (validate_path (get_dir test_ctxt) r ["system"; "login"; "user"; "test"; "full-name"; "test user"])
(["system"; "login"; "user"; "test"; "full-name";], Some "test user")
let test_validate_path_tag_node_illegal_characters test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
(* the space in "eth 0" is on purpose *)
assert_equal (raises_validation_error (fun () -> ignore @@ validate_path (get_dir test_ctxt) r ["interfaces"; "ethernet"; "eth 0"; "disable"])) true
let test_validate_path_tag_node_invalid_name test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (raises_validation_error (fun () -> ignore @@ validate_path (get_dir test_ctxt) r ["system"; "login"; "user"; "999"; "full-name"; "test user"]))
true
let test_validate_path_tag_node_incomplete test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (raises_validation_error (fun () -> ignore @@ validate_path (get_dir test_ctxt) r ["system"; "login"; "user"])) true
let test_validate_path_garbage_after_value test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (raises_validation_error (fun () -> ignore @@ validate_path (get_dir test_ctxt) r ["system"; "host-name"; "foo"; "bar"])) true
let test_validate_path_valueless_node_with_value test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (raises_validation_error (fun () -> ignore @@ validate_path (get_dir test_ctxt) r ["system"; "options"; "reboot-on-panic"; "fgsfds"])) true
let test_validate_path_valueless_node_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (validate_path (get_dir test_ctxt) r ["system"; "options"; "reboot-on-panic"])
(["system"; "options"; "reboot-on-panic"], None)
let test_is_multi_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_multi r ["system"; "ntp-server"]) true
let test_is_multi_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_multi r ["system"; "host-name"]) false
let test_is_secret_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_secret r ["system"; "login"; "password"]) true
let test_is_secret_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_secret r ["system"; "login"; "user"; "full-name"]) false
let test_is_hidden_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_hidden r ["system"; "options"; "enable-dangerous-features"]) true
let test_is_hidden_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_hidden r ["system"; "login"; "user"; "full-name"]) false
let test_is_tag_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_tag r ["system"; "login"; "user"]) true
let test_is_tag_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_tag r ["system"; "login"]) false
let test_is_leaf_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_leaf r ["system"; "login"; "user"; "full-name"]) true
let test_is_leaf_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_leaf r ["system"; "login"; "user"]) false
let test_is_valueless_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_valueless r ["system"; "options"; "reboot-on-panic"]) true
let test_is_valueless_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (is_valueless r ["system"; "login"; "user"; "full-name"]) false
let test_get_keep_order_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (get_keep_order r ["system"; "login"; "user"]) true
let test_get_keep_order_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (get_keep_order r ["system"; "login"; "user"; "full-name"]) false
let test_get_owner_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (get_owner r ["system"; "login"]) (Some "login")
let test_get_owner_invalid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (get_owner r ["system"; "login"; "user"]) None
let test_get_help_string_valid test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (get_help_string r ["system"; "login"; "user"; "full-name"]) ("User full name")
let test_get_help_string_default test_ctxt =
let r = Vytree.make default_data "root" in
let r = load_from_xml r (in_testdata_dir test_ctxt ["interface_definition_sample.xml"]) in
assert_equal (get_help_string r ["system"; "host-name"]) ("No help available")
let test_load_interface_definitions_children test_ctxt =
let interface_definitions_dir = in_testdata_dir test_ctxt ["interface_definitions"] in
let r = ok_or_failure (load_interface_definitions interface_definitions_dir) in
let children = Vytree.list_children r in
assert_equal children ["system"; "login"]
let test_load_interface_definitions_leaves test_ctxt =
let interface_definitions_dir = in_testdata_dir test_ctxt ["interface_definitions"] in
let r = ok_or_failure (load_interface_definitions interface_definitions_dir) in
let has_system_leaf = is_leaf r ["system"; "login"; "user"; "full-name"] in
let has_login_leaf = is_leaf r ["login"; "user"; "full-name"] in
assert_equal (has_system_leaf && has_login_leaf) true
let suite =
"Util tests" >::: [
"test_load_valid_definition" >:: test_load_valid_definition;
"test_validate_path_leaf_valid" >:: test_validate_path_leaf_valid;
"test_validate_path_leaf_invalid" >:: test_validate_path_leaf_invalid;
"test_validate_path_leaf_incomplete" >:: test_validate_path_leaf_incomplete;
"test_validate_path_tag_node_illegal_characters" >:: test_validate_path_tag_node_illegal_characters;
"test_validate_path_tag_node_complete_valid" >:: test_validate_path_tag_node_complete_valid;
"test_validate_path_tag_node_invalid_name" >:: test_validate_path_tag_node_invalid_name;
"test_validate_path_tag_node_incomplete" >:: test_validate_path_tag_node_incomplete;
"test_validate_path_garbage_after_value" >:: test_validate_path_garbage_after_value;
"test_validate_path_valueless_node_with_value" >:: test_validate_path_valueless_node_with_value;
"test_validate_path_valueless_node_valid" >:: test_validate_path_valueless_node_valid;
"test_is_multi_valid" >:: test_is_multi_valid;
"test_is_multi_invalid" >:: test_is_multi_invalid;
"test_is_secret_valid" >:: test_is_secret_valid;
"test_is_secret_invalid" >:: test_is_secret_invalid;
"test_is_hidden_valid" >:: test_is_hidden_valid;
"test_is_hidden_invalid" >:: test_is_hidden_invalid;
"test_is_tag_valid" >:: test_is_tag_valid;
"test_is_tag_invalid" >:: test_is_tag_invalid;
"test_is_leaf_valid" >:: test_is_leaf_valid;
"test_is_leaf_invalid" >:: test_is_leaf_invalid;
"test_is_valueless_valid" >:: test_is_valueless_valid;
"test_is_valueless_invalid" >:: test_is_valueless_invalid;
"test_get_keep_order_valid" >:: test_get_keep_order_valid;
"test_get_keep_order_invalid" >:: test_get_keep_order_invalid;
"test_get_owner_valid" >:: test_get_owner_valid;
"test_get_owner_invalid" >:: test_get_owner_invalid;
"test_get_help_string_valid" >:: test_get_help_string_valid;
"test_get_help_string_default" >:: test_get_help_string_default;
"test_load_interface_definitions_children " >:: test_load_interface_definitions_children;
"test_load_interface_definitions_leaves" >:: test_load_interface_definitions_leaves
]
let () =
run_test_tt_main suite
|