fog 1.0.0 → 1.1.0

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 (232) hide show
  1. data/README.rdoc +2 -9
  2. data/Rakefile +3 -2
  3. data/docs/_layouts/default.html +13 -13
  4. data/docs/about/contributing.markdown +1 -1
  5. data/docs/about/getting_started.markdown +28 -3
  6. data/docs/dns/index.markdown +4 -4
  7. data/docs/index.markdown +2 -10
  8. data/docs/public/css/fog.css +14 -1
  9. data/docs/storage/index.markdown +2 -2
  10. data/fog.gemspec +6 -5
  11. data/lib/fog.rb +1 -1
  12. data/lib/fog/aws.rb +26 -1
  13. data/lib/fog/aws/auto_scaling.rb +3 -1
  14. data/lib/fog/aws/cloud_formation.rb +3 -0
  15. data/lib/fog/aws/cloud_watch.rb +17 -1
  16. data/lib/fog/aws/compute.rb +50 -18
  17. data/lib/fog/aws/elb.rb +4 -2
  18. data/lib/fog/aws/emr.rb +133 -0
  19. data/lib/fog/aws/models/cloud_watch/alarm.rb +12 -0
  20. data/lib/fog/aws/models/cloud_watch/alarm_data.rb +39 -0
  21. data/lib/fog/aws/models/cloud_watch/alarm_datum.rb +66 -0
  22. data/lib/fog/aws/models/cloud_watch/alarm_histories.rb +18 -0
  23. data/lib/fog/aws/models/cloud_watch/alarm_history.rb +16 -0
  24. data/lib/fog/aws/models/cloud_watch/alarms.rb +30 -0
  25. data/lib/fog/aws/models/compute/addresses.rb +1 -1
  26. data/lib/fog/aws/models/compute/key_pairs.rb +1 -1
  27. data/lib/fog/aws/models/compute/security_groups.rb +1 -1
  28. data/lib/fog/aws/models/compute/server.rb +4 -2
  29. data/lib/fog/aws/models/compute/servers.rb +1 -1
  30. data/lib/fog/aws/models/compute/snapshots.rb +1 -1
  31. data/lib/fog/aws/models/compute/spot_request.rb +21 -4
  32. data/lib/fog/aws/models/compute/spot_requests.rb +45 -1
  33. data/lib/fog/aws/models/compute/volumes.rb +1 -1
  34. data/lib/fog/aws/models/elb/load_balancer.rb +2 -0
  35. data/lib/fog/aws/models/storage/file.rb +1 -1
  36. data/lib/fog/aws/parsers/cdn/get_invalidation_list.rb +0 -1
  37. data/lib/fog/aws/parsers/cloud_formation/update_stack.rb +19 -0
  38. data/lib/fog/aws/parsers/cloud_watch/delete_alarms.rb +26 -0
  39. data/lib/fog/aws/parsers/cloud_watch/describe_alarm_history.rb +40 -0
  40. data/lib/fog/aws/parsers/cloud_watch/describe_alarms.rb +73 -0
  41. data/lib/fog/aws/parsers/cloud_watch/describe_alarms_for_metric.rb +71 -0
  42. data/lib/fog/aws/parsers/cloud_watch/disable_alarm_actions.rb +26 -0
  43. data/lib/fog/aws/parsers/cloud_watch/enable_alarm_actions.rb +26 -0
  44. data/lib/fog/aws/parsers/cloud_watch/get_metric_statistics.rb +1 -0
  45. data/lib/fog/aws/parsers/cloud_watch/put_metric_alarm.rb +26 -0
  46. data/lib/fog/aws/parsers/cloud_watch/set_alarm_state.rb +26 -0
  47. data/lib/fog/aws/parsers/compute/spot_instance_requests.rb +2 -2
  48. data/lib/fog/aws/parsers/emr/add_instance_groups.rb +28 -0
  49. data/lib/fog/aws/parsers/emr/add_job_flow_steps.rb +17 -0
  50. data/lib/fog/aws/parsers/emr/describe_job_flows.rb +140 -0
  51. data/lib/fog/aws/parsers/emr/modify_instance_groups.rb +17 -0
  52. data/lib/fog/aws/parsers/emr/run_job_flow.rb +19 -0
  53. data/lib/fog/aws/parsers/emr/set_termination_protection.rb +17 -0
  54. data/lib/fog/aws/parsers/emr/terminate_job_flows.rb +17 -0
  55. data/lib/fog/aws/rds.rb +3 -1
  56. data/lib/fog/aws/requests/cloud_formation/create_stack.rb +6 -0
  57. data/lib/fog/aws/requests/cloud_formation/update_stack.rb +62 -0
  58. data/lib/fog/aws/requests/cloud_watch/delete_alarms.rb +30 -0
  59. data/lib/fog/aws/requests/cloud_watch/describe_alarm_history.rb +33 -0
  60. data/lib/fog/aws/requests/cloud_watch/describe_alarms.rb +38 -0
  61. data/lib/fog/aws/requests/cloud_watch/describe_alarms_for_metric.rb +39 -0
  62. data/lib/fog/aws/requests/cloud_watch/disable_alarm_actions.rb +30 -0
  63. data/lib/fog/aws/requests/cloud_watch/enable_alarm_actions.rb +30 -0
  64. data/lib/fog/aws/requests/cloud_watch/put_metric_alarm.rb +84 -0
  65. data/lib/fog/aws/requests/cloud_watch/set_alarm_state.rb +31 -0
  66. data/lib/fog/aws/requests/compute/authorize_security_group_ingress.rb +141 -36
  67. data/lib/fog/aws/requests/compute/create_snapshot.rb +2 -3
  68. data/lib/fog/aws/requests/compute/create_tags.rb +5 -3
  69. data/lib/fog/aws/requests/compute/create_volume.rb +0 -1
  70. data/lib/fog/aws/requests/compute/delete_security_group.rb +25 -0
  71. data/lib/fog/aws/requests/compute/delete_tags.rb +3 -4
  72. data/lib/fog/aws/requests/compute/describe_addresses.rb +2 -2
  73. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +5 -2
  74. data/lib/fog/aws/requests/compute/describe_images.rb +6 -9
  75. data/lib/fog/aws/requests/compute/describe_instances.rb +17 -8
  76. data/lib/fog/aws/requests/compute/describe_key_pairs.rb +2 -2
  77. data/lib/fog/aws/requests/compute/describe_regions.rb +2 -2
  78. data/lib/fog/aws/requests/compute/describe_reserved_instances.rb +1 -1
  79. data/lib/fog/aws/requests/compute/describe_security_groups.rb +2 -2
  80. data/lib/fog/aws/requests/compute/describe_snapshots.rb +7 -5
  81. data/lib/fog/aws/requests/compute/describe_volumes.rb +5 -4
  82. data/lib/fog/aws/requests/compute/modify_image_attribute.rb +32 -0
  83. data/lib/fog/aws/requests/compute/modify_instance_attribute.rb +1 -1
  84. data/lib/fog/aws/requests/compute/purchase_reserved_instances_offering.rb +1 -1
  85. data/lib/fog/aws/requests/compute/register_image.rb +0 -1
  86. data/lib/fog/aws/requests/compute/revoke_security_group_ingress.rb +41 -29
  87. data/lib/fog/aws/requests/compute/run_instances.rb +1 -2
  88. data/lib/fog/aws/requests/elb/create_load_balancer.rb +1 -1
  89. data/lib/fog/aws/requests/elb/create_load_balancer_listeners.rb +1 -1
  90. data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +1 -1
  91. data/lib/fog/aws/requests/elb/describe_instance_health.rb +2 -2
  92. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +3 -3
  93. data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +2 -2
  94. data/lib/fog/aws/requests/emr/add_instance_groups.rb +46 -0
  95. data/lib/fog/aws/requests/emr/add_job_flow_steps.rb +49 -0
  96. data/lib/fog/aws/requests/emr/describe_job_flows.rb +108 -0
  97. data/lib/fog/aws/requests/emr/modify_instance_groups.rb +40 -0
  98. data/lib/fog/aws/requests/emr/run_job_flow.rb +106 -0
  99. data/lib/fog/aws/requests/emr/set_termination_protection.rb +39 -0
  100. data/lib/fog/aws/requests/emr/terminate_job_flows.rb +37 -0
  101. data/lib/fog/aws/requests/iam/get_server_certificate.rb +5 -7
  102. data/lib/fog/aws/requests/iam/upload_server_certificate.rb +1 -0
  103. data/lib/fog/aws/requests/simpledb/get_attributes.rb +2 -2
  104. data/lib/fog/aws/requests/simpledb/select.rb +1 -1
  105. data/lib/fog/aws/requests/storage/copy_object.rb +1 -1
  106. data/lib/fog/aws/requests/storage/get_object_url.rb +2 -2
  107. data/lib/fog/aws/requests/storage/hash_to_acl.rb +35 -25
  108. data/lib/fog/aws/ses.rb +1 -1
  109. data/lib/fog/aws/simpledb.rb +2 -0
  110. data/lib/fog/aws/sns.rb +3 -1
  111. data/lib/fog/aws/sqs.rb +4 -2
  112. data/lib/fog/aws/storage.rb +12 -3
  113. data/lib/fog/bin.rb +1 -1
  114. data/lib/fog/bin/aws.rb +8 -4
  115. data/lib/fog/bin/bluebox.rb +2 -2
  116. data/lib/fog/bin/brightbox.rb +1 -1
  117. data/lib/fog/bin/dnsimple.rb +1 -1
  118. data/lib/fog/bin/dnsmadeeasy.rb +1 -1
  119. data/lib/fog/bin/ecloud.rb +1 -1
  120. data/lib/fog/bin/glesys.rb +1 -1
  121. data/lib/fog/bin/go_grid.rb +1 -1
  122. data/lib/fog/bin/google.rb +1 -1
  123. data/lib/fog/bin/libvirt.rb +1 -1
  124. data/lib/fog/bin/linode.rb +2 -2
  125. data/lib/fog/bin/local.rb +1 -1
  126. data/lib/fog/bin/new_servers.rb +1 -1
  127. data/lib/fog/bin/ninefold.rb +2 -2
  128. data/lib/fog/bin/openstack.rb +1 -1
  129. data/lib/fog/bin/rackspace.rb +3 -3
  130. data/lib/fog/bin/slicehost.rb +1 -1
  131. data/lib/fog/bin/stormondemand.rb +1 -1
  132. data/lib/fog/bin/virtual_box.rb +1 -1
  133. data/lib/fog/bin/vmfusion.rb +1 -1
  134. data/lib/fog/bin/voxel.rb +1 -1
  135. data/lib/fog/bin/zerigo.rb +1 -1
  136. data/lib/fog/brightbox/models/compute/account.rb +1 -1
  137. data/lib/fog/compute/models/server.rb +1 -2
  138. data/lib/fog/core/attributes.rb +5 -5
  139. data/lib/fog/core/connection.rb +1 -1
  140. data/lib/fog/core/deprecation.rb +2 -2
  141. data/lib/fog/core/logger.rb +8 -3
  142. data/lib/fog/core/mock.rb +4 -0
  143. data/lib/fog/core/provider.rb +7 -2
  144. data/lib/fog/core/service.rb +8 -2
  145. data/lib/fog/dnsmadeeasy/models/dns/record.rb +3 -2
  146. data/lib/fog/dynect/dns.rb +25 -3
  147. data/lib/fog/ecloud/compute.rb +2 -6
  148. data/lib/fog/go_grid/requests/compute/grid_server_power.rb +1 -1
  149. data/lib/fog/google/models/storage/file.rb +1 -1
  150. data/lib/fog/google/requests/storage/get_object_url.rb +2 -2
  151. data/lib/fog/google/storage.rb +1 -1
  152. data/lib/fog/libvirt/models/compute/uri.rb +7 -3
  153. data/lib/fog/linode/models/compute/server.rb +10 -0
  154. data/lib/fog/ninefold/models/storage/file.rb +8 -6
  155. data/lib/fog/ninefold/models/storage/files.rb +3 -2
  156. data/lib/fog/ninefold/requests/storage/head_namespace.rb +20 -0
  157. data/lib/fog/ninefold/storage.rb +4 -2
  158. data/lib/fog/openstack.rb +4 -3
  159. data/lib/fog/openstack/compute.rb +8 -5
  160. data/lib/fog/openstack/models/compute/server.rb +10 -1
  161. data/lib/fog/openstack/requests/compute/create_server.rb +6 -8
  162. data/lib/fog/rackspace/load_balancers.rb +1 -0
  163. data/lib/fog/rackspace/models/dns/callback.rb +1 -1
  164. data/lib/fog/rackspace/models/dns/record.rb +1 -1
  165. data/lib/fog/rackspace/models/dns/zone.rb +1 -1
  166. data/lib/fog/slicehost/dns.rb +1 -0
  167. data/lib/fog/slicehost/models/dns/record.rb +7 -3
  168. data/lib/fog/slicehost/models/dns/zone.rb +1 -1
  169. data/lib/fog/slicehost/parsers/dns/create_record.rb +8 -2
  170. data/lib/fog/slicehost/parsers/dns/get_record.rb +17 -5
  171. data/lib/fog/slicehost/parsers/dns/get_records.rb +10 -2
  172. data/lib/fog/slicehost/requests/dns/get_record.rb +1 -1
  173. data/lib/fog/slicehost/requests/dns/get_records.rb +7 -8
  174. data/lib/fog/slicehost/requests/dns/update_record.rb +43 -0
  175. data/lib/fog/storm_on_demand/models/compute/balancers.rb +1 -1
  176. data/lib/fog/storm_on_demand/models/compute/configs.rb +1 -1
  177. data/lib/fog/storm_on_demand/models/compute/images.rb +1 -1
  178. data/lib/fog/storm_on_demand/models/compute/servers.rb +1 -1
  179. data/lib/fog/storm_on_demand/models/compute/templates.rb +1 -1
  180. data/lib/fog/terremark/vcloud.rb +1 -1
  181. data/lib/fog/vsphere/compute.rb +40 -23
  182. data/lib/fog/vsphere/models/compute/server.rb +1 -0
  183. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +36 -4
  184. data/lib/fog/zerigo/dns.rb +14 -3
  185. data/lib/fog/zerigo/models/dns/record.rb +1 -1
  186. data/lib/fog/zerigo/models/dns/records.rb +5 -0
  187. data/lib/fog/zerigo/models/dns/zones.rb +2 -2
  188. data/lib/fog/zerigo/requests/dns/count_hosts.rb +20 -1
  189. data/lib/fog/zerigo/requests/dns/count_zones.rb +12 -1
  190. data/lib/fog/zerigo/requests/dns/create_host.rb +67 -1
  191. data/lib/fog/zerigo/requests/dns/create_zone.rb +44 -1
  192. data/lib/fog/zerigo/requests/dns/delete_host.rb +19 -0
  193. data/lib/fog/zerigo/requests/dns/delete_zone.rb +17 -0
  194. data/lib/fog/zerigo/requests/dns/find_hosts.rb +22 -1
  195. data/lib/fog/zerigo/requests/dns/get_host.rb +18 -1
  196. data/lib/fog/zerigo/requests/dns/get_zone.rb +19 -2
  197. data/lib/fog/zerigo/requests/dns/get_zone_stats.rb +23 -0
  198. data/lib/fog/zerigo/requests/dns/list_hosts.rb +20 -1
  199. data/lib/fog/zerigo/requests/dns/list_zones.rb +15 -0
  200. data/lib/fog/zerigo/requests/dns/update_host.rb +20 -1
  201. data/lib/fog/zerigo/requests/dns/update_zone.rb +20 -1
  202. data/tests/aws/models/cloud_watch/alarm_data_tests.rb +42 -0
  203. data/tests/aws/models/cloud_watch/alarm_history_tests.rb +22 -0
  204. data/tests/aws/models/compute/security_group_tests.rb +15 -10
  205. data/tests/aws/models/elb/model_tests.rb +4 -4
  206. data/tests/aws/requests/cloud_formation/stack_tests.rb +14 -0
  207. data/tests/aws/requests/cloud_watch/list_metrics_test.rb +5 -5
  208. data/tests/aws/requests/compute/image_tests.rb +33 -2
  209. data/tests/aws/requests/compute/instance_tests.rb +16 -1
  210. data/tests/aws/requests/compute/security_group_tests.rb +251 -32
  211. data/tests/aws/requests/compute/tag_tests.rb +42 -2
  212. data/tests/aws/requests/emr/helper.rb +172 -0
  213. data/tests/aws/requests/emr/instance_group_tests.rb +106 -0
  214. data/tests/aws/requests/emr/job_flow_tests.rb +88 -0
  215. data/tests/aws/requests/iam/server_certificate_tests.rb +20 -7
  216. data/tests/aws/requests/storage/bucket_tests.rb +82 -54
  217. data/tests/aws/requests/storage/hash_to_acl_tests.rb +173 -0
  218. data/tests/aws/requests/storage/object_tests.rb +44 -24
  219. data/tests/brightbox/requests/compute/helper.rb +15 -6
  220. data/tests/core/attribute_tests.rb +29 -0
  221. data/tests/core/mocking_tests.rb +60 -0
  222. data/tests/dns/models/record_tests.rb +4 -2
  223. data/tests/dns/models/records_tests.rb +4 -2
  224. data/tests/dns/models/zone_tests.rb +3 -1
  225. data/tests/dns/models/zones_tests.rb +4 -2
  226. data/tests/helper.rb +4 -0
  227. data/tests/rackspace/requests/dns/dns_tests.rb +16 -12
  228. data/tests/rackspace/requests/dns/records_tests.rb +13 -11
  229. data/tests/slicehost/requests/dns/dns_tests.rb +58 -11
  230. data/tests/vsphere/compute_tests.rb +18 -10
  231. data/tests/vsphere/requests/compute/vm_clone_tests.rb +1 -1
  232. metadata +214 -221
