fog 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. data/Gemfile.lock +11 -6
  2. data/changelog.txt +49 -0
  3. data/fog.gemspec +5 -4
  4. data/lib/fog.rb +1 -1
  5. data/lib/fog/aws/cloud_formation.rb +124 -0
  6. data/lib/fog/aws/elb.rb +4 -1
  7. data/lib/fog/aws/iam.rb +6 -0
  8. data/lib/fog/aws/parsers/cloud_formation/basic.rb +12 -0
  9. data/lib/fog/aws/parsers/cloud_formation/create_stack.rb +19 -0
  10. data/lib/fog/aws/parsers/cloud_formation/describe_stack_events.rb +31 -0
  11. data/lib/fog/aws/parsers/cloud_formation/describe_stack_resources.rb +31 -0
  12. data/lib/fog/aws/parsers/cloud_formation/describe_stacks.rb +72 -0
  13. data/lib/fog/aws/parsers/cloud_formation/get_template.rb +19 -0
  14. data/lib/fog/aws/parsers/cloud_formation/validate_template.rb +52 -0
  15. data/lib/fog/aws/parsers/iam/login_profile.rb +27 -0
  16. data/lib/fog/aws/parsers/iam/upload_server_certificate.rb +26 -0
  17. data/lib/fog/aws/parsers/rds/authorize_db_security_group_ingress.rb +38 -0
  18. data/lib/fog/aws/parsers/rds/create_db_instance.rb +34 -0
  19. data/lib/fog/aws/parsers/rds/create_db_instance_read_replica.rb +34 -0
  20. data/lib/fog/aws/parsers/rds/create_db_parameter_group.rb +35 -0
  21. data/lib/fog/aws/parsers/rds/create_db_security_group.rb +38 -0
  22. data/lib/fog/aws/parsers/rds/create_db_snapshot.rb +35 -0
  23. data/lib/fog/aws/parsers/rds/db_parser.rb +123 -0
  24. data/lib/fog/aws/parsers/rds/delete_db_instance.rb +35 -0
  25. data/lib/fog/aws/parsers/rds/delete_db_parameter_group.rb +27 -0
  26. data/lib/fog/aws/parsers/rds/delete_db_security_group.rb +33 -0
  27. data/lib/fog/aws/parsers/rds/delete_db_snapshot.rb +34 -0
  28. data/lib/fog/aws/parsers/rds/describe_db_instances.rb +36 -0
  29. data/lib/fog/aws/parsers/rds/describe_db_parameter_groups.rb +38 -0
  30. data/lib/fog/aws/parsers/rds/describe_db_parameters.rb +44 -0
  31. data/lib/fog/aws/parsers/rds/describe_db_security_groups.rb +39 -0
  32. data/lib/fog/aws/parsers/rds/describe_db_snapshots.rb +39 -0
  33. data/lib/fog/aws/parsers/rds/modify_db_instance.rb +34 -0
  34. data/lib/fog/aws/parsers/rds/modify_db_parameter_group.rb +28 -0
  35. data/lib/fog/aws/parsers/rds/reboot_db_instance.rb +35 -0
  36. data/lib/fog/aws/parsers/rds/restore_db_instance_from_db_snapshot.rb +34 -0
  37. data/lib/fog/aws/parsers/rds/restore_db_instance_to_point_in_time.rb +35 -0
  38. data/lib/fog/aws/parsers/rds/revoke_db_security_group_ingress.rb +39 -0
  39. data/lib/fog/aws/parsers/rds/security_group_parser.rb +39 -0
  40. data/lib/fog/aws/parsers/rds/snapshot_parser.rb +40 -0
  41. data/lib/fog/aws/rds.rb +161 -0
  42. data/lib/fog/aws/rds/models/parameter.rb +21 -0
  43. data/lib/fog/aws/rds/models/parameter_group.rb +36 -0
  44. data/lib/fog/aws/rds/models/parameter_groups.rb +27 -0
  45. data/lib/fog/aws/rds/models/parameters.rb +37 -0
  46. data/lib/fog/aws/rds/models/security_group.rb +73 -0
  47. data/lib/fog/aws/rds/models/security_groups.rb +43 -0
  48. data/lib/fog/aws/rds/models/server.rb +105 -0
  49. data/lib/fog/aws/rds/models/servers.rb +27 -0
  50. data/lib/fog/aws/rds/models/snapshot.rb +49 -0
  51. data/lib/fog/aws/rds/models/snapshots.rb +45 -0
  52. data/lib/fog/aws/requests/cloud_formation/create_stack.rb +71 -0
  53. data/lib/fog/aws/requests/cloud_formation/delete_stack.rb +30 -0
  54. data/lib/fog/aws/requests/cloud_formation/describe_stack_events.rb +44 -0
  55. data/lib/fog/aws/requests/cloud_formation/describe_stack_resources.rb +43 -0
  56. data/lib/fog/aws/requests/cloud_formation/describe_stacks.rb +42 -0
  57. data/lib/fog/aws/requests/cloud_formation/get_template.rb +32 -0
  58. data/lib/fog/aws/requests/cloud_formation/validate_template.rb +34 -0
  59. data/lib/fog/aws/requests/elb/create_load_balancer.rb +4 -0
  60. data/lib/fog/aws/requests/iam/create_login_profile.rb +36 -0
  61. data/lib/fog/aws/requests/iam/delete_login_profile.rb +31 -0
  62. data/lib/fog/aws/requests/iam/delete_server_certificate.rb +32 -0
  63. data/lib/fog/aws/requests/iam/get_login_profile.rb +35 -0
  64. data/lib/fog/aws/requests/iam/update_login_profile.rb +33 -0
  65. data/lib/fog/aws/requests/iam/upload_server_certificate.rb +45 -0
  66. data/lib/fog/aws/requests/rds/authorize_db_security_group_ingress.rb +43 -0
  67. data/lib/fog/aws/requests/rds/create_db_instance.rb +56 -0
  68. data/lib/fog/aws/requests/rds/create_db_instance_read_replica.rb +42 -0
  69. data/lib/fog/aws/requests/rds/create_db_parameter_group.rb +41 -0
  70. data/lib/fog/aws/requests/rds/create_db_security_group.rb +37 -0
  71. data/lib/fog/aws/requests/rds/create_db_snapshot.rb +36 -0
  72. data/lib/fog/aws/requests/rds/delete_db_instance.rb +40 -0
  73. data/lib/fog/aws/requests/rds/delete_db_parameter_group.rb +36 -0
  74. data/lib/fog/aws/requests/rds/delete_db_security_group.rb +36 -0
  75. data/lib/fog/aws/requests/rds/delete_db_snapshot.rb +36 -0
  76. data/lib/fog/aws/requests/rds/describe_db_instances.rb +42 -0
  77. data/lib/fog/aws/requests/rds/describe_db_parameter_groups.rb +45 -0
  78. data/lib/fog/aws/requests/rds/describe_db_parameters.rb +46 -0
  79. data/lib/fog/aws/requests/rds/describe_db_security_groups.rb +39 -0
  80. data/lib/fog/aws/requests/rds/describe_db_snapshots.rb +42 -0
  81. data/lib/fog/aws/requests/rds/modify_db_instance.rb +54 -0
  82. data/lib/fog/aws/requests/rds/modify_db_parameter_group.rb +55 -0
  83. data/lib/fog/aws/requests/rds/reboot_db_instance.rb +34 -0
  84. data/lib/fog/aws/requests/rds/restore_db_instance_from_db_snapshot.rb +34 -0
  85. data/lib/fog/aws/requests/rds/restore_db_instance_to_point_in_time.rb +35 -0
  86. data/lib/fog/aws/requests/rds/revoke_db_security_group_ingress.rb +44 -0
  87. data/lib/fog/aws/simpledb.rb +21 -7
  88. data/lib/fog/bin.rb +2 -1
  89. data/lib/fog/bin/aws.rb +8 -0
  90. data/lib/fog/bin/virtual_box.rb +52 -0
  91. data/lib/fog/cdn/aws.rb +9 -8
  92. data/lib/fog/cdn/rackspace.rb +6 -6
  93. data/lib/fog/cdn/requests/rackspace/post_container.rb +30 -0
  94. data/lib/fog/cdn/requests/rackspace/put_container.rb +1 -1
  95. data/lib/fog/compute.rb +6 -3
  96. data/lib/fog/compute/aws.rb +11 -7
  97. data/lib/fog/compute/bluebox.rb +5 -6
  98. data/lib/fog/compute/brightbox.rb +3 -0
  99. data/lib/fog/compute/go_grid.rb +5 -6
  100. data/lib/fog/compute/linode.rb +5 -6
  101. data/lib/fog/compute/models/aws/flavors.rb +19 -18
  102. data/lib/fog/compute/models/aws/server.rb +23 -0
  103. data/lib/fog/compute/models/aws/tag.rb +1 -1
  104. data/lib/fog/compute/models/brightbox/server.rb +7 -1
  105. data/lib/fog/compute/models/virtual_box/medium.rb +87 -0
  106. data/lib/fog/compute/models/virtual_box/medium_format.rb +34 -0
  107. data/lib/fog/compute/models/virtual_box/mediums.rb +32 -0
  108. data/lib/fog/compute/models/virtual_box/nat_engine.rb +65 -0
  109. data/lib/fog/compute/models/virtual_box/nat_redirect.rb +91 -0
  110. data/lib/fog/compute/models/virtual_box/nat_redirects.rb +41 -0
  111. data/lib/fog/compute/models/virtual_box/network_adapter.rb +82 -0
  112. data/lib/fog/compute/models/virtual_box/network_adapters.rb +42 -0
  113. data/lib/fog/compute/models/virtual_box/server.rb +241 -0
  114. data/lib/fog/compute/models/virtual_box/servers.rb +41 -0
  115. data/lib/fog/compute/models/virtual_box/storage_controller.rb +83 -0
  116. data/lib/fog/compute/models/virtual_box/storage_controllers.rb +38 -0
  117. data/lib/fog/compute/models/voxel/servers.rb +7 -6
  118. data/lib/fog/compute/new_servers.rb +5 -6
  119. data/lib/fog/compute/parsers/aws/monitor_unmonitor_instances.rb +35 -0
  120. data/lib/fog/compute/rackspace.rb +7 -7
  121. data/lib/fog/compute/requests/aws/delete_tags.rb +12 -9
  122. data/lib/fog/compute/requests/aws/monitor_instances.rb +52 -0
  123. data/lib/fog/compute/requests/aws/revoke_security_group_ingress.rb +24 -8
  124. data/lib/fog/compute/requests/aws/unmonitor_instances.rb +53 -0
  125. data/lib/fog/compute/requests/brightbox/activate_console_server.rb +20 -0
  126. data/lib/fog/compute/requests/brightbox/add_listeners_load_balancer.rb +20 -0
  127. data/lib/fog/compute/requests/brightbox/remove_listeners_load_balancer.rb +20 -0
  128. data/lib/fog/compute/slicehost.rb +5 -6
  129. data/lib/fog/compute/virtual_box.rb +48 -0
  130. data/lib/fog/compute/voxel.rb +30 -27
  131. data/lib/fog/core.rb +1 -0
  132. data/lib/fog/core/attributes.rb +3 -1
  133. data/lib/fog/core/collection.rb +2 -2
  134. data/lib/fog/core/credentials.rb +13 -3
  135. data/lib/fog/core/scp.rb +0 -4
  136. data/lib/fog/core/service.rb +0 -8
  137. data/lib/fog/core/ssh.rb +0 -4
  138. data/lib/fog/dns.rb +3 -3
  139. data/lib/fog/dns/aws.rb +8 -8
  140. data/lib/fog/dns/bluebox.rb +5 -7
  141. data/lib/fog/dns/dnsimple.rb +7 -7
  142. data/lib/fog/dns/linode.rb +5 -6
  143. data/lib/fog/dns/models/dnsimple/record.rb +11 -1
  144. data/lib/fog/dns/models/dnsimple/records.rb +7 -7
  145. data/lib/fog/dns/models/dnsimple/zones.rb +2 -1
  146. data/lib/fog/dns/requests/dnsimple/get_record.rb +34 -0
  147. data/lib/fog/dns/slicehost.rb +5 -6
  148. data/lib/fog/dns/zerigo.rb +5 -7
  149. data/lib/fog/providers.rb +2 -1
  150. data/lib/fog/providers/aws.rb +10 -8
  151. data/lib/fog/providers/virtual_box.rb +11 -0
  152. data/lib/fog/storage.rb +21 -0
  153. data/lib/fog/storage/aws.rb +16 -32
  154. data/lib/fog/storage/google.rb +6 -27
  155. data/lib/fog/storage/local.rb +7 -7
  156. data/lib/fog/storage/models/rackspace/directory.rb +1 -1
  157. data/lib/fog/storage/models/rackspace/file.rb +1 -0
  158. data/lib/fog/storage/rackspace.rb +5 -27
  159. data/lib/fog/storage/requests/aws/put_object.rb +2 -2
  160. data/lib/fog/storage/requests/aws/upload_part.rb +1 -1
  161. data/lib/fog/storage/requests/google/put_object.rb +2 -2
  162. data/lib/fog/storage/requests/rackspace/put_object.rb +1 -1
  163. data/tests/aws/requests/cloud_formation/stack_tests.rb +130 -0
  164. data/tests/aws/requests/iam/login_profile_tests.rb +64 -0
  165. data/tests/aws/requests/rds/helper.rb +169 -0
  166. data/tests/aws/requests/rds/instance_tests.rb +129 -0
  167. data/tests/aws/requests/rds/model_tests.rb +98 -0
  168. data/tests/aws/requests/rds/parameter_group_tests.rb +68 -0
  169. data/tests/aws/requests/rds/parameter_request_tests.rb +35 -0
  170. data/tests/compute/models/aws/server_monitor_tests.rb +47 -0
  171. data/tests/compute/models/server_tests.rb +7 -23
  172. data/tests/compute/parsers/aws/monitor_unmonitor_instances_tests.rb +49 -0
  173. data/tests/compute/requests/aws/security_group_tests.rb +69 -52
  174. data/tests/compute/requests/aws/tag_tests.rb +5 -5
  175. data/tests/compute/requests/brightbox/helper.rb +7 -6
  176. data/tests/compute/requests/brightbox/server_tests.rb +5 -0
  177. data/tests/compute/requests/voxel/server_tests.rb +2 -3
  178. data/tests/storage/requests/aws/bucket_tests.rb +10 -0
  179. metadata +148 -12
