fog 0.3.31 → 0.3.32

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.
Files changed (192) hide show
  1. data/.document +3 -0
  2. data/.gitignore +10 -0
  3. data/Gemfile.lock +1 -4
  4. data/README.rdoc +29 -37
  5. data/Rakefile +5 -25
  6. data/bin/fog +1 -3
  7. data/examples/dns_methods.rb +389 -0
  8. data/examples/storage.rb +103 -0
  9. data/fog.gemspec +4 -778
  10. data/lib/fog.rb +5 -66
  11. data/lib/fog/aws.rb +3 -0
  12. data/lib/fog/aws/bin.rb +7 -2
  13. data/lib/fog/aws/cdn.rb +2 -2
  14. data/lib/fog/aws/compute.rb +2 -2
  15. data/lib/fog/aws/dns.rb +101 -0
  16. data/lib/fog/aws/elb.rb +2 -2
  17. data/lib/fog/aws/iam.rb +2 -2
  18. data/lib/fog/aws/models/compute/image.rb +1 -0
  19. data/lib/fog/aws/models/compute/server.rb +1 -1
  20. data/lib/fog/aws/models/compute/servers.rb +1 -13
  21. data/lib/fog/aws/parsers/compute/describe_images.rb +36 -34
  22. data/lib/fog/aws/parsers/dns/change_resource_record_sets.rb +26 -0
  23. data/lib/fog/aws/parsers/dns/create_hosted_zone.rb +55 -0
  24. data/lib/fog/aws/parsers/dns/delete_hosted_zone.rb +25 -0
  25. data/lib/fog/aws/parsers/dns/get_change.rb +26 -0
  26. data/lib/fog/aws/parsers/dns/get_hosted_zone.rb +43 -0
  27. data/lib/fog/aws/parsers/dns/list_hosted_zones.rb +35 -0
  28. data/lib/fog/aws/parsers/dns/list_resource_record_sets.rb +46 -0
  29. data/lib/fog/aws/requests/compute/describe_images.rb +1 -0
  30. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +90 -0
  31. data/lib/fog/aws/requests/dns/create_hosted_zone.rb +68 -0
  32. data/lib/fog/aws/requests/dns/delete_hosted_zone.rb +48 -0
  33. data/lib/fog/aws/requests/dns/get_change.rb +47 -0
  34. data/lib/fog/aws/requests/dns/get_hosted_zone.rb +51 -0
  35. data/lib/fog/aws/requests/dns/list_hosted_zones.rb +63 -0
  36. data/lib/fog/aws/requests/dns/list_resource_record_sets.rb +68 -0
  37. data/lib/fog/aws/requests/storage/get_object_url.rb +2 -2
  38. data/lib/fog/aws/requests/storage/put_object_url.rb +2 -2
  39. data/lib/fog/aws/requests/storage/sync_clock.rb +28 -0
  40. data/lib/fog/aws/simpledb.rb +2 -2
  41. data/lib/fog/aws/storage.rb +5 -3
  42. data/lib/fog/bluebox.rb +2 -0
  43. data/lib/fog/bluebox/compute.rb +2 -2
  44. data/lib/fog/brightbox.rb +2 -0
  45. data/lib/fog/brightbox/compute.rb +2 -2
  46. data/lib/fog/core.rb +21 -1
  47. data/lib/fog/core/bin.rb +3 -1
  48. data/lib/fog/core/compute.rb +1 -0
  49. data/lib/fog/core/credentials.rb +72 -50
  50. data/lib/fog/core/deprecation.rb +11 -5
  51. data/lib/fog/core/mock.rb +34 -0
  52. data/lib/fog/core/model.rb +9 -1
  53. data/lib/fog/core/service.rb +40 -26
  54. data/lib/fog/core/storage.rb +1 -0
  55. data/lib/fog/core/time.rb +21 -0
  56. data/lib/fog/core/wait_for.rb +17 -0
  57. data/lib/fog/go_grid.rb +2 -0
  58. data/lib/fog/go_grid/compute.rb +2 -2
  59. data/lib/fog/google.rb +2 -0
  60. data/lib/fog/google/requests/storage/get_bucket.rb +6 -5
  61. data/lib/fog/google/requests/storage/get_object_url.rb +4 -4
  62. data/lib/fog/google/requests/storage/put_object_url.rb +4 -4
  63. data/lib/fog/google/storage.rb +4 -3
  64. data/lib/fog/linode.rb +3 -0
  65. data/lib/fog/linode/bin.rb +5 -3
  66. data/lib/fog/linode/compute.rb +6 -2
  67. data/lib/fog/linode/dns.rb +80 -0
  68. data/lib/fog/linode/requests/dns/domain_create.rb +52 -0
  69. data/lib/fog/linode/requests/dns/domain_delete.rb +35 -0
  70. data/lib/fog/linode/requests/dns/domain_list.rb +50 -0
  71. data/lib/fog/linode/requests/dns/domain_resource_create.rb +53 -0
  72. data/lib/fog/linode/requests/dns/domain_resource_delete.rb +36 -0
  73. data/lib/fog/linode/requests/dns/domain_resource_list.rb +48 -0
  74. data/lib/fog/linode/requests/dns/domain_resource_update.rb +54 -0
  75. data/lib/fog/linode/requests/dns/domain_update.rb +48 -0
  76. data/lib/fog/local.rb +2 -0
  77. data/lib/fog/local/storage.rb +3 -3
  78. data/lib/fog/new_servers.rb +2 -0
  79. data/lib/fog/new_servers/compute.rb +2 -2
  80. data/lib/fog/rackspace.rb +2 -0
  81. data/lib/fog/rackspace/cdn.rb +2 -2
  82. data/lib/fog/rackspace/compute.rb +2 -2
  83. data/lib/fog/rackspace/storage.rb +2 -2
  84. data/lib/fog/slicehost.rb +3 -0
  85. data/lib/fog/slicehost/bin.rb +2 -0
  86. data/lib/fog/slicehost/compute.rb +2 -2
  87. data/lib/fog/slicehost/dns.rb +84 -0
  88. data/lib/fog/slicehost/parsers/dns/create_record.rb +26 -0
  89. data/lib/fog/slicehost/parsers/dns/create_zone.rb +26 -0
  90. data/lib/fog/slicehost/parsers/dns/get_record.rb +26 -0
  91. data/lib/fog/slicehost/parsers/dns/get_records.rb +30 -0
  92. data/lib/fog/slicehost/parsers/dns/get_zone.rb +26 -0
  93. data/lib/fog/slicehost/parsers/dns/get_zones.rb +30 -0
  94. data/lib/fog/slicehost/requests/compute/create_slice.rb +2 -2
  95. data/lib/fog/slicehost/requests/compute/delete_slice.rb +3 -17
  96. data/lib/fog/slicehost/requests/dns/create_record.rb +61 -0
  97. data/lib/fog/slicehost/requests/dns/create_zone.rb +54 -0
  98. data/lib/fog/slicehost/requests/dns/delete_record.rb +31 -0
  99. data/lib/fog/slicehost/requests/dns/delete_zone.rb +31 -0
  100. data/lib/fog/slicehost/requests/dns/get_record.rb +40 -0
  101. data/lib/fog/slicehost/requests/dns/get_records.rb +41 -0
  102. data/lib/fog/slicehost/requests/dns/get_zone.rb +40 -0
  103. data/lib/fog/slicehost/requests/dns/get_zones.rb +38 -0
  104. data/lib/fog/terremark.rb +2 -0
  105. data/lib/fog/terremark/ecloud.rb +2 -4
  106. data/lib/fog/vcloud.rb +4 -2
  107. data/lib/fog/vcloud/bin.rb +3 -1
  108. data/lib/fog/vcloud/mock_data_classes.rb +77 -11
  109. data/lib/fog/vcloud/terremark/ecloud.rb +22 -7
  110. data/lib/fog/vcloud/terremark/ecloud/models/backup_internet_service.rb +60 -0
  111. data/lib/fog/vcloud/terremark/ecloud/models/backup_internet_services.rb +36 -0
  112. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +28 -13
  113. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +2 -2
  114. data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +1 -1
  115. data/lib/fog/vcloud/terremark/ecloud/models/network.rb +4 -1
  116. data/lib/fog/vcloud/terremark/ecloud/models/server.rb +5 -5
  117. data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +6 -2
  118. data/lib/fog/vcloud/terremark/ecloud/requests/add_backup_internet_service.rb +111 -0
  119. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +2 -4
  120. data/lib/fog/vcloud/terremark/ecloud/requests/add_node.rb +1 -3
  121. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +39 -27
  122. data/lib/fog/vcloud/terremark/ecloud/requests/configure_network.rb +1 -2
  123. data/lib/fog/vcloud/terremark/ecloud/requests/configure_network_ip.rb +21 -6
  124. data/lib/fog/vcloud/terremark/ecloud/requests/delete_vapp.rb +2 -1
  125. data/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb +34 -17
  126. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_extensions.rb +12 -10
  127. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ip.rb +15 -10
  128. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +1 -12
  129. data/lib/fog/zerigo.rb +15 -0
  130. data/lib/fog/zerigo/bin.rb +25 -0
  131. data/lib/fog/zerigo/dns.rb +96 -0
  132. data/lib/fog/zerigo/parsers/dns/count_hosts.rb +24 -0
  133. data/lib/fog/zerigo/parsers/dns/count_zones.rb +24 -0
  134. data/lib/fog/zerigo/parsers/dns/create_host.rb +26 -0
  135. data/lib/fog/zerigo/parsers/dns/create_zone.rb +26 -0
  136. data/lib/fog/zerigo/parsers/dns/find_hosts.rb +30 -0
  137. data/lib/fog/zerigo/parsers/dns/get_host.rb +26 -0
  138. data/lib/fog/zerigo/parsers/dns/get_zone.rb +56 -0
  139. data/lib/fog/zerigo/parsers/dns/get_zone_stats.rb +26 -0
  140. data/lib/fog/zerigo/parsers/dns/list_hosts.rb +30 -0
  141. data/lib/fog/zerigo/parsers/dns/list_zones.rb +30 -0
  142. data/lib/fog/zerigo/requests/dns/count_hosts.rb +36 -0
  143. data/lib/fog/zerigo/requests/dns/count_zones.rb +36 -0
  144. data/lib/fog/zerigo/requests/dns/create_host.rb +70 -0
  145. data/lib/fog/zerigo/requests/dns/create_zone.rb +97 -0
  146. data/lib/fog/zerigo/requests/dns/delete_host.rb +32 -0
  147. data/lib/fog/zerigo/requests/dns/delete_zone.rb +33 -0
  148. data/lib/fog/zerigo/requests/dns/find_hosts.rb +63 -0
  149. data/lib/fog/zerigo/requests/dns/get_host.rb +47 -0
  150. data/lib/fog/zerigo/requests/dns/get_zone.rb +57 -0
  151. data/lib/fog/zerigo/requests/dns/get_zone_stats.rb +44 -0
  152. data/lib/fog/zerigo/requests/dns/list_hosts.rb +48 -0
  153. data/lib/fog/zerigo/requests/dns/list_zones.rb +53 -0
  154. data/lib/fog/zerigo/requests/dns/update_host.rb +60 -0
  155. data/lib/fog/zerigo/requests/dns/update_zone.rb +78 -0
  156. data/spec/spec_helper.rb +0 -5
  157. data/spec/vcloud/spec_helper.rb +3 -2
  158. data/spec/vcloud/terremark/ecloud/models/backup_internet_service_spec.rb +49 -0
  159. data/spec/vcloud/terremark/ecloud/models/backup_internet_services_spec.rb +29 -0
  160. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +32 -13
  161. data/spec/vcloud/terremark/ecloud/models/network_spec.rb +7 -4
  162. data/spec/vcloud/terremark/ecloud/models/server_spec.rb +20 -0
  163. data/spec/vcloud/terremark/ecloud/requests/add_backup_internet_service_spec.rb +60 -0
  164. data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +3 -0
  165. data/spec/vcloud/terremark/ecloud/requests/configure_network_ip_spec.rb +55 -0
  166. data/spec/vcloud/terremark/ecloud/requests/delete_vapp_spec.rb +9 -0
  167. data/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb +60 -14
  168. data/spec/vcloud/terremark/ecloud/requests/get_network_ip_spec.rb +2 -0
  169. data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +3 -3
  170. data/tests/aws/requests/compute/image_tests.rb +15 -14
  171. data/tests/aws/requests/dns/dns_tests.rb +276 -0
  172. data/tests/brightbox/requests/compute/account_tests.rb +20 -9
  173. data/tests/brightbox/requests/compute/api_client_tests.rb +12 -4
  174. data/tests/brightbox/requests/compute/cloud_ip_tests.rb +20 -6
  175. data/tests/brightbox/requests/compute/image_tests.rb +9 -4
  176. data/tests/brightbox/requests/compute/interface_tests.rb +8 -2
  177. data/tests/brightbox/requests/compute/server_tests.rb +17 -5
  178. data/tests/brightbox/requests/compute/server_type_tests.rb +8 -4
  179. data/tests/brightbox/requests/compute/user_tests.rb +13 -5
  180. data/tests/brightbox/requests/compute/zone_tests.rb +8 -4
  181. data/tests/core/attribute_tests.rb +45 -0
  182. data/tests/helper.rb +0 -2
  183. data/tests/linode/requests/dns/dns_tests.rb +262 -0
  184. data/tests/rackspace/requests/compute/address_tests.rb +1 -1
  185. data/tests/rackspace/requests/compute/image_tests.rb +1 -1
  186. data/tests/slicehost/requests/dns_tests/dns_tests.rb +279 -0
  187. data/tests/zerigo/helper.rb +0 -0
  188. data/tests/zerigo/requests/dns/dns_tests.rb +374 -0
  189. metadata +280 -36
  190. data/spec/compact_progress_bar_formatter.rb +0 -195
  191. data/spec/core/attributes_spec.rb +0 -52
  192. data/spec/lorem.txt +0 -1