@@ -18,7 +18,7 @@ module Fog
18
18
  # * response<~Excon::Response>:
19
19
  # * 'status'<~Integer> - 200 for success
20
20
  #
21
- def update_host( host_id, options = {})
21
+ def update_host(host_id, options = {})
22
22
 
23
23
  optional_tags= ''
24
24
  options.each { |option, value|
@@ -47,6 +47,25 @@ module Fog
47
47
  end
48
48
 
49
49
  end
50
+
51
+ class Mock # :nodoc:all
52
+ def update_host(host_id, options = {})
53
+ host = find_host(host_id)
54
+
55
+ response = Excon::Response.new
56
+
57
+ if host
58
+ options.each { |k, v| host[k.to_s] = v } # Deal with symbols in requests but strings in responses.
59
+ host['updated-at'] = Time.now
60
+
61
+ response.status = 200
62
+ else
63
+ response.status = 404
64
+ end
65
+
66
+ response
67
+ end
68
+ end
50
69
  end
51
70
  end
52
71
  end
@@ -24,7 +24,7 @@ module Fog
24
24
  # ==== Returns
25
25
  # * response<~Excon::Response>:
26
26
  # * 'status'<~Integer> - 200 for success
27
- def update_zone( zone_id, options = {})
27
+ def update_zone(zone_id, options = {})
28
28
 
29
29
  optional_tags= ''
30
30
  options.each { |option, value|
@@ -65,6 +65,25 @@ module Fog
65
65
  end
66
66
 
67
67
  end
68
+
69
+ class Mock # :nodoc:all
70
+ def update_zone(zone_id, options = {})
71
+ zone = find_by_zone_id(zone_id)
72
+
73
+ response = Excon::Response.new
74
+
75
+ if zone
76
+ options.each { |k, v| zone[k.to_s] = v } # Deal with symbols in requests but strings in responses.
77
+ zone['updated-at'] = Time.now
78
+
79
+ response.status = 200
80
+ else
81
+ response.status = 404
82
+ end
83
+
84
+ response
85
+ end
86
+ end
68
87
  end
69
88
  end
70
89
  end
@@ -0,0 +1,42 @@
1
+ Shindo.tests("AWS::CloudWatch | alarm_data", ['aws', 'cloudwatch']) do
2
+
3
+ pending if Fog.mocking?
4
+
5
+ tests('success') do
6
+ tests("#all").succeeds do
7
+ Fog::AWS[:cloud_watch].alarm_data.all
8
+ end
9
+
10
+ alarm_name_prefix = {'AlarmNamePrefix'=>'tmp'}
11
+ tests("#all_by_prefix").succeeds do
12
+ Fog::AWS[:cloud_watch].alarm_data.all(alarm_name_prefix)
13
+ end
14
+
15
+ namespace = 'AWS/EC2'
16
+ metric_name = 'CPUUtilization'
17
+
18
+ tests("#get").succeeds do
19
+ Fog::AWS[:cloud_watch].alarm_data.get(namespace, metric_name).to_json
20
+ end
21
+
22
+ new_attributes = {
23
+ :alarm_name => 'tmp-alarm',
24
+ :comparison_operator => 'GreaterThanOrEqualToThreshold',
25
+ :evaluation_periods => 1,
26
+ :metric_name => 'tmp-metric-alarm',
27
+ :namespace => 'fog-0.11.0',
28
+ :period => 60,
29
+ :statistic => 'Sum',
30
+ :threshold => 5
31
+ }
32
+ tests('#new').returns(new_attributes) do
33
+ Fog::AWS[:cloud_watch].alarm_data.new(new_attributes).attributes
34
+ end
35
+
36
+ tests('#create').returns(new_attributes) do
37
+ Fog::AWS[:cloud_watch].alarm_data.create(new_attributes).attributes
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,22 @@
1
+ Shindo.tests("AWS::CloudWatch | alarm_histories", ['aws', 'cloudwatch']) do
2
+
3
+ pending if Fog.mocking?
4
+
5
+ tests('success') do
6
+ tests("#all").succeeds do
7
+ Fog::AWS[:cloud_watch].alarm_histories.all
8
+ end
9
+
10
+ new_attributes = {
11
+ :alarm_name => 'tmp-alarm',
12
+ :end_date => '',
13
+ :history_item_type => 'StateUpdate',
14
+ :max_records => 1,
15
+ :start_date => ''
16
+ }
17
+ tests('#new').returns(new_attributes) do
18
+ Fog::AWS[:cloud_watch].alarm_histories.new(new_attributes).attributes
19
+ end
20
+ end
21
+
22
+ end
@@ -2,17 +2,10 @@ Shindo.tests("Fog::Compute[:aws] | security_group", ['aws']) do
2
2
 
3
3
  model_tests(Fog::Compute[:aws].security_groups, {:description => 'foggroupdescription', :name => 'foggroupname'}, true)
4
4
 
5
- tests("a group with trailing whitespace") do
6
- @group = Fog::Compute[:aws].security_groups.create(:name => "foggroup with spaces ", :description => " fog group desc ")
7
- test("name is correct") do
8
- @group.name == "foggroup with spaces "
9
- end
10
-
11
- test("description is correct") do
12
- @group.description == " fog group desc "
13
- end
5
+ tests("authorize and revoke helpers") do
6
+ @group = Fog::Compute[:aws].security_groups.create(:name => "foggroup", :description => "fog group desc")
14
7
 
15
- @other_group = Fog::Compute[:aws].security_groups.create(:name => 'other group', :description => 'another group')
8
+ @other_group = Fog::Compute[:aws].security_groups.create(:name => 'fog other group', :description => 'another fog group')
16
9
 
17
10
  test("authorize access by another security group") do
18
11
  @group.authorize_group_and_owner(@other_group.name)
@@ -26,6 +19,18 @@ Shindo.tests("Fog::Compute[:aws] | security_group", ['aws']) do
26
19
  @group.ip_permissions.empty?
27
20
  end
28
21
 
22
+ test("authorize access to a port range") do
23
+ @group.authorize_port_range(5000..6000)
24
+ @group.reload
25
+ @group.ip_permissions.size == 1
26
+ end
27
+
28
+ test("revoke access to a port range") do
29
+ @group.revoke_port_range(5000..6000)
30
+ @group.reload
31
+ @group.ip_permissions.empty?
32
+ end
33
+
29
34
  @other_group.destroy
30
35
  @group.destroy
31
36
  end
@@ -33,7 +33,7 @@ Shindo.tests('AWS::ELB | models', ['aws', 'elb']) do
33
33
 
34
34
  tests('create') do
35
35
  tests('without availability zones') do
36
- elb = Fog::AWS[:elb].load_balancers.create(:id => elb_id)
36
+ elb = Fog::AWS[:elb].load_balancers.create(:id => elb_id, :availability_zones => @availability_zones)
37
37
  tests("availability zones are correct").returns(@availability_zones.sort) { elb.availability_zones.sort }
38
38
  tests("dns names is set").returns(true) { elb.dns_name.is_a?(String) }
39
39
  tests("created_at is set").returns(true) { Time === elb.created_at }
@@ -54,7 +54,7 @@ Shindo.tests('AWS::ELB | models', ['aws', 'elb']) do
54
54
  # Need to sleep here for IAM changes to propgate
55
55
  tests('with ListenerDescriptions') do
56
56
  @certificate = Fog::AWS[:iam].upload_server_certificate(AWS::IAM::SERVER_CERT_PUBLIC_KEY, AWS::IAM::SERVER_CERT_PRIVATE_KEY, @key_name).body['Certificate']
57
- sleep(8) unless Fog.mocking?
57
+ sleep(10) unless Fog.mocking?
58
58
  listeners = [{
59
59
  'Listener' => {
60
60
  'LoadBalancerPort' => 2030, 'InstancePort' => 2030, 'Protocol' => 'HTTP'
@@ -67,7 +67,7 @@ Shindo.tests('AWS::ELB | models', ['aws', 'elb']) do
67
67
  },
68
68
  'PolicyNames' => []
69
69
  }]
70
- elb3 = Fog::AWS[:elb].load_balancers.create(:id => "#{elb_id}-3", 'ListenerDescriptions' => listeners)
70
+ elb3 = Fog::AWS[:elb].load_balancers.create(:id => "#{elb_id}-3", 'ListenerDescriptions' => listeners, :availability_zones => @availability_zones)
71
71
  tests('there are 2 listeners').returns(2) { elb3.listeners.count }
72
72
  tests('instance_port is 2030').returns(2030) { elb3.listeners.first.instance_port }
73
73
  tests('lb_port is 2030').returns(2030) { elb3.listeners.first.lb_port }
@@ -81,7 +81,7 @@ Shindo.tests('AWS::ELB | models', ['aws', 'elb']) do
81
81
  'Listener' => {
82
82
  'LoadBalancerPort' => 443, 'InstancePort' => 80, 'Protocol' => 'HTTPS', "SSLCertificateId" => "fakecert"}
83
83
  }]
