stuartpreston-azure-sdk-for-ruby 0.7.1 → 0.7.2
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 +11 -11
- data/.travis.yml +10 -10
- data/ChangeLog.txt +70 -68
- data/Gemfile +15 -15
- data/README.md +618 -618
- data/Rakefile +133 -133
- data/azure.gemspec +44 -44
- data/lib/azure.rb +52 -52
- data/lib/azure/base_management/affinity_group.rb +32 -32
- data/lib/azure/base_management/base_management_service.rb +304 -304
- data/lib/azure/base_management/location.rb +27 -27
- data/lib/azure/base_management/management_http_request.rb +171 -171
- data/lib/azure/base_management/serialization.rb +129 -129
- data/lib/azure/base_management/sql_management_http_request.rb +45 -45
- data/lib/azure/blob/blob.rb +31 -31
- data/lib/azure/blob/blob_service.rb +1423 -1423
- data/lib/azure/blob/block.rb +30 -30
- data/lib/azure/blob/container.rb +31 -31
- data/lib/azure/blob/serialization.rb +284 -284
- data/lib/azure/cloud_service_management/cloud_service.rb +38 -38
- data/lib/azure/cloud_service_management/cloud_service_management_service.rb +140 -140
- data/lib/azure/cloud_service_management/serialization.rb +117 -117
- data/lib/azure/core.rb +39 -39
- data/lib/azure/core/auth/authorizer.rb +36 -36
- data/lib/azure/core/auth/shared_key.rb +110 -110
- data/lib/azure/core/auth/shared_key_lite.rb +48 -48
- data/lib/azure/core/auth/signer.rb +48 -48
- data/lib/azure/core/configuration.rb +211 -211
- data/lib/azure/core/error.rb +22 -22
- data/lib/azure/core/filtered_service.rb +43 -43
- data/lib/azure/core/http/debug_filter.rb +35 -35
- data/lib/azure/core/http/http_error.rb +88 -88
- data/lib/azure/core/http/http_filter.rb +52 -52
- data/lib/azure/core/http/http_request.rb +157 -157
- data/lib/azure/core/http/http_response.rb +140 -140
- data/lib/azure/core/http/retry_policy.rb +73 -73
- data/lib/azure/core/http/signer_filter.rb +33 -33
- data/lib/azure/core/service.rb +62 -62
- data/lib/azure/core/signed_service.rb +42 -42
- data/lib/azure/core/utility.rb +190 -190
- data/lib/azure/queue/message.rb +29 -29
- data/lib/azure/queue/queue.rb +28 -28
- data/lib/azure/queue/queue_service.rb +567 -567
- data/lib/azure/queue/serialization.rb +106 -106
- data/lib/azure/service/access_policy.rb +25 -25
- data/lib/azure/service/cors.rb +11 -11
- data/lib/azure/service/cors_rule.rb +15 -15
- data/lib/azure/service/enumeration_results.rb +20 -20
- data/lib/azure/service/logging.rb +31 -31
- data/lib/azure/service/metrics.rb +30 -30
- data/lib/azure/service/retention_policy.rb +24 -24
- data/lib/azure/service/serialization.rb +297 -297
- data/lib/azure/service/signed_identifier.rb +29 -29
- data/lib/azure/service/storage_service.rb +82 -82
- data/lib/azure/service/storage_service_properties.rb +37 -37
- data/lib/azure/service_bus/action.rb +21 -21
- data/lib/azure/service_bus/auth/wrap_service.rb +88 -88
- data/lib/azure/service_bus/auth/wrap_signer.rb +68 -68
- data/lib/azure/service_bus/brokered_message.rb +123 -123
- data/lib/azure/service_bus/brokered_message_serializer.rb +159 -159
- data/lib/azure/service_bus/correlation_filter.rb +45 -45
- data/lib/azure/service_bus/empty_rule_action.rb +29 -29
- data/lib/azure/service_bus/false_filter.rb +38 -38
- data/lib/azure/service_bus/filter.rb +21 -21
- data/lib/azure/service_bus/interval.rb +103 -103
- data/lib/azure/service_bus/queue.rb +229 -229
- data/lib/azure/service_bus/relay.rb +87 -87
- data/lib/azure/service_bus/resource.rb +108 -108
- data/lib/azure/service_bus/rule.rb +97 -97
- data/lib/azure/service_bus/rule_aspect.rb +34 -34
- data/lib/azure/service_bus/serialization.rb +161 -161
- data/lib/azure/service_bus/service_bus_service.rb +896 -896
- data/lib/azure/service_bus/sql_filter.rb +50 -50
- data/lib/azure/service_bus/sql_rule_action.rb +50 -50
- data/lib/azure/service_bus/subscription.rb +183 -183
- data/lib/azure/service_bus/topic.rb +186 -186
- data/lib/azure/service_bus/true_filter.rb +38 -38
- data/lib/azure/sql_database_management/serialization.rb +111 -111
- data/lib/azure/sql_database_management/sql_database.rb +31 -31
- data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -200
- data/lib/azure/storage_management/serialization.rb +184 -184
- data/lib/azure/storage_management/storage_account.rb +40 -40
- data/lib/azure/storage_management/storage_management_service.rb +166 -166
- data/lib/azure/table/auth/shared_key.rb +92 -92
- data/lib/azure/table/auth/shared_key_lite.rb +44 -44
- data/lib/azure/table/batch.rb +329 -329
- data/lib/azure/table/batch_response.rb +118 -118
- data/lib/azure/table/edmtype.rb +126 -126
- data/lib/azure/table/entity.rb +30 -30
- data/lib/azure/table/guid.rb +23 -23
- data/lib/azure/table/query.rb +111 -111
- data/lib/azure/table/serialization.rb +107 -107
- data/lib/azure/table/table_service.rb +559 -559
- data/lib/azure/version.rb +31 -31
- data/lib/azure/virtual_machine_image_management/serialization.rb +66 -66
- data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -25
- data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -25
- data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +94 -94
- data/lib/azure/virtual_machine_management/serialization.rb +462 -462
- data/lib/azure/virtual_machine_management/virtual_machine.rb +45 -45
- data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +588 -588
- data/lib/azure/virtual_network_management/serialization.rb +190 -190
- data/lib/azure/virtual_network_management/virtual_network.rb +37 -37
- data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -109
- data/test/fixtures/affinity_group.xml +33 -33
- data/test/fixtures/all_containers.xml +20 -20
- data/test/fixtures/all_tables.xml +22 -22
- data/test/fixtures/certificate.pem +21 -21
- data/test/fixtures/container_acl.xml +11 -11
- data/test/fixtures/create_sql_database_server.xml +1 -1
- data/test/fixtures/create_storage_desc_error.xml +5 -5
- data/test/fixtures/create_storage_extendedprop_error.xml +8 -8
- data/test/fixtures/create_storage_extendedpropname_error.xml +6 -6
- data/test/fixtures/create_storage_full_error.xml +6 -6
- data/test/fixtures/create_storage_label_error.xml +5 -5
- data/test/fixtures/create_storage_location_error.xml +5 -5
- data/test/fixtures/create_storage_name_error.xml +6 -6
- data/test/fixtures/create_table_response_entry.xml +15 -15
- data/test/fixtures/delete_storage_container_error.xml +5 -5
- data/test/fixtures/delete_storage_error.xml +5 -5
- data/test/fixtures/deployment_error.xml +5 -5
- data/test/fixtures/get_storage_account_error.xml +5 -5
- data/test/fixtures/get_storage_account_properties.xml +31 -31
- data/test/fixtures/get_storage_account_properties_new.xml +31 -31
- data/test/fixtures/http_error.xml +5 -5
- data/test/fixtures/insert_entity_response_entry.xml +25 -25
- data/test/fixtures/list_affinity_groups.xml +22 -22
- data/test/fixtures/list_blobs.xml +120 -120
- data/test/fixtures/list_block_all_with_none_committed.xml +21 -21
- data/test/fixtures/list_blocks_all.xml +22 -22
- data/test/fixtures/list_blocks_committed.xml +12 -12
- data/test/fixtures/list_cloud_services.xml +38 -38
- data/test/fixtures/list_containers.xml +37 -37
- data/test/fixtures/list_firewall_management_endpoint.xml +27 -27
- data/test/fixtures/list_images.xml +110 -110
- data/test/fixtures/list_locations.xml +62 -62
- data/test/fixtures/list_page_ranges.xml +10 -10
- data/test/fixtures/list_sql_database.xml +36 -36
- data/test/fixtures/list_sql_server_firewall.xml +23 -23
- data/test/fixtures/list_storage_account_single.xml +24 -24
- data/test/fixtures/list_storage_accounts.xml +45 -45
- data/test/fixtures/list_virtual_networks.xml +92 -92
- data/test/fixtures/logging.xml +11 -11
- data/test/fixtures/management_certificate.pem +55 -55
- data/test/fixtures/messages.xml +12 -12
- data/test/fixtures/metrics.xml +10 -10
- data/test/fixtures/privatekey.key +28 -28
- data/test/fixtures/query_entities_empty_response.xml +7 -7
- data/test/fixtures/query_entities_response.xml +45 -45
- data/test/fixtures/queue_service_properties.xml +22 -22
- data/test/fixtures/queue_service_properties_original.xml +19 -19
- data/test/fixtures/queues.xml +16 -16
- data/test/fixtures/retention_policy.xml +5 -5
- data/test/fixtures/sb_default_create_queue_response.xml +23 -23
- data/test/fixtures/sb_default_create_relay_response.xml +15 -15
- data/test/fixtures/sb_default_create_topic_response.xml +18 -18
- data/test/fixtures/sb_get_access_token_response.txt +1 -1
- data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -9
- data/test/fixtures/storage_service_properties.xml +54 -54
- data/test/fixtures/update_storage_account.xml +16 -16
- data/test/fixtures/update_storage_error.xml +4 -4
- data/test/fixtures/updated_storage_accounts.xml +52 -52
- data/test/fixtures/virtual_machine.xml +113 -113
- data/test/fixtures/windows_virtual_machine.xml +106 -106
- data/test/integration/affinity_group/Affinity_test.rb +55 -55
- data/test/integration/affinity_group/Create_Affinity_test.rb +63 -63
- data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -56
- data/test/integration/affinity_group/List_Affinity_test.rb +41 -41
- data/test/integration/affinity_group/Update_Affinity_test.rb +82 -82
- data/test/integration/blob/blob_gb18030_test.rb +199 -199
- data/test/integration/blob/blob_metadata_test.rb +75 -75
- data/test/integration/blob/blob_pages_test.rb +119 -119
- data/test/integration/blob/blob_properties_test.rb +77 -77
- data/test/integration/blob/block_blob_test.rb +254 -254
- data/test/integration/blob/container/container_acl_test.rb +69 -69
- data/test/integration/blob/container/container_metadata_test.rb +50 -50
- data/test/integration/blob/container/create_container_test.rb +60 -60
- data/test/integration/blob/container/delete_container_test.rb +39 -39
- data/test/integration/blob/container/get_container_properties_test.rb +48 -48
- data/test/integration/blob/container/list_containers_test.rb +79 -79
- data/test/integration/blob/container/root_container_test.rb +53 -53
- data/test/integration/blob/copy_blob_test.rb +113 -113
- data/test/integration/blob/create_blob_snapshot_test.rb +80 -80
- data/test/integration/blob/create_page_blob_test.rb +83 -83
- data/test/integration/blob/delete_blob_test.rb +159 -159
- data/test/integration/blob/get_blob_test.rb +65 -65
- data/test/integration/blob/informative_errors_test.rb +38 -38
- data/test/integration/blob/lease/acquire_lease_test.rb +36 -36
- data/test/integration/blob/lease/break_lease_test.rb +40 -40
- data/test/integration/blob/lease/release_lease_test.rb +40 -40
- data/test/integration/blob/lease/renew_lease_test.rb +42 -42
- data/test/integration/blob/list_blobs_test.rb +113 -113
- data/test/integration/cloud_service/Cloud_Create_test.rb +44 -44
- data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -44
- data/test/integration/database/create_sql_server_firewall_test.rb +86 -86
- data/test/integration/database/create_sql_server_test.rb +53 -53
- data/test/integration/database/delete_sql_server_firewall_test.rb +70 -70
- data/test/integration/database/delete_sql_server_test.rb +58 -58
- data/test/integration/database/list_sql_server_firewall_test.rb +45 -45
- data/test/integration/database/list_sql_servers_test.rb +44 -44
- data/test/integration/database/reset_password_sql_server_test.rb +55 -55
- data/test/integration/location/Location_List_test.rb +39 -39
- data/test/integration/queue/clear_messages_test.rb +42 -42
- data/test/integration/queue/create_message_test.rb +75 -75
- data/test/integration/queue/create_queue_test.rb +50 -50
- data/test/integration/queue/delete_message_test.rb +67 -67
- data/test/integration/queue/delete_queue_test.rb +45 -45
- data/test/integration/queue/informative_errors_test.rb +41 -41
- data/test/integration/queue/list_messages_encoded_test.rb +79 -79
- data/test/integration/queue/list_messages_test.rb +79 -79
- data/test/integration/queue/list_queues_test.rb +44 -44
- data/test/integration/queue/peek_messages_test.rb +59 -59
- data/test/integration/queue/queue_gb18030_test.rb +131 -131
- data/test/integration/queue/queue_metadata_test.rb +40 -40
- data/test/integration/queue/update_message_test.rb +74 -74
- data/test/integration/service_bus/informative_errors_test.rb +36 -36
- data/test/integration/service_bus/queues_scenario_test.rb +200 -200
- data/test/integration/service_bus/queues_test.rb +265 -265
- data/test/integration/service_bus/relay_test.rb +131 -131
- data/test/integration/service_bus/rules_test.rb +144 -144
- data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -182
- data/test/integration/service_bus/scenario_test.rb +101 -101
- data/test/integration/service_bus/subscriptions_test.rb +211 -211
- data/test/integration/service_bus/topics_scenario_test.rb +406 -406
- data/test/integration/service_bus/topics_test.rb +129 -129
- data/test/integration/storage_management/storage_management_test.rb +160 -160
- data/test/integration/table/create_table_test.rb +35 -35
- data/test/integration/table/delete_entity_batch_test.rb +106 -106
- data/test/integration/table/delete_entity_test.rb +93 -93
- data/test/integration/table/delete_table_test.rb +39 -39
- data/test/integration/table/get_table_test.rb +36 -36
- data/test/integration/table/informative_errors_test.rb +38 -38
- data/test/integration/table/insert_entity_batch_test.rb +99 -99
- data/test/integration/table/insert_entity_test.rb +87 -87
- data/test/integration/table/insert_or_merge_entity_batch_test.rb +158 -158
- data/test/integration/table/insert_or_merge_entity_test.rb +142 -142
- data/test/integration/table/insert_or_replace_entity_batch_test.rb +151 -151
- data/test/integration/table/insert_or_replace_entity_test.rb +136 -136
- data/test/integration/table/merge_entity_batch_test.rb +127 -127
- data/test/integration/table/merge_entity_test.rb +112 -112
- data/test/integration/table/query_entities_test.rb +194 -194
- data/test/integration/table/query_tables_test.rb +42 -42
- data/test/integration/table/query_test.rb +250 -250
- data/test/integration/table/table_acl_test.rb +51 -51
- data/test/integration/table/table_gb18030_test.rb +355 -355
- data/test/integration/table/update_entity_batch_test.rb +148 -148
- data/test/integration/table/update_entity_test.rb +130 -130
- data/test/integration/test_helper.rb +42 -42
- data/test/integration/vm/VM_Create_test.rb +260 -260
- data/test/integration/vm/VM_Delete_test.rb +55 -55
- data/test/integration/vm/VM_Operations_test.rb +173 -173
- data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -37
- data/test/integration/vm_image/virtual_machine_image_test.rb +36 -36
- data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -122
- data/test/integration/vnet/Virtual_Network_list_test.rb +53 -53
- data/test/support/env.rb +19 -19
- data/test/support/fixtures.rb +36 -36
- data/test/support/name_generator.rb +168 -168
- data/test/support/stubs.rb +42 -42
- data/test/support/virtual_machine_name_generator.rb +102 -102
- data/test/support/virtual_network_helper.rb +73 -73
- data/test/test_helper.rb +53 -53
- data/test/unit/affinity_group/affinity_group_test.rb +192 -192
- data/test/unit/affinity_group/serialization_test.rb +88 -88
- data/test/unit/base_management/location_test.rb +57 -57
- data/test/unit/blob/blob_service_test.rb +1946 -1946
- data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -94
- data/test/unit/cloud_service_management/serialization_test.rb +169 -169
- data/test/unit/core/auth/shared_key_lite_test.rb +51 -51
- data/test/unit/core/auth/shared_key_test.rb +58 -58
- data/test/unit/core/auth/signer_test.rb +30 -30
- data/test/unit/core/http/http_error_test.rb +57 -57
- data/test/unit/core/http/http_request_test.rb +66 -66
- data/test/unit/core/http/http_response_test.rb +45 -45
- data/test/unit/core/http/retry_policy_test.rb +23 -23
- data/test/unit/database/serialization_test.rb +97 -97
- data/test/unit/database/sql_database_server_service_test.rb +288 -288
- data/test/unit/service/serialization_test.rb +532 -532
- data/test/unit/service/storage_service_test.rb +292 -292
- data/test/unit/storage_management/serialization_test.rb +232 -232
- data/test/unit/storage_management/storage_management_service_test.rb +261 -261
- data/test/unit/table/edmtype_test.rb +107 -107
- data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -35
- data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -65
- data/test/unit/virtual_machine_management/serialization_test.rb +258 -258
- data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -440
- data/test/unit/vnet/serialization_test.rb +187 -187
- data/test/unit/vnet/virtual_network_management_service_test.rb +131 -131
- metadata +34 -27
@@ -1,440 +1,440 @@
|
|
1
|
-
#-------------------------------------------------------------------------
|
2
|
-
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
#--------------------------------------------------------------------------
|
15
|
-
require 'test_helper'
|
16
|
-
|
17
|
-
describe Azure::VirtualMachineManagementService do
|
18
|
-
VirtualMachine = Azure::VirtualMachineManagement::VirtualMachine
|
19
|
-
|
20
|
-
subject do
|
21
|
-
Azure::VirtualMachineManagementService.new
|
22
|
-
end
|
23
|
-
|
24
|
-
let(:params) do
|
25
|
-
{
|
26
|
-
vm_name: 'instance1',
|
27
|
-
vm_user: 'root',
|
28
|
-
image: '5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-63APR20130415',
|
29
|
-
password: 'root',
|
30
|
-
location: 'West US'
|
31
|
-
}
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:windows_params) do
|
35
|
-
{
|
36
|
-
vm_name: 'instance1',
|
37
|
-
vm_user: 'administrator',
|
38
|
-
image: 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201304.01-en.us-127GB.vhd',
|
39
|
-
password: 'Admin123',
|
40
|
-
location: 'West US'
|
41
|
-
}
|
42
|
-
end
|
43
|
-
|
44
|
-
let(:location_request_path) { '/locations' }
|
45
|
-
let(:locations_xml) { Fixtures['list_locations'] }
|
46
|
-
let(:location_response) do
|
47
|
-
response = mock
|
48
|
-
response.stubs(:body).returns(locations_xml)
|
49
|
-
response
|
50
|
-
end
|
51
|
-
let(:location_response_body) { Nokogiri::XML location_response.body }
|
52
|
-
let(:mock_virtual_machine_request) { mock }
|
53
|
-
let(:windows_images_xml) { Fixtures['list_images'] }
|
54
|
-
let(:images_request_path) { '/services/images' }
|
55
|
-
let(:mock_request) { mock }
|
56
|
-
let(:os_response_body) do
|
57
|
-
response = mock
|
58
|
-
response.stubs(:body).returns(windows_images_xml)
|
59
|
-
Nokogiri::XML response.body
|
60
|
-
end
|
61
|
-
|
62
|
-
before do
|
63
|
-
Loggerx.stubs(:info).returns(nil)
|
64
|
-
Loggerx.expects(:puts).returns(nil).at_least(0)
|
65
|
-
ManagementHttpRequest.stubs(:new).with(
|
66
|
-
:get,
|
67
|
-
images_request_path,
|
68
|
-
nil
|
69
|
-
).returns(mock_request)
|
70
|
-
mock_request.expects(:call).returns(os_response_body).at_least(0)
|
71
|
-
end
|
72
|
-
|
73
|
-
describe '#list_virtual_machines' do
|
74
|
-
let(:request_path) { '/services/hostedservices' }
|
75
|
-
let(:cloud_services_xml) { Fixtures['list_cloud_services'] }
|
76
|
-
let(:virtual_machine_xml) { Fixtures['virtual_machine'] }
|
77
|
-
let(:deployment_error_xml) { Fixtures['deployment_error'] }
|
78
|
-
let(:method) { :get }
|
79
|
-
let(:mock_cloud_service_request) { mock }
|
80
|
-
let(:cloud_service_response) do
|
81
|
-
cloud_service_response = mock
|
82
|
-
cloud_service_response.stubs(:body).returns(cloud_services_xml)
|
83
|
-
cloud_service_response
|
84
|
-
end
|
85
|
-
let(:virtual_machine_response) do
|
86
|
-
virtual_machine_response = mock
|
87
|
-
virtual_machine_response.stubs(:body).returns(virtual_machine_xml)
|
88
|
-
virtual_machine_response
|
89
|
-
end
|
90
|
-
let(:deployment_error_response) do
|
91
|
-
http_error_response = mock
|
92
|
-
http_error_response.stubs(:body).returns(deployment_error_xml)
|
93
|
-
http_error_response
|
94
|
-
end
|
95
|
-
let(:cloud_service_response_body) { Nokogiri::XML cloud_service_response.body }
|
96
|
-
let(:virtual_machine_response_body) { Nokogiri::XML virtual_machine_response.body }
|
97
|
-
|
98
|
-
before do
|
99
|
-
ManagementHttpRequest.stubs(:new).with(method, request_path, nil).returns(mock_cloud_service_request)
|
100
|
-
mock_cloud_service_request.expects(:call).returns(cloud_service_response_body)
|
101
|
-
ManagementHttpRequest.stubs(:new).with(method, anything).returns(mock_virtual_machine_request)
|
102
|
-
mock_virtual_machine_request.stubs(:warn=).returns(true).twice
|
103
|
-
mock_virtual_machine_request.expects(:call).twice.returns(virtual_machine_response_body).returns(Nokogiri::XML deployment_error_response.body)
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'assembles a URI for the request' do
|
107
|
-
subject.list_virtual_machines
|
108
|
-
end
|
109
|
-
|
110
|
-
it "returns a virtual_machine, with it's attribute populated" do
|
111
|
-
virtual_machine = subject.list_virtual_machines.first
|
112
|
-
virtual_machine.vm_name.must_equal 'instance-name'
|
113
|
-
virtual_machine.role_size.must_equal 'Small'
|
114
|
-
virtual_machine.hostname.must_equal 'host-name'
|
115
|
-
virtual_machine.cloud_service_name.must_equal 'cloud-service-1'
|
116
|
-
virtual_machine.deployment_name.must_equal 'deployment-name'
|
117
|
-
virtual_machine.ipaddress.must_equal '137.116.17.187'
|
118
|
-
virtual_machine.virtual_network_name.must_equal 'test-virtual-network'
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'returns a list of virtual machines for the subscription' do
|
122
|
-
results = subject.list_virtual_machines
|
123
|
-
results.must_be_kind_of Array
|
124
|
-
results.length.must_equal 1
|
125
|
-
results.first.must_be_kind_of VirtualMachine
|
126
|
-
end
|
127
|
-
|
128
|
-
it "returns a virtual_machine, with it's tcp_endpoints attribute" do
|
129
|
-
virtual_machine = subject.list_virtual_machines.first
|
130
|
-
virtual_machine.tcp_endpoints.must_be_kind_of Array
|
131
|
-
virtual_machine.tcp_endpoints.must_include(
|
132
|
-
name: 'SSH',
|
133
|
-
vip: '137.116.17.187',
|
134
|
-
public_port: '22',
|
135
|
-
local_port: '22',
|
136
|
-
protocol: 'tcp'
|
137
|
-
)
|
138
|
-
virtual_machine.tcp_endpoints.must_include(
|
139
|
-
name: 'tcp-port-80',
|
140
|
-
vip: '137.117.17.187',
|
141
|
-
public_port: '80',
|
142
|
-
local_port: '80',
|
143
|
-
protocol: 'tcp'
|
144
|
-
)
|
145
|
-
virtual_machine.tcp_endpoints.must_include(
|
146
|
-
name: 'tcp-port-3889',
|
147
|
-
vip: '137.116.17.187',
|
148
|
-
public_port: '3889',
|
149
|
-
local_port: '3889',
|
150
|
-
protocol: 'tcp'
|
151
|
-
)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
describe '#get_virtual_machine' do
|
156
|
-
|
157
|
-
before do
|
158
|
-
virtual_machine = VirtualMachine.new do |vm|
|
159
|
-
vm.vm_name = 'instance-name'
|
160
|
-
vm.cloud_service_name = 'cloud-service-1'
|
161
|
-
end
|
162
|
-
Azure::VirtualMachineManagementService.any_instance.stubs(
|
163
|
-
:list_virtual_machines
|
164
|
-
).returns([virtual_machine])
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'return nil if virtual machine and cloud server does not exist ' do
|
168
|
-
virtual_machine = subject.get_virtual_machine 'name', 'cloud-service'
|
169
|
-
virtual_machine.must_equal nil
|
170
|
-
end
|
171
|
-
|
172
|
-
it 'return nil if virtual machine or cloud server does not exist ' do
|
173
|
-
vm = subject.get_virtual_machine 'name', 'cloud-service-1'
|
174
|
-
vm.must_equal nil
|
175
|
-
vm = subject.get_virtual_machine 'name2', 'cloud_service_name'
|
176
|
-
vm.must_equal nil
|
177
|
-
end
|
178
|
-
|
179
|
-
it 'return virtual machine instance if virtual machine name and cloud server name are valid ' do
|
180
|
-
vm = subject.get_virtual_machine 'instance-name', 'cloud-service-1'
|
181
|
-
vm.must_be_kind_of VirtualMachine
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
describe '#create_virtual_machine' do
|
186
|
-
let(:method) { :get }
|
187
|
-
|
188
|
-
before do
|
189
|
-
mock_request = mock
|
190
|
-
ManagementHttpRequest.stubs(:new).with(
|
191
|
-
method,
|
192
|
-
location_request_path,
|
193
|
-
nil
|
194
|
-
).returns(mock_request)
|
195
|
-
mock_request.expects(:call).returns(location_response_body).at_least(0)
|
196
|
-
Azure::CloudServiceManagementService.any_instance.stubs(:create_cloud_service)
|
197
|
-
Azure::CloudServiceManagementService.any_instance.stubs(:upload_certificate)
|
198
|
-
Azure::StorageManagementService.any_instance.stubs(:create_storage_account)
|
199
|
-
mock_request = mock
|
200
|
-
ManagementHttpRequest.expects(:new).with(
|
201
|
-
:post,
|
202
|
-
anything,
|
203
|
-
anything
|
204
|
-
).returns(mock_request)
|
205
|
-
mock_request.expects(:call).returns(nil)
|
206
|
-
virtual_machine = VirtualMachine.new do |vm|
|
207
|
-
vm.vm_name = 'instance-name'
|
208
|
-
vm.ipaddress = '192.168.1.1'
|
209
|
-
end
|
210
|
-
Azure::VirtualMachineManagementService.stubs(
|
211
|
-
:get_virtual_machine
|
212
|
-
).returns(virtual_machine)
|
213
|
-
end
|
214
|
-
|
215
|
-
it 'should set options hash with valid cloud_service_name, deployment_name, storage_account_name.' do
|
216
|
-
options = {}
|
217
|
-
subject.create_virtual_machine(params, options)
|
218
|
-
csn = options[:cloud_service_name]
|
219
|
-
csn.wont_be_nil
|
220
|
-
options[:storage_account_name].wont_be_nil
|
221
|
-
options[:deployment_name].wont_be_nil
|
222
|
-
options[:os_type].must_equal 'Linux'
|
223
|
-
assert_match(/^#{params[:vm_name] + '-service'}*/, csn)
|
224
|
-
end
|
225
|
-
|
226
|
-
it 'should set options hash with valid cloud service name.' do
|
227
|
-
options = {
|
228
|
-
storage_account_name: 'storage_account_name',
|
229
|
-
deployment_name: 'unique_deployment_name',
|
230
|
-
tcp_endpoints: '80,3889:3889'
|
231
|
-
}
|
232
|
-
subject.create_virtual_machine(params, options)
|
233
|
-
csn = options[:cloud_service_name]
|
234
|
-
csn.wont_be_nil
|
235
|
-
assert_match(/^#{params[:vm_name] + '-service-'}*/, csn)
|
236
|
-
options[:os_type].must_equal 'Linux'
|
237
|
-
end
|
238
|
-
|
239
|
-
end
|
240
|
-
|
241
|
-
describe '#create_virtual_machine with invalid parameters for windows machine' do
|
242
|
-
let(:virtual_machine_xml) { Fixtures['virtual_machine'] }
|
243
|
-
let(:method) { :get }
|
244
|
-
|
245
|
-
before do
|
246
|
-
mock_request = mock
|
247
|
-
ManagementHttpRequest.stubs(:new).with(
|
248
|
-
method,
|
249
|
-
location_request_path,
|
250
|
-
nil
|
251
|
-
).returns(mock_request)
|
252
|
-
mock_request.expects(:call).returns(location_response_body).at_least(0)
|
253
|
-
Azure::CloudServiceManagementService.any_instance.stubs(:create_cloud_service)
|
254
|
-
Azure::CloudServiceManagementService.any_instance.stubs(:upload_certificate)
|
255
|
-
Azure::StorageManagementService.any_instance.stubs(:create_storage_account)
|
256
|
-
mock_request = mock
|
257
|
-
ManagementHttpRequest.expects(:new).with(
|
258
|
-
:post,
|
259
|
-
anything,
|
260
|
-
anything
|
261
|
-
).returns(mock_request).at_least(0)
|
262
|
-
mock_request.expects(:call).returns(nil).at_least(0)
|
263
|
-
virtual_machine_obj = VirtualMachine.new do |virtual_machine|
|
264
|
-
virtual_machine.vm_name = 'windows-instance'
|
265
|
-
virtual_machine.ipaddress = '192.168.1.1'
|
266
|
-
end
|
267
|
-
Azure::VirtualMachineManagementService.any_instance.stubs(
|
268
|
-
:get_virtual_machine
|
269
|
-
).returns(virtual_machine_obj)
|
270
|
-
end
|
271
|
-
|
272
|
-
it 'should set options os_type with windows.' do
|
273
|
-
options = {}
|
274
|
-
subject.create_virtual_machine(windows_params, options)
|
275
|
-
csn = options[:cloud_service_name]
|
276
|
-
csn.wont_be_nil
|
277
|
-
options[:storage_account_name].wont_be_nil
|
278
|
-
options[:deployment_name].wont_be_nil
|
279
|
-
options[:os_type].must_equal 'Windows'
|
280
|
-
assert_match(/^#{params[:vm_name] + '-service'}*/, csn)
|
281
|
-
end
|
282
|
-
|
283
|
-
it 'throws error when vm_user is not given' do
|
284
|
-
windows_params.delete(:vm_user)
|
285
|
-
options = {}
|
286
|
-
virtual_machine = subject.create_virtual_machine(windows_params, options)
|
287
|
-
assert_match(/You did not provide a valid 'vm_user' value*/, virtual_machine)
|
288
|
-
end
|
289
|
-
|
290
|
-
it 'self-signed certificate is generated by vm and used for the virtual machine when certificate path is not given.' do
|
291
|
-
options = { winrm_transport: %w(https http) }
|
292
|
-
virtual_machine = subject.create_virtual_machine(windows_params, options)
|
293
|
-
virtual_machine.wont_be_nil
|
294
|
-
end
|
295
|
-
|
296
|
-
it 'throws error when certificate path is not invalid.' do
|
297
|
-
options = {
|
298
|
-
winrm_transport: %w(https http),
|
299
|
-
private_key_file: 'f:/invalid_path/private_key' ,
|
300
|
-
certificate_file: 'f:/invalid_path/certificate.pem'
|
301
|
-
}
|
302
|
-
virtual_machine = subject.create_virtual_machine(windows_params, options)
|
303
|
-
assert_match(/No such file or directory -*/, virtual_machine)
|
304
|
-
end
|
305
|
-
|
306
|
-
it 'should not throws certificate error when wirnm_transport is http' do
|
307
|
-
options = {
|
308
|
-
winrm_transport: ['http'],
|
309
|
-
private_key_file: 'f:/invalid_path/private_key' ,
|
310
|
-
certificate_file: 'f:/invalid_path/certificate.pem'
|
311
|
-
}
|
312
|
-
virtual_machine = subject.create_virtual_machine(windows_params, options)
|
313
|
-
virtual_machine.must_be_kind_of VirtualMachine
|
314
|
-
virtual_machine.wont_be_nil
|
315
|
-
end
|
316
|
-
|
317
|
-
it 'throws error when location is not given' do
|
318
|
-
params.delete(:location)
|
319
|
-
virtual_machine = subject.create_virtual_machine(params)
|
320
|
-
error_msg = "You did not provide a valid 'location' value"
|
321
|
-
assert_match(/#{error_msg}*/, virtual_machine)
|
322
|
-
end
|
323
|
-
|
324
|
-
it 'throws error when wrong location is given' do
|
325
|
-
params.merge!(location: 'wrong location')
|
326
|
-
virtual_machine = subject.create_virtual_machine(params)
|
327
|
-
assert_match(/Value 'wrong location' specified for parameter 'location' is invalid.*/, virtual_machine)
|
328
|
-
end
|
329
|
-
|
330
|
-
it 'throws error when empty location is given' do
|
331
|
-
params.merge!(location: nil)
|
332
|
-
virtual_machine = subject.create_virtual_machine(params)
|
333
|
-
assert_match(/You did not provide a valid 'location' value*/, virtual_machine)
|
334
|
-
end
|
335
|
-
|
336
|
-
it 'location should be case insensitive' do
|
337
|
-
params.merge!(location: 'west us')
|
338
|
-
subject.create_virtual_machine(params)
|
339
|
-
end
|
340
|
-
|
341
|
-
it 'throw error when available_services has not persistentvmrole for given location' do
|
342
|
-
params.merge!(location: 'West Europe')
|
343
|
-
msg = subject.create_virtual_machine(params)
|
344
|
-
assert_match(/Persistentvmrole not enabled for "West Europe"*/, msg)
|
345
|
-
end
|
346
|
-
|
347
|
-
it 'vm_size should be case sensitive' do
|
348
|
-
options = {
|
349
|
-
vm_size: 'extralarge'
|
350
|
-
}
|
351
|
-
msg = subject.create_virtual_machine(params, options)
|
352
|
-
assert_match(/Value 'extralarge' specified for parameter 'vm_size' is invalid/, msg)
|
353
|
-
end
|
354
|
-
|
355
|
-
it 'throws error when wrong role size is given' do
|
356
|
-
options = {
|
357
|
-
vm_size: 'wrong size'
|
358
|
-
}
|
359
|
-
virtual_machine = subject.create_virtual_machine(params, options)
|
360
|
-
error_msg = "'wrong size' specified for parameter 'vm_size' is invalid."
|
361
|
-
assert_match(/#{error_msg}*/, virtual_machine)
|
362
|
-
end
|
363
|
-
|
364
|
-
it 'should not throw any error if role size is empty' do
|
365
|
-
options = {
|
366
|
-
vm_size: ''
|
367
|
-
}
|
368
|
-
subject.create_virtual_machine(params, options)
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
describe '#get_os_type' do
|
373
|
-
|
374
|
-
before do
|
375
|
-
subject.class.send(:public, *subject.class.private_instance_methods)
|
376
|
-
end
|
377
|
-
|
378
|
-
it 'returns os type of given virtual machine image' do
|
379
|
-
result = subject.get_os_type 'RightImage-CentOS-6.2-x64-v5.8.8.1'
|
380
|
-
result.must_equal 'Linux'
|
381
|
-
end
|
382
|
-
|
383
|
-
it 'errors if the virtual machine image does not exist' do
|
384
|
-
exception = assert_raises(RuntimeError) do
|
385
|
-
subject.get_os_type 'invalid-image-name'
|
386
|
-
end
|
387
|
-
error_msg = 'The virtual machine image source is not valid'
|
388
|
-
assert_match(/#{error_msg}/i, exception.message)
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
describe '#add_role' do
|
393
|
-
|
394
|
-
before do
|
395
|
-
windows_params[:cloud_service_name] = 'cloud-service-1'
|
396
|
-
end
|
397
|
-
|
398
|
-
it 'should throws error when cloud service name is empty' do
|
399
|
-
windows_params.delete(:cloud_service_name)
|
400
|
-
exception = assert_raises(RuntimeError) do
|
401
|
-
subject.add_role(params)
|
402
|
-
end
|
403
|
-
error_msg = 'You did not provide a valid \'cloud_service_name\' value'
|
404
|
-
assert_match(/#{error_msg}/i, exception.message)
|
405
|
-
end
|
406
|
-
|
407
|
-
it 'throws error when vm_user is not given' do
|
408
|
-
windows_params.delete(:vm_user)
|
409
|
-
exception = assert_raises(RuntimeError) do
|
410
|
-
subject.add_role(windows_params)
|
411
|
-
end
|
412
|
-
error_msg = 'You did not provide a valid \'vm_user\' value'
|
413
|
-
assert_match(/#{error_msg}/i, exception.message)
|
414
|
-
end
|
415
|
-
|
416
|
-
it 'throws error when certificate path is not invalid.' do
|
417
|
-
options = {
|
418
|
-
winrm_transport: %w(https http),
|
419
|
-
private_key_file: 'f:/invalid_path/private_key' ,
|
420
|
-
certificate_file: 'f:/invalid_path/certificate.pem'
|
421
|
-
}
|
422
|
-
exception = assert_raises(RuntimeError) do
|
423
|
-
subject.add_role(windows_params, options)
|
424
|
-
end
|
425
|
-
error_msg = 'No such file or directory -'
|
426
|
-
assert_match(/#{error_msg}/i, exception.message)
|
427
|
-
end
|
428
|
-
|
429
|
-
it 'throws error when wrong role size is given' do
|
430
|
-
options = { vm_size: 'wrong size' }
|
431
|
-
exception = assert_raises(RuntimeError) do
|
432
|
-
subject.add_role(windows_params, options)
|
433
|
-
end
|
434
|
-
error_msg = "wrong size' specified for parameter 'vm_size' is invalid."
|
435
|
-
assert_match(/#{error_msg}*/, exception.message)
|
436
|
-
end
|
437
|
-
|
438
|
-
end
|
439
|
-
|
440
|
-
end
|
1
|
+
#-------------------------------------------------------------------------
|
2
|
+
# Copyright 2013 Microsoft Open Technologies, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
#--------------------------------------------------------------------------
|
15
|
+
require 'test_helper'
|
16
|
+
|
17
|
+
describe Azure::VirtualMachineManagementService do
|
18
|
+
VirtualMachine = Azure::VirtualMachineManagement::VirtualMachine
|
19
|
+
|
20
|
+
subject do
|
21
|
+
Azure::VirtualMachineManagementService.new
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:params) do
|
25
|
+
{
|
26
|
+
vm_name: 'instance1',
|
27
|
+
vm_user: 'root',
|
28
|
+
image: '5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-63APR20130415',
|
29
|
+
password: 'root',
|
30
|
+
location: 'West US'
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
let(:windows_params) do
|
35
|
+
{
|
36
|
+
vm_name: 'instance1',
|
37
|
+
vm_user: 'administrator',
|
38
|
+
image: 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201304.01-en.us-127GB.vhd',
|
39
|
+
password: 'Admin123',
|
40
|
+
location: 'West US'
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:location_request_path) { '/locations' }
|
45
|
+
let(:locations_xml) { Fixtures['list_locations'] }
|
46
|
+
let(:location_response) do
|
47
|
+
response = mock
|
48
|
+
response.stubs(:body).returns(locations_xml)
|
49
|
+
response
|
50
|
+
end
|
51
|
+
let(:location_response_body) { Nokogiri::XML location_response.body }
|
52
|
+
let(:mock_virtual_machine_request) { mock }
|
53
|
+
let(:windows_images_xml) { Fixtures['list_images'] }
|
54
|
+
let(:images_request_path) { '/services/images' }
|
55
|
+
let(:mock_request) { mock }
|
56
|
+
let(:os_response_body) do
|
57
|
+
response = mock
|
58
|
+
response.stubs(:body).returns(windows_images_xml)
|
59
|
+
Nokogiri::XML response.body
|
60
|
+
end
|
61
|
+
|
62
|
+
before do
|
63
|
+
Loggerx.stubs(:info).returns(nil)
|
64
|
+
Loggerx.expects(:puts).returns(nil).at_least(0)
|
65
|
+
ManagementHttpRequest.stubs(:new).with(
|
66
|
+
:get,
|
67
|
+
images_request_path,
|
68
|
+
nil
|
69
|
+
).returns(mock_request)
|
70
|
+
mock_request.expects(:call).returns(os_response_body).at_least(0)
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#list_virtual_machines' do
|
74
|
+
let(:request_path) { '/services/hostedservices' }
|
75
|
+
let(:cloud_services_xml) { Fixtures['list_cloud_services'] }
|
76
|
+
let(:virtual_machine_xml) { Fixtures['virtual_machine'] }
|
77
|
+
let(:deployment_error_xml) { Fixtures['deployment_error'] }
|
78
|
+
let(:method) { :get }
|
79
|
+
let(:mock_cloud_service_request) { mock }
|
80
|
+
let(:cloud_service_response) do
|
81
|
+
cloud_service_response = mock
|
82
|
+
cloud_service_response.stubs(:body).returns(cloud_services_xml)
|
83
|
+
cloud_service_response
|
84
|
+
end
|
85
|
+
let(:virtual_machine_response) do
|
86
|
+
virtual_machine_response = mock
|
87
|
+
virtual_machine_response.stubs(:body).returns(virtual_machine_xml)
|
88
|
+
virtual_machine_response
|
89
|
+
end
|
90
|
+
let(:deployment_error_response) do
|
91
|
+
http_error_response = mock
|
92
|
+
http_error_response.stubs(:body).returns(deployment_error_xml)
|
93
|
+
http_error_response
|
94
|
+
end
|
95
|
+
let(:cloud_service_response_body) { Nokogiri::XML cloud_service_response.body }
|
96
|
+
let(:virtual_machine_response_body) { Nokogiri::XML virtual_machine_response.body }
|
97
|
+
|
98
|
+
before do
|
99
|
+
ManagementHttpRequest.stubs(:new).with(method, request_path, nil).returns(mock_cloud_service_request)
|
100
|
+
mock_cloud_service_request.expects(:call).returns(cloud_service_response_body)
|
101
|
+
ManagementHttpRequest.stubs(:new).with(method, anything).returns(mock_virtual_machine_request)
|
102
|
+
mock_virtual_machine_request.stubs(:warn=).returns(true).twice
|
103
|
+
mock_virtual_machine_request.expects(:call).twice.returns(virtual_machine_response_body).returns(Nokogiri::XML deployment_error_response.body)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'assembles a URI for the request' do
|
107
|
+
subject.list_virtual_machines
|
108
|
+
end
|
109
|
+
|
110
|
+
it "returns a virtual_machine, with it's attribute populated" do
|
111
|
+
virtual_machine = subject.list_virtual_machines.first
|
112
|
+
virtual_machine.vm_name.must_equal 'instance-name'
|
113
|
+
virtual_machine.role_size.must_equal 'Small'
|
114
|
+
virtual_machine.hostname.must_equal 'host-name'
|
115
|
+
virtual_machine.cloud_service_name.must_equal 'cloud-service-1'
|
116
|
+
virtual_machine.deployment_name.must_equal 'deployment-name'
|
117
|
+
virtual_machine.ipaddress.must_equal '137.116.17.187'
|
118
|
+
virtual_machine.virtual_network_name.must_equal 'test-virtual-network'
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'returns a list of virtual machines for the subscription' do
|
122
|
+
results = subject.list_virtual_machines
|
123
|
+
results.must_be_kind_of Array
|
124
|
+
results.length.must_equal 1
|
125
|
+
results.first.must_be_kind_of VirtualMachine
|
126
|
+
end
|
127
|
+
|
128
|
+
it "returns a virtual_machine, with it's tcp_endpoints attribute" do
|
129
|
+
virtual_machine = subject.list_virtual_machines.first
|
130
|
+
virtual_machine.tcp_endpoints.must_be_kind_of Array
|
131
|
+
virtual_machine.tcp_endpoints.must_include(
|
132
|
+
name: 'SSH',
|
133
|
+
vip: '137.116.17.187',
|
134
|
+
public_port: '22',
|
135
|
+
local_port: '22',
|
136
|
+
protocol: 'tcp'
|
137
|
+
)
|
138
|
+
virtual_machine.tcp_endpoints.must_include(
|
139
|
+
name: 'tcp-port-80',
|
140
|
+
vip: '137.117.17.187',
|
141
|
+
public_port: '80',
|
142
|
+
local_port: '80',
|
143
|
+
protocol: 'tcp'
|
144
|
+
)
|
145
|
+
virtual_machine.tcp_endpoints.must_include(
|
146
|
+
name: 'tcp-port-3889',
|
147
|
+
vip: '137.116.17.187',
|
148
|
+
public_port: '3889',
|
149
|
+
local_port: '3889',
|
150
|
+
protocol: 'tcp'
|
151
|
+
)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe '#get_virtual_machine' do
|
156
|
+
|
157
|
+
before do
|
158
|
+
virtual_machine = VirtualMachine.new do |vm|
|
159
|
+
vm.vm_name = 'instance-name'
|
160
|
+
vm.cloud_service_name = 'cloud-service-1'
|
161
|
+
end
|
162
|
+
Azure::VirtualMachineManagementService.any_instance.stubs(
|
163
|
+
:list_virtual_machines
|
164
|
+
).returns([virtual_machine])
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'return nil if virtual machine and cloud server does not exist ' do
|
168
|
+
virtual_machine = subject.get_virtual_machine 'name', 'cloud-service'
|
169
|
+
virtual_machine.must_equal nil
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'return nil if virtual machine or cloud server does not exist ' do
|
173
|
+
vm = subject.get_virtual_machine 'name', 'cloud-service-1'
|
174
|
+
vm.must_equal nil
|
175
|
+
vm = subject.get_virtual_machine 'name2', 'cloud_service_name'
|
176
|
+
vm.must_equal nil
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'return virtual machine instance if virtual machine name and cloud server name are valid ' do
|
180
|
+
vm = subject.get_virtual_machine 'instance-name', 'cloud-service-1'
|
181
|
+
vm.must_be_kind_of VirtualMachine
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
describe '#create_virtual_machine' do
|
186
|
+
let(:method) { :get }
|
187
|
+
|
188
|
+
before do
|
189
|
+
mock_request = mock
|
190
|
+
ManagementHttpRequest.stubs(:new).with(
|
191
|
+
method,
|
192
|
+
location_request_path,
|
193
|
+
nil
|
194
|
+
).returns(mock_request)
|
195
|
+
mock_request.expects(:call).returns(location_response_body).at_least(0)
|
196
|
+
Azure::CloudServiceManagementService.any_instance.stubs(:create_cloud_service)
|
197
|
+
Azure::CloudServiceManagementService.any_instance.stubs(:upload_certificate)
|
198
|
+
Azure::StorageManagementService.any_instance.stubs(:create_storage_account)
|
199
|
+
mock_request = mock
|
200
|
+
ManagementHttpRequest.expects(:new).with(
|
201
|
+
:post,
|
202
|
+
anything,
|
203
|
+
anything
|
204
|
+
).returns(mock_request)
|
205
|
+
mock_request.expects(:call).returns(nil)
|
206
|
+
virtual_machine = VirtualMachine.new do |vm|
|
207
|
+
vm.vm_name = 'instance-name'
|
208
|
+
vm.ipaddress = '192.168.1.1'
|
209
|
+
end
|
210
|
+
Azure::VirtualMachineManagementService.stubs(
|
211
|
+
:get_virtual_machine
|
212
|
+
).returns(virtual_machine)
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'should set options hash with valid cloud_service_name, deployment_name, storage_account_name.' do
|
216
|
+
options = {}
|
217
|
+
subject.create_virtual_machine(params, options)
|
218
|
+
csn = options[:cloud_service_name]
|
219
|
+
csn.wont_be_nil
|
220
|
+
options[:storage_account_name].wont_be_nil
|
221
|
+
options[:deployment_name].wont_be_nil
|
222
|
+
options[:os_type].must_equal 'Linux'
|
223
|
+
assert_match(/^#{params[:vm_name] + '-service'}*/, csn)
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'should set options hash with valid cloud service name.' do
|
227
|
+
options = {
|
228
|
+
storage_account_name: 'storage_account_name',
|
229
|
+
deployment_name: 'unique_deployment_name',
|
230
|
+
tcp_endpoints: '80,3889:3889'
|
231
|
+
}
|
232
|
+
subject.create_virtual_machine(params, options)
|
233
|
+
csn = options[:cloud_service_name]
|
234
|
+
csn.wont_be_nil
|
235
|
+
assert_match(/^#{params[:vm_name] + '-service-'}*/, csn)
|
236
|
+
options[:os_type].must_equal 'Linux'
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
240
|
+
|
241
|
+
describe '#create_virtual_machine with invalid parameters for windows machine' do
|
242
|
+
let(:virtual_machine_xml) { Fixtures['virtual_machine'] }
|
243
|
+
let(:method) { :get }
|
244
|
+
|
245
|
+
before do
|
246
|
+
mock_request = mock
|
247
|
+
ManagementHttpRequest.stubs(:new).with(
|
248
|
+
method,
|
249
|
+
location_request_path,
|
250
|
+
nil
|
251
|
+
).returns(mock_request)
|
252
|
+
mock_request.expects(:call).returns(location_response_body).at_least(0)
|
253
|
+
Azure::CloudServiceManagementService.any_instance.stubs(:create_cloud_service)
|
254
|
+
Azure::CloudServiceManagementService.any_instance.stubs(:upload_certificate)
|
255
|
+
Azure::StorageManagementService.any_instance.stubs(:create_storage_account)
|
256
|
+
mock_request = mock
|
257
|
+
ManagementHttpRequest.expects(:new).with(
|
258
|
+
:post,
|
259
|
+
anything,
|
260
|
+
anything
|
261
|
+
).returns(mock_request).at_least(0)
|
262
|
+
mock_request.expects(:call).returns(nil).at_least(0)
|
263
|
+
virtual_machine_obj = VirtualMachine.new do |virtual_machine|
|
264
|
+
virtual_machine.vm_name = 'windows-instance'
|
265
|
+
virtual_machine.ipaddress = '192.168.1.1'
|
266
|
+
end
|
267
|
+
Azure::VirtualMachineManagementService.any_instance.stubs(
|
268
|
+
:get_virtual_machine
|
269
|
+
).returns(virtual_machine_obj)
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'should set options os_type with windows.' do
|
273
|
+
options = {}
|
274
|
+
subject.create_virtual_machine(windows_params, options)
|
275
|
+
csn = options[:cloud_service_name]
|
276
|
+
csn.wont_be_nil
|
277
|
+
options[:storage_account_name].wont_be_nil
|
278
|
+
options[:deployment_name].wont_be_nil
|
279
|
+
options[:os_type].must_equal 'Windows'
|
280
|
+
assert_match(/^#{params[:vm_name] + '-service'}*/, csn)
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'throws error when vm_user is not given' do
|
284
|
+
windows_params.delete(:vm_user)
|
285
|
+
options = {}
|
286
|
+
virtual_machine = subject.create_virtual_machine(windows_params, options)
|
287
|
+
assert_match(/You did not provide a valid 'vm_user' value*/, virtual_machine)
|
288
|
+
end
|
289
|
+
|
290
|
+
it 'self-signed certificate is generated by vm and used for the virtual machine when certificate path is not given.' do
|
291
|
+
options = { winrm_transport: %w(https http) }
|
292
|
+
virtual_machine = subject.create_virtual_machine(windows_params, options)
|
293
|
+
virtual_machine.wont_be_nil
|
294
|
+
end
|
295
|
+
|
296
|
+
it 'throws error when certificate path is not invalid.' do
|
297
|
+
options = {
|
298
|
+
winrm_transport: %w(https http),
|
299
|
+
private_key_file: 'f:/invalid_path/private_key' ,
|
300
|
+
certificate_file: 'f:/invalid_path/certificate.pem'
|
301
|
+
}
|
302
|
+
virtual_machine = subject.create_virtual_machine(windows_params, options)
|
303
|
+
assert_match(/No such file or directory -*/, virtual_machine)
|
304
|
+
end
|
305
|
+
|
306
|
+
it 'should not throws certificate error when wirnm_transport is http' do
|
307
|
+
options = {
|
308
|
+
winrm_transport: ['http'],
|
309
|
+
private_key_file: 'f:/invalid_path/private_key' ,
|
310
|
+
certificate_file: 'f:/invalid_path/certificate.pem'
|
311
|
+
}
|
312
|
+
virtual_machine = subject.create_virtual_machine(windows_params, options)
|
313
|
+
virtual_machine.must_be_kind_of VirtualMachine
|
314
|
+
virtual_machine.wont_be_nil
|
315
|
+
end
|
316
|
+
|
317
|
+
it 'throws error when location is not given' do
|
318
|
+
params.delete(:location)
|
319
|
+
virtual_machine = subject.create_virtual_machine(params)
|
320
|
+
error_msg = "You did not provide a valid 'location' value"
|
321
|
+
assert_match(/#{error_msg}*/, virtual_machine)
|
322
|
+
end
|
323
|
+
|
324
|
+
it 'throws error when wrong location is given' do
|
325
|
+
params.merge!(location: 'wrong location')
|
326
|
+
virtual_machine = subject.create_virtual_machine(params)
|
327
|
+
assert_match(/Value 'wrong location' specified for parameter 'location' is invalid.*/, virtual_machine)
|
328
|
+
end
|
329
|
+
|
330
|
+
it 'throws error when empty location is given' do
|
331
|
+
params.merge!(location: nil)
|
332
|
+
virtual_machine = subject.create_virtual_machine(params)
|
333
|
+
assert_match(/You did not provide a valid 'location' value*/, virtual_machine)
|
334
|
+
end
|
335
|
+
|
336
|
+
it 'location should be case insensitive' do
|
337
|
+
params.merge!(location: 'west us')
|
338
|
+
subject.create_virtual_machine(params)
|
339
|
+
end
|
340
|
+
|
341
|
+
it 'throw error when available_services has not persistentvmrole for given location' do
|
342
|
+
params.merge!(location: 'West Europe')
|
343
|
+
msg = subject.create_virtual_machine(params)
|
344
|
+
assert_match(/Persistentvmrole not enabled for "West Europe"*/, msg)
|
345
|
+
end
|
346
|
+
|
347
|
+
it 'vm_size should be case sensitive' do
|
348
|
+
options = {
|
349
|
+
vm_size: 'extralarge'
|
350
|
+
}
|
351
|
+
msg = subject.create_virtual_machine(params, options)
|
352
|
+
assert_match(/Value 'extralarge' specified for parameter 'vm_size' is invalid/, msg)
|
353
|
+
end
|
354
|
+
|
355
|
+
it 'throws error when wrong role size is given' do
|
356
|
+
options = {
|
357
|
+
vm_size: 'wrong size'
|
358
|
+
}
|
359
|
+
virtual_machine = subject.create_virtual_machine(params, options)
|
360
|
+
error_msg = "'wrong size' specified for parameter 'vm_size' is invalid."
|
361
|
+
assert_match(/#{error_msg}*/, virtual_machine)
|
362
|
+
end
|
363
|
+
|
364
|
+
it 'should not throw any error if role size is empty' do
|
365
|
+
options = {
|
366
|
+
vm_size: ''
|
367
|
+
}
|
368
|
+
subject.create_virtual_machine(params, options)
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
describe '#get_os_type' do
|
373
|
+
|
374
|
+
before do
|
375
|
+
subject.class.send(:public, *subject.class.private_instance_methods)
|
376
|
+
end
|
377
|
+
|
378
|
+
it 'returns os type of given virtual machine image' do
|
379
|
+
result = subject.get_os_type 'RightImage-CentOS-6.2-x64-v5.8.8.1'
|
380
|
+
result.must_equal 'Linux'
|
381
|
+
end
|
382
|
+
|
383
|
+
it 'errors if the virtual machine image does not exist' do
|
384
|
+
exception = assert_raises(RuntimeError) do
|
385
|
+
subject.get_os_type 'invalid-image-name'
|
386
|
+
end
|
387
|
+
error_msg = 'The virtual machine image source is not valid'
|
388
|
+
assert_match(/#{error_msg}/i, exception.message)
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
392
|
+
describe '#add_role' do
|
393
|
+
|
394
|
+
before do
|
395
|
+
windows_params[:cloud_service_name] = 'cloud-service-1'
|
396
|
+
end
|
397
|
+
|
398
|
+
it 'should throws error when cloud service name is empty' do
|
399
|
+
windows_params.delete(:cloud_service_name)
|
400
|
+
exception = assert_raises(RuntimeError) do
|
401
|
+
subject.add_role(params)
|
402
|
+
end
|
403
|
+
error_msg = 'You did not provide a valid \'cloud_service_name\' value'
|
404
|
+
assert_match(/#{error_msg}/i, exception.message)
|
405
|
+
end
|
406
|
+
|
407
|
+
it 'throws error when vm_user is not given' do
|
408
|
+
windows_params.delete(:vm_user)
|
409
|
+
exception = assert_raises(RuntimeError) do
|
410
|
+
subject.add_role(windows_params)
|
411
|
+
end
|
412
|
+
error_msg = 'You did not provide a valid \'vm_user\' value'
|
413
|
+
assert_match(/#{error_msg}/i, exception.message)
|
414
|
+
end
|
415
|
+
|
416
|
+
it 'throws error when certificate path is not invalid.' do
|
417
|
+
options = {
|
418
|
+
winrm_transport: %w(https http),
|
419
|
+
private_key_file: 'f:/invalid_path/private_key' ,
|
420
|
+
certificate_file: 'f:/invalid_path/certificate.pem'
|
421
|
+
}
|
422
|
+
exception = assert_raises(RuntimeError) do
|
423
|
+
subject.add_role(windows_params, options)
|
424
|
+
end
|
425
|
+
error_msg = 'No such file or directory -'
|
426
|
+
assert_match(/#{error_msg}/i, exception.message)
|
427
|
+
end
|
428
|
+
|
429
|
+
it 'throws error when wrong role size is given' do
|
430
|
+
options = { vm_size: 'wrong size' }
|
431
|
+
exception = assert_raises(RuntimeError) do
|
432
|
+
subject.add_role(windows_params, options)
|
433
|
+
end
|
434
|
+
error_msg = "wrong size' specified for parameter 'vm_size' is invalid."
|
435
|
+
assert_match(/#{error_msg}*/, exception.message)
|
436
|
+
end
|
437
|
+
|
438
|
+
end
|
439
|
+
|
440
|
+
end
|