@@ -69,6 +69,15 @@ if Fog.mocking?
69
69
  it_should_behave_like "all delete responses"
70
70
  it_should_behave_like "a failed vapp deletion"
71
71
  end
72
+
73
+ context "when the VM's IP has an rnat set" do
74
+ before do
75
+ @mock_vm.network_ip[:rnat] = "1.2.3.4"
76
+ end
77
+
78
+ it_should_behave_like "all delete responses"
79
+ it_should_behave_like "a failed vapp deletion"
80
+ end
72
81
  end
73
82
 
74
83
  context "with a vapp uri that doesn't exist" do
@@ -1,9 +1,9 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
2
 
3
3
  if Fog.mocking?
4
- shared_examples_for "the expected internet service item" do
4
+ shared_examples_for "a basic internet service" do
5
5
  specify { service.should be_an_instance_of Hash }
6
- specify { service.should have(11).attributes }
6
+ specify { service.should have(14).attributes }
7
7
  specify { service[:Name].should == mock_service.name }
8
8
  specify { service[:Id].should == mock_service.object_id.to_s }
9
9
  specify { service[:Href].should == mock_service.href }
@@ -21,6 +21,39 @@ if Fog.mocking?
21
21
  specify { service[:Description].should == mock_service.description }
22
22
  specify { service[:RedirectURL].should == (mock_service.redirect_url || "") }
