vcloud-edge_gateway 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/CHANGELOG.md +11 -0
  2. data/README.md +219 -11
  3. data/examples/firewall-rules.yaml +50 -0
  4. data/examples/loadbalancer-rules.yaml +55 -0
  5. data/examples/nat-rules.yaml +58 -0
  6. data/lib/vcloud/edge_gateway.rb +2 -3
  7. data/lib/vcloud/edge_gateway/configuration_differ.rb +13 -1
  8. data/lib/vcloud/edge_gateway/configuration_generator/nat_service.rb +10 -10
  9. data/lib/vcloud/edge_gateway/edge_gateway_configuration.rb +2 -2
  10. data/lib/vcloud/edge_gateway/firewall_configuration_differ.rb +18 -0
  11. data/lib/vcloud/edge_gateway/load_balancer_configuration_differ.rb +3 -13
  12. data/lib/vcloud/edge_gateway/nat_configuration_differ.rb +18 -0
  13. data/lib/vcloud/edge_gateway/version.rb +1 -1
  14. data/lib/vcloud/edge_gateway_services.rb +1 -1
  15. data/spec/integration/edge_gateway/edge_gateway_services_spec.rb +7 -13
  16. data/spec/integration/edge_gateway/firewall_service_spec.rb +2 -12
  17. data/spec/integration/edge_gateway/load_balancer_service_spec.rb +4 -4
  18. data/spec/integration/edge_gateway/nat_service_spec.rb +4 -4
  19. data/spec/spec_helper.rb +2 -2
  20. data/spec/vcloud/edge_gateway/configuration_differ_shared_examples.rb +132 -0
  21. data/spec/vcloud/edge_gateway/configuration_differ_spec.rb +5 -122
  22. data/spec/vcloud/edge_gateway/configuration_generator/firewall_service_spec.rb +46 -52
  23. data/spec/vcloud/edge_gateway/firewall_configuration_differ_spec.rb +65 -0
  24. data/spec/vcloud/edge_gateway/firewall_schema_validation_spec.rb +2 -2
  25. data/spec/vcloud/edge_gateway/load_balancer_configuration_differ_spec.rb +32 -147
  26. data/spec/vcloud/edge_gateway/load_balancer_schema_validation_spec.rb +7 -7
  27. data/spec/vcloud/edge_gateway/nat_configuration_differ_spec.rb +65 -0
  28. data/spec/vcloud/edge_gateway/nat_schema_validation_spec.rb +4 -4
  29. data/vcloud-edge_gateway.gemspec +2 -2
  30. metadata +18 -13
  31. data/lib/vcloud/config_loader.rb +0 -27
  32. data/lib/vcloud/config_validator.rb +0 -207
  33. data/spec/vcloud/config_loader_spec.rb +0 -112
  34. data/spec/vcloud/config_validator_spec.rb +0 -570
