azurex 0.6.6 → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/Gemfile +1 -1
- data/README.md +2 -0
- data/lib/azure.rb +3 -0
- data/lib/azure/base_management/management_http_request.rb +3 -3
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +1 -9
- data/lib/azure/core/utility.rb +0 -71
- data/lib/azure/storage_management/serialization.rb +9 -12
- data/lib/azure/storage_management/storage_account.rb +1 -0
- data/lib/azure/storage_management/storage_management_service.rb +15 -18
- data/lib/azure/version.rb +1 -1
- data/lib/azure/virtual_machine_image_management/serialization.rb +15 -1
- data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +31 -2
- data/lib/azure/virtual_machine_management/serialization.rb +1 -1
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +4 -4
- data/lib/core_ext/ip_addr.rb +48 -0
- data/lib/core_ext/string.rb +27 -0
- data/test/fixtures/get_storage_account_properties.xml +6 -4
- data/test/fixtures/list_storage_accounts.xml +2 -0
- data/test/fixtures/list_vmimages.xml +86 -0
- data/test/fixtures/updated_storage_accounts.xml +2 -0
- data/test/integration/affinity_group/Create_Affinity_test.rb +1 -1
- data/test/integration/cloud_service/Cloud_Delete_test.rb +2 -2
- data/test/integration/storage_management/storage_management_test.rb +40 -33
- data/test/integration/vm/VM_Delete_test.rb +1 -1
- data/test/integration/vm_image/virtual_machine_image_test.rb +1 -1
- data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +4 -4
- data/test/unit/core_ext/string_test.rb +11 -0
- data/test/unit/storage_management/serialization_test.rb +12 -13
- data/test/unit/storage_management/storage_management_service_test.rb +26 -40
- data/test/unit/virtual_machine_image_management/serialization_test.rb +17 -1
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +113 -8
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +17 -0
- metadata +6 -2
@@ -0,0 +1,48 @@
|
|
1
|
+
# Code validate private/public IP acceptable ranges.
|
2
|
+
class IPAddr
|
3
|
+
PRIVATE_RANGES = [
|
4
|
+
IPAddr.new('10.0.0.0/8'),
|
5
|
+
IPAddr.new('172.16.0.0/12'),
|
6
|
+
IPAddr.new('192.168.0.0/16')
|
7
|
+
]
|
8
|
+
|
9
|
+
def private?
|
10
|
+
return false unless self.ipv4?
|
11
|
+
PRIVATE_RANGES.each do |ipr|
|
12
|
+
return true if ipr.include?(self)
|
13
|
+
end
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
def public?
|
18
|
+
!private?
|
19
|
+
end
|
20
|
+
|
21
|
+
class << self
|
22
|
+
def validate_ip_and_prefix(ip, cidr)
|
23
|
+
if cidr.to_s.empty?
|
24
|
+
raise "Cidr is missing for IP '#{ip}'."
|
25
|
+
elsif valid?(ip)
|
26
|
+
raise "Ip address '#{ip}' is invalid."
|
27
|
+
elsif !IPAddr.new(ip).private?
|
28
|
+
raise "Ip Address #{ip} must be private."
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def validate_address_space(ip)
|
33
|
+
if ip.split('/').size != 2
|
34
|
+
raise "Cidr is invalid for IP #{ip}."
|
35
|
+
elsif valid?(ip)
|
36
|
+
raise "Address space '#{ip}' is invalid."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def address_prefix(ip, cidr)
|
41
|
+
ip + '/' + cidr.to_s
|
42
|
+
end
|
43
|
+
|
44
|
+
def valid?(ip)
|
45
|
+
(IPAddr.new(ip) rescue nil).nil?
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class String
|
2
|
+
{ reset: 0,
|
3
|
+
bold: 1,
|
4
|
+
dark: 2,
|
5
|
+
underline: 4,
|
6
|
+
blink: 5,
|
7
|
+
orange: 6,
|
8
|
+
negative: 7,
|
9
|
+
black: 30,
|
10
|
+
red: 31,
|
11
|
+
green: 32,
|
12
|
+
yellow: 33,
|
13
|
+
blue: 34,
|
14
|
+
magenta: 35,
|
15
|
+
cyan: 36,
|
16
|
+
white: 37,
|
17
|
+
}.each do |key, value|
|
18
|
+
define_method key do
|
19
|
+
"\e[#{value}m" + self + "\e[0m"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def resembles_base64?
|
24
|
+
self.chomp.length % 4 == 0 && self.chomp =~ /^[A-Za-z0-9+\/=]+\Z/
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -14,11 +14,13 @@
|
|
14
14
|
<Endpoint>http://storageacc.queue.core.windows.net/</Endpoint>
|
15
15
|
<Endpoint>http://storageacc.table.core.windows.net/</Endpoint>
|
16
16
|
</Endpoints>
|
17
|
-
<
|
18
|
-
<
|
19
|
-
<GeoSecondaryRegion
|
20
|
-
<
|
17
|
+
<GeoPrimaryRegion>West US</GeoPrimaryRegion>
|
18
|
+
<StatusOfPrimary>Available</StatusOfPrimary>
|
19
|
+
<GeoSecondaryRegion>East US</GeoSecondaryRegion>
|
20
|
+
<StatusOfSecondary>Available</StatusOfSecondary>
|
21
|
+
<CreationTime>2013-03-06T09:34:37Z</CreationTime>
|
21
22
|
<CustomDomains/>
|
23
|
+
<AccountType>Standard_GRS</AccountType>
|
22
24
|
</StorageServiceProperties>
|
23
25
|
<ExtendedProperties>
|
24
26
|
<ExtendedProperty>
|
@@ -19,6 +19,7 @@
|
|
19
19
|
<StatusOfPrimary/>
|
20
20
|
<GeoSecondaryRegion>East US</GeoSecondaryRegion>
|
21
21
|
<StatusOfSecondary/>
|
22
|
+
<AccountType>Standard_GRS</AccountType>
|
22
23
|
</StorageServiceProperties>
|
23
24
|
<ExtendedProperties/>
|
24
25
|
</StorageService>
|
@@ -40,6 +41,7 @@
|
|
40
41
|
<StatusOfPrimary/>
|
41
42
|
<GeoSecondaryRegion>East US</GeoSecondaryRegion>
|
42
43
|
<StatusOfSecondary/>
|
44
|
+
<AccountType>Standard_GRS</AccountType>
|
43
45
|
</StorageServiceProperties>
|
44
46
|
<ExtendedProperties/>
|
45
47
|
</StorageService>
|
@@ -0,0 +1,86 @@
|
|
1
|
+
<VMImages xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
|
2
|
+
<VMImage>
|
3
|
+
<Name>name-of-image</Name>
|
4
|
+
<Label>identifier-of-image</Label>
|
5
|
+
<Category>category-of-image</Category>
|
6
|
+
<Description>description-of-image</Description>
|
7
|
+
<OSDiskConfiguration>
|
8
|
+
<Name>name-of-operating-system-disk</Name>
|
9
|
+
<HostCaching>caching-mode-of-disk</HostCaching>
|
10
|
+
<OSState>state-of-disk</OSState>
|
11
|
+
<OS>operating-system-of-image</OS>
|
12
|
+
<MediaLink>path-to-vhd</MediaLink>
|
13
|
+
<LogicalDiskSizeInGB>size-of-disk</LogicalDiskSizeInGB>
|
14
|
+
</OSDiskConfiguration>
|
15
|
+
<DataDiskConfigurations>
|
16
|
+
<DataDiskConfiguration>
|
17
|
+
<Name>name-of-data-disk</Name>
|
18
|
+
<HostCaching>caching-mode-of-disk</HostCaching>
|
19
|
+
<Lun>logical-unit-number</Lun>
|
20
|
+
<MediaLink>path-to-vhd</MediaLink>
|
21
|
+
<LogicalDiskSizeInGB>size-of-disk</LogicalDiskSizeInGB>
|
22
|
+
</DataDiskConfigurations>
|
23
|
+
</DataDiskConfiguration>
|
24
|
+
<ServiceName>name-of-cloud-service</ServiceName>
|
25
|
+
<DeploymentName>name-of-deployment</DeploymentName>
|
26
|
+
<RoleName>name-of-virtual-machine</RoleName>
|
27
|
+
<Location>geo-location-of-image-blobs</Location>
|
28
|
+
<AffinityGroup>name-of-affinity-group</AffinityGroup>
|
29
|
+
<CreatedTime>creation-time-of-image</CreatedTime>
|
30
|
+
<ModifiedTime>modification-time-of-image</ModifiedTime>
|
31
|
+
<Language>language-of-image</Language>
|
32
|
+
<ImageFamily>image-family</ImageFamily>
|
33
|
+
<RecommendedVMSize>size-of-virtual-machine</RecommendedVMSize>
|
34
|
+
<IsPremium>indicator-of-image-status</IsPremium>
|
35
|
+
<Eula>image-eula</Eula>
|
36
|
+
<IconUri>uri-of-icon</IconUri>
|
37
|
+
<SmallIconUri>uri-of-icon</SmallIconUri>
|
38
|
+
<PrivacyUri>uri-of-privacy-policy</PrivacyUri>
|
39
|
+
<PublisherName>publisher-identifier</PublisherName>
|
40
|
+
<PublishedDate>published-date</PublishedDate>
|
41
|
+
<ShowInGui>indicator-of-availability</ShowInGui>
|
42
|
+
<PricingDetailLink>pricing-details</PricingDetailLink>
|
43
|
+
</VMImage>
|
44
|
+
<VMImage>
|
45
|
+
<Name>name-of-image-2</Name>
|
46
|
+
<Label>identifier-of-image-2</Label>
|
47
|
+
<Category>category-of-image-2</Category>
|
48
|
+
<Description>description-of-image-2</Description>
|
49
|
+
<OSDiskConfiguration>
|
50
|
+
<Name>name-of-operating-system-disk-2</Name>
|
51
|
+
<HostCaching>caching-mode-of-disk-2</HostCaching>
|
52
|
+
<OSState>state-of-disk-2</OSState>
|
53
|
+
<OS>operating-system-of-image-2</OS>
|
54
|
+
<MediaLink>path-to-vhd-2</MediaLink>
|
55
|
+
<LogicalDiskSizeInGB>size-of-disk-2</LogicalDiskSizeInGB>
|
56
|
+
</OSDiskConfiguration>
|
57
|
+
<DataDiskConfigurations>
|
58
|
+
<DataDiskConfiguration>
|
59
|
+
<Name>name-of-data-disk-2</Name>
|
60
|
+
<HostCaching>caching-mode-of-disk-2</HostCaching>
|
61
|
+
<Lun>logical-unit-number-2</Lun>
|
62
|
+
<MediaLink>path-to-vhd-2</MediaLink>
|
63
|
+
<LogicalDiskSizeInGB>size-of-disk-2</LogicalDiskSizeInGB>
|
64
|
+
</DataDiskConfigurations>
|
65
|
+
</DataDiskConfiguration>
|
66
|
+
<ServiceName>name-of-cloud-service-2</ServiceName>
|
67
|
+
<DeploymentName>name-of-deployment-2</DeploymentName>
|
68
|
+
<RoleName>name-of-virtual-machine-2</RoleName>
|
69
|
+
<Location>geo-location-of-image-blobs-2</Location>
|
70
|
+
<AffinityGroup>name-of-affinity-group-2</AffinityGroup>
|
71
|
+
<CreatedTime>creation-time-of-image-2</CreatedTime>
|
72
|
+
<ModifiedTime>modification-time-of-image-2</ModifiedTime>
|
73
|
+
<Language>language-of-image-2</Language>
|
74
|
+
<ImageFamily>image-family-2</ImageFamily>
|
75
|
+
<RecommendedVMSize>size-of-virtual-machine-2</RecommendedVMSize>
|
76
|
+
<IsPremium>indicator-of-image-status-2</IsPremium>
|
77
|
+
<Eula>image-eula-2</Eula>
|
78
|
+
<IconUri>uri-of-icon-2</IconUri>
|
79
|
+
<SmallIconUri>uri-of-icon-2</SmallIconUri>
|
80
|
+
<PrivacyUri>uri-of-privacy-policy-2</PrivacyUri>
|
81
|
+
<PublisherName>publisher-identifier-2</PublisherName>
|
82
|
+
<PublishedDate>published-date-2</PublishedDate>
|
83
|
+
<ShowInGui>indicator-of-availability-2</ShowInGui>
|
84
|
+
<PricingDetailLink>pricing-details-2</PricingDetailLink>
|
85
|
+
</VMImage>
|
86
|
+
</VMImages>
|
@@ -18,6 +18,7 @@
|
|
18
18
|
<StatusOfPrimary/>
|
19
19
|
<GeoSecondaryRegion>East US</GeoSecondaryRegion>
|
20
20
|
<StatusOfSecondary/>
|
21
|
+
<AccountType>Standard_GRS</AccountType>
|
21
22
|
</StorageServiceProperties>
|
22
23
|
<ExtendedProperties/>
|
23
24
|
</StorageService>
|
@@ -38,6 +39,7 @@
|
|
38
39
|
<StatusOfPrimary/>
|
39
40
|
<GeoSecondaryRegion>East US</GeoSecondaryRegion>
|
40
41
|
<StatusOfSecondary/>
|
42
|
+
<AccountType>Standard_GRS</AccountType>
|
41
43
|
</StorageServiceProperties>
|
42
44
|
<ExtendedProperties>
|
43
45
|
<ExtendedProperty>
|
@@ -47,7 +47,7 @@ describe Azure::BaseManagementService do
|
|
47
47
|
exception = assert_raises(RuntimeError) do
|
48
48
|
subject.create_affinity_group(affinity_group_name, 'North West', label)
|
49
49
|
end
|
50
|
-
assert_match(/
|
50
|
+
assert_match(/'location' is invalid/i, exception.message)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'create new affinity group without optional params' do
|
@@ -37,8 +37,8 @@ describe Azure::CloudServiceManagementService do
|
|
37
37
|
|
38
38
|
it 'Deletes the cloud service in Windows Azure.' do
|
39
39
|
subject.delete_cloud_service(@cloud_name)
|
40
|
-
|
41
|
-
|
40
|
+
cloud_service = subject.get_cloud_service(@cloud_name)
|
41
|
+
cloud_service.must_equal nil
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -47,9 +47,9 @@ describe Azure::StorageManagementService do
|
|
47
47
|
storagelist.must_be_kind_of Array
|
48
48
|
end
|
49
49
|
|
50
|
-
it '
|
50
|
+
it 'get_storage_account return nil if storage account with given name not exists' do
|
51
51
|
storage = subject.get_storage_account('nonexistentstorage')
|
52
|
-
storage.must_equal
|
52
|
+
storage.must_equal nil
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'create storage account' do
|
@@ -60,18 +60,18 @@ describe Azure::StorageManagementService do
|
|
60
60
|
geo_replication_enabled: 'false'
|
61
61
|
}
|
62
62
|
subject.create_storage_account(storage_name, options)
|
63
|
-
|
64
|
-
|
63
|
+
storage_account = subject.get_storage_account(storage_name)
|
64
|
+
storage_account.must_be_kind_of Azure::StorageManagement::StorageAccount
|
65
65
|
# Test for delete storage account
|
66
66
|
subject.delete_storage_account(storage_name)
|
67
|
-
|
68
|
-
|
67
|
+
storage_account = subject.get_storage_account(storage_name)
|
68
|
+
storage_account.must_equal nil
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'get storage account' do
|
72
72
|
storage_name = StorageName
|
73
|
-
|
74
|
-
|
73
|
+
storage_account = subject.get_storage_account(storage_name)
|
74
|
+
storage_account.must_be_kind_of Azure::StorageManagement::StorageAccount
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'get storage account properties' do
|
@@ -79,7 +79,7 @@ describe Azure::StorageManagementService do
|
|
79
79
|
storage = subject.get_storage_account_properties(storage_name)
|
80
80
|
storage.name.must_equal storage_name
|
81
81
|
storage.label.must_equal 'storagelabel'
|
82
|
-
storage.
|
82
|
+
storage.account_type.must_equal 'Standard_GRS'
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'regenerate storage account keys' do
|
@@ -96,20 +96,7 @@ describe Azure::StorageManagementService do
|
|
96
96
|
storage_name = StorageName
|
97
97
|
storage_keys1 = subject.get_storage_account_keys(storage_name)
|
98
98
|
storage_keys1.primary_key.wont_be_nil
|
99
|
-
storage_keys1.secondary_key.wont_be_nil
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'update storage account' do
|
103
|
-
options = {
|
104
|
-
label: 'labelchanged',
|
105
|
-
description: 'description changed'
|
106
|
-
}
|
107
|
-
storage_name = StorageName
|
108
|
-
subject.update_storage_account(storage_name, options)
|
109
|
-
storage = subject.get_storage_account_properties(storage_name)
|
110
|
-
storage.name.must_equal storage_name
|
111
|
-
storage.label.must_equal 'labelchanged'
|
112
|
-
subject.update_storage_account(storage_name, opts)
|
99
|
+
storage_keys1.secondary_key.wont_be_nil
|
113
100
|
end
|
114
101
|
|
115
102
|
it 'get storage account properties error' do
|
@@ -160,18 +147,38 @@ describe Azure::StorageManagementService do
|
|
160
147
|
assert_match('The affinity group does not exist.', exception.message)
|
161
148
|
end
|
162
149
|
|
163
|
-
it 'update storage account with non existent storage name' do
|
164
|
-
options = {
|
165
|
-
label: 'labelchanged',
|
166
|
-
description: 'description changed'
|
167
|
-
}
|
168
|
-
storage_name = 'storage_nonexistent'
|
169
|
-
storage = subject.update_storage_account(storage_name, options)
|
170
|
-
assert_match(/Storage Account 'storage_nonexistent' does not exist. Skipped.../, storage)
|
171
|
-
end
|
172
|
-
|
173
150
|
it 'delete storage account that does not exist' do
|
174
151
|
msg = subject.delete_storage_account('invalidstorageaccount')
|
175
152
|
assert_match(/The storage account 'invalidstorageaccount' was not found./, msg)
|
176
153
|
end
|
154
|
+
|
155
|
+
describe '#update_storage_account' do
|
156
|
+
|
157
|
+
it 'update storage account with non existent storage name' do
|
158
|
+
options = {
|
159
|
+
label: 'labelchanged',
|
160
|
+
description: 'description changed'
|
161
|
+
}
|
162
|
+
storage_name = 'storage_nonexistent'
|
163
|
+
storage = subject.update_storage_account(storage_name, options)
|
164
|
+
error_msg = "Storage Account 'storage_nonexistent' does not exist"
|
165
|
+
assert_match(/#{error_msg}/, storage)
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'update existing storage account' do
|
169
|
+
options = {
|
170
|
+
label: 'labelchanged',
|
171
|
+
description: 'description changed',
|
172
|
+
account_type: 'Standard_LRS'
|
173
|
+
}
|
174
|
+
storage_name = StorageName
|
175
|
+
subject.update_storage_account(storage_name, options)
|
176
|
+
storage = subject.get_storage_account_properties(storage_name)
|
177
|
+
storage.name.must_equal storage_name
|
178
|
+
storage.label.must_equal 'labelchanged'
|
179
|
+
storage.account_type.must_equal 'Standard_LRS'
|
180
|
+
opts[:account_type] = 'Standard_GRS'
|
181
|
+
subject.update_storage_account(storage_name, opts)
|
182
|
+
end
|
183
|
+
end
|
177
184
|
end
|
@@ -45,7 +45,7 @@ describe Azure::VirtualMachineManagementService do
|
|
45
45
|
vm.must_be_nil
|
46
46
|
cloud_service = Azure::CloudServiceManagementService.new
|
47
47
|
cloud_presence = cloud_service.get_cloud_service(csn)
|
48
|
-
cloud_presence.must_equal
|
48
|
+
cloud_presence.must_equal nil
|
49
49
|
end
|
50
50
|
|
51
51
|
end
|
@@ -66,14 +66,14 @@ describe Azure::CloudServiceManagementService do
|
|
66
66
|
subject.get_cloud_service 'cloud-service-1'
|
67
67
|
end
|
68
68
|
|
69
|
-
it '
|
69
|
+
it 'return cloud service instance if found cloud service with given name' do
|
70
70
|
result = subject.get_cloud_service 'cloud-service-1'
|
71
|
-
result.
|
71
|
+
result.must_be_kind_of Azure::CloudServiceManagement::CloudService
|
72
72
|
end
|
73
73
|
|
74
|
-
it "returns
|
74
|
+
it "returns nil if cloud service with given name doesn't exists" do
|
75
75
|
result = subject.get_cloud_service 'cloud-service-3'
|
76
|
-
result.must_equal
|
76
|
+
result.must_equal nil
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'base64'
|
3
|
+
require 'core_ext/string'
|
4
|
+
|
5
|
+
describe "string_extensions" do
|
6
|
+
it "can guess reasonably if a string is base64" do
|
7
|
+
sample_string = "so many cloud platforms"
|
8
|
+
enc_string = Base64.encode64(sample_string)
|
9
|
+
assert enc_string.resembles_base64?
|
10
|
+
end
|
11
|
+
end
|
@@ -34,7 +34,7 @@ describe Azure::StorageManagement::Serialization do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
describe "#storage_services_to_xml" do
|
37
|
-
let(:storage_service_name) {'storage-service'}
|
37
|
+
let(:storage_service_name) { 'storage-service' }
|
38
38
|
let(:storage_options) { {
|
39
39
|
:extended_properties=> {
|
40
40
|
:prop_1_name=>"prop_1_value"
|
@@ -57,14 +57,18 @@ describe Azure::StorageManagement::Serialization do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it "serializes the options hash to xml" do
|
60
|
-
results = subject.storage_services_to_xml(storage_service_name,
|
60
|
+
results = subject.storage_services_to_xml(storage_service_name, :location => 'East US')
|
61
61
|
doc = Nokogiri::XML results
|
62
62
|
doc.css('Location').text.must_equal 'East US'
|
63
63
|
results.must_be_kind_of String
|
64
64
|
end
|
65
65
|
|
66
66
|
it "uses affinity_group from the hash instead of location" do
|
67
|
-
|
67
|
+
params = {
|
68
|
+
:affinity_group_name => 'my-affinity-group',
|
69
|
+
:location => 'East US'
|
70
|
+
}
|
71
|
+
results = subject.storage_services_to_xml(storage_service_name, params)
|
68
72
|
doc = Nokogiri::XML results
|
69
73
|
doc.css('AffinityGroup').text.must_equal 'my-affinity-group'
|
70
74
|
results.must_be_kind_of String
|
@@ -142,15 +146,10 @@ describe Azure::StorageManagement::Serialization do
|
|
142
146
|
}
|
143
147
|
}
|
144
148
|
|
145
|
-
let(:no_options_message) {'No options specified'}
|
146
|
-
let(:label_or_desc_required) {
|
147
|
-
|
148
|
-
|
149
|
-
exception = assert_raises RuntimeError do
|
150
|
-
subject.storage_update_to_xml nil
|
151
|
-
end
|
152
|
-
assert_match no_options_message, exception.message
|
153
|
-
end
|
149
|
+
let(:no_options_message) { 'No options specified' }
|
150
|
+
let(:label_or_desc_required) {
|
151
|
+
'Either one of Label or Description has to be provided.'
|
152
|
+
}
|
154
153
|
|
155
154
|
it "checks if the parameter is empty" do
|
156
155
|
exception = assert_raises RuntimeError do
|
@@ -232,7 +231,7 @@ describe Azure::StorageManagement::Serialization do
|
|
232
231
|
|
233
232
|
describe "#regenerate_storage_account_keys_from_xml" do
|
234
233
|
let(:storage_services_access_keys) { Fixtures["storage_service_keys"] }
|
235
|
-
|
234
|
+
|
236
235
|
it "returns an Array of StorageService instances" do
|
237
236
|
storage_keys_xml = Nokogiri::XML(storage_services_access_keys)
|
238
237
|
result = subject.storage_account_keys_from_xml storage_keys_xml
|