23
23
  specify { service[:Monitor].should == "" }
24
+ specify { service[:IsBackupService].should == "false" }
25
+ specify { service[:BackupOf].should == "" }
26
+ end
27
+
28
+ shared_examples_for "an internet service without a backup internet service set" do
29
+ specify { service[:BackupService].should be_nil }
30
+ end
31
+
32
+ shared_examples_for "an internet service with a backup internet service set" do
33
+ specify { service[:BackupService].should be_an_instance_of Hash }
34
+ specify { service[:BackupService].should include :Href }
35
+ specify { service[:BackupService][:Href].should == @mock_backup_service.href }
36
+ end
37
+
38
+ shared_examples_for "a backup internet service" do
39
+ specify { service.should be_an_instance_of Hash }
40
+ specify { service.should have(14).attributes }
41
+ specify { service[:Name].should == mock_service.name }
42
+ specify { service[:Id].should == mock_service.object_id.to_s }
43
+ specify { service[:Href].should == mock_service.href }
44
+
45
+ specify { service[:PublicIpAddress].should be_nil }
46
+
47
+ specify { service[:Port].should == mock_service.port.to_s }
48
+ specify { service[:Protocol].should == mock_service.protocol }
49
+ specify { service[:Enabled].should == mock_service.enabled.to_s }
50
+ specify { service[:Timeout].should == mock_service.timeout.to_s }
51
+ specify { service[:Description].should == mock_service.description }
52
+ specify { service[:RedirectURL].should == (mock_service.redirect_url || "") }
53
+ specify { service[:Monitor].should be_nil }
54
+ specify { service[:IsBackupService].should == "true" }
55
+ specify { service[:BackupService].should be_nil }
56
+ specify { service[:BackupOf].should == "" }
24
57
  end