84
- Fog::AWS[:elb].load_balancers.create(:id => "#{elb_id}-4", "ListenerDescriptions" => listeners)
84
+ Fog::AWS[:elb].load_balancers.create(:id => "#{elb_id}-4", "ListenerDescriptions" => listeners, :availability_zones => @availability_zones)
85
85
  end
86
86
  end
87
87
 
@@ -18,6 +18,11 @@ Shindo.tests('AWS::CloudFormation | stack requests', ['aws', 'cloudformation'])
18
18
  'StackId' => String
19
19
  }
20
20
 
21
+ @update_stack_format = {
22
+ 'RequestId' => String,
23
+ 'StackId' => String
24
+ }
25
+
21
26
  @get_template_format = {
22
27
  'RequestId' => String,
23
28
  'TemplateBody' => String
@@ -103,6 +108,15 @@ Shindo.tests('AWS::CloudFormation | stack requests', ['aws', 'cloudformation'])
103
108
  ).body
104
109
  end
105
110
 
111
+ tests("update_stack('#{@stack_name}', 'TemplateURL' => '#{@template_url}', Parameters => {'KeyName' => 'cloudformation'})").formats(@update_stack_format) do
112
+ pending if Fog.mocking?
113
+ Fog::AWS[:cloud_formation].update_stack(
114
+ @stack_name,
115
+ 'TemplateURL' => @template_url,
116
+ 'Parameters' => {'KeyName' => 'cloudformation'}
117
+ ).body
118
+ end
119
+
106
120
  tests("get_template('#{@stack_name})").formats(@get_template_format) do