@@ -30,7 +30,7 @@ module Fog
30
30
  # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUT.html
31
31
  #
32
32
  def put_object(bucket_name, object_name, data, options = {})
33
- data = parse_data(data)
33
+ data = Fog::Storage.parse_data(data)
34
34
  headers = data[:headers].merge!(options)
35
35
  request({
36
36
  :body => data[:body],
@@ -56,7 +56,7 @@ module Fog
56
56
  @data[:acls][:object][bucket_name][object_name] = self.class.acls(acl)
57
57
  end
58
58
 
59
- data = parse_data(data)
59
+ data = Fog::Storage.parse_data(data)
60
60
  unless data[:body].is_a?(String)
61
61
  data[:body] = data[:body].read
62
62
  end
@@ -23,7 +23,7 @@ module Fog
23
23
  # http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPart.html
24
24
  #
25
25
  def upload_part(bucket_name, object_name, upload_id, part_number, data, options = {})
26
- data = parse_data(data)
26
+ data = Fog::Storage.parse_data(data)
27
27
  headers = options
28
28
  headers['Content-Length'] = data[:headers]['Content-Length']
29
29
  request({
@@ -24,7 +24,7 @@ module Fog
24
24
  # * headers<~Hash>:
25
25
  # * 'ETag'<~String> - etag of new object
26
26
  def put_object(bucket_name, object_name, data, options = {})
27
- data = parse_data(data)
27
+ data = Fog::Storage.parse_data(data)
28
28
  headers = data[:headers].merge!(options)
29
29
  request({
30
30
  :body => data[:body],
@@ -50,7 +50,7 @@ module Fog
50
50
  @data[:acls][:object][bucket_name][object_name] = self.class.acls(acl)
51
51
  end
52
52
 
53
- data = parse_data(data)
53
+ data = Fog::Storage.parse_data(data)
54
54
  unless data[:body].is_a?(String)
55
55
  data[:body] = data[:body].read
56
56
  end
@@ -9,7 +9,7 @@ module Fog
9
9
  # * container<~String> - Name for container, should be < 256 bytes and must not contain '/'
10
10
  #
11
11
  def put_object(container, object, data, options = {})
12
- data = parse_data(data)
12
+ data = Fog::Storage.parse_data(data)
13
13
  headers = data[:headers].merge!(options)
14
14
  response = request(
15
15
  :body => data[:body],
@@ -0,0 +1,130 @@
1
+ Shindo.tests('AWS::CloudFormation | stack requests', ['aws', 'cloudformation']) do
2
+
3
+ @validate_template_format = {
4
+ 'Description' => String,
5
+ 'Parameters' => [
6
+ {
7
+ 'DefaultValue' => Fog::Nullable::String,
8
+ 'Description' => String,
9
+ 'NoEcho' => Fog::Boolean,
10
+ 'ParameterKey' => String,
11
+ }
12
+ ],
13
+ 'RequestId' => String
14
+ }
15
+
16
+ @create_stack_format = {
17
+ 'RequestId' => String,
18
+ 'StackId' => String
19
+ }
20
+
21
+ @get_template_format = {
22
+ 'RequestId' => String,
23
+ 'TemplateBody' => String
24
+ }
25
+
26
+ @describe_stacks_format = {
27
+ 'RequestId' => String,
28
+ 'Stacks' => [
29
+ {
30
+ 'CreationTime' => Time,
31
+ 'DisableRollback' => Fog::Boolean,
32
+ 'Outputs' => [
33
+ {
34
+ 'OutputKey' => String,
35
+ 'OutputValue' => String
36
+ }
37
+ ],
38
+ 'Parameters' => [
39
+ {
40
+ 'ParameterKey' => String,
41
+ 'ParameterValue' => String,
42
+ }
43
+ ],
44
+ 'StackId' => String,
45
+ 'StackName' => String,
46
+ 'StackStatus' => String,
47
+ }
48
+ ]
49
+ }
50
+
51
+ @describe_stack_events_format = {
52
+ 'RequestId' => String,
53
+ 'StackEvents' => [
54
+ {
55
+ 'EventId' => String,
56
+ 'LogicalResourceId' => String,
57
+ 'PhysicalResourceId' => String,
58
+ 'ResourceProperties' => String,
59
+ 'ResourceStatus' => String,
60
+ 'ResourceStatusReason' => String,
61
+ 'ResourceType' => String,
62
+ 'StackId' => String,
63
+ 'StackName' => String,
64
+ 'Timestamp' => Time
65
+ }
66
+ ]
67
+ }
68
+
69
+ @describe_stack_resources_format = {
70
+ 'RequestId' => String,
71
+ 'StackResources' => [
72
+ {
73
+ 'LogicalResourceId' => String,
74
+ 'PhysicalResourceId' => String,
75
+ 'ResourceStatus' => String,
76
+ 'ResourceType' => String,
77
+ 'StackId' => String,
78
+ 'StackName' => String,
79
+ 'Timestamp' => Time
80
+ }
81
+ ]
82
+ }
83
+
84
+ tests('success') do
85
+
86
+ @stack_name = 'fogstack' << Time.now.to_i.to_s
87
+ @keypair = AWS[:compute].key_pairs.create(:name => 'cloudformation')
88
+ @template_url = 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/EC2InstanceSample-1.0.0.template'
89
+
90
+ tests("validate_template('TemplateURL' => '#{@template_url}')").formats(@validate_template_format) do
91
+ AWS[:cloud_formation].validate_template('TemplateURL' => @template_url).body
92
+ end
93
+
94
+ tests("create_stack('#{@stack_name}', 'TemplateURL' => '#{@template_url}', Parameters => {'KeyName' => 'cloudformation'})").formats(@create_stack_format) do
95
+ AWS[:cloud_formation].create_stack(
96
+ @stack_name,
97
+ 'TemplateURL' => @template_url,
98
+ 'Parameters' => {'KeyName' => 'cloudformation'}
99
+ ).body
100
+ end
101
+
102
+ tests("get_template('#{@stack_name})").formats(@get_template_format) do
103
+ AWS[:cloud_formation].get_template(@stack_name).body
104
+ end
105
+
106
+ tests("describe_stacks").formats(@describe_stacks_format) do
107
+ AWS[:cloud_formation].describe_stacks.body
108
+ end
109
+
110
+ tests("describe_stack_events('#{@stack_name}')").formats(@describe_stack_events_format) do
111
+ AWS[:cloud_formation].describe_stack_events(@stack_name).body
112
+ end
113
+
114
+ tests("describe_stack_resources('StackName' => '#{@stack_name}')").formats(@describe_stack_resources_format) do
115
+ AWS[:cloud_formation].describe_stack_resources('StackName' => @stack_name).body
116
+ end
117
+
118
+ tests("delete_stack('#{@stack_name}')").succeeds do
119
+ AWS[:cloud_formation].delete_stack(@stack_name)
120
+ end
121
+
122
+ @keypair.destroy
123
+
124
+ end
125
+
126
+ tests('failure') do
127
+
128
+ end
129
+
130
+ end
@@ -0,0 +1,64 @@
1
+ Shindo.tests('AWS::IAM | user requests', ['aws']) do
2
+
3
+ unless Fog.mocking?
4
+ AWS[:iam].create_user('fog_user')
5
+ end
6
+
7
+
8
+ tests('success') do
9
+ @login_profile_format = {
10
+ 'LoginProfile' => {
11
+ 'UserName' => String,
12
+ 'CreateDate' => Time
13
+
14
+ },
15
+ 'RequestId' => String
16
+ }
17
+
18
+ tests("#create_login_profile('fog_user')").formats(@login_profile_format) do
19
+ pending if Fog.mocking?
20
+ AWS[:iam].create_login_profile('fog_user', 'somepassword').body
21
+ end
22
+
23
+ tests("#get_login_profile('fog_user')").formats(@login_profile_format) do
24
+ pending if Fog.mocking?
25
+ result = AWS[:iam].get_login_profile('fog_user').body
26
+ returns('fog_user') {result['LoginProfile']['UserName']}
27
+ result
28
+ end
29
+
30
+ tests("#modify_login_profile('fog_user')").formats(AWS::IAM::Formats::BASIC) do
31
+ pending if Fog.mocking?
32
+ begin
33
+ AWS[:iam].update_login_profile('fog_user', 'otherpassword').body
34
+ rescue Excon::Errors::Conflict #profile cannot be updated or deleted until it has finished creating; api provides no way of telling whether creation process complete
35
+ sleep 5
36
+ retry
37
+ end
38
+ end
39
+
40
+ tests("#delete_login_profile('fog_user')").formats(AWS::IAM::Formats::BASIC) do
41
+ pending if Fog.mocking?
42
+ AWS[:iam].delete_login_profile('fog_user').body
43
+ end
44
+
45
+ tests("#get_login_profile('fog_user')") do
46
+ pending if Fog.mocking?
47
+ raises(Excon::Errors::NotFound) {AWS[:iam].get_login_profile('fog_user')}
48
+ end
49
+
50
+ end
51
+
52
+ tests('failure') do
53
+ tests('get login profile for non existing user') do
54
+ pending if Fog.mocking?
55
+ raises(Excon::Errors::NotFound) { AWS[:iam].get_login_profile('idontexist')}
56
+ raises(Excon::Errors::NotFound) { AWS[:iam].delete_login_profile('fog_user')}
57
+ end
58
+ end
59
+
60
+
61
+ unless Fog.mocking?
62
+ AWS[:iam].delete_user('fog_user')
63
+ end
64
+ end
@@ -0,0 +1,169 @@
1
+ class AWS
2
+
3
+ module RDS
4
+
5
+ module Formats
6
+
7
+ BASIC = {
8
+ 'ResponseMetadata' => {'RequestId' => String}
9
+ }
10
+
11
+ DB_PARAMETER_GROUP = {
12
+ 'DBParameterGroupFamily' => String,
13
+ 'DBParameterGroupName'=> String,
14
+ 'Description'=> String
15
+ }
16
+ CREATE_DB_PARAMETER_GROUP = {
17
+ 'ResponseMetadata' => {'RequestId' => String},
18
+ 'CreateDBParameterGroupResult' => {
19
+ 'DBParameterGroup' => DB_PARAMETER_GROUP
20
+ }
21
+ }
22
+
23
+ DESCRIBE_DB_PARAMETER_GROUP = {
24
+ 'ResponseMetadata' => {'RequestId' => String},
25
+ 'DescribeDBParameterGroupsResult' =>{
26
+ 'DBParameterGroups' => [DB_PARAMETER_GROUP]
27
+ }
28
+ }
29
+
30
+ MODIFY_PARAMETER_GROUP = BASIC.merge({
31
+ 'ModifyDBParameterGroupResult' => {
32
+ 'DBParameterGroupName' => String
33
+ }
34
+ })
35
+
36
+ DB_PARAMETER = {
37
+ 'ParameterValue' => Fog::Nullable::String,
38
+ 'DataType' => String,
39
+ 'AllowedValues' => Fog::Nullable::String,
40
+ 'Source' => String,
41
+ 'IsModifiable' => Fog::Boolean,
42
+ 'Description' => String,
43
+ 'ParameterName' => String,
44
+ 'ApplyType' => String,
45
+ }
46
+ DESCRIBE_DB_PARAMETERS = BASIC.merge({
47
+ 'DescribeDBParametersResult' => {
48
+ 'Marker' => Fog::Nullable::String,
49
+ 'Parameters' => [DB_PARAMETER]
50
+ }
51
+
52
+ })
53
+
54
+
55
+ SNAPSHOT={
56
+ 'AllocatedStorage' => Integer,
57
+ 'AvailabilityZone' => String,
58
+ 'DBInstanceIdentifier' => String,
59
+ 'DBSnapshotIdentifier' => String,
60
+ 'EngineVersion' => String,
61
+ 'Engine' => String,
62
+ 'InstanceCreateTime' => Time,
63
+ 'MasterUsername' => String,
64
+ 'Port' => Integer,
65
+ 'SnapshotCreateTime' => Fog::Nullable::Time,
66
+ 'Status' => String
67
+ }
68
+ INSTANCE = {
69
+ 'AllocatedStorage' => Integer,
70
+ 'AutoMinorVersionUpgrade' => Fog::Boolean,
71
+ 'AvailabilityZone' => Fog::Nullable::String,
72
+ 'BackupRetentionPeriod' => Integer,
73
+ 'DBInstanceClass' => String,
74
+ 'DBInstanceIdentifier' => String,
75
+ 'DBInstanceStatus' => String,
76
+ 'DBName' => Fog::Nullable::String,
77
+ 'DBParameterGroups' => [{
78
+ 'ParameterApplyStatus' => String,
79
+ 'DBParameterGroupName' => String
80
+ }],
81
+ 'DBSecurityGroups' => [{
82
+ 'Status' => String,
83
+ 'DBSecurityGroupName' => String
84
+ }],
85
+ 'Endpoint' => {
86
+ 'Address' => Fog::Nullable::String,
87
+ 'Port' => Fog::Nullable::Integer
88
+ },
89
+ 'Engine' => String,
90
+ 'EngineVersion' => String,
91
+ 'InstanceCreateTime' => Fog::Nullable::Time,
92
+ 'LatestRestorableTime' => Fog::Nullable::Time,
93
+ 'MasterUsername' => String,
94
+ 'MultiAZ' => Fog::Boolean,
95
+ 'PendingModifiedValues' => {
96
+ 'BackupRetentionPeriod' => Fog::Nullable::Integer,
97
+ 'DBInstanceClass' => Fog::Nullable::String,
98
+ 'EngineVersion' => Fog::Nullable::String,
99
+ 'MasterUserPassword' => Fog::Nullable::String,
100
+ 'MultiAZ' => Fog::Nullable::String,
101
+ 'AllocatedStorage' => Fog::Nullable::Integer,
102
+ 'Port' => Fog::Nullable::Integer
103
+ },
104
+ 'PreferredBackupWindow'=> String,
105
+ 'PreferredMaintenanceWindow'=> String,
106
+ 'ReadReplicaDBInstanceIdentifiers'=> [String],
107
+ 'ReadReplicaSourceDBInstanceIdentifier'=> Fog::Nullable::String
108
+ }
109
+
110
+ CREATE_DB_INSTANCE = BASIC.merge({
111
+ 'CreateDBInstanceResult' => {
112
+ 'DBInstance' => INSTANCE
113
+ }
114
+ })
115
+
116
+ DESCRIBE_DB_INSTANCES = BASIC.merge({
117
+ 'DescribeDBInstancesResult' => {
118
+ 'Marker' => Fog::Nullable::String,
119
+ 'DBInstances' => [INSTANCE]
120
+ }
121
+ })
122
+
123
+ MODIFY_DB_INSTANCE = BASIC.merge({
124
+ 'ModifyDBInstanceResult' => {
125
+ 'DBInstance' => INSTANCE
126
+ }
127
+ })
128
+
129
+ DELETE_DB_INSTANCE = BASIC.merge({
130
+ 'DeleteDBInstanceResult' => {
131
+ 'DBInstance' => INSTANCE
132
+ }
133
+ })
134
+
135
+ REBOOT_DB_INSTANCE = BASIC.merge({
136
+ 'RebootDBInstanceResult' => {
137
+ 'DBInstance' => INSTANCE
138
+ }
139
+ })
140
+
141
+ CREATE_READ_REPLICA = BASIC.merge({
142
+ 'CreateDBInstanceReadReplicaResult' => {
143
+ 'DBInstance' => INSTANCE
144
+ }
145
+ })
146
+
147
+ CREATE_DB_SNAPSHOT = BASIC.merge({
148
+ 'CreateDBSnapshotResult' => {
149
+ 'DBSnapshot' => SNAPSHOT
150
+ }
151
+ })
152
+
153
+ DESCRIBE_DB_SNAPSHOTS = BASIC.merge({
154
+ 'DescribeDBSnapshotsResult' => {
155
+ 'Marker' => Fog::Nullable::String,
156
+ 'DBSnapshots' => [SNAPSHOT]
157
+ }
158
+ })
159
+ DELETE_DB_SNAPSHOT = BASIC.merge({
160
+ 'DeleteDBSnapshotResult' => {
161
+ 'DBSnapshot' => SNAPSHOT
162
+ }
163
+ })
164
+
165
+ end
166
+
167
+ end
168
+
169
+ end
@@ -0,0 +1,129 @@
1
+ Shindo.tests('AWS::RDS | instance requests', ['aws', 'rds']) do
2
+ @db_instance_id='fog-test'
3
+ @db_replica_id='fog-replica'
4
+
5
+ tests('success') do
6
+ pending if Fog.mocking?
7
+
8
+ tests("#create_db_instance").formats(AWS::RDS::Formats::CREATE_DB_INSTANCE) do
9
+ result = AWS[:rds].create_db_instance(@db_instance_id, 'AllocatedStorage' => 5,
10
+ 'DBInstanceClass' => 'db.m1.small',
11
+ 'Engine' => 'mysql',
12
+ 'EngineVersion' => '5.1.50',
13
+ 'MasterUsername' => 'foguser',
14
+ 'BackupRetentionPeriod' => 1,
15
+ 'MasterUserPassword' => 'fogpassword').body
16
+
17
+ instance = result['CreateDBInstanceResult']['DBInstance']
18
+ returns('creating'){ instance['DBInstanceStatus']}
19
+ result
20
+ end
21
+
22
+ tests("#describe_db_instances").formats(AWS::RDS::Formats::DESCRIBE_DB_INSTANCES) do
23
+ AWS[:rds].describe_db_instances.body
24
+ end
25
+
26
+ server = AWS[:rds].servers.get(@db_instance_id)
27
+ server.wait_for {ready?}
28
+
29
+
30
+ tests("#modify_db_instance with immediate apply").formats(AWS::RDS::Formats::MODIFY_DB_INSTANCE) do
31
+ body = AWS[:rds].modify_db_instance( @db_instance_id, true, 'AllocatedStorage'=> 10).body
32
+ tests 'pending storage' do
33
+ instance = body['ModifyDBInstanceResult']['DBInstance']
34
+ returns(10){instance['PendingModifiedValues']['AllocatedStorage']}
35
+ end
36
+ body
37
+ end
38
+ server.wait_for { state == 'modifying'}
39
+ server.wait_for { state == 'available'}
40
+
41
+ server.reload
42
+ tests 'new storage' do
43
+ returns(10){ server.allocated_storage}
44
+ end
45
+
46
+ tests("reboot db instance") do
47
+ tests("#reboot").formats(AWS::RDS::Formats::REBOOT_DB_INSTANCE) do
48
+ AWS[:rds].reboot_db_instance( @db_instance_id).body
49
+ end
50
+
51
+ server.wait_for { state == 'rebooting'}
52
+ server.wait_for { state == 'available'}
53
+ server.reload
54
+ end
55
+
56
+
57
+ tests("#create_db_snapshot").formats(AWS::RDS::Formats::CREATE_DB_SNAPSHOT) do
58
+ body = AWS[:rds].create_db_snapshot(@db_instance_id, 'fog-snapshot').body
59
+ returns('creating'){ body['CreateDBSnapshotResult']['DBSnapshot']['Status']}
60
+ body
61
+ end
62
+
63
+ tests("#describe_db_snapshots").formats(AWS::RDS::Formats::DESCRIBE_DB_SNAPSHOTS) do
64
+ body = AWS[:rds].describe_db_snapshots().body
65
+ end
66
+
67
+ Fog.wait_for do
68
+ data = AWS[:rds].describe_db_snapshots(:snapshot_id => 'fog-snapshot')
69
+ status = data.body['DescribeDBSnapshotsResult']['DBSnapshots'].first['Status']
70
+ status =='available'
71
+ end
72
+
73
+ tests( "#create read replica").formats(AWS::RDS::Formats::CREATE_READ_REPLICA) do
74
+ AWS[:rds].create_db_instance_read_replica(@db_replica_id, @db_instance_id).body
75
+ end
76
+
77
+ replica = AWS[:rds].servers.get(@db_replica_id)
78
+ replica.wait_for {ready?}
79
+
80
+ tests("replica source") do
81
+ returns(@db_instance_id){replica.read_replica_source}
82
+ end
83
+ server.reload
84
+
85
+ tests("replica identifiers") do
86
+ returns([@db_replica_id]){server.read_replica_identifiers}
87
+ end
88
+
89
+ tests("#delete_db_instance").formats(AWS::RDS::Formats::DELETE_DB_INSTANCE) do
90
+ AWS[:rds].delete_db_instance(@db_replica_id, nil, true)
91
+ body = AWS[:rds].delete_db_instance(@db_instance_id, 'fog-final-snapshot').body
92
+ Fog.wait_for do
93
+ AWS[:rds].servers.length == 0
94
+ end
95
+
96
+ tests "final snapshot" do
97
+ returns('available'){AWS[:rds].describe_db_snapshots(:snapshot_id => 'fog-final-snapshot').body['DescribeDBSnapshotsResult']['DBSnapshots'].first['Status']}
98
+ end
99
+ body
100
+ end
101
+
102
+
103
+
104
+ tests("#delete_db_snapshot").formats(AWS::RDS::Formats::DELETE_DB_SNAPSHOT) do
105
+ AWS[:rds].delete_db_snapshot('fog-snapshot').body
106
+ end
107
+
108
+ AWS[:rds].delete_db_snapshot('fog-final-snapshot')
109
+
110
+ returns([]){ AWS[:rds].describe_db_snapshots.body['DescribeDBSnapshotsResult']['DBSnapshots']}
111
+
112
+ end
113
+
114
+ tests('failure') do
115
+ pending if Fog.mocking?
116
+
117
+ tests "deleting nonexisting instance" do
118
+ raises(Fog::AWS::RDS::NotFound) {AWS[:rds].delete_db_instance('doesnexist', 'irrelevant')}
119
+ end
120
+ tests "deleting non existing snapshot" do
121
+ raises(Fog::AWS::RDS::NotFound) {AWS[:rds].delete_db_snapshot('doesntexist')}
122
+ end
123
+ tests "modifying non existing instance" do
124
+ raises(Fog::AWS::RDS::NotFound) { AWS[:rds].modify_db_instance 'doesntexit', true, 'AllocatedStorage'=> 10}
125
+ end
126
+ end
127
+ end
128
+
129
+