@@ -1,112 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Vcloud::ConfigLoader do
4
-
5
- before(:all) do
6
- @valid_config = valid_config
7
- end
8
-
9
- it "should create a valid hash when input is JSON" do
10
- input_file = 'spec/vcloud/data/working.json'
11
- loader = Vcloud::ConfigLoader.new
12
- actual_config = loader.load_config(input_file)
13
- valid_config.should eq(actual_config)
14
- end
15
-
16
- it "should create a valid hash when input is YAML" do
17
- input_file = 'spec/vcloud/data/working.yaml'
18
- loader = Vcloud::ConfigLoader.new
19
- actual_config = loader.load_config(input_file)
20
- valid_config.should eq(actual_config)
21
- end
22
-
23
- it "should create a valid hash when input is YAML with anchor defaults" do
24
- input_file = 'spec/vcloud/data/working_with_defaults.yaml'
25
- loader = Vcloud::ConfigLoader.new
26
- actual_config = loader.load_config(input_file)
27
- valid_config['vapps'].should eq(actual_config['vapps'])
28
- end
29
-
30
- # it "should validate correctly against a schema" do
31
- # input_file = 'spec/vcloud/data/working_with_defaults.yaml'
32
- # loader = Vcloud::ConfigLoader.new
33
- # schema = Vcloud::Launch.new.config_schema
34
- # actual_config = loader.load_config(input_file, schema)
35
- # valid_config['vapps'].should eq(actual_config['vapps'])
36
- # end
37
-
38
- # it "should raise an error if checked against an invalid schema" do
39
- # input_file = 'spec/vcloud/data/working_with_defaults.yaml'
40
- # loader = Vcloud::ConfigLoader.new
41
- # Vcloud.logger.should_receive(:fatal).with("vapps: is not a hash")
42
- # expect { loader.load_config(input_file, invalid_schema) }.
43
- # to raise_error('Supplied configuration does not match supplied schema')
44
- # end
45
- #
46
- context "loading example vcloud_launch configurations" do
47
- examples_dir = File.join(
48
- File.dirname(__FILE__),
49
- '..', '..', 'examples'
50
- )
51
- Dir["#{examples_dir}/vcloud-launch/*.yaml"].each do |input_file|
52
- it "should load example config #{File.basename(input_file)}" do
53
- loader = Vcloud::ConfigLoader.new
54
- actual_config = loader.load_config(input_file, ::Vcloud::Launch::new.config_schema)
55
- expect(actual_config).to be_true
56
- end
57
- end
58
- end
59
-
60
- context "loading example vcloud-net-launch configurations" do
61
- examples_dir = File.join(
62
- File.dirname(__FILE__),
63
- '..', '..', 'examples'
64
- )
65
- Dir["#{examples_dir}/vcloud-net-launch/*.yaml"].each do |input_file|
66
- it "should load example config #{File.basename(input_file)}" do
67
- loader = Vcloud::ConfigLoader.new
68
- actual_config = loader.load_config(input_file)
69
- expect(actual_config).to be_true
70
- end
71
- end
72
- end
73
-
74
- def invalid_schema
75
- {
76
- type: Hash,
77
- permit_unknown_parameters: true,
78
- internals: {
79
- vapps: { type: Hash },
80
- }
81
- }
82
- end
83
-
84
- def valid_config
85
- {
86
- :vapps=>[{
87
- :name=>"vapp-vcloud-tools-tests",
88
- :vdc_name=>"VDC_NAME",
89
- :catalog=>"CATALOG_NAME",
90
- :catalog_item=>"CATALOG_ITEM",
91
- :vm=>{
92
- :hardware_config=>{:memory=>"4096", :cpu=>"2"},
93
- :extra_disks=>[{:size=>"8192"}],
94
- :network_connections=>[{
95
- :name=>"Default",
96
- :ip_address=>"192.168.2.10"
97
- },
98
- {
99
- :name=>"NetworkTest2",
100
- :ip_address=>"192.168.1.10"
101
- }],
102
- :bootstrap=>{
103
- :script_path=>"spec/data/basic_preamble_test.erb",
104
- :vars=>{:message=>"hello world"}
105
- },
106
- :metadata=>{}
107
- }
108
- }]
109
- }
110
- end
111
-
112
- end
@@ -1,570 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Vcloud
4
- describe ConfigValidator do
5
-
6
- context "sanitize type" do
7
-
8
- it "should be ok with type as bare String" do
9
- data = "hello world"
10
- schema = { type: String }
11
- v = ConfigValidator.validate(:base, data, schema)
12
- expect(v.valid?).to be_true
13
- end
14
-
15
- it "should be ok with type as string 'String'" do
16
- data = "hello world"
17
- schema = { type: 'String' }
18
- v = ConfigValidator.validate(:base, data, schema)
19
- expect(v.valid?).to be_true
20
- end
21
-
22
- it "should be ok with type as string 'string'" do
23
- data = "hello world"
24
- schema = { type: 'string' }
25
- v = ConfigValidator.validate(:base, data, schema)
26
- expect(v.valid?).to be_true
27
- end
28
-
29
- end
30
-
31
- context "string validations" do
32
-
33
- it "should validate a basic string" do
34
- data = "hello world"
35
- schema = { type: 'string' }
36
- v = ConfigValidator.validate(:base, data, schema)
37
- expect(v.valid?).to be_true
38
- end
39
-
40
- it "should not validate a number as a basic string" do
41
- data = 42
42
- schema = { type: 'string' }
43
- v = ConfigValidator.validate(:base, data, schema)
44
- expect(v.valid?).to be_false
45
- end
46
-
47
- it "should log error with number as a basic string" do
48
- data = 42
49
- schema = { type: 'string' }
50
- v = ConfigValidator.validate(:base, data, schema)
51
- expect(v.errors).to eq([ 'base: 42 is not a string'] )
52
- end
53
-
54
- it "should return error with empty string (by default)" do
55
- data = ""
56
- schema = { type: 'string' }
57
- v = ConfigValidator.validate(:base, data, schema)
58
- expect(v.errors).to eq([ 'base: cannot be empty string'] )
59
- end
60
-
61
- it "should return error with empty string with allowed_empty: false)" do
62
- data = ""
63
- schema = { type: 'string', allowed_empty: false }
64
- v = ConfigValidator.validate(:base, data, schema)
65
- expect(v.errors).to eq([ 'base: cannot be empty string'] )
66
- end
67
-
68
- it "should validate ok with empty string with allowed_empty: true)" do
69
- data = ""
70
- schema = { type: 'string', allowed_empty: true }
71
- v = ConfigValidator.validate(:base, data, schema)
72
- expect(v.valid?).to be_true
73
- end
74
-
75
- it "should validate ok with a :matcher regex specified" do
76
- data = "name-1234"
77
- schema = { type: 'string', matcher: /^name-\d+$/ }
78
- v = ConfigValidator.validate(:base, data, schema)
79
- expect(v.valid?).to be_true
80
- end
81
-
82
- it "should return errror with a :matcher regex not matching" do
83
- data = "name-123a"
84
- schema = { type: 'string', matcher: /^name-\d+$/ }
85
- v = ConfigValidator.validate(:base, data, schema)
86
- expect(v.errors).to eq(['base: name-123a does not match'])
87
- end
88
-
89
- end
90
-
91
- context "hash validations" do
92
-
93
- it "should validate a basic hash" do
94
- data = { name: "santa", address: "north pole" }
95
- schema = {
96
- type: "Hash",
97
- internals: {
98
- name: { type: 'string' },
99
- address: { type: 'string' },
100
- }
101
- }
102
- v = ConfigValidator.validate(:base, data, schema)
103
- expect(v.valid?).to be_true
104
- end
105
-
106
- it "should not validate a bogus hash" do
107
- data = { name: 42, address: 42 }
108
- schema = {
109
- type: "Hash",
110
- internals: {
111
- name: { type: "string" },
112
- address: { type: "string" },
113
- }
114
- }
115
- v = ConfigValidator.validate(:base, data, schema)
116
- expect(v.valid?).to be_false
117
- end
118
-
119
- it "should return correct errors validating a bogus hash" do
120
- data = { name: 42, address: 42 }
121
- schema = {
122
- type: "Hash",
123
- internals: {
124
- name: { type: "string" },
125
- address: { type: "string" },
126
- }
127
- }
128
- v = ConfigValidator.validate(:base, data, schema)
129
- expect(v.errors).to eq([
130
- "name: 42 is not a string",
131
- "address: 42 is not a string",
132
- ])
133
- end
134
-
135
- it "should return error with empty hash (by default)" do
136
- data = {}
137
- schema = { type: 'hash' }
138
- v = ConfigValidator.validate(:base, data, schema)
139
- expect(v.errors).to eq([ 'base: cannot be empty hash'] )
140
- end
141
-
142
- it "should return error with empty hash with allowed_empty: false)" do
143
- data = {}
144
- schema = { type: 'hash', allowed_empty: false }
145
- v = ConfigValidator.validate(:base, data, schema)
146
- expect(v.errors).to eq([ 'base: cannot be empty hash'] )
147
- end
148
-
149
- it "should validate ok with empty hash with allowed_empty: true)" do
150
- data = {}
151
- schema = { type: 'hash', allowed_empty: true }
152
- v = ConfigValidator.validate(:base, data, schema)
153
- expect(v.valid?).to be_true
154
- end
155
-
156
- it "should validate ok with a missing parameter, when marked :required => false" do
157
- data = {
158
- name: 'hello'
159
- }
160
- schema = {
161
- type: 'hash',
162
- internals: {
163
- name: { type: 'string' },
164
- optional_param: { type: 'string', required: false },
165
- }
166
- }
167
- v = ConfigValidator.validate(:base, data, schema)
168
- expect(v.valid?).to be_true
169
- end
170
-
171
- it "should return error with a missing :required => true param" do
172
- data = {
173
- name: 'hello'
174
- }
175
- schema = {
176
- type: 'hash',
177
- internals: {
178
- name: { type: 'string' },
179
- not_optional_param: { type: 'string', required: true },
180
- }
181
- }
182
- v = ConfigValidator.validate(:base, data, schema)
183
- expect(v.errors).to eq(["base: missing 'not_optional_param' parameter"])
184
- end
185
-
186
- it "should return error if a bogus parameter is specified" do
187
- data = {
188
- name: 'hello',
189
- bogus_parameter: [ 'wibble' ],
190
- bogus_parameter2: 'hello',
191
- }
192
- schema = {
193
- type: 'hash',
194
- internals: {
195
- name: { type: 'string' },
196
- },
197
- }
198
- v = ConfigValidator.validate(:base, data, schema)
199
- expect(v.errors).to eq([
200
- "base: parameter 'bogus_parameter' is invalid",
201
- "base: parameter 'bogus_parameter2' is invalid",
202
- ])
203
- end
204
-
205
- it "should validate ok if a bogus parameter is specified, when :permit_unknown_parameters is true" do
206
- data = {
207
- name: 'hello',
208
- bogus_parameter: [ 'wibble' ],
209
- bogus_parameter2: 'hello',
210
- }
211
- schema = {
212
- type: 'hash',
213
- permit_unknown_parameters: true,
214
- internals: {
215
- name: { type: 'string' },
216
- },
217
- }
218
- v = ConfigValidator.validate(:base, data, schema)
219
- expect(v.valid?).to be_true
220
- end
221
-
222
- end
223
-
224
- context "array validations" do
225
-
226
- it "should validate a basic array" do
227
- data = [ "santa", "north pole" ]
228
- schema = {
229
- type: "Array",
230
- each_element_is: { type: "string" }
231
- }
232
- v = ConfigValidator.validate(:base, data, schema)
233
- expect(v.valid?).to be_true
234
- end
235
-
236
- it "should validate a bogus array" do
237
- data = [ 42, 43 ]
238
- schema = {
239
- type: "Array",
240
- each_element_is: { type: "string" }
241
- }
242
- v = ConfigValidator.validate(:base, data, schema)
243
- expect(v.valid?).to be_false
244
- end
245
-
246
- it "should return correct errors validating a bogus array" do
247
- data = [ 42, 43 ]
248
- schema = {
249
- type: "Array",
250
- each_element_is: { type: "string" }
251
- }
252
- v = ConfigValidator.validate(:base, data, schema)
253
- expect(v.errors).to eq([
254
- "base: 42 is not a string",
255
- "base: 43 is not a string",
256
- ])
257
- end
258
-
259
- it "should return error with empty array (by default)" do
260
- data = []
261
- schema = { type: 'array' }
262
- v = ConfigValidator.validate(:base, data, schema)
263
- expect(v.errors).to eq([ 'base: cannot be empty array'] )
264
- end
265
-
266
- it "should return error with empty array with allowed_empty: false)" do
267
- data = []
268
- schema = { type: 'array', allowed_empty: false }
269
- v = ConfigValidator.validate(:base, data, schema)
270
- expect(v.errors).to eq([ 'base: cannot be empty array'] )
271
- end
272
-
273
- it "should validate ok with empty array with allowed_empty: true)" do
274
- data = []
275
- schema = { type: 'array', allowed_empty: true }
276
- v = ConfigValidator.validate(:base, data, schema)
277
- expect(v.valid?).to be_true
278
- end
279
-
280
- end
281
-
282
- context "array of hashes validations" do
283
-
284
- it "should validate an array of hashes" do
285
- data = [
286
- { name: "santa", address: "north pole" },
287
- { name: "mole", address: "1 hole street" },
288
- ]
289
- schema = {
290
- type: "array",
291
- each_element_is: {
292
- type: "hash",
293
- internals: {
294
- name: { type: 'string' },
295
- address: { type: 'string' },
296
- }
297
- }
298
- }
299
- v = ConfigValidator.validate(:base, data, schema)
300
- expect(v.valid?).to be_true
301
- end
302
-
303
- it "should correctly error on an invalid an array of hashes" do
304
- data = [
305
- { name: "santa", address: [] },
306
- { name: 43, address: "1 hole street" },
307
- ]
308
- schema = {
309
- type: "array",
310
- each_element_is: {
311
- type: "hash",
312
- internals: {
313
- name: { type: 'string' },
314
- address: { type: 'string' },
315
- }
316
- }
317
- }
318
- v = ConfigValidator.validate(:base, data, schema)
319
- expect(v.errors).to eq([
320
- "address: [] is not a string",
321
- "name: 43 is not a string",
322
- ])
323
- end
324
-
325
- end
326
-
327
- context "hash of arrays validations" do
328
-
329
- it "should validate a hash of arrays" do
330
- data = {
331
- boys_names: [ 'bob', 'andrew', 'charlie', 'dave' ],
332
- girls_names: [ 'alice', 'beth', 'carol', 'davina' ],
333
- }
334
- schema = {
335
- type: "Hash",
336
- internals: {
337
- boys_names: {
338
- type: "Array",
339
- each_element_is: { type: 'String' }
340
- },
341
- girls_names: {
342
- type: "Array",
343
- each_element_is: { type: 'String' }
344
- }
345
- }
346
- }
347
- v = ConfigValidator.validate(:base, data, schema)
348
- expect(v.valid?).to be_true
349
- end
350
-
351
- it "should correctly error on an invalid hash of arrays" do
352
- data = {
353
- boys_names: [ 'bob', 'andrew', 'charlie', 'dave' ],
354
- girls_names: [ 'alice', 'beth', 'carol', 'davina' ],
355
- }
356
- schema = {
357
- type: "Hash",
358
- internals: {
359
- boys_names: {
360
- type: "Array",
361
- each_element_is: { type: 'String' },
362
- },
363
- girls_names: {
364
- type: "Array",
365
- each_element_is: { type: 'String' },
366
- }
367
- },
368
- }
369
- v = ConfigValidator.validate(:base, data, schema)
370
- expect(v.valid?).to be_true
371
- end
372
-
373
- end
374
-
375
- context "string_or_number validations" do
376
-
377
- it "should correctly validate an Integer" do
378
- data = 2
379
- schema = { type: 'string_or_number' }
380
- v = ConfigValidator.validate(:base, data, schema)
381
- expect(v.valid?).to be_true
382
- end
383
-
384
- it "should correctly validate a String" do
385
- data = '2'
386
- schema = { type: 'string_or_number' }
387
- v = ConfigValidator.validate(:base, data, schema)
388
- expect(v.valid?).to be_true
389
- end
390
-
391
- it "should correctly error if not a string or numeric" do
392
- data = []
393
- schema = { type: 'string_or_number' }
394
- v = ConfigValidator.validate(:base, data, schema)
395
- expect(v.errors).to eq(["base: [] is not a string_or_number"])
396
- end
397
-
398
- end
399
-
400
- context "ip_address validations" do
401
-
402
- it "should correctly validate an IP address" do
403
- data = '192.168.100.100'
404
- schema = { type: 'ip_address' }
405
- v = ConfigValidator.validate(:base, data, schema)
406
- expect(v.valid?).to be_true
407
- end
408
-
409
- it "should correctly error on an invalid IP address" do
410
- data = '256.168.100.100'
411
- schema = { type: 'ip_address' }
412
- v = ConfigValidator.validate(:base, data, schema)
413
- expect(v.errors).to eq(['base: 256.168.100.100 is not a valid ip_address'])
414
- end
415
-
416
- it "should error if ip address have wrong octets" do
417
- data = '192.168.100.100/33/33/33'
418
- schema = { type: 'ip_address' }
419
- v = ConfigValidator.validate(:base, data, schema)
420
- expect(v.errors).to eq(['base: 192.168.100.100/33/33/33 is not a valid ip_address'])
421
- end
422
-
423
- end
424
-
425
- context "ip_address_range validations" do
426
- context "validate CIDR" do
427
- it "should validate OK if CIDR is correct" do
428
- data = '192.168.100.100/24'
429
- schema = { type: 'ip_address_range' }
430
- v = ConfigValidator.validate(:base, data, schema)
431
- expect(v.valid?).to be_true
432
- end
433
-
434
- it "should return error if network bit value is greater than 32" do
435
- data = '192.168.100.100/33'
436
- schema = { type: 'ip_address_range' }
437
- v = ConfigValidator.validate(:base, data, schema)
438
- expect(v.valid?).to be_false
439
- expect(v.errors).to eq(["base: 192.168.100.100/33 is not a valid IP address range. Valid values can be IP address, CIDR, IP range, 'Any','internal' and 'external'."])
440
- end
441
-
442
- it "should return error if network bit value is less than 0" do
443
- data = '192.168.100.100/33'
444
- schema = { type: 'ip_address_range' }
445
- v = ConfigValidator.validate(:base, data, schema)
446
- expect(v.valid?).to be_false
447
- expect(v.errors).to eq(["base: 192.168.100.100/33 is not a valid IP address range. Valid values can be IP address, CIDR, IP range, 'Any','internal' and 'external'."])
448
- end
449
-
450
- it "should return error if network IP address is incorrect" do
451
- data = '192.168.100./33'
452
- schema = { type: 'ip_address_range' }
453
- v = ConfigValidator.validate(:base, data, schema)
454
- expect(v.valid?).to be_false
455
- expect(v.errors).to eq(["base: 192.168.100./33 is not a valid IP address range. Valid values can be IP address, CIDR, IP range, 'Any','internal' and 'external'."])
456
- end
457
- end
458
-
459
- context "validate alphabetical values for IP range" do
460
- %w(Any internal external).each do |data|
461
- it "should validate OK if IP range is '#{data}'" do
462
- schema = { type: 'ip_address_range' }
463
- v = ConfigValidator.validate(:base, data, schema)
464
- expect(v.valid?).to be_true
465
- expect(v.errors).to be_empty
466
- end
467
- end
468
-
469
- it "should error if IP range is a string but not a valid alphabetical value" do
470
- data = 'invalid_ip_range_string'
471
- schema = { type: 'ip_address_range' }
472
- v = ConfigValidator.validate(:base, data, schema)
473
- expect(v.valid?).to be_false
474
- expect(v.errors).to eq(["base: invalid_ip_range_string is not a valid IP address range. Valid values can be IP address, CIDR, IP range, 'Any','internal' and 'external'."])
475
- end
476
- end
477
-
478
- context "validate ranges specified using start and end addresses" do
479
- it "should validate ok if the combination of start IP and end IP is correct" do
480
- data = '192.168.100.100-192.168.100.110'
481
- schema = { type: 'ip_address_range' }
482
- v = ConfigValidator.validate(:base, data, schema)
483
- expect(v.valid?).to be_true
484
- expect(v.errors).to be_empty
485
- end
486
-
487
- it "should error if start IP address is incorrect" do
488
- data = '192.168.100-192.168.100.110'
489
- schema = { type: 'ip_address_range' }
490
- v = ConfigValidator.validate(:base, data, schema)
491
- expect(v.valid?).to be_false
492
- expect(v.errors).to eq(["base: 192.168.100-192.168.100.110 is not a valid IP address range. Valid values can be IP address, CIDR, IP range, 'Any','internal' and 'external'."])
493
- end
494
-
495
- it "should error if end IP address is incorrect" do
496
- data = '192.168.100.110-192.168.100'
497
- schema = { type: 'ip_address_range' }
498
- v = ConfigValidator.validate(:base, data, schema)
499
- expect(v.valid?).to be_false
500
- expect(v.errors).to eq(["base: 192.168.100.110-192.168.100 is not a valid IP address range. Valid values can be IP address, CIDR, IP range, 'Any','internal' and 'external'."])
501
- end
502
-
503
- it "should error if the combination of start IP and end IP is incorrect" do
504
- data = '200.168.100.99-192.168.100'
505
- schema = { type: 'ip_address_range' }
506
- v = ConfigValidator.validate(:base, data, schema)
507
- expect(v.valid?).to be_false
508
- expect(v.errors).to eq(["base: 200.168.100.99-192.168.100 is not a valid IP address range. Valid values can be IP address, CIDR, IP range, 'Any','internal' and 'external'."])
509
- end
510
-
511
- it "should error if the start and end IPS are not separated by -" do
512
- data = '190.168.100.99:192.168.100'
513
- schema = { type: 'ip_address_range' }
514
- v = ConfigValidator.validate(:base, data, schema)
515
- expect(v.valid?).to be_false
516
- expect(v.errors).to eq(["base: 190.168.100.99:192.168.100 is not a valid IP address range. Valid values can be IP address, CIDR, IP range, 'Any','internal' and 'external'."])
517
- end
518
- end
519
-
520
- it "should accept single ip address as range" do
521
- data = '190.168.100.99'
522
- schema = { type: 'ip_address_range' }
523
- v = ConfigValidator.validate(:base, data, schema)
524
- expect(v.valid?).to be_true
525
- expect(v.errors).to eq([])
526
- end
527
- end
528
-
529
- context "enum validations" do
530
- it "should error if enum value is not present in list" do
531
- data = 'blah'
532
- schema = { type: 'enum', required: false, acceptable_values: ['allow', 'decline', 'none']}
533
- v = ConfigValidator.validate(:base, data, schema)
534
- expect(v.errors).to eq(["base: blah is not a valid value. Acceptable values are 'allow', 'decline', 'none'."])
535
- end
536
-
537
- it "should raise error if enum schema does not contain acceptable_values" do
538
- data = 'blah'
539
- schema = { type: 'enum', required: false}
540
- expect{ ConfigValidator.validate(:base, data, schema) }.to raise_error("Must set :acceptable_values for type 'enum'")
541
- end
542
-
543
- it "should validate ok if enum is acceptable" do
544
- data = 'allow'
545
- schema = { type: 'enum', required: false, acceptable_values: ['allow', 'decline', 'none']}
546
- v = ConfigValidator.validate(:base, data, schema)
547
- expect(v.valid?).to be_true
548
- end
549
- end
550
-
551
- context "boolean validations" do
552
- it "should error if boolean value is not valid" do
553
- data = 'blah'
554
- schema = { type: 'boolean' }
555
- v = ConfigValidator.validate(:base, data, schema)
556
- expect(v.errors).to eq(["base: blah is not a valid boolean value."])
557
- end
558
-
559
- [true, false].each do |boolean_value|
560
- it "should validate ok if value is #{boolean_value}" do
561
- schema = { type: 'boolean' }
562
- v = ConfigValidator.validate(:base, boolean_value, schema)
563
- expect(v.valid?).to be_true
564
- end
565
- end
566
-
567
- end
568
-
569
- end
570
- end