fog-aws 3.3.0 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -12
- data/fog-aws.gemspec +1 -1
- data/lib/fog/aws/compute.rb +2 -0
- data/lib/fog/aws/models/compute/address.rb +1 -0
- data/lib/fog/aws/models/compute/flavors.rb +440 -0
- data/lib/fog/aws/models/rds/cluster.rb +9 -1
- data/lib/fog/aws/models/rds/server.rb +3 -3
- data/lib/fog/aws/models/storage/directory.rb +35 -0
- data/lib/fog/aws/parsers/compute/describe_addresses.rb +30 -9
- data/lib/fog/aws/parsers/compute/describe_image_attribute.rb +122 -0
- data/lib/fog/aws/parsers/compute/describe_security_groups.rb +1 -1
- data/lib/fog/aws/requests/compute/describe_image_attribute.rb +74 -0
- data/lib/fog/aws/requests/compute/describe_security_groups.rb +12 -1
- data/lib/fog/aws/requests/compute/modify_instance_placement.rb +33 -0
- data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +1 -1
- data/lib/fog/aws/requests/dynamodb/update_item.rb +6 -5
- data/lib/fog/aws/requests/storage/get_bucket_location.rb +2 -3
- data/lib/fog/aws/requests/storage/get_service.rb +2 -2
- data/lib/fog/aws/requests/storage/put_object.rb +5 -3
- data/lib/fog/aws/storage.rb +9 -2
- data/lib/fog/aws/version.rb +1 -1
- data/tests/credentials_tests.rb +38 -37
- data/tests/helper.rb +2 -2
- data/tests/helpers/collection_helper.rb +3 -4
- data/tests/helpers/compute/flavors_helper.rb +1 -5
- data/tests/helpers/compute/server_helper.rb +1 -3
- data/tests/helpers/compute/servers_helper.rb +0 -2
- data/tests/helpers/dns_helper.rb +32 -31
- data/tests/helpers/formats_helper.rb +58 -56
- data/tests/helpers/formats_helper_tests.rb +22 -25
- data/tests/helpers/mock_helper.rb +96 -96
- data/tests/helpers/model_helper.rb +4 -5
- data/tests/helpers/responds_to_helper.rb +1 -1
- data/tests/helpers/schema_validator_tests.rb +21 -24
- data/tests/helpers/succeeds_helper.rb +1 -1
- data/tests/parsers/compute/describe_images_tests.rb +1 -1
- data/tests/parsers/elb/describe_load_balancers.rb +1 -1
- data/tests/requests/compute/image_tests.rb +9 -0
- data/tests/requests/sts/assume_role_with_web_identity_tests.rb +2 -0
- data/tests/signaturev4_tests.rb +21 -22
- data/tests/signed_params_tests.rb +7 -7
- data/tests/storage_tests.rb +1 -1
- metadata +8 -6
@@ -1,37 +1,37 @@
|
|
1
1
|
Shindo.tests('test_helper', 'meta') do
|
2
2
|
|
3
3
|
tests('comparing welcome data against schema') do
|
4
|
-
data = {:
|
5
|
-
data_matches_schema(:
|
4
|
+
data = { welcome: 'Hello' }
|
5
|
+
data_matches_schema(welcome: String) { data }
|
6
6
|
end
|
7
7
|
|
8
8
|
tests('#data_matches_schema') do
|
9
9
|
tests('when value matches schema expectation') do
|
10
|
-
data_matches_schema(
|
10
|
+
data_matches_schema('key' => String) { { 'key' => 'Value' } }
|
11
11
|
end
|
12
12
|
|
13
13
|
tests('when values within an array all match schema expectation') do
|
14
|
-
data_matches_schema(
|
14
|
+
data_matches_schema('key' => [Integer]) { { 'key' => [1, 2] } }
|
15
15
|
end
|
16
16
|
|
17
17
|
tests('when nested values match schema expectation') do
|
18
|
-
data_matches_schema(
|
18
|
+
data_matches_schema('key' => { nested_key: String }) { { 'key' => { nested_key: 'Value' } } }
|
19
19
|
end
|
20
20
|
|
21
21
|
tests('when collection of values all match schema expectation') do
|
22
|
-
data_matches_schema([{
|
22
|
+
data_matches_schema([{ 'key' => String }]) { [{ 'key' => 'Value' }, { 'key' => 'Value' }] }
|
23
23
|
end
|
24
24
|
|
25
25
|
tests('when collection is empty although schema covers optional members') do
|
26
|
-
data_matches_schema([{
|
26
|
+
data_matches_schema([{ 'key' => String }], allow_optional_rules: true) { [] }
|
27
27
|
end
|
28
28
|
|
29
29
|
tests('when additional keys are passed and not strict') do
|
30
|
-
data_matches_schema({
|
30
|
+
data_matches_schema({ 'key' => String }, allow_extra_keys: true) { { 'key' => 'Value', extra: 'Bonus' } }
|
31
31
|
end
|
32
32
|
|
33
33
|
tests('when value is nil and schema expects NilClass') do
|
34
|
-
data_matches_schema(
|
34
|
+
data_matches_schema('key' => NilClass) { { 'key' => nil } }
|
35
35
|
end
|
36
36
|
|
37
37
|
tests('when value and schema match as hashes') do
|
@@ -43,46 +43,45 @@ Shindo.tests('test_helper', 'meta') do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
tests('when value is a Time') do
|
46
|
-
data_matches_schema(
|
46
|
+
data_matches_schema('time' => Time) { { 'time' => Time.now } }
|
47
47
|
end
|
48
48
|
|
49
49
|
tests('when key is missing but value should be NilClass (#1477)') do
|
50
|
-
data_matches_schema({
|
50
|
+
data_matches_schema({ 'key' => NilClass }, allow_optional_rules: true) { {} }
|
51
51
|
end
|
52
52
|
|
53
53
|
tests('when key is missing but value is nullable (#1477)') do
|
54
|
-
data_matches_schema({
|
54
|
+
data_matches_schema({ 'key' => Fog::Nullable::String }, allow_optional_rules: true) { {} }
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
tests('#formats backwards compatible changes') do
|
59
|
-
|
60
59
|
tests('when value matches schema expectation') do
|
61
|
-
formats(
|
60
|
+
formats('key' => String) { { 'key' => 'Value' } }
|
62
61
|
end
|
63
62
|
|
64
63
|
tests('when values within an array all match schema expectation') do
|
65
|
-
formats(
|
64
|
+
formats('key' => [Integer]) { { 'key' => [1, 2] } }
|
66
65
|
end
|
67
66
|
|
68
67
|
tests('when nested values match schema expectation') do
|
69
|
-
formats(
|
68
|
+
formats('key' => { nested_key: String }) { { 'key' => { nested_key: 'Value' } } }
|
70
69
|
end
|
71
70
|
|
72
71
|
tests('when collection of values all match schema expectation') do
|
73
|
-
formats([{
|
72
|
+
formats([{ 'key' => String }]) { [{ 'key' => 'Value' }, { 'key' => 'Value' }] }
|
74
73
|
end
|
75
74
|
|
76
75
|
tests('when collection is empty although schema covers optional members') do
|
77
|
-
formats([{
|
76
|
+
formats([{ 'key' => String }]) { [] }
|
78
77
|
end
|
79
78
|
|
80
79
|
tests('when additional keys are passed and not strict') do
|
81
|
-
formats({
|
80
|
+
formats({ 'key' => String }, false) { { 'key' => 'Value', :extra => 'Bonus' } }
|
82
81
|
end
|
83
82
|
|
84
83
|
tests('when value is nil and schema expects NilClass') do
|
85
|
-
formats(
|
84
|
+
formats('key' => NilClass) { { 'key' => nil } }
|
86
85
|
end
|
87
86
|
|
88
87
|
tests('when value and schema match as hashes') do
|
@@ -94,17 +93,15 @@ Shindo.tests('test_helper', 'meta') do
|
|
94
93
|
end
|
95
94
|
|
96
95
|
tests('when value is a Time') do
|
97
|
-
formats(
|
96
|
+
formats('time' => Time) { { 'time' => Time.now } }
|
98
97
|
end
|
99
98
|
|
100
99
|
tests('when key is missing but value should be NilClass (#1477)') do
|
101
|
-
formats(
|
100
|
+
formats('key' => NilClass) { {} }
|
102
101
|
end
|
103
102
|
|
104
103
|
tests('when key is missing but value is nullable (#1477)') do
|
105
|
-
formats(
|
104
|
+
formats('key' => Fog::Nullable::String) { {} }
|
106
105
|
end
|
107
|
-
|
108
106
|
end
|
109
|
-
|
110
107
|
end
|
@@ -9,101 +9,101 @@ end
|
|
9
9
|
# if in mocked mode, fill in some fake credentials for us
|
10
10
|
if Fog.mock?
|
11
11
|
Fog.credentials = {
|
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
|
-
:
|
12
|
+
aws_access_key_id: 'aws_access_key_id',
|
13
|
+
aws_secret_access_key: 'aws_secret_access_key',
|
14
|
+
ia_access_key_id: 'aws_access_key_id',
|
15
|
+
ia_secret_access_key: 'aws_secret_access_key',
|
16
|
+
bluebox_api_key: 'bluebox_api_key',
|
17
|
+
bluebox_customer_id: 'bluebox_customer_id',
|
18
|
+
brightbox_client_id: 'brightbox_client_id',
|
19
|
+
brightbox_secret: 'brightbox_secret',
|
20
|
+
cloudstack_disk_offering_id: '',
|
21
|
+
cloudstack_host: 'http://cloudstack.example.org',
|
22
|
+
cloudstack_network_ids: '',
|
23
|
+
cloudstack_service_offering_id: '4437ac6c-9fe3-477a-57ec-60a5a45896a4',
|
24
|
+
cloudstack_template_id: '8a31cf9c-f248-0588-256e-9dbf58785216',
|
25
|
+
cloudstack_zone_id: 'c554c592-e09c-9df5-7688-4a32754a4305',
|
26
|
+
cloudstack_project_id: 'f1f1f1f1-f1f1-f1f1-f1f1-f1f1f1f1f1f1',
|
27
|
+
clodo_api_key: 'clodo_api_key',
|
28
|
+
clodo_username: 'clodo_username',
|
29
|
+
digitalocean_api_key: 'digitalocean_api_key',
|
30
|
+
digitalocean_client_id: 'digitalocean_client_id',
|
31
|
+
dnsimple_email: 'dnsimple_email',
|
32
|
+
dnsimple_password: 'dnsimple_password',
|
33
|
+
dnsmadeeasy_api_key: 'dnsmadeeasy_api_key',
|
34
|
+
dnsmadeeasy_secret_key: 'dnsmadeeasy_secret_key',
|
35
|
+
glesys_username: 'glesys_username',
|
36
|
+
glesys_api_key: 'glesys_api_key',
|
37
|
+
go_grid_api_key: 'go_grid_api_key',
|
38
|
+
go_grid_shared_secret: 'go_grid_shared_secret',
|
39
|
+
google_storage_access_key_id: 'google_storage_access_key_id',
|
40
|
+
google_storage_secret_access_key: 'google_storage_secret_access_key',
|
41
|
+
google_project: 'google_project_name',
|
42
|
+
google_client_email: 'fake@developer.gserviceaccount.com',
|
43
|
+
google_key_location: '~/fake.p12',
|
44
|
+
hp_access_key: 'hp_access_key',
|
45
|
+
hp_secret_key: 'hp_secret_key',
|
46
|
+
hp_tenant_id: 'hp_tenant_id',
|
47
|
+
hp_avl_zone: 'hp_avl_zone',
|
48
|
+
os_account_meta_temp_url_key: 'os_account_meta_temp_url_key',
|
49
|
+
ibm_username: 'ibm_username',
|
50
|
+
ibm_password: 'ibm_password',
|
51
|
+
joyent_username: 'joyentuser',
|
52
|
+
joyent_password: 'joyentpass',
|
53
|
+
linode_api_key: 'linode_api_key',
|
54
|
+
local_root: '~/.fog',
|
55
|
+
bare_metal_cloud_password: 'bare_metal_cloud_password',
|
56
|
+
bare_metal_cloud_username: 'bare_metal_cloud_username',
|
57
|
+
ninefold_compute_key: 'ninefold_compute_key',
|
58
|
+
ninefold_compute_secret: 'ninefold_compute_secret',
|
59
|
+
ninefold_storage_secret: 'ninefold_storage_secret',
|
60
|
+
ninefold_storage_token: 'ninefold_storage_token',
|
61
|
+
# public_key_path: '~/.ssh/id_rsa.pub',
|
62
|
+
# private_key_path: '~/.ssh/id_rsa',
|
63
|
+
opennebula_endpoint: 'http://opennebula:2633/RPC2',
|
64
|
+
opennebula_username: 'oneadmin',
|
65
|
+
opennebula_password: 'oneadmin',
|
66
|
+
openstack_api_key: 'openstack_api_key',
|
67
|
+
openstack_username: 'openstack_username',
|
68
|
+
openstack_tenant: 'openstack_tenant',
|
69
|
+
openstack_auth_url: 'http://openstack:35357/v2.0/tokens',
|
70
|
+
ovirt_url: 'http://ovirt:8080/api',
|
71
|
+
ovirt_username: 'admin@internal',
|
72
|
+
ovirt_password: '123123',
|
73
|
+
profitbricks_username: 'profitbricks_username',
|
74
|
+
profitbricks_password: 'profitbricks_password',
|
75
|
+
libvirt_uri: 'qemu://libvirt/system',
|
76
|
+
rackspace_api_key: 'rackspace_api_key',
|
77
|
+
rackspace_region: 'dfw',
|
78
|
+
rackspace_username: 'rackspace_username',
|
79
|
+
riakcs_access_key_id: 'riakcs_access_key_id',
|
80
|
+
riakcs_secret_access_key: 'riakcs_secret_access_key',
|
81
|
+
sakuracloud_api_token: 'sakuracloud_api_token',
|
82
|
+
sakuracloud_api_token_secret: 'sakuracloud_api_token_secret',
|
83
|
+
storm_on_demand_username: 'storm_on_demand_username',
|
84
|
+
storm_on_demand_password: 'storm_on_demand_password',
|
85
|
+
vcloud_host: 'vcloud_host',
|
86
|
+
vcloud_password: 'vcloud_password',
|
87
|
+
vcloud_username: 'vcloud_username',
|
88
|
+
vcloud_director_host: 'vcloud-director-host',
|
89
|
+
vcloud_director_password: 'vcloud_director_password',
|
90
|
+
vcloud_director_username: 'vcd_user@vcd_org_name',
|
91
|
+
zerigo_email: 'zerigo_email',
|
92
|
+
zerigo_token: 'zerigo_token',
|
93
|
+
dynect_customer: 'dynect_customer',
|
94
|
+
dynect_username: 'dynect_username',
|
95
|
+
dynect_password: 'dynect_password',
|
96
|
+
vsphere_server: 'virtualcenter.lan',
|
97
|
+
vsphere_username: 'apiuser',
|
98
|
+
vsphere_password: 'apipassword',
|
99
|
+
vsphere_expected_pubkey_hash: 'abcdef1234567890',
|
100
|
+
libvirt_username: 'root',
|
101
|
+
libvirt_password: 'password',
|
102
|
+
cloudsigma_username: 'csuname',
|
103
|
+
cloudsigma_password: 'cspass',
|
104
|
+
docker_username: 'docker-fan',
|
105
|
+
docker_password: 'i<3docker',
|
106
|
+
docker_email: 'dockerfan@gmail.com',
|
107
|
+
docker_url: 'unix://var/run/docker.sock'
|
108
108
|
}.merge(Fog.credentials)
|
109
109
|
end
|
@@ -1,9 +1,8 @@
|
|
1
1
|
def model_tests(collection, params = {}, mocks_implemented = true)
|
2
2
|
tests('success') do
|
3
|
-
|
4
3
|
@instance = collection.new(params)
|
5
4
|
|
6
|
-
tests(
|
5
|
+
tests('#save').succeeds do
|
7
6
|
pending if Fog.mocking? && !mocks_implemented
|
8
7
|
@instance.save
|
9
8
|
end
|
@@ -12,7 +11,7 @@ def model_tests(collection, params = {}, mocks_implemented = true)
|
|
12
11
|
yield(@instance)
|
13
12
|
end
|
14
13
|
|
15
|
-
tests(
|
14
|
+
tests('#destroy').succeeds do
|
16
15
|
pending if Fog.mocking? && !mocks_implemented
|
17
16
|
@instance.destroy
|
18
17
|
end
|
@@ -26,6 +25,6 @@ end
|
|
26
25
|
# E.g. 'fog-test-1234'
|
27
26
|
def uniq_id(base_name = 'fog-test')
|
28
27
|
# random_differentiator
|
29
|
-
suffix = rand(
|
30
|
-
[base_name, suffix]
|
28
|
+
suffix = rand(65_536).to_s(16).rjust(4, '0')
|
29
|
+
[base_name, suffix].join('-')
|
31
30
|
end
|
@@ -1,37 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
Shindo.tests('Fog::Schema::DataValidator', 'meta') do
|
2
4
|
|
3
5
|
validator = Fog::Schema::DataValidator.new
|
4
6
|
|
5
7
|
tests('#validate') do
|
6
|
-
|
7
8
|
tests('returns true') do
|
8
|
-
|
9
9
|
returns(true, 'when value matches schema expectation') do
|
10
|
-
validator.validate({
|
10
|
+
validator.validate({ 'key' => 'Value' }, 'key' => String)
|
11
11
|
end
|
12
12
|
|
13
13
|
returns(true, 'when values within an array all match schema expectation') do
|
14
|
-
validator.validate({
|
14
|
+
validator.validate({ 'key' => [1, 2] }, 'key' => [Integer])
|
15
15
|
end
|
16
16
|
|
17
17
|
returns(true, 'when nested values match schema expectation') do
|
18
|
-
validator.validate({
|
18
|
+
validator.validate({ 'key' => { nested_key: 'Value' } }, 'key' => { nested_key: String })
|
19
19
|
end
|
20
20
|
|
21
21
|
returns(true, 'when collection of values all match schema expectation') do
|
22
|
-
validator.validate([{
|
22
|
+
validator.validate([{ 'key' => 'Value' }, 'key' => 'Value'], [{ 'key' => String }])
|
23
23
|
end
|
24
24
|
|
25
25
|
returns(true, 'when collection is empty although schema covers optional members') do
|
26
|
-
validator.validate([], [{
|
26
|
+
validator.validate([], [{ 'key' => String }])
|
27
27
|
end
|
28
28
|
|
29
29
|
returns(true, 'when additional keys are passed and not strict') do
|
30
|
-
validator.validate({
|
30
|
+
validator.validate({ 'key' => 'Value', extra: 'Bonus' }, { 'key' => String }, allow_extra_keys: true)
|
31
31
|
end
|
32
32
|
|
33
33
|
returns(true, 'when value is nil and schema expects NilClass') do
|
34
|
-
validator.validate({
|
34
|
+
validator.validate({ 'key' => nil }, 'key' => NilClass)
|
35
35
|
end
|
36
36
|
|
37
37
|
returns(true, 'when value and schema match as hashes') do
|
@@ -43,43 +43,41 @@ Shindo.tests('Fog::Schema::DataValidator', 'meta') do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
returns(true, 'when value is a Time') do
|
46
|
-
validator.validate({
|
46
|
+
validator.validate({ 'time' => Time.now }, 'time' => Time)
|
47
47
|
end
|
48
48
|
|
49
49
|
returns(true, 'when key is missing but value should be NilClass (#1477)') do
|
50
|
-
validator.validate({}, {
|
50
|
+
validator.validate({}, { 'key' => NilClass }, allow_optional_rules: true)
|
51
51
|
end
|
52
52
|
|
53
53
|
returns(true, 'when key is missing but value is nullable (#1477)') do
|
54
|
-
validator.validate({}, {
|
54
|
+
validator.validate({}, { 'key' => Fog::Nullable::String }, allow_optional_rules: true)
|
55
55
|
end
|
56
|
-
|
57
56
|
end
|
58
57
|
|
59
58
|
tests('returns false') do
|
60
|
-
|
61
59
|
returns(false, 'when value does not match schema expectation') do
|
62
|
-
validator.validate({
|
60
|
+
validator.validate({ 'key' => nil }, 'key' => String)
|
63
61
|
end
|
64
62
|
|
65
63
|
returns(false, 'when key formats do not match') do
|
66
|
-
validator.validate({
|
64
|
+
validator.validate({ 'key' => 'Value' }, key: String)
|
67
65
|
end
|
68
66
|
|
69
67
|
returns(false, 'when additional keys are passed and strict') do
|
70
|
-
validator.validate({
|
68
|
+
validator.validate({ 'key' => 'Missing' }, {})
|
71
69
|
end
|
72
70
|
|
73
71
|
returns(false, 'when some keys do not appear') do
|
74
|
-
validator.validate({},
|
72
|
+
validator.validate({}, 'key' => String)
|
75
73
|
end
|
76
74
|
|
77
75
|
returns(false, 'when collection contains a member that does not match schema') do
|
78
|
-
validator.validate([{
|
76
|
+
validator.validate([{ 'key' => 'Value' }, 'key' => 5], ['key' => String])
|
79
77
|
end
|
80
78
|
|
81
79
|
returns(false, 'when collection has multiple schema patterns') do
|
82
|
-
validator.validate([{
|
80
|
+
validator.validate([{ 'key' => 'Value' }], [{ 'key' => Integer }, { 'key' => String }])
|
83
81
|
end
|
84
82
|
|
85
83
|
returns(false, 'when hash and array are compared') do
|
@@ -91,17 +89,16 @@ Shindo.tests('Fog::Schema::DataValidator', 'meta') do
|
|
91
89
|
end
|
92
90
|
|
93
91
|
returns(false, 'when a hash is expected but another data type is found') do
|
94
|
-
validator.validate({
|
92
|
+
validator.validate({ 'key' => { nested_key: [] } }, 'key' => { nested_key: {} })
|
95
93
|
end
|
96
94
|
|
97
95
|
returns(false, 'when key is missing but value should be NilClass (#1477)') do
|
98
|
-
validator.validate({}, {
|
96
|
+
validator.validate({}, { 'key' => NilClass }, allow_optional_rules: false)
|
99
97
|
end
|
100
98
|
|
101
99
|
returns(false, 'when key is missing but value is nullable (#1477)') do
|
102
|
-
validator.validate({}, {
|
100
|
+
validator.validate({}, { 'key' => Fog::Nullable::String }, allow_optional_rules: false)
|
103
101
|
end
|
104
|
-
|
105
102
|
end
|
106
103
|
end
|
107
104
|
end
|