107
121
  pending if Fog.mocking?
108
122
  Fog::AWS[:cloud_formation].get_template(@stack_name).body
@@ -3,9 +3,9 @@ Shindo.tests('AWS::CloudWatch | metric requests', ['aws', 'cloudwatch']) do
3
3
  tests('success') do
4
4
  @metrics_list_format = {
5
5
  'ListMetricsResult' => {
6
- 'Metrics' =>
6
+ 'Metrics' =>
7
7
  [{
8
- 'Dimensions' =>
8
+ 'Dimensions' =>
9
9
  [{
10
10
  'Name' => String,
11
11
  'Value' => String
@@ -20,9 +20,9 @@ Shindo.tests('AWS::CloudWatch | metric requests', ['aws', 'cloudwatch']) do
20
20
  @instanceId = 'i-2f3eab59'
21
21
  @dimension_filtered_metrics_list_format = {
22
22
  'ListMetricsResult' => {
23
- 'Metrics' =>
23
+ 'Metrics' =>
24
24
  [{
25
- 'Dimensions' =>
25
+ 'Dimensions' =>
26
26
  [{
27
27
  'Name' => 'InstanceId',
28
28
  'Value' => @instanceId
@@ -61,4 +61,4 @@ Shindo.tests('AWS::CloudWatch | metric requests', ['aws', 'cloudwatch']) do
61
61
  end
62
62
  end
63
63
  end
64
- end
64
+ end
@@ -31,6 +31,11 @@ Shindo.tests('Fog::Compute[:aws] | image requests', ['aws']) do
31
31
  'requestId' => String
32
32
  }
33
33
 
34
+ @modify_image_attribute_format = {
35
+ 'return' => Fog::Boolean,
36
+ 'requestId' => String
37
+ }
38
+
34
39
  tests('success') do
35
40
  # the result for this is HUGE and relatively uninteresting...
36
41
  # tests("#describe_images").formats(@images_format) do
@@ -39,6 +44,8 @@ Shindo.tests('Fog::Compute[:aws] | image requests', ['aws']) do
39
44
  @image_id = 'ami-1aad5273'
40
45
 
41
46
  if Fog.mocking?
47
+ @other_account = Fog::Compute::AWS.new(:aws_access_key_id => 'other', :aws_secret_access_key => 'account')
48
+
42
49
  tests("#register_image").formats(@register_image_format) do
43
50
  @image = Fog::Compute[:aws].register_image('image', 'image', '/dev/sda1').body
44
51
  end
@@ -53,6 +60,26 @@ Shindo.tests('Fog::Compute[:aws] | image requests', ['aws']) do
53
60
  tests("#describe_images('state' => 'available')").formats(@describe_images_format) do
54
61
  Fog::Compute[:aws].describe_images('state' => 'available').body
55
62
  end
63
+
64
+ tests("other_account#describe_images('image-id' => '#{@image_id}')").returns([]) do
65
+ @other_account.describe_images('image-id' => @image_id).body['imagesSet']
66
+ end
67
+
68
+ tests("#modify_image_attribute('#{@image_id}', 'Add.UserId' => ['#{@other_account.data[:owner_id]}'])").formats(@modify_image_attribute_format) do
69
+ Fog::Compute[:aws].modify_image_attribute(@image_id, { 'Add.UserId' => [@other_account.data[:owner_id]] }).body
70
+ end
71
+
72
+ tests("other_account#describe_images('image-id' => '#{@image_id}')").returns([@image_id]) do
73
+ @other_account.describe_images('image-id' => @image_id).body['imagesSet'].map {|i| i['imageId'] }
74
+ end
75
+
76
+ tests("#modify_image_attribute('#{@image_id}', 'Remove.UserId' => ['#{@other_account.data[:owner_id]}'])").formats(@modify_image_attribute_format) do
77
+ Fog::Compute[:aws].modify_image_attribute(@image_id, { 'Remove.UserId' => [@other_account.data[:owner_id]] }).body
78
+ end
79
+
80
+ tests("other_account#describe_images('image-id' => '#{@image_id}')").returns([]) do
81
+ @other_account.describe_images('image-id' => @image_id).body['imagesSet']
82
+ end
56
83
  end
57
84
 
58
85
  tests("#describe_images('image-id' => '#{@image_id}')").formats(@describe_images_format) do
@@ -67,10 +94,14 @@ Shindo.tests('Fog::Compute[:aws] | image requests', ['aws']) do
67
94
  end
68
95
 
69
96
  tests('failure') do
70
- pending if Fog.mocking?
71
-
72
97
  tests("#modify_image_attribute(nil, { 'Add.Group' => ['all'] })").raises(ArgumentError) do
73
98
  Fog::Compute[:aws].modify_image_attribute(nil, { 'Add.Group' => ['all'] }).body
74
99
  end
100
+
101
+ tests("#modify_image_attribute('ami-00000000', { 'Add.UserId' => ['123456789012'] })").raises(Fog::Compute::AWS::NotFound) do
102
+ pending unless Fog.mocking?
103
+
104
+ Fog::Compute[:aws].modify_image_attribute('ami-00000000', { 'Add.UserId' => ['123456789012'] }).body
105
+ end
75
106
  end
76
107
  end
@@ -126,7 +126,7 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
126
126
 
127
127
  @instance_id = nil
128
128
  # Use a MS Windows AMI to test #get_password_data
129
- @windows_ami = 'ami-1cbd4475' # Microsoft Windows Server 2008 R2 Base 64-bit
129
+ @windows_ami = 'ami-62bd440b' # Amazon Public Images - Basic Microsoft Windows Server 2008 64-bit
130
130
 
131
131
  # Create a keypair for decrypting the password
132
132
  key_name = 'fog-test-key'
@@ -138,6 +138,21 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
138
138
  data
139
139
  end
140
140
 
141
+ if Fog.mocking?
142
+ # Ensure the new instance doesn't show up in mock describe_instances right away
143
+ tests("#describe_instances").formats(@describe_instances_format) do
144
+ body = Fog::Compute[:aws].describe_instances.body
145
+ instance_ids = body['reservationSet'].map {|reservation| reservation['instancesSet'].map {|instance| instance['instanceId'] } }.flatten
146
+ test("doesn't include the new instance") { !instance_ids.include?(@instance_id) }
147
+ body
148
+ end
149
+
150
+ # But querying for the new instance directly should raise an error
151
+ tests("#describe_instances('instance-id' => '#{@instance_id}')").raises(Fog::Compute::AWS::NotFound) do
152
+ Fog::Compute[:aws].describe_instances('instance-id' => @instance_id)
153
+ end
154
+ end
155
+
141
156
  server = Fog::Compute[:aws].servers.get(@instance_id)
142
157
  while server.nil? do
143
158
  # It may take a moment to get the server after launching it
@@ -25,25 +25,207 @@ Shindo.tests('Fog::Compute[:aws] | security group requests', ['aws']) do
25
25
  Fog::Compute[:aws].create_security_group('fog_security_group', 'tests group').body
26
26
  end
27
27
 
28
- tests("#authorize_security_group_ingress('fog_security_group', {'FromPort' => 80, 'IpProtocol' => 'tcp', 'toPort' => 80})").formats(AWS::Compute::Formats::BASIC) do
29
- Fog::Compute[:aws].authorize_security_group_ingress(
30
- 'fog_security_group',
28
+ tests("#create_security_group('fog_security_group_two', 'tests group')").formats(AWS::Compute::Formats::BASIC) do
29
+ Fog::Compute[:aws].create_security_group('fog_security_group_two', 'tests group').body
30
+ end
31
+
32
+ to_be_revoked = []
33
+ expected_permissions = []
34
+
35
+ permission = { 'SourceSecurityGroupName' => 'default' }
36
+ tests("#authorize_security_group_ingress('fog_security_group', #{permission.inspect})").formats(AWS::Compute::Formats::BASIC) do
37
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', permission).body
38
+ end
39
+
40
+ to_be_revoked.push([permission, expected_permissions.dup])
41
+
42
+ expected_permissions = [
43
+ {"groups"=>[{"groupName"=>"default", "userId"=>@owner_id}],
44
+ "fromPort"=>1,
45
+ "ipRanges"=>[],
46
+ "ipProtocol"=>"tcp",
47
+ "toPort"=>65535},
48
+ {"groups"=>[{"groupName"=>"default", "userId"=>@owner_id}],
49
+ "fromPort"=>1,
50
+ "ipRanges"=>[],
51
+ "ipProtocol"=>"udp",
52
+ "toPort"=>65535},
53
+ {"groups"=>[{"groupName"=>"default", "userId"=>@owner_id}],
54
+ "fromPort"=>-1,
55
+ "ipRanges"=>[],
56
+ "ipProtocol"=>"icmp",
57
+ "toPort"=>-1}
58
+ ]
59
+
60
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
61
+ array_differences(expected_permissions, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
62
+ end
63
+
64
+ permission = { 'SourceSecurityGroupName' => 'fog_security_group_two', 'SourceSecurityGroupOwnerId' => @owner_id }
65
+ tests("#authorize_security_group_ingress('fog_security_group', #{permission.inspect})").formats(AWS::Compute::Formats::BASIC) do
66
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', permission).body
67
+ end
68
+
69
+ to_be_revoked.push([permission, expected_permissions.dup])
70
+
71
+ expected_permissions = [
72
+ {"groups"=>
73
+ [{"userId"=>@owner_id, "groupName"=>"default"},
74
+ {"userId"=>@owner_id, "groupName"=>"fog_security_group_two"}],
75
+ "ipRanges"=>[],
76
+ "ipProtocol"=>"tcp",
77
+ "fromPort"=>1,
78
+ "toPort"=>65535},
79
+ {"groups"=>
80
+ [{"userId"=>@owner_id, "groupName"=>"default"},
81
+ {"userId"=>@owner_id, "groupName"=>"fog_security_group_two"}],
82
+ "ipRanges"=>[],
83
+ "ipProtocol"=>"udp",
84
+ "fromPort"=>1,
85
+ "toPort"=>65535},
86
+ {"groups"=>
87
+ [{"userId"=>@owner_id, "groupName"=>"default"},
88
+ {"userId"=>@owner_id, "groupName"=>"fog_security_group_two"}],
89
+ "ipRanges"=>[],
90
+ "ipProtocol"=>"icmp",
91
+ "fromPort"=>-1,
92
+ "toPort"=>-1}
93
+ ]
94
+
95
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
96
+ array_differences(expected_permissions, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
97
+ end
98
+
99
+ permission = { 'IpProtocol' => 'tcp', 'FromPort' => '22', 'ToPort' => '22' }
100
+ tests("#authorize_security_group_ingress('fog_security_group', #{permission.inspect})").formats(AWS::Compute::Formats::BASIC) do
101
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', permission).body
102
+ end
103
+
104
+ to_be_revoked.push([permission, expected_permissions.dup])
105
+
106
+ # previous did nothing
107
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
108
+ array_differences(expected_permissions, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
109
+ end
110
+
111
+ permission = { 'IpProtocol' => 'tcp', 'FromPort' => '22', 'ToPort' => '22', 'CidrIp' => '10.0.0.0/8' }
112
+ tests("#authorize_security_group_ingress('fog_security_group', #{permission.inspect})").formats(AWS::Compute::Formats::BASIC) do
113
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', permission).body
114
+ end
115
+
116
+ to_be_revoked.push([permission, expected_permissions.dup])
117
+
118
+ expected_permissions += [
119
+ {"groups"=>[],
120
+ "ipRanges"=>[{"cidrIp"=>"10.0.0.0/8"}],
121
+ "ipProtocol"=>"tcp",
122
+ "fromPort"=>22,
123
+ "toPort"=>22}
124
+ ]
125
+
126
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
127
+ array_differences(expected_permissions, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
128
+ end
129
+
130
+ # authorize with nested IpProtocol without IpRanges or Groups does nothing
131
+ permissions = {
132
+ 'IpPermissions' => [
133
+ { 'IpProtocol' => 'tcp', 'FromPort' => '22', 'ToPort' => '22' }
134
+ ]
135
+ }
136
+ tests("#authorize_security_group_ingress('fog_security_group', #{permissions.inspect})").formats(AWS::Compute::Formats::BASIC) do
137
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', permissions).body
138
+ end
139
+
140
+ to_be_revoked.push([permissions, expected_permissions.dup])
141
+
142
+ # previous did nothing
143
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
144
+ array_differences(expected_permissions, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
145
+ end
146
+
147
+ # authorize with nested IpProtocol with IpRanges
148
+ permissions = {
149
+ 'IpPermissions' => [
31
150
  {
32
- 'FromPort' => 80,
33
- 'IpProtocol' => 'tcp',
34
- 'ToPort' => 80,
151
+ 'IpProtocol' => 'tcp', 'FromPort' => '80', 'ToPort' => '80',
152
+ 'IpRanges' => [{ 'CidrIp' => '192.168.0.0/24' }]
35
153
  }
36
- ).body
154
+ ]
155
+ }
156
+ tests("#authorize_security_group_ingress('fog_security_group', #{permissions.inspect})").formats(AWS::Compute::Formats::BASIC) do
157
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', permissions).body
37
158
  end
38
159
 
39
- tests("#authorize_security_group_ingress('fog_security_group', {'SourceSecurityGroupName' => 'fog_security_group', 'SourceSecurityGroupOwnerId' => '#{@owner_id}'})").formats(AWS::Compute::Formats::BASIC) do
40
- Fog::Compute[:aws].authorize_security_group_ingress(
41
- 'fog_security_group',
160
+ to_be_revoked.push([permissions, expected_permissions.dup])
161
+
162
+ expected_permissions += [
163
+ {"groups"=>[],
164
+ "ipRanges"=>[{"cidrIp"=>"192.168.0.0/24"}],
165
+ "ipProtocol"=>"tcp",
166
+ "fromPort"=>80,
167
+ "toPort"=>80}
168
+ ]
169
+
170
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
171
+ array_differences(expected_permissions, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
172
+ end
173
+
174
+ # authorize with nested IpProtocol with Groups
175
+ permissions = {
176
+ 'IpPermissions' => [
42
177
  {
43
- 'SourceSecurityGroupName' => 'fog_security_group',
44
- 'SourceSecurityGroupOwnerId' => @owner_id
178
+ 'IpProtocol' => 'tcp', 'FromPort' => '8000', 'ToPort' => '8000',
179
+ 'Groups' => [{ 'GroupName' => 'fog_security_group_two' }]
180
+ }
181
+ ]
182
+ }
183
+ tests("#authorize_security_group_ingress('fog_security_group', #{permissions.inspect})").formats(AWS::Compute::Formats::BASIC) do
184
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', permissions).body
185
+ end
186
+
187
+ to_be_revoked.push([permissions, expected_permissions.dup])
188
+
189
+ expected_permissions += [
190
+ {"groups"=>[{"userId"=>@owner_id, "groupName"=>"fog_security_group_two"}],
191
+ "ipRanges"=>[],
192
+ "ipProtocol"=>"tcp",
193
+ "fromPort"=>8000,
194
+ "toPort"=>8000}
195
+ ]
196
+
197
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
198
+ array_differences(expected_permissions, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
199
+ end
200
+
201
+ # authorize with nested IpProtocol with IpRanges and Groups
202
+ # try integers on this one instead of strings
203
+ permissions = {
204
+ 'IpPermissions' => [
205
+ {
206
+ 'IpProtocol' => 'tcp', 'FromPort' => 9000, 'ToPort' => 9000,
207
+ 'IpRanges' => [{ 'CidrIp' => '172.16.0.0/24' }],
208
+ 'Groups' => [{ 'GroupName' => 'fog_security_group_two' }]
45
209
  }
46
- ).body
210
+ ]
211
+ }
212
+ tests("#authorize_security_group_ingress('fog_security_group', #{permissions.inspect})").formats(AWS::Compute::Formats::BASIC) do
213
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', permissions).body
214
+ end
215
+
216
+ to_be_revoked.push([permissions, expected_permissions.dup])
217
+
218
+ expected_permissions += [
219
+ {"groups"=>
220
+ [{"userId"=>@owner_id, "groupName"=>"fog_security_group_two"}],
221
+ "ipRanges"=>[{"cidrIp"=>"172.16.0.0/24"}],
222
+ "ipProtocol"=>"tcp",
223
+ "fromPort"=>9000,
224
+ "toPort"=>9000}
225
+ ]
226
+
227
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
228
+ array_differences(expected_permissions, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
47
229
  end
48
230
 
49
231
  tests("#describe_security_groups").formats(@security_groups_format) do
@@ -54,36 +236,29 @@ Shindo.tests('Fog::Compute[:aws] | security group requests', ['aws']) do
54
236
  Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body
55
237
  end
56
238
 
57
- tests("#revoke_security_group_ingress('fog_security_group', {'FromPort' => 80, 'IpProtocol' => 'tcp', 'toPort' => 80})").formats(AWS::Compute::Formats::BASIC) do
58
- Fog::Compute[:aws].revoke_security_group_ingress(
59
- 'fog_security_group',
60
- {
61
- 'FromPort' => 80,
62
- 'IpProtocol' => 'tcp',
63
- 'ToPort' => 80,
64
- }
65
- ).body
66
- end
239
+ to_be_revoked.reverse.each do |permission, expected_permissions_after|
240
+ tests("#revoke_security_group_ingress('fog_security_group', #{permission.inspect})").formats(AWS::Compute::Formats::BASIC) do
241
+ Fog::Compute[:aws].revoke_security_group_ingress('fog_security_group', permission).body
242
+ end
67
243
 
68
- tests("#revoke_security_group_ingress('fog_security_group', {'SourceSecurityGroupName' => 'fog_security_group', 'SourceSecurityGroupOwnerId' => '#{@owner_id}'})").formats(AWS::Compute::Formats::BASIC) do
69
- Fog::Compute[:aws].revoke_security_group_ingress(
70
- 'fog_security_group',
71
- {
72
- 'GroupName' => 'fog_security_group',
73
- 'SourceSecurityGroupName' => 'fog_security_group',
74
- 'SourceSecurityGroupOwnerId' => @owner_id
75
- }
76
- ).body
244
+ tests("#describe_security_groups('group-name' => 'fog_security_group')").returns([]) do
245
+ array_differences(expected_permissions_after, Fog::Compute[:aws].describe_security_groups('group-name' => 'fog_security_group').body['securityGroupInfo'].first['ipPermissions'])
246
+ end
77
247
  end
78
248
 
79
249
  tests("#delete_security_group('fog_security_group')").formats(AWS::Compute::Formats::BASIC) do
80
250
  Fog::Compute[:aws].delete_security_group('fog_security_group').body
81
251
  end
82
252
 
253
+ tests("#delete_security_group('fog_security_group_two')").formats(AWS::Compute::Formats::BASIC) do
254
+ Fog::Compute[:aws].delete_security_group('fog_security_group_two').body
255
+ end
256
+
83
257
  end
84
258
  tests('failure') do
85
259
 
86
260
  @security_group = Fog::Compute[:aws].security_groups.create(:description => 'tests group', :name => 'fog_security_group')
261
+ @other_security_group = Fog::Compute[:aws].security_groups.create(:description => 'tests group', :name => 'fog_other_security_group')
87
262
 
88
263
  tests("duplicate #create_security_group(#{@security_group.name}, #{@security_group.description})").raises(Fog::Compute::AWS::Error) do
89
264
  Fog::Compute[:aws].create_security_group(@security_group.name, @security_group.description)
@@ -110,6 +285,46 @@ Shindo.tests('Fog::Compute[:aws] | security group requests', ['aws']) do
110
285
  )
111
286
  end
112
287
 
288
+ tests("#authorize_security_group_ingress('fog_security_group', {'IpPermissions' => [{'IpProtocol' => 'tcp', 'FromPort' => 80, 'ToPort' => 80, 'IpRanges' => [{'CidrIp' => '10.0.0.0/8'}]}]})").formats(AWS::Compute::Formats::BASIC) do
289
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', {'IpPermissions' => [{'IpProtocol' => 'tcp', 'FromPort' => 80, 'ToPort' => 80, 'IpRanges' => [{'CidrIp' => '10.0.0.0/8'}]}]}).body
290
+ end
291
+
292
+ tests("#authorize_security_group_ingress('fog_security_group', {'IpPermissions' => [{'IpProtocol' => 'tcp', 'FromPort' => 80, 'ToPort' => 80, 'IpRanges' => [{'CidrIp' => '10.0.0.0/8'}]}]})").raises(Fog::Compute::AWS::Error) do
293
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', {'IpPermissions' => [{'IpProtocol' => 'tcp', 'FromPort' => 80, 'ToPort' => 80, 'IpRanges' => [{'CidrIp' => '10.0.0.0/8'}]}]})
294
+ end
295
+
296
+ tests("#authorize_security_group_ingress('fog_security_group', {'IpPermissions' => [{'Groups' => [{'GroupName' => '#{@other_security_group.name}'}], 'FromPort' => 80, 'ToPort' => 80, 'IpProtocol' => 'tcp'}]})").formats(AWS::Compute::Formats::BASIC) do
297
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', {'IpPermissions' => [{'Groups' => [{'GroupName' => @other_security_group.name}], 'FromPort' => 80, 'ToPort' => 80, 'IpProtocol' => 'tcp'}]}).body
298
+ end
299
+
300
+ tests("#delete_security_group('#{@other_security_group.name}')").raises(Fog::Compute::AWS::Error) do
301
+ Fog::Compute[:aws].delete_security_group(@other_security_group.name)
302
+ end
303
+
304
+ broken_params = [
305
+ {},
306
+ { "IpProtocol" => "what" },
307
+ { "IpProtocol" => "tcp" },
308
+ { "IpProtocol" => "what", "FromPort" => 1, "ToPort" => 1 },
309
+ ]
310
+ broken_params += broken_params.map do |broken_params_item|
311
+ { "IpPermissions" => [broken_params_item] }
312
+ end
313
+ broken_params += [
314
+ { "IpPermissions" => [] },
315
+ { "IpPermissions" => nil }
316
+ ]
317
+
318
+ broken_params.each do |broken_params_item|
319
+ tests("#authorize_security_group_ingress('fog_security_group', #{broken_params_item.inspect})").raises(Fog::Compute::AWS::Error) do
320
+ Fog::Compute[:aws].authorize_security_group_ingress('fog_security_group', broken_params_item)
321
+ end
322
+
323
+ tests("#revoke_security_group_ingress('fog_security_group', #{broken_params_item.inspect})").raises(Fog::Compute::AWS::Error) do
324
+ Fog::Compute[:aws].revoke_security_group_ingress('fog_security_group', broken_params_item)
325
+ end
326
+ end
327
+
113
328
  tests("#revoke_security_group_ingress('not_a_group_name', {'FromPort' => 80, 'IpProtocol' => 'tcp', 'toPort' => 80})").raises(Fog::Compute::AWS::NotFound) do
114
329
  Fog::Compute[:aws].revoke_security_group_ingress(
115
330
  'not_a_group_name',
@@ -136,7 +351,11 @@ Shindo.tests('Fog::Compute[:aws] | security group requests', ['aws']) do
136
351
  end
137
352
 
138
353
  @security_group.destroy
354
+ @other_security_group.destroy
139
355
 
356
+ tests("#delete_security_group('default')").raises(Fog::Compute::AWS::Error) do
357
+ Fog::Compute[:aws].delete_security_group('default')
358
+ end
140
359
  end
141
360
 
142
361
  end