25
58
 
26
59
  describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
@@ -30,7 +63,11 @@ if Fog.mocking?
30
63
 
31
64
  describe "#get_internet_services" do
32
65
  context "with a valid VDC internet_services_uri" do
33
- before { @services = @vcloud.get_internet_services(@mock_vdc_service_collection.href) }
66
+ before do
67
+ @mock_vdc.internet_service_collection.items[3][:backup_service] = @mock_backup_service
68
+ @services = @vcloud.get_internet_services(@mock_vdc_service_collection.href)
69
+ end
70
+
34
71
  subject { @services }
35
72
 
36
73
  it_should_behave_like "all responses"
@@ -41,20 +78,32 @@ if Fog.mocking?
41
78
 
42
79
  it { should have(3).items }
43
80
 
44
- its(:xmlns) { should == "urn:tmrk:eCloudExtensions-2.3" }
45
- its(:xmlns_i) { should == "http://www.w3.org/2001/XMLSchema-instance" }
46
-
47
81
  context "[:InternetService]" do
48
82
  subject { @services.body[:InternetService] }
49
83
 
50
- it { should have(4).items }
84
+ it { should have(5).items }
51
85
 
52
- [0,1,2,3].each do |idx|
86
+ [0,1,2].each do |idx|
53
87
  let(:service) { subject[idx] }
