fog 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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