fog 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +1 -1
- data/.irbrc +5 -10
- data/{README.rdoc → README.md} +66 -61
- data/Rakefile +4 -6
- data/changelog.txt +491 -0
- data/docs/about/users.markdown +1 -0
- data/fog.gemspec +4 -4
- data/lib/fog.rb +1 -1
- data/lib/fog/aws.rb +4 -0
- data/lib/fog/aws/auto_scaling.rb +3 -0
- data/lib/fog/aws/cloud_watch.rb +28 -0
- data/lib/fog/aws/compute.rb +7 -1
- data/lib/fog/aws/elasticache.rb +64 -6
- data/lib/fog/aws/models/auto_scaling/configuration.rb +3 -1
- data/lib/fog/aws/models/auto_scaling/group.rb +10 -9
- data/lib/fog/aws/models/auto_scaling/policies.rb +33 -0
- data/lib/fog/aws/models/auto_scaling/policy.rb +46 -0
- data/lib/fog/aws/models/cloud_watch/alarm.rb +50 -2
- data/lib/fog/aws/models/cloud_watch/alarms.rb +18 -1
- data/lib/fog/aws/models/compute/address.rb +2 -2
- data/lib/fog/aws/models/dns/records.rb +5 -0
- data/lib/fog/aws/models/elasticache/cluster.rb +1 -1
- data/lib/fog/aws/models/iam/users.rb +26 -4
- data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +7 -5
- data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +1 -1
- data/lib/fog/aws/rds.rb +1 -1
- data/lib/fog/aws/requests/auto_scaling/create_auto_scaling_group.rb +8 -0
- data/lib/fog/aws/requests/auto_scaling/create_launch_configuration.rb +1 -2
- data/lib/fog/aws/requests/auto_scaling/delete_auto_scaling_group.rb +10 -2
- data/lib/fog/aws/requests/auto_scaling/delete_launch_configuration.rb +1 -1
- data/lib/fog/aws/requests/auto_scaling/delete_policy.rb +10 -1
- data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_instances.rb +0 -1
- data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +13 -1
- data/lib/fog/aws/requests/auto_scaling/put_scaling_policy.rb +20 -1
- data/lib/fog/aws/requests/auto_scaling/update_auto_scaling_group.rb +1 -1
- data/lib/fog/aws/requests/cloud_watch/delete_alarms.rb +19 -1
- data/lib/fog/aws/requests/cloud_watch/describe_alarms.rb +20 -2
- data/lib/fog/aws/requests/cloud_watch/put_metric_alarm.rb +9 -0
- data/lib/fog/aws/requests/compute/allocate_address.rb +4 -5
- data/lib/fog/aws/requests/compute/create_dhcp_options.rb +6 -5
- data/lib/fog/aws/requests/compute/create_internet_gateway.rb +7 -6
- data/lib/fog/aws/requests/compute/create_subnet.rb +11 -10
- data/lib/fog/aws/requests/compute/create_vpc.rb +8 -7
- data/lib/fog/aws/requests/compute/delete_dhcp_options.rb +1 -0
- data/lib/fog/aws/requests/compute/delete_internet_gateway.rb +1 -0
- data/lib/fog/aws/requests/compute/delete_subnet.rb +1 -0
- data/lib/fog/aws/requests/compute/delete_vpc.rb +2 -1
- data/lib/fog/aws/requests/compute/describe_availability_zones.rb +1 -0
- data/lib/fog/aws/requests/compute/describe_dhcp_options.rb +1 -8
- data/lib/fog/aws/requests/compute/describe_instances.rb +3 -1
- data/lib/fog/aws/requests/compute/describe_internet_gateways.rb +1 -8
- data/lib/fog/aws/requests/compute/describe_subnets.rb +1 -9
- data/lib/fog/aws/requests/compute/describe_vpcs.rb +1 -8
- data/lib/fog/aws/requests/compute/release_address.rb +12 -4
- data/lib/fog/aws/requests/compute/start_instances.rb +1 -0
- data/lib/fog/aws/requests/compute/stop_instances.rb +1 -0
- data/lib/fog/aws/requests/elasticache/create_cache_cluster.rb +26 -2
- data/lib/fog/aws/requests/elasticache/delete_cache_cluster.rb +10 -1
- data/lib/fog/aws/requests/elasticache/describe_cache_clusters.rb +16 -1
- data/lib/fog/aws/requests/elasticache/modify_cache_cluster.rb +35 -3
- data/lib/fog/aws/requests/elasticache/reboot_cache_cluster.rb +10 -2
- data/lib/fog/aws/requests/elb/create_load_balancer.rb +1 -1
- data/lib/fog/aws/requests/rds/describe_db_instances.rb +3 -3
- data/lib/fog/aws/sqs.rb +1 -1
- data/lib/fog/aws/storage.rb +1 -1
- data/lib/fog/bin/rackspace.rb +4 -0
- data/lib/fog/cloudstack/compute.rb +25 -18
- data/lib/fog/cloudstack/models/compute/image.rb +34 -34
- data/lib/fog/cloudstack/models/compute/job.rb +14 -1
- data/lib/fog/cloudstack/models/compute/jobs.rb +1 -1
- data/lib/fog/cloudstack/models/compute/security_group.rb +50 -0
- data/lib/fog/cloudstack/models/compute/security_group_rule.rb +62 -0
- data/lib/fog/cloudstack/models/compute/security_group_rules.rb +37 -0
- data/lib/fog/cloudstack/models/compute/security_groups.rb +27 -0
- data/lib/fog/cloudstack/models/compute/server.rb +63 -39
- data/lib/fog/cloudstack/models/compute/volume.rb +3 -7
- data/lib/fog/cloudstack/models/compute/zone.rb +1 -2
- data/lib/fog/cloudstack/requests/compute/assign_virtual_machine.rb +18 -0
- data/lib/fog/cloudstack/requests/compute/authorize_security_group_egress.rb +68 -0
- data/lib/fog/cloudstack/requests/compute/authorize_security_group_ingress.rb +55 -4
- data/lib/fog/cloudstack/requests/compute/create_security_group.rb +12 -4
- data/lib/fog/cloudstack/requests/compute/create_zone.rb +20 -0
- data/lib/fog/cloudstack/requests/compute/delete_security_group.rb +17 -0
- data/lib/fog/cloudstack/requests/compute/destroy_virtual_machine.rb +23 -1
- data/lib/fog/cloudstack/requests/compute/list_firewall_rules.rb +15 -0
- data/lib/fog/cloudstack/requests/compute/list_security_groups.rb +22 -4
- data/lib/fog/cloudstack/requests/compute/query_async_job_result.rb +15 -3
- data/lib/fog/cloudstack/requests/compute/revoke_security_group_egress.rb +42 -0
- data/lib/fog/cloudstack/requests/compute/revoke_security_group_ingress.rb +29 -3
- data/lib/fog/core.rb +1 -0
- data/lib/fog/core/attributes.rb +1 -1
- data/lib/fog/core/current_machine.rb +2 -2
- data/lib/fog/core/scp.rb +8 -0
- data/lib/fog/core/ssh.rb +8 -0
- data/lib/fog/dynect/dns.rb +14 -5
- data/lib/fog/ibm/requests/compute/create_instance.rb +1 -1
- data/lib/fog/libvirt/requests/compute/create_volume.rb +1 -1
- data/lib/fog/libvirt/requests/compute/list_volumes.rb +1 -1
- data/lib/fog/local/models/storage/file.rb +12 -1
- data/lib/fog/local/storage.rb +25 -1
- data/lib/fog/ninefold/compute.rb +1 -0
- data/lib/fog/openstack.rb +3 -1
- data/lib/fog/openstack/compute.rb +13 -2
- data/lib/fog/openstack/models/compute/servers.rb +10 -2
- data/lib/fog/openstack/requests/compute/create_flavor.rb +2 -2
- data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
- data/lib/fog/openstack/requests/compute/create_server.rb +1 -1
- data/lib/fog/openstack/requests/compute/create_volume.rb +1 -1
- data/lib/fog/openstack/requests/compute/get_flavor_details.rb +7 -7
- data/lib/fog/openstack/requests/compute/get_quota.rb +1 -12
- data/lib/fog/openstack/requests/compute/get_quota_defaults.rb +1 -12
- data/lib/fog/openstack/requests/compute/get_volume_details.rb +1 -1
- data/lib/fog/openstack/requests/compute/list_flavors.rb +7 -7
- data/lib/fog/openstack/requests/compute/list_flavors_detail.rb +7 -7
- data/lib/fog/openstack/requests/compute/list_security_groups.rb +7 -7
- data/lib/fog/openstack/requests/compute/list_servers_detail.rb +4 -3
- data/lib/fog/openstack/requests/compute/list_volumes.rb +6 -8
- data/lib/fog/openstack/requests/compute/update_quota.rb +2 -15
- data/lib/fog/openstack/requests/identity/delete_role.rb +1 -1
- data/lib/fog/openstack/requests/identity/list_roles.rb +1 -1
- data/lib/fog/openstack/requests/image/create_image.rb +3 -1
- data/lib/fog/openstack/requests/image/list_public_images.rb +19 -1
- data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +20 -2
- data/lib/fog/openstack/requests/image/update_image.rb +1 -1
- data/lib/fog/rackspace.rb +2 -0
- data/lib/fog/rackspace/databases.rb +121 -0
- data/lib/fog/rackspace/identity.rb +83 -0
- data/lib/fog/rackspace/load_balancers.rb +3 -0
- data/lib/fog/rackspace/models/databases/database.rb +32 -0
- data/lib/fog/rackspace/models/databases/databases.rb +31 -0
- data/lib/fog/rackspace/models/databases/flavor.rb +15 -0
- data/lib/fog/rackspace/models/databases/flavors.rb +25 -0
- data/lib/fog/rackspace/models/databases/instance.rb +104 -0
- data/lib/fog/rackspace/models/databases/instances.rb +25 -0
- data/lib/fog/rackspace/models/databases/user.rb +32 -0
- data/lib/fog/rackspace/models/databases/users.rb +31 -0
- data/lib/fog/rackspace/models/identity/credential.rb +13 -0
- data/lib/fog/rackspace/models/identity/credentials.rb +32 -0
- data/lib/fog/rackspace/models/identity/role.rb +14 -0
- data/lib/fog/rackspace/models/identity/roles.rb +32 -0
- data/lib/fog/rackspace/models/identity/tenant.rb +15 -0
- data/lib/fog/rackspace/models/identity/tenants.rb +28 -0
- data/lib/fog/rackspace/models/identity/user.rb +53 -0
- data/lib/fog/rackspace/models/identity/users.rb +36 -0
- data/lib/fog/rackspace/models/load_balancers/load_balancer.rb +17 -0
- data/lib/fog/rackspace/requests/databases/check_root_user.rb +15 -0
- data/lib/fog/rackspace/requests/databases/create_database.rb +24 -0
- data/lib/fog/rackspace/requests/databases/create_instance.rb +26 -0
- data/lib/fog/rackspace/requests/databases/create_user.rb +24 -0
- data/lib/fog/rackspace/requests/databases/delete_database.rb +15 -0
- data/lib/fog/rackspace/requests/databases/delete_instance.rb +15 -0
- data/lib/fog/rackspace/requests/databases/delete_user.rb +15 -0
- data/lib/fog/rackspace/requests/databases/enable_root_user.rb +15 -0
- data/lib/fog/rackspace/requests/databases/get_flavor.rb +15 -0
- data/lib/fog/rackspace/requests/databases/get_instance.rb +15 -0
- data/lib/fog/rackspace/requests/databases/list_databases.rb +15 -0
- data/lib/fog/rackspace/requests/databases/list_flavors.rb +15 -0
- data/lib/fog/rackspace/requests/databases/list_instances.rb +15 -0
- data/lib/fog/rackspace/requests/databases/list_users.rb +15 -0
- data/lib/fog/rackspace/requests/databases/resize_instance.rb +22 -0
- data/lib/fog/rackspace/requests/databases/resize_instance_volume.rb +24 -0
- data/lib/fog/rackspace/requests/databases/restart_instance.rb +20 -0
- data/lib/fog/rackspace/requests/identity/create_token.rb +25 -0
- data/lib/fog/rackspace/requests/identity/create_user.rb +25 -0
- data/lib/fog/rackspace/requests/identity/delete_user.rb +15 -0
- data/lib/fog/rackspace/requests/identity/get_credentials.rb +15 -0
- data/lib/fog/rackspace/requests/identity/get_user_by_id.rb +15 -0
- data/lib/fog/rackspace/requests/identity/get_user_by_name.rb +15 -0
- data/lib/fog/rackspace/requests/identity/list_credentials.rb +22 -0
- data/lib/fog/rackspace/requests/identity/list_tenants.rb +22 -0
- data/lib/fog/rackspace/requests/identity/list_user_roles.rb +22 -0
- data/lib/fog/rackspace/requests/identity/list_users.rb +22 -0
- data/lib/fog/rackspace/requests/identity/update_user.rb +24 -0
- data/lib/fog/rackspace/requests/load_balancers/get_ssl_termination.rb +15 -0
- data/lib/fog/rackspace/requests/load_balancers/remove_ssl_termination.rb +15 -0
- data/lib/fog/rackspace/requests/load_balancers/set_ssl_termination.rb +31 -0
- data/lib/fog/rackspace/storage.rb +1 -1
- data/lib/fog/vsphere/models/compute/server.rb +1 -0
- data/lib/fog/vsphere/requests/compute/vm_clone.rb +2 -2
- data/tests/aws/models/compute/address_tests.rb +2 -1
- data/tests/aws/models/compute/volume_tests.rb +1 -1
- data/tests/aws/models/dns/records_tests.rb +19 -1
- data/tests/aws/models/storage/directory_tests.rb +1 -1
- data/tests/aws/models/storage/url_tests.rb +7 -1
- data/tests/aws/requests/auto_scaling/auto_scaling_tests.rb +4 -2
- data/tests/aws/requests/compute/address_tests.rb +19 -1
- data/tests/aws/requests/elasticache/cache_cluster_tests.rb +4 -4
- data/tests/aws/requests/elb/helper.rb +13 -2
- data/tests/aws/requests/iam/access_key_tests.rb +1 -3
- data/tests/cloudstack/compute/models/security_group_rule_tests.rb +29 -0
- data/tests/cloudstack/compute/models/security_group_tests.rb +16 -0
- data/tests/cloudstack/compute/models/security_groups_tests.rb +19 -0
- data/tests/cloudstack/compute/models/server_tests.rb +18 -0
- data/tests/cloudstack/compute/models/volume_tests.rb +34 -0
- data/tests/cloudstack/compute/models/volumes_tests.rb +17 -0
- data/tests/compute/helper.rb +10 -3
- data/tests/core/current_machine_tests.rb +32 -0
- data/tests/helper.rb +1 -1
- data/tests/helpers/mock_helper.rb +3 -0
- data/tests/hp/requests/compute/address_tests.rb +2 -1
- data/tests/joyent/requests/compute/datasets_tests.rb +12 -3
- data/tests/local/models/file_tests.rb +43 -0
- data/tests/local/storage_tests.rb +40 -0
- data/tests/openstack/requests/compute/flavor_tests.rb +1 -1
- data/tests/openstack/requests/compute/server_tests.rb +3 -3
- data/tests/openstack/requests/compute/volume_tests.rb +1 -1
- data/tests/openstack/requests/identity/role_tests.rb +1 -1
- data/tests/rackspace/databases_tests.rb +26 -0
- data/tests/rackspace/models/databases/database_tests.rb +17 -0
- data/tests/rackspace/models/databases/databases_tests.rb +17 -0
- data/tests/rackspace/models/databases/flavors_tests.rb +20 -0
- data/tests/rackspace/models/databases/instance_tests.rb +43 -0
- data/tests/rackspace/models/databases/instances_tests.rb +14 -0
- data/tests/rackspace/models/databases/user_tests.rb +21 -0
- data/tests/rackspace/models/databases/users_tests.rb +21 -0
- data/tests/rackspace/models/identity/credentials_tests.rb +16 -0
- data/tests/rackspace/models/identity/roles_tests.rb +16 -0
- data/tests/rackspace/models/identity/tenants_tests.rb +21 -0
- data/tests/rackspace/models/identity/user_tests.rb +17 -0
- data/tests/rackspace/models/identity/users_tests.rb +17 -0
- data/tests/rackspace/models/load_balancers/load_balancer_tests.rb +20 -0
- data/tests/rackspace/requests/databases/database_tests.rb +36 -0
- data/tests/rackspace/requests/databases/flavor_tests.rb +16 -0
- data/tests/rackspace/requests/databases/helper.rb +84 -0
- data/tests/rackspace/requests/databases/instance_tests.rb +77 -0
- data/tests/rackspace/requests/databases/user_tests.rb +37 -0
- data/tests/rackspace/requests/identity/tenants_tests.rb +21 -0
- data/tests/rackspace/requests/identity/token_tests.rb +63 -0
- data/tests/rackspace/requests/identity/user_tests.rb +107 -0
- data/tests/rackspace/requests/load_balancers/helper.rb +70 -1
- data/tests/rackspace/requests/load_balancers/ssl_termination_tests.rb +38 -0
- data/tests/storage/models/file_tests.rb +1 -1
- metadata +129 -13
- data/spec/core/current_machine_spec.rb +0 -32
- data/spec/lib/fog/aws/parsers/sqs/receive_message_spec.rb +0 -58
- data/spec/spec_helper.rb +0 -8
@@ -17,6 +17,8 @@ Shindo.tests('Fog::Compute[:aws] | address requests', ['aws']) do
|
|
17
17
|
tests('success') do
|
18
18
|
|
19
19
|
@public_ip = nil
|
20
|
+
@vpc_public_ip = nil
|
21
|
+
@vpc_allocation_id = nil
|
20
22
|
|
21
23
|
tests('#allocate_address').formats({'domain' => String, 'publicIp' => String, 'requestId' => String}) do
|
22
24
|
data = Fog::Compute[:aws].allocate_address.body
|
@@ -24,6 +26,13 @@ Shindo.tests('Fog::Compute[:aws] | address requests', ['aws']) do
|
|
24
26
|
data
|
25
27
|
end
|
26
28
|
|
29
|
+
tests("#allocate_address('vpc')").formats({'domain' => String, 'publicIp' => String, 'allocationId' => String, 'requestId' => String}) do
|
30
|
+
data = Fog::Compute[:aws].allocate_address('vpc').body
|
31
|
+
@vpc_public_ip = data['publicIp']
|
32
|
+
@vpc_allocation_id = data['allocationId']
|
33
|
+
data
|
34
|
+
end
|
35
|
+
|
27
36
|
tests('#describe_addresses').formats(@addresses_format) do
|
28
37
|
Fog::Compute[:aws].describe_addresses.body
|
29
38
|
end
|
@@ -35,7 +44,7 @@ Shindo.tests('Fog::Compute[:aws] | address requests', ['aws']) do
|
|
35
44
|
tests("#associate_addresses('#{@server.identity}', '#{@public_ip}')").formats(AWS::Compute::Formats::BASIC) do
|
36
45
|
Fog::Compute[:aws].associate_address(@server.identity, @public_ip).body
|
37
46
|
end
|
38
|
-
|
47
|
+
|
39
48
|
tests("#dissassociate_address('#{@public_ip}')").formats(AWS::Compute::Formats::BASIC) do
|
40
49
|
Fog::Compute[:aws].disassociate_address(@public_ip).body
|
41
50
|
end
|
@@ -44,10 +53,14 @@ Shindo.tests('Fog::Compute[:aws] | address requests', ['aws']) do
|
|
44
53
|
Fog::Compute[:aws].release_address(@public_ip).body
|
45
54
|
end
|
46
55
|
|
56
|
+
tests("#release_address('#{@vpc_allocation_id}')").formats(AWS::Compute::Formats::BASIC) do
|
57
|
+
Fog::Compute[:aws].release_address(@vpc_allocation_id).body
|
58
|
+
end
|
47
59
|
end
|
48
60
|
tests('failure') do
|
49
61
|
|
50
62
|
@address = Fog::Compute[:aws].addresses.create
|
63
|
+
@vpc_address = Fog::Compute[:aws].addresses.create(:domain => 'vpc')
|
51
64
|
|
52
65
|
tests("#associate_addresses('i-00000000', '#{@address.identity}')").raises(Fog::Compute::AWS::NotFound) do
|
53
66
|
Fog::Compute[:aws].associate_address('i-00000000', @address.identity)
|
@@ -69,7 +82,12 @@ Shindo.tests('Fog::Compute[:aws] | address requests', ['aws']) do
|
|
69
82
|
Fog::Compute[:aws].release_address('127.0.0.1')
|
70
83
|
end
|
71
84
|
|
85
|
+
tests("#release_address('#{@vpc_address.identity}')").raises(Fog::Compute::AWS::Error) do
|
86
|
+
Fog::Compute[:aws].release_address(@vpc_address.identity)
|
87
|
+
end
|
88
|
+
|
72
89
|
@address.destroy
|
90
|
+
@vpc_address.destroy
|
73
91
|
|
74
92
|
end
|
75
93
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
Shindo.tests('AWS::Elasticache | cache cluster requests', ['aws', 'elasticache']) do
|
2
2
|
|
3
3
|
tests('success') do
|
4
|
-
pending if Fog.mocking?
|
5
4
|
|
6
5
|
# Randomize the cluster ID so tests can be fequently re-run
|
7
6
|
CLUSTER_ID = "fog-test-cluster-#{rand(999).to_s}" # 20 chars max!
|
@@ -98,11 +97,12 @@ Shindo.tests('AWS::Elasticache | cache cluster requests', ['aws', 'elasticache']
|
|
98
97
|
body = AWS[:elasticache].modify_cache_cluster(c.id,
|
99
98
|
{
|
100
99
|
:num_nodes => NUM_NODES - 1,
|
101
|
-
:nodes_to_remove => node_id,
|
100
|
+
:nodes_to_remove => [node_id],
|
102
101
|
:apply_immediately => true,
|
103
102
|
}).body
|
104
|
-
|
105
|
-
|
103
|
+
returns(node_id) {
|
104
|
+
body['CacheCluster']['PendingModifiedValues']['CacheNodeId']
|
105
|
+
}
|
106
106
|
body['CacheCluster']
|
107
107
|
end
|
108
108
|
|
@@ -14,11 +14,22 @@ class AWS
|
|
14
14
|
"DNSName" => String,
|
15
15
|
"HealthCheck" => {"HealthyThreshold" => Integer, "Timeout" => Integer, "UnhealthyThreshold" => Integer, "Interval" => Integer, "Target" => String},
|
16
16
|
"Instances" => Array,
|
17
|
-
"ListenerDescriptions" =>
|
17
|
+
"ListenerDescriptions" => [{
|
18
|
+
'PolicyNames' => Array,
|
19
|
+
'Listener' => {
|
20
|
+
'InstancePort' => Integer,
|
21
|
+
'InstanceProtocol' => String,
|
22
|
+
'LoadBalancerPort' => Integer,
|
23
|
+
'Protocol' => String,
|
24
|
+
'SSLCertificateId' => Fog::Nullable::String
|
25
|
+
}
|
26
|
+
}],
|
18
27
|
"LoadBalancerName" => String,
|
19
28
|
"Policies" => {"LBCookieStickinessPolicies" => Array, "AppCookieStickinessPolicies" => Array},
|
29
|
+
"Scheme" => String,
|
30
|
+
"SecurityGroups" => [Fog::Nullable::String],
|
20
31
|
"SourceSecurityGroup" => {"GroupName" => String, "OwnerAlias" => String},
|
21
|
-
"
|
32
|
+
"Subnets" => [Fog::Nullable::String]
|
22
33
|
}
|
23
34
|
|
24
35
|
CREATE_LOAD_BALANCER = BASIC.merge({
|
@@ -0,0 +1,29 @@
|
|
1
|
+
def security_group_rule_tests(connection, params, direction, mocks_implemented = true)
|
2
|
+
@security_group = connection.security_groups.create(params[:security_group_attributes])
|
3
|
+
|
4
|
+
rule_params = params[:security_group_rule_attributes].merge(:security_group_id => @security_group.id, :direction => direction)
|
5
|
+
|
6
|
+
model_tests(connection.security_group_rules, rule_params, mocks_implemented) do
|
7
|
+
|
8
|
+
if Fog.mocking? && !mocks_implemented
|
9
|
+
pending
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
@security_group.destroy
|
14
|
+
end
|
15
|
+
|
16
|
+
provider, config = :cloudstack, compute_providers[:cloudstack]
|
17
|
+
|
18
|
+
Shindo.tests("Fog::Compute[:#{provider}] | security_group_rules | ingress", [provider.to_s]) do
|
19
|
+
|
20
|
+
security_group_rule_tests(Fog::Compute[:cloudstack], config, "ingress", config[:mocked])
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
Shindo.tests("Fog::Compute[:#{provider}] | security_group_rules | egress", [provider.to_s]) do
|
26
|
+
|
27
|
+
security_group_rule_tests(Fog::Compute[:cloudstack], config, "egress", config[:mocked])
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
def security_group_tests(connection, params, mocks_implemented = true)
|
2
|
+
model_tests(connection.security_groups, params[:security_group_attributes], mocks_implemented) do
|
3
|
+
if Fog.mocking? && !mocks_implemented
|
4
|
+
pending
|
5
|
+
else
|
6
|
+
responds_to(:rules)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
provider, config = :cloudstack, compute_providers[:cloudstack]
|
12
|
+
Shindo.tests("Fog::Compute[:#{provider}] | security_groups", [provider.to_s]) do
|
13
|
+
|
14
|
+
security_group_tests(Fog::Compute[:cloudstack], config, config[:mocked])
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
def security_group_tests(provider, params, mocks_implemented = true)
|
2
|
+
collection_tests(provider.security_groups, params, mocks_implemented) do
|
3
|
+
|
4
|
+
if Fog.mocking? && !mocks_implemented
|
5
|
+
pending
|
6
|
+
else
|
7
|
+
responds_to(:rules)
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
provider, config = :cloudstack, compute_providers[:cloudstack]
|
15
|
+
Shindo.tests("Fog::Compute[:#{provider}] | security_group", [provider.to_s]) do
|
16
|
+
|
17
|
+
security_group_tests(Fog::Compute[provider], (config[:security_group_attributes] || {}), config[:mocked])
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
provider, config = :cloudstack, compute_providers[:cloudstack]
|
2
|
+
|
3
|
+
Shindo.tests("Fog::Compute[:#{provider}] | servers + security_groups", [provider.to_s]) do
|
4
|
+
connection = Fog::Compute[provider]
|
5
|
+
@security_group = connection.security_groups.create(config[:security_group_attributes])
|
6
|
+
@server = connection.servers.create(config[:server_attributes].merge(:security_groups => [@security_group]))
|
7
|
+
|
8
|
+
tests('#security_group').succeeds do
|
9
|
+
@server.wait_for { ready? }
|
10
|
+
@server.security_groups.map(&:id) == [@security_group.id]
|
11
|
+
end
|
12
|
+
|
13
|
+
tests('#destroy').succeeds do
|
14
|
+
@server.destroy.wait_for { ready? }
|
15
|
+
@security_group.destroy
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
def volume_tests(connection, params, mocks_implemented = true)
|
2
|
+
model_tests(connection.volumes, params[:volume_attributes], mocks_implemented) do
|
3
|
+
if !Fog.mocking? || mocks_implemented
|
4
|
+
@instance.wait_for { ready? }
|
5
|
+
end
|
6
|
+
|
7
|
+
@server = @instance.connection.servers.create(params[:server_attributes])
|
8
|
+
@server.wait_for { ready? }
|
9
|
+
|
10
|
+
tests('attach').succeeds do
|
11
|
+
@instance.attach(@server)
|
12
|
+
end
|
13
|
+
|
14
|
+
tests('detach').succeeds do
|
15
|
+
@instance.detach
|
16
|
+
end
|
17
|
+
|
18
|
+
@server.destroy
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Shindo.tests("Fog::Compute[:cloudstack] | volume", :cloudstack) do
|
23
|
+
|
24
|
+
config = compute_providers[:cloudstack]
|
25
|
+
|
26
|
+
volume_tests(Fog::Compute[:cloudstack], config, config[:mocked]) do
|
27
|
+
if Fog.mocking? && !mocks_implemented
|
28
|
+
pending
|
29
|
+
else
|
30
|
+
responds_to(:ready?)
|
31
|
+
responds_to(:flavor)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
def volumes_tests(connection, params = {}, mocks_implemented = true)
|
2
|
+
|
3
|
+
collection_tests(connection.volumes, params, mocks_implemented) do
|
4
|
+
|
5
|
+
if !Fog.mocking? || mocks_implemented
|
6
|
+
@instance.wait_for { ready? }
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
config = compute_providers[:cloudstack]
|
14
|
+
|
15
|
+
Shindo.tests("Fog::Compute[:cloudstack] | volumes", ["cloudstack"]) do
|
16
|
+
volumes_tests(Fog::Compute[:cloudstack], config[:volume_attributes], config[:mocked])
|
17
|
+
end
|
data/tests/compute/helper.rb
CHANGED
@@ -32,15 +32,22 @@ def compute_providers
|
|
32
32
|
:cloudstack_host => 'http://host.foo'
|
33
33
|
},
|
34
34
|
:server_attributes => {}.tap do |hash|
|
35
|
-
[:zone_id, :network_ids, :
|
36
|
-
hash[k]= Fog.credentials[
|
35
|
+
[:zone_id, :network_ids, :template_id, :service_offering_id].each do |k|
|
36
|
+
hash[k]= Fog.credentials["cloudstack_#{k}".to_sym]
|
37
37
|
end
|
38
38
|
end,
|
39
39
|
:volume_attributes => {:name => "somevolume"}.tap do |hash|
|
40
40
|
[:zone_id, :disk_offering_id].each do |k|
|
41
|
-
hash[k]= Fog.credentials[
|
41
|
+
hash[k]= Fog.credentials["cloudstack_#{k}".to_sym]
|
42
42
|
end
|
43
43
|
end,
|
44
|
+
:security_group_attributes => {:name => "cloudstack.sg.#{Time.now.to_i}"},
|
45
|
+
:security_group_rule_attributes => {
|
46
|
+
:cidr => '0.0.0.0/0',
|
47
|
+
:start_port => 123,
|
48
|
+
:end_port => 456,
|
49
|
+
:protocol => 'tcp'
|
50
|
+
},
|
44
51
|
:mocked => true
|
45
52
|
},
|
46
53
|
:glesys => {
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Shindo.tests('Fog CurrentMachine', 'core') do
|
2
|
+
|
3
|
+
pending unless Fog.mock?
|
4
|
+
|
5
|
+
old_excon_defaults_mock = Excon.defaults[:mock]
|
6
|
+
Excon.defaults[:mock] = true
|
7
|
+
|
8
|
+
tests('ip_address') do
|
9
|
+
|
10
|
+
tests('should be thread safe') do
|
11
|
+
Excon.stub({:method => :get, :path => '/'}, {:body => ''})
|
12
|
+
|
13
|
+
(1..10).map {
|
14
|
+
Thread.new { Fog::CurrentMachine.ip_address }
|
15
|
+
}.each{ |t| t.join }
|
16
|
+
end
|
17
|
+
|
18
|
+
Fog::CurrentMachine.ip_address = nil
|
19
|
+
Excon.stubs.clear
|
20
|
+
|
21
|
+
tests('should remove trailing endline characters') do
|
22
|
+
Excon.stub({:method => :get, :path => '/'}, {:body => "192.168.0.1\n"})
|
23
|
+
Fog::CurrentMachine.ip_address == '192.168.0.1'
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
Fog::CurrentMachine.ip_address = nil
|
29
|
+
Excon.stubs.clear
|
30
|
+
Excon.defaults[:mock] = old_excon_defaults_mock
|
31
|
+
|
32
|
+
end
|
data/tests/helper.rb
CHANGED
@@ -12,7 +12,7 @@ def array_differences(array_a, array_b)
|
|
12
12
|
end
|
13
13
|
|
14
14
|
# check to see which credentials are available and add others to the skipped tags list
|
15
|
-
all_providers = ['aws', 'bluebox', 'brightbox', 'cloudstack', 'dnsimple', 'dnsmadeeasy', 'dynect', 'ecloud', 'glesys', 'gogrid', 'google', 'hp', 'linode', 'local', 'ninefold', '
|
15
|
+
all_providers = ['aws', 'bare_metal_cloud', 'bluebox', 'brightbox', 'cloudstack', 'dnsimple', 'dnsmadeeasy', 'dynect', 'ecloud', 'glesys', 'gogrid', 'google', 'hp', 'linode', 'local', 'ninefold', 'openstack', 'rackspace', 'stormondemand', 'voxel', 'xenserver', 'zerigo']
|
16
16
|
available_providers = Fog.available_providers.map {|provider| provider.downcase}
|
17
17
|
for provider in (all_providers - available_providers)
|
18
18
|
Formatador.display_line("[yellow]Skipping tests for [bold]#{provider}[/] [yellow]due to lacking credentials (add some to '~/.fog' to run them)[/]")
|
@@ -16,6 +16,9 @@ if Fog.mock?
|
|
16
16
|
:brightbox_client_id => 'brightbox_client_id',
|
17
17
|
:brightbox_secret => 'brightbox_secret',
|
18
18
|
:cloudstack_host => 'http://cloudstack.example.org',
|
19
|
+
:cloudstack_service_offering_id => '4437ac6c-9fe3-477a-57ec-60a5a45896a4',
|
20
|
+
:cloudstack_template_id => '8a31cf9c-f248-0588-256e-9dbf58785216',
|
21
|
+
:cloudstack_zone_id => 'c554c592-e09c-9df5-7688-4a32754a4305',
|
19
22
|
:clodo_api_key => 'clodo_api_key',
|
20
23
|
:clodo_username => 'clodo_username',
|
21
24
|
:dnsimple_email => 'dnsimple_email',
|
@@ -30,11 +30,12 @@ Shindo.tests('Fog::Compute[:hp] | address requests', [:hp]) do
|
|
30
30
|
@server.wait_for { ready? }
|
31
31
|
|
32
32
|
tests("#associate_address('#{@server.id}', '#{@ip_address}')").succeeds do
|
33
|
-
Fog::Compute[:hp].associate_address(@server.id, @ip_address)
|
33
|
+
result = Fog::Compute[:hp].associate_address(@server.id, @ip_address)
|
34
34
|
tests("#get_address").returns(@server.id, "associated to valid instance id") do
|
35
35
|
pending if Fog.mocking?
|
36
36
|
Fog::Compute[:hp].get_address(@address_id).body['floating_ip']['instance_id']
|
37
37
|
end
|
38
|
+
result
|
38
39
|
end
|
39
40
|
|
40
41
|
tests("#disassociate_address('#{@server.id}', '#{@ip_address}')").succeeds do
|
@@ -1,7 +1,10 @@
|
|
1
1
|
Shindo.tests("Fog::Compute[:joyent] | dataset requests", ["joyent"]) do
|
2
2
|
@dataset_format = {
|
3
3
|
"description" => String,
|
4
|
-
"requirements" => {
|
4
|
+
"requirements" => {
|
5
|
+
"max_memory" => Integer,
|
6
|
+
"min_memory" => Integer
|
7
|
+
},
|
5
8
|
"name" => String,
|
6
9
|
"version" => String,
|
7
10
|
"os" => String,
|
@@ -22,7 +25,10 @@ Shindo.tests("Fog::Compute[:joyent] | dataset requests", ["joyent"]) do
|
|
22
25
|
"type" => "smartmachine",
|
23
26
|
"description" => "Zeus Simple Load Balancer 200 Mbps SmartMachine",
|
24
27
|
"default" => false,
|
25
|
-
"requirements" => {
|
28
|
+
"requirements" => {
|
29
|
+
"max_memory" => 32768,
|
30
|
+
"min_memory" => 4096
|
31
|
+
},
|
26
32
|
"version" => "1.1.1",
|
27
33
|
"created" => Time.parse("2011-09-15T07:39:13+00:00")
|
28
34
|
},
|
@@ -34,7 +40,10 @@ Shindo.tests("Fog::Compute[:joyent] | dataset requests", ["joyent"]) do
|
|
34
40
|
"type" => "smartmachine",
|
35
41
|
"description" => "MySQL SmartMachine",
|
36
42
|
"default" => false,
|
37
|
-
"requirements" => {
|
43
|
+
"requirements" => {
|
44
|
+
"max_memory" => 32768,
|
45
|
+
"min_memory" => 4096
|
46
|
+
},
|
38
47
|
"version" => "1.4.1",
|
39
48
|
"created" => Time.parse("2011-09-15T05:01:34+00:00")
|
40
49
|
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Shindo.tests('Storage[:local] | file', [:local]) do
|
2
|
+
|
3
|
+
pending if Fog.mocking?
|
4
|
+
|
5
|
+
before do
|
6
|
+
@options = { :local_root => '~/.fog' }
|
7
|
+
end
|
8
|
+
|
9
|
+
tests('#public_url') do
|
10
|
+
tests('when connection has an endpoint').
|
11
|
+
returns('http://example.com/files/directory/file.txt') do
|
12
|
+
@options[:endpoint] = 'http://example.com/files'
|
13
|
+
|
14
|
+
connection = Fog::Storage::Local.new(@options)
|
15
|
+
directory = connection.directories.new(:key => 'directory')
|
16
|
+
file = directory.files.new(:key => 'file.txt')
|
17
|
+
|
18
|
+
file.public_url
|
19
|
+
end
|
20
|
+
|
21
|
+
tests('when connection has no endpoint').
|
22
|
+
returns(nil) do
|
23
|
+
@options[:endpoint] = nil
|
24
|
+
|
25
|
+
connection = Fog::Storage::Local.new(@options)
|
26
|
+
directory = connection.directories.new(:key => 'directory')
|
27
|
+
file = directory.files.new(:key => 'file.txt')
|
28
|
+
|
29
|
+
file.public_url
|
30
|
+
end
|
31
|
+
|
32
|
+
tests('when file path has escapable characters').
|
33
|
+
returns('http://example.com/files/my%20directory/my%20file.txt') do
|
34
|
+
@options[:endpoint] = 'http://example.com/files'
|
35
|
+
|
36
|
+
connection = Fog::Storage::Local.new(@options)
|
37
|
+
directory = connection.directories.new(:key => 'my directory')
|
38
|
+
file = directory.files.new(:key => 'my file.txt')
|
39
|
+
|
40
|
+
file.public_url
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
Shindo.tests('Local | storage') do
|
2
|
+
|
3
|
+
pending if Fog.mocking?
|
4
|
+
|
5
|
+
before do
|
6
|
+
@options = { :local_root => "~/.fog" }
|
7
|
+
end
|
8
|
+
|
9
|
+
tests('#endpoint') do
|
10
|
+
tests('when no endpoint is provided').
|
11
|
+
returns(nil) do
|
12
|
+
Fog::Storage::Local.new(@options).endpoint
|
13
|
+
end
|
14
|
+
|
15
|
+
tests('when no host is provided').
|
16
|
+
returns(nil) do
|
17
|
+
@options[:scheme] = 'http'
|
18
|
+
@options[:path] = '/files'
|
19
|
+
@options[:port] = 80
|
20
|
+
|
21
|
+
Fog::Storage::Local.new(@options).endpoint
|
22
|
+
end
|
23
|
+
|
24
|
+
tests('when endpoint is provided').
|
25
|
+
returns('http://example.com/files') do
|
26
|
+
@options[:endpoint] = 'http://example.com/files'
|
27
|
+
|
28
|
+
Fog::Storage::Local.new(@options).endpoint
|
29
|
+
end
|
30
|
+
|
31
|
+
tests('when at least host option is provided').
|
32
|
+
returns('http://example.com/files') do
|
33
|
+
@options[:scheme] = 'http'
|
34
|
+
@options[:host] = 'example.com'
|
35
|
+
@options[:path] = '/files'
|
36
|
+
|
37
|
+
Fog::Storage::Local.new(@options).endpoint
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|