54
- let(:mock_service) { @mock_vdc.public_ip_collection.items.map {|ip| ip.internet_service_collection.items }.flatten[idx] }
88
+ let(:mock_service) { @mock_vdc.internet_service_collection.items[idx] }
55
89
  let(:mock_ip) { mock_service._parent._parent }
56
90
 
57
- it_should_behave_like "the expected internet service item"
91
+ it_should_behave_like "an internet service without a backup internet service set"
92
+ end
93
+
94
+ context "for a service with a backup internet service" do
95
+ let(:service) { subject[3] }
96
+ let(:mock_service) { @mock_vdc.internet_service_collection.items[3] }
97
+ let(:mock_ip) { mock_service._parent._parent }
98
+
99
+ it_should_behave_like "an internet service with a backup internet service set"
100
+ end
101
+
102
+ context "for a backup internet service" do
103
+ let(:service) { subject[4] }
104
+ let(:mock_service) { @mock_vdc.internet_service_collection.backup_internet_services.first }
105
+
106
+ it_should_behave_like "a backup internet service"
58
107
  end
59
108
  end
60
109
  end
@@ -74,9 +123,6 @@ if Fog.mocking?
74
123
 
75
124
  it { should have(3).items }
76
125
 
77
- its(:xmlns) { should == "urn:tmrk:eCloudExtensions-2.3" }
78
- its(:xmlns_i) { should == "http://www.w3.org/2001/XMLSchema-instance" }
79
-
80
126
  context "[:InternetService]" do
81
127
  subject { @services.body[:InternetService] }
82
128
 
@@ -87,7 +133,7 @@ if Fog.mocking?
87
133
  let(:mock_service) { @mock_service_collection.items[idx] }
88
134
  let(:mock_ip) { @mock_public_ip }
