fog 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -9
- data/Rakefile +3 -2
- data/docs/_layouts/default.html +13 -13
- data/docs/about/contributing.markdown +1 -1
- data/docs/about/getting_started.markdown +28 -3
- data/docs/dns/index.markdown +4 -4
- data/docs/index.markdown +2 -10
- data/docs/public/css/fog.css +14 -1
- data/docs/storage/index.markdown +2 -2
- data/fog.gemspec +6 -5
- data/lib/fog.rb +1 -1
- data/lib/fog/aws.rb +26 -1
- data/lib/fog/aws/auto_scaling.rb +3 -1
- data/lib/fog/aws/cloud_formation.rb +3 -0
- data/lib/fog/aws/cloud_watch.rb +17 -1
- data/lib/fog/aws/compute.rb +50 -18
- data/lib/fog/aws/elb.rb +4 -2
- data/lib/fog/aws/emr.rb +133 -0
- data/lib/fog/aws/models/cloud_watch/alarm.rb +12 -0
- data/lib/fog/aws/models/cloud_watch/alarm_data.rb +39 -0
- data/lib/fog/aws/models/cloud_watch/alarm_datum.rb +66 -0
- data/lib/fog/aws/models/cloud_watch/alarm_histories.rb +18 -0
- data/lib/fog/aws/models/cloud_watch/alarm_history.rb +16 -0
- data/lib/fog/aws/models/cloud_watch/alarms.rb +30 -0
- data/lib/fog/aws/models/compute/addresses.rb +1 -1
- data/lib/fog/aws/models/compute/key_pairs.rb +1 -1
- data/lib/fog/aws/models/compute/security_groups.rb +1 -1
- data/lib/fog/aws/models/compute/server.rb +4 -2
- data/lib/fog/aws/models/compute/servers.rb +1 -1
- data/lib/fog/aws/models/compute/snapshots.rb +1 -1
- data/lib/fog/aws/models/compute/spot_request.rb +21 -4
- data/lib/fog/aws/models/compute/spot_requests.rb +45 -1
- data/lib/fog/aws/models/compute/volumes.rb +1 -1
- data/lib/fog/aws/models/elb/load_balancer.rb +2 -0
- data/lib/fog/aws/models/storage/file.rb +1 -1
- data/lib/fog/aws/parsers/cdn/get_invalidation_list.rb +0 -1
- data/lib/fog/aws/parsers/cloud_formation/update_stack.rb +19 -0
- data/lib/fog/aws/parsers/cloud_watch/delete_alarms.rb +26 -0
- data/lib/fog/aws/parsers/cloud_watch/describe_alarm_history.rb +40 -0
- data/lib/fog/aws/parsers/cloud_watch/describe_alarms.rb +73 -0
- data/lib/fog/aws/parsers/cloud_watch/describe_alarms_for_metric.rb +71 -0
- data/lib/fog/aws/parsers/cloud_watch/disable_alarm_actions.rb +26 -0
- data/lib/fog/aws/parsers/cloud_watch/enable_alarm_actions.rb +26 -0
- data/lib/fog/aws/parsers/cloud_watch/get_metric_statistics.rb +1 -0
- data/lib/fog/aws/parsers/cloud_watch/put_metric_alarm.rb +26 -0
- data/lib/fog/aws/parsers/cloud_watch/set_alarm_state.rb +26 -0
- data/lib/fog/aws/parsers/compute/spot_instance_requests.rb +2 -2
- data/lib/fog/aws/parsers/emr/add_instance_groups.rb +28 -0
- data/lib/fog/aws/parsers/emr/add_job_flow_steps.rb +17 -0
- data/lib/fog/aws/parsers/emr/describe_job_flows.rb +140 -0
- data/lib/fog/aws/parsers/emr/modify_instance_groups.rb +17 -0
- data/lib/fog/aws/parsers/emr/run_job_flow.rb +19 -0
- data/lib/fog/aws/parsers/emr/set_termination_protection.rb +17 -0
- data/lib/fog/aws/parsers/emr/terminate_job_flows.rb +17 -0
- data/lib/fog/aws/rds.rb +3 -1
- data/lib/fog/aws/requests/cloud_formation/create_stack.rb +6 -0
- data/lib/fog/aws/requests/cloud_formation/update_stack.rb +62 -0
- data/lib/fog/aws/requests/cloud_watch/delete_alarms.rb +30 -0
- data/lib/fog/aws/requests/cloud_watch/describe_alarm_history.rb +33 -0
- data/lib/fog/aws/requests/cloud_watch/describe_alarms.rb +38 -0
- data/lib/fog/aws/requests/cloud_watch/describe_alarms_for_metric.rb +39 -0
- data/lib/fog/aws/requests/cloud_watch/disable_alarm_actions.rb +30 -0
- data/lib/fog/aws/requests/cloud_watch/enable_alarm_actions.rb +30 -0
- data/lib/fog/aws/requests/cloud_watch/put_metric_alarm.rb +84 -0
- data/lib/fog/aws/requests/cloud_watch/set_alarm_state.rb +31 -0
- data/lib/fog/aws/requests/compute/authorize_security_group_ingress.rb +141 -36
- data/lib/fog/aws/requests/compute/create_snapshot.rb +2 -3
- data/lib/fog/aws/requests/compute/create_tags.rb +5 -3
- data/lib/fog/aws/requests/compute/create_volume.rb +0 -1
- data/lib/fog/aws/requests/compute/delete_security_group.rb +25 -0
- data/lib/fog/aws/requests/compute/delete_tags.rb +3 -4
- data/lib/fog/aws/requests/compute/describe_addresses.rb +2 -2
- data/lib/fog/aws/requests/compute/describe_availability_zones.rb +5 -2
- data/lib/fog/aws/requests/compute/describe_images.rb +6 -9
- data/lib/fog/aws/requests/compute/describe_instances.rb +17 -8
- data/lib/fog/aws/requests/compute/describe_key_pairs.rb +2 -2
- data/lib/fog/aws/requests/compute/describe_regions.rb +2 -2
- data/lib/fog/aws/requests/compute/describe_reserved_instances.rb +1 -1
- data/lib/fog/aws/requests/compute/describe_security_groups.rb +2 -2
- data/lib/fog/aws/requests/compute/describe_snapshots.rb +7 -5
- data/lib/fog/aws/requests/compute/describe_volumes.rb +5 -4
- data/lib/fog/aws/requests/compute/modify_image_attribute.rb +32 -0
- data/lib/fog/aws/requests/compute/modify_instance_attribute.rb +1 -1
- data/lib/fog/aws/requests/compute/purchase_reserved_instances_offering.rb +1 -1
- data/lib/fog/aws/requests/compute/register_image.rb +0 -1
- data/lib/fog/aws/requests/compute/revoke_security_group_ingress.rb +41 -29
- data/lib/fog/aws/requests/compute/run_instances.rb +1 -2
- data/lib/fog/aws/requests/elb/create_load_balancer.rb +1 -1
- data/lib/fog/aws/requests/elb/create_load_balancer_listeners.rb +1 -1
- data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +1 -1
- data/lib/fog/aws/requests/elb/describe_instance_health.rb +2 -2
- data/lib/fog/aws/requests/elb/describe_load_balancers.rb +3 -3
- data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +2 -2
- data/lib/fog/aws/requests/emr/add_instance_groups.rb +46 -0
- data/lib/fog/aws/requests/emr/add_job_flow_steps.rb +49 -0
- data/lib/fog/aws/requests/emr/describe_job_flows.rb +108 -0
- data/lib/fog/aws/requests/emr/modify_instance_groups.rb +40 -0
- data/lib/fog/aws/requests/emr/run_job_flow.rb +106 -0
- data/lib/fog/aws/requests/emr/set_termination_protection.rb +39 -0
- data/lib/fog/aws/requests/emr/terminate_job_flows.rb +37 -0
- data/lib/fog/aws/requests/iam/get_server_certificate.rb +5 -7
- data/lib/fog/aws/requests/iam/upload_server_certificate.rb +1 -0
- data/lib/fog/aws/requests/simpledb/get_attributes.rb +2 -2
- data/lib/fog/aws/requests/simpledb/select.rb +1 -1
- data/lib/fog/aws/requests/storage/copy_object.rb +1 -1
- data/lib/fog/aws/requests/storage/get_object_url.rb +2 -2
- data/lib/fog/aws/requests/storage/hash_to_acl.rb +35 -25
- data/lib/fog/aws/ses.rb +1 -1
- data/lib/fog/aws/simpledb.rb +2 -0
- data/lib/fog/aws/sns.rb +3 -1
- data/lib/fog/aws/sqs.rb +4 -2
- data/lib/fog/aws/storage.rb +12 -3
- data/lib/fog/bin.rb +1 -1
- data/lib/fog/bin/aws.rb +8 -4
- data/lib/fog/bin/bluebox.rb +2 -2
- data/lib/fog/bin/brightbox.rb +1 -1
- data/lib/fog/bin/dnsimple.rb +1 -1
- data/lib/fog/bin/dnsmadeeasy.rb +1 -1
- data/lib/fog/bin/ecloud.rb +1 -1
- data/lib/fog/bin/glesys.rb +1 -1
- data/lib/fog/bin/go_grid.rb +1 -1
- data/lib/fog/bin/google.rb +1 -1
- data/lib/fog/bin/libvirt.rb +1 -1
- data/lib/fog/bin/linode.rb +2 -2
- data/lib/fog/bin/local.rb +1 -1
- data/lib/fog/bin/new_servers.rb +1 -1
- data/lib/fog/bin/ninefold.rb +2 -2
- data/lib/fog/bin/openstack.rb +1 -1
- data/lib/fog/bin/rackspace.rb +3 -3
- data/lib/fog/bin/slicehost.rb +1 -1
- data/lib/fog/bin/stormondemand.rb +1 -1
- data/lib/fog/bin/virtual_box.rb +1 -1
- data/lib/fog/bin/vmfusion.rb +1 -1
- data/lib/fog/bin/voxel.rb +1 -1
- data/lib/fog/bin/zerigo.rb +1 -1
- data/lib/fog/brightbox/models/compute/account.rb +1 -1
- data/lib/fog/compute/models/server.rb +1 -2
- data/lib/fog/core/attributes.rb +5 -5
- data/lib/fog/core/connection.rb +1 -1
- data/lib/fog/core/deprecation.rb +2 -2
- data/lib/fog/core/logger.rb +8 -3
- data/lib/fog/core/mock.rb +4 -0
- data/lib/fog/core/provider.rb +7 -2
- data/lib/fog/core/service.rb +8 -2
- data/lib/fog/dnsmadeeasy/models/dns/record.rb +3 -2
- data/lib/fog/dynect/dns.rb +25 -3
- data/lib/fog/ecloud/compute.rb +2 -6
- data/lib/fog/go_grid/requests/compute/grid_server_power.rb +1 -1
- data/lib/fog/google/models/storage/file.rb +1 -1
- data/lib/fog/google/requests/storage/get_object_url.rb +2 -2
- data/lib/fog/google/storage.rb +1 -1
- data/lib/fog/libvirt/models/compute/uri.rb +7 -3
- data/lib/fog/linode/models/compute/server.rb +10 -0
- data/lib/fog/ninefold/models/storage/file.rb +8 -6
- data/lib/fog/ninefold/models/storage/files.rb +3 -2
- data/lib/fog/ninefold/requests/storage/head_namespace.rb +20 -0
- data/lib/fog/ninefold/storage.rb +4 -2
- data/lib/fog/openstack.rb +4 -3
- data/lib/fog/openstack/compute.rb +8 -5
- data/lib/fog/openstack/models/compute/server.rb +10 -1
- data/lib/fog/openstack/requests/compute/create_server.rb +6 -8
- data/lib/fog/rackspace/load_balancers.rb +1 -0
- data/lib/fog/rackspace/models/dns/callback.rb +1 -1
- data/lib/fog/rackspace/models/dns/record.rb +1 -1
- data/lib/fog/rackspace/models/dns/zone.rb +1 -1
- data/lib/fog/slicehost/dns.rb +1 -0
- data/lib/fog/slicehost/models/dns/record.rb +7 -3
- data/lib/fog/slicehost/models/dns/zone.rb +1 -1
- data/lib/fog/slicehost/parsers/dns/create_record.rb +8 -2
- data/lib/fog/slicehost/parsers/dns/get_record.rb +17 -5
- data/lib/fog/slicehost/parsers/dns/get_records.rb +10 -2
- data/lib/fog/slicehost/requests/dns/get_record.rb +1 -1
- data/lib/fog/slicehost/requests/dns/get_records.rb +7 -8
- data/lib/fog/slicehost/requests/dns/update_record.rb +43 -0
- data/lib/fog/storm_on_demand/models/compute/balancers.rb +1 -1
- data/lib/fog/storm_on_demand/models/compute/configs.rb +1 -1
- data/lib/fog/storm_on_demand/models/compute/images.rb +1 -1
- data/lib/fog/storm_on_demand/models/compute/servers.rb +1 -1
- data/lib/fog/storm_on_demand/models/compute/templates.rb +1 -1
- data/lib/fog/terremark/vcloud.rb +1 -1
- data/lib/fog/vsphere/compute.rb +40 -23
- data/lib/fog/vsphere/models/compute/server.rb +1 -0
- data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +36 -4
- data/lib/fog/zerigo/dns.rb +14 -3
- data/lib/fog/zerigo/models/dns/record.rb +1 -1
- data/lib/fog/zerigo/models/dns/records.rb +5 -0
- data/lib/fog/zerigo/models/dns/zones.rb +2 -2
- data/lib/fog/zerigo/requests/dns/count_hosts.rb +20 -1
- data/lib/fog/zerigo/requests/dns/count_zones.rb +12 -1
- data/lib/fog/zerigo/requests/dns/create_host.rb +67 -1
- data/lib/fog/zerigo/requests/dns/create_zone.rb +44 -1
- data/lib/fog/zerigo/requests/dns/delete_host.rb +19 -0
- data/lib/fog/zerigo/requests/dns/delete_zone.rb +17 -0
- data/lib/fog/zerigo/requests/dns/find_hosts.rb +22 -1
- data/lib/fog/zerigo/requests/dns/get_host.rb +18 -1
- data/lib/fog/zerigo/requests/dns/get_zone.rb +19 -2
- data/lib/fog/zerigo/requests/dns/get_zone_stats.rb +23 -0
- data/lib/fog/zerigo/requests/dns/list_hosts.rb +20 -1
- data/lib/fog/zerigo/requests/dns/list_zones.rb +15 -0
- data/lib/fog/zerigo/requests/dns/update_host.rb +20 -1
- data/lib/fog/zerigo/requests/dns/update_zone.rb +20 -1
- data/tests/aws/models/cloud_watch/alarm_data_tests.rb +42 -0
- data/tests/aws/models/cloud_watch/alarm_history_tests.rb +22 -0
- data/tests/aws/models/compute/security_group_tests.rb +15 -10
- data/tests/aws/models/elb/model_tests.rb +4 -4
- data/tests/aws/requests/cloud_formation/stack_tests.rb +14 -0
- data/tests/aws/requests/cloud_watch/list_metrics_test.rb +5 -5
- data/tests/aws/requests/compute/image_tests.rb +33 -2
- data/tests/aws/requests/compute/instance_tests.rb +16 -1
- data/tests/aws/requests/compute/security_group_tests.rb +251 -32
- data/tests/aws/requests/compute/tag_tests.rb +42 -2
- data/tests/aws/requests/emr/helper.rb +172 -0
- data/tests/aws/requests/emr/instance_group_tests.rb +106 -0
- data/tests/aws/requests/emr/job_flow_tests.rb +88 -0
- data/tests/aws/requests/iam/server_certificate_tests.rb +20 -7
- data/tests/aws/requests/storage/bucket_tests.rb +82 -54
- data/tests/aws/requests/storage/hash_to_acl_tests.rb +173 -0
- data/tests/aws/requests/storage/object_tests.rb +44 -24
- data/tests/brightbox/requests/compute/helper.rb +15 -6
- data/tests/core/attribute_tests.rb +29 -0
- data/tests/core/mocking_tests.rb +60 -0
- data/tests/dns/models/record_tests.rb +4 -2
- data/tests/dns/models/records_tests.rb +4 -2
- data/tests/dns/models/zone_tests.rb +3 -1
- data/tests/dns/models/zones_tests.rb +4 -2
- data/tests/helper.rb +4 -0
- data/tests/rackspace/requests/dns/dns_tests.rb +16 -12
- data/tests/rackspace/requests/dns/records_tests.rb +13 -11
- data/tests/slicehost/requests/dns/dns_tests.rb +58 -11
- data/tests/vsphere/compute_tests.rb +18 -10
- data/tests/vsphere/requests/compute/vm_clone_tests.rb +1 -1
- 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(
|
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(
|
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("
|
6
|
-
@group = Fog::Compute[:aws].security_groups.create(:name => "foggroup
|
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(
|
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-
|
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("#
|
29
|
-
Fog::Compute[:aws].
|
30
|
-
|
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
|
-
'
|
34
|
-
'ToPort' => 80,
|
151
|
+
'IpProtocol' => 'tcp', 'FromPort' => '80', 'ToPort' => '80',
|
152
|
+
'IpRanges' => [{ 'CidrIp' => '192.168.0.0/24' }]
|
35
153
|
}
|
36
|
-
|
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
|
-
|
40
|
-
|
41
|
-
|
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
|
-
'
|
44
|
-
'
|
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
|
-
|
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
|
-
|
58
|
-
|
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
|
-
|
69
|
-
|
70
|
-
|
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
|