89
135
 
90
- it_should_behave_like "the expected internet service item"
136
+ it_should_behave_like "an internet service without a backup internet service set"
91
137
  end
92
138
  end
93
139
  end
@@ -23,6 +23,8 @@ if Fog.mocking?
23
23
  its(:Name) { should == @mock_network_ip.name }
24
24
  its(:Href) { should == @mock_network_ip.href }
25
25
  its(:Id) { should == @mock_network_ip.object_id.to_s }
26
+ its(:RnatAddress) { should == @mock_network_ip.rnat }
27
+ its(:Status) { should == @mock_network_ip.status }
26
28
 
27
29
  end
28
30
  end
@@ -30,16 +30,16 @@ if Fog.mocking?
30
30
 
31
31
  context "one we know is assigned" do
32
32
  let(:address) { @ips.body[:IpAddress][0] }
33
- specify { address.should have(5).keys }
33
+ specify { address.should have(6).keys }
34
34
  specify { address[:Status].should == "Assigned" }
35
35
  specify { address[:Server].should == "Broom 1" }
36
36
  specify { address[:Name].should == "1.2.3.3" }
37
37
  specify { address[:RnatAddress].should == "99.1.2.3" }
38
38
  end
39
39
 
40
- context "one we know is assigned" do
40
+ context "one we know is not assigned" do
41
41
  let(:address) { @ips.body[:IpAddress][100] }
42
- specify { address.should have(4).keys }
42
+ specify { address.should have(5).keys }
43
43
  specify { address[:Status].should == "Available" }
44
44
  specify { address.has_key?(:Server).should be_false }
45
45
  specify { address[:Name].should == "1.2.3.103" }
@@ -2,21 +2,22 @@ Shindo.tests('AWS::Compute | image requests', ['aws']) do
2
2
 
3
3
  @images_format = {
4
4
  'imagesSet' => [{
5
- 'architecture' => String,
6
- 'blockDeviceMapping' =>[],
7
- 'imageId' => String,
8
- 'imageLocation' => String,
9
- 'imageOwnerId' => String,
10
- 'imageState' => String,
11
- 'imageType' => String,
12
- 'isPublic' => Fog::Boolean,
13
- 'kernelId' => String,
14
- 'productCodes' => [],
15
- 'ramdiskId' => String,
16
- 'rootDeviceType' => String,
17
- 'tagSet' => {}
5
+ 'architecture' => String,
6
+ 'blockDeviceMapping' =>[],
7
+ 'imageId' => String,
8
+ 'imageLocation' => String,
9
+ 'imageOwnerId' => String,
10
+ 'imageState' => String,
11
+ 'imageType' => String,
12
+ 'isPublic' => Fog::Boolean,
13
+ 'kernelId' => String,
14
+ 'productCodes' => [],
15
+ 'ramdiskId' => String,
16
+ 'rootDeviceType' => String,
17
+ 'tagSet' => {},
18
+ 'virtualizationType' => String
18
19
  }],
19
- 'requestId' => String,
20
+ 'requestId' => String,
20
21
  }
21
22
 
22
23
  tests('success') do
@@ -0,0 +1,276 @@
1
+ Shindo.tests('AWS::DNS | DNS requests', ['aws', 'dns']) do
2
+
3
+ @org_zone_count = 0
4
+ @zone_id = ''
5
+ @change_id = ''
6
+ @new_records =[]
7
+
8
+ # NOTE: can't use generate_unique_domain() as we do in other DNS provider
9
+ # test suites as AWS charges $1/mth for each domain, even if it exists
10
+ # on AWS for only the time that this test suite runs!!
11
+ # http://aws.amazon.com/route53/pricing/
12
+ @test_domain = 'test-343246324434.com'
13
+
14
+ tests( 'success') do
15
+
16
+ test('see if test domain already exists') do
17
+ pending if Fog.mocking?
18
+
19
+ @zone_id = nil
20
+
21
+ response = AWS[:dns].list_hosted_zones()
22
+ if response.status == 200
23
+ @hosted_zones = response.body['HostedZones']
24
+ end
25
+
26
+ #go through zones for this account
27
+ @hosted_zones.each { |zone|
28
+ domain = zone['Name']
29
+ if domain.chomp == @test_domain
30
+ @zone_id = zone['Id']
31
+ end
32
+ }
33
+
34
+ @zone_id.nil?
35
+ end
36
+
37
+ test('get current zone count') do
38
+ pending if Fog.mocking?
39
+
40
+ @org_zone_count= 0
41
+ response = AWS[:dns].list_hosted_zones()
42
+ if response.status == 200
43
+ @hosted_zones = response.body['HostedZones']
44
+ @org_zone_count = @hosted_zones.count
45
+ end
46
+
47
+ response.status == 200
48
+ end
49
+
50
+ test('create simple zone') {
51
+ pending if Fog.mocking?
52
+
53
+ result = false
54
+
55
+ response = AWS[:dns].create_hosted_zone( @test_domain)
56
+ if response.status == 201
57
+
58
+ zone= response.body['HostedZone']
59
+ change_info = response.body['ChangeInfo']
60
+ ns_servers = response.body['NameServers']
61
+
62
+ if (zone and change_info and ns_servers)
63
+
64
+ @zone_id = zone['Id']
65
+ caller_ref = zone['CallerReference']
66
+ @change_id = change_info['Id']
67
+ status = change_info['Status']
68
+ ns_srv_count = ns_servers.count
69
+
70
+ if (@zone_id.length > 0) and (caller_ref.length > 0) and (@change_id.length > 0) and
71
+ (status.length > 0) and (ns_srv_count > 0)
72
+ result = true
73
+ end
74
+ end
75
+ end
76
+
77
+ result
78
+ }
79
+
80
+ test("get status of change #{@change_id}") {
81
+ pending if Fog.mocking?
82
+
83
+ result = false
84
+ response = AWS[:dns].get_change(@change_id)
85
+ if response.status == 200
86
+ status = response.body['Status']
87
+ if (status == 'PENDING') or (status == 'INSYNC')
88
+ result= true
89
+ end
90
+ end
91
+
92
+ result
93
+ }
94
+
95
+ test("get info on hosted zone #{@zone_id}") {
96
+ pending if Fog.mocking?
97
+
98
+ result = false
99
+
100
+ response = AWS[:dns].get_hosted_zone( @zone_id)
101
+ if response.status == 200
102
+ zone = response.body['HostedZone']
103
+ zone_id = zone['Id']
104
+ name = zone['Name']
105
+ caller_ref = zone['CallerReference']
106
+ ns_servers = response.body['NameServers']
107
+
108
+ # AWS returns domain with a dot at end - so when compare, remove dot
109
+
110
+ if (zone_id == @zone_id) and (name.chop == @test_domain) and (caller_ref.length > 0) and
111
+ (ns_servers.count > 0)
112
+ result = true
113
+ end
114
+ end
115
+
116
+ result
117
+ }
118
+
119
+ test('list zones') do
120
+ pending if Fog.mocking?
121
+
122
+ result = false
123
+
124
+ response = AWS[:dns].list_hosted_zones()
125
+ if response.status == 200
126
+
127
+ zones= response.body['HostedZones']
128
+ if (zones.count > 0)
129
+ zone= zones[0]
130
+ zone_id = zone['Id']
131
+ zone_name= zone['Name']
132
+ caller_ref = zone['CallerReference']
133
+ end
134
+ max_items = response.body['MaxItems']
135
+
136
+ if (zone_id.length > 0) and (zone_name.length > 0) and (caller_ref.length > 0) and
137
+ (max_items > 0)
138
+ result = true
139
+ end
140
+ end
141
+
142
+ result
143
+ end
144
+
145
+ test("add a A resource record") {
146
+ pending if Fog.mocking?
147
+
148
+ result = false
149
+
150
+ # create an A resource record
151
+ host = 'www.' + @test_domain
152
+ ip_addrs = ['1.2.3.4']
153
+ resource_record = { :name => host, :type => 'A', :ttl => 3600, :resource_records => ip_addrs }
154
+ resource_record_set = resource_record.merge( :action => 'CREATE')
155
+
156
+ change_batch = []
157
+ change_batch << resource_record_set
158
+ options = { :comment => 'add A record to domain'}
159
+ response = AWS[:dns].change_resource_record_sets( @zone_id, change_batch, options)
160
+ if response.status == 200
161
+ change_id = response.body['Id']
162
+ status = response.body['Status']
163
+ @new_records << resource_record
164
+ end
165
+
166
+ response.status == 200
167
+ }
168
+
169
+ test("add a CNAME resource record") {
170
+ pending if Fog.mocking?
171
+
172
+ result = false
173
+
174
+ # create a CNAME resource record
175
+ host = 'mail.' + @test_domain
176
+ value = ['www.' + @test_domain]
177
+ resource_record = { :name => host, :type => 'CNAME', :ttl => 3600, :resource_records => value }
178
+ resource_record_set = resource_record.merge( :action => 'CREATE')
179
+
180
+ change_batch = []
181
+ change_batch << resource_record_set
182
+ options = { :comment => 'add CNAME record to domain'}
183
+ response = AWS[:dns].change_resource_record_sets( @zone_id, change_batch, options)
184
+ if response.status == 200
185
+ change_id = response.body['Id']
186
+ status = response.body['Status']
187
+ @new_records << resource_record
188
+ end
189
+
190
+ response.status == 200
191
+ }
192
+
193
+ test("add a MX resource record") {
194
+ pending if Fog.mocking?
195
+
196
+ result = false
197
+
198
+ # create a MX resource record
199
+ host = @test_domain
200
+ value = ['7 mail.' + @test_domain]
201
+ resource_record = { :name => host, :type => 'MX', :ttl => 3600, :resource_records => value }
202
+ resource_record_set = resource_record.merge( :action => 'CREATE')
203
+
204
+ change_batch = []
205
+ change_batch << resource_record_set
206
+ options = { :comment => 'add MX record to domain'}
207
+ response = AWS[:dns].change_resource_record_sets( @zone_id, change_batch, options)
208
+ if response.status == 200
209
+ change_id = response.body['Id']
210
+ status = response.body['Status']
211
+ @new_records << resource_record
212
+ end
213
+
214
+ response.status == 200
215
+ }
216
+
217
+ test("list resource records") {
218
+ pending if Fog.mocking?
219
+
220
+ # get resource records for zone
221
+ response = AWS[:dns].list_resource_record_sets( @zone_id)
222
+ if response.status == 200
223
+ record_sets= response.body['ResourceRecordSets']
224
+ num_records= record_sets.count
225
+ end
226
+
227
+ response.status == 200
228
+ }
229
+
230
+ test("delete #{@new_records.count} resource records") {
231
+ pending if Fog.mocking?
232
+
233
+ result = true
234
+
235
+ change_batch = []
236
+ @new_records.each { |record|
237
+ resource_record_set = record.merge( :action => 'DELETE')
238
+ change_batch << resource_record_set
239
+ }
240
+ options = { :comment => 'remove records from domain'}
241
+ response = AWS[:dns].change_resource_record_sets( @zone_id, change_batch, options)
242
+ if response.status != 200
243
+ result = false
244
+ break
245
+ end
246
+
247
+ result
248
+ }
249
+
250
+ test("delete hosted zone #{@zone_id}") {
251
+ pending if Fog.mocking?
252
+
253
+ response = AWS[:dns].delete_hosted_zone( @zone_id)
254
+
255
+ response.status == 200
256
+ }
257
+
258
+ end
259
+
260
+
261
+ tests( 'failure') do
262
+ tests('create hosted zone using invalid domain name').raises(Excon::Errors::BadRequest) do
263
+ pending if Fog.mocking?
264
+ response = AWS[:dns].create_hosted_zone('invalid-domain')
265
+ end
266
+
267
+ tests('get hosted zone using invalid ID').raises(Excon::Errors::BadRequest) do
268
+ pending if Fog.mocking?
269
+ zone_id = 'dummy-id'
270
+ response = AWS[:dns].get_hosted_zone(zone_id)
271
+ end
272
+
273
+ end
274
+
275
+
276
+ end