newrelic-amazon-ec2 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/.yardopts +1 -0
- data/ChangeLog +293 -0
- data/LICENSE +66 -0
- data/README.rdoc +354 -0
- data/README_dev.rdoc +12 -0
- data/Rakefile +101 -0
- data/VERSION +1 -0
- data/amazon-ec2.gemspec +134 -0
- data/bin/ec2-gem-example.rb +137 -0
- data/bin/ec2-gem-profile.rb +10 -0
- data/bin/ec2sh +62 -0
- data/bin/setup.rb +28 -0
- data/deps.rip +1 -0
- data/lib/AWS.rb +292 -0
- data/lib/AWS/Autoscaling.rb +70 -0
- data/lib/AWS/Autoscaling/autoscaling.rb +273 -0
- data/lib/AWS/Cloudwatch.rb +32 -0
- data/lib/AWS/Cloudwatch/monitoring.rb +89 -0
- data/lib/AWS/EC2.rb +33 -0
- data/lib/AWS/EC2/availability_zones.rb +21 -0
- data/lib/AWS/EC2/console.rb +23 -0
- data/lib/AWS/EC2/elastic_ips.rb +81 -0
- data/lib/AWS/EC2/image_attributes.rb +133 -0
- data/lib/AWS/EC2/images.rb +101 -0
- data/lib/AWS/EC2/instances.rb +212 -0
- data/lib/AWS/EC2/keypairs.rb +61 -0
- data/lib/AWS/EC2/products.rb +21 -0
- data/lib/AWS/EC2/security_groups.rb +183 -0
- data/lib/AWS/EC2/snapshots.rb +59 -0
- data/lib/AWS/EC2/volumes.rb +115 -0
- data/lib/AWS/ELB.rb +71 -0
- data/lib/AWS/ELB/load_balancers.rb +178 -0
- data/lib/AWS/exceptions.rb +122 -0
- data/lib/AWS/responses.rb +21 -0
- data/newrelic-amazon-ec2.gemspec +136 -0
- data/perftools/ec2prof +0 -0
- data/perftools/ec2prof-results.dot +132 -0
- data/perftools/ec2prof-results.txt +100 -0
- data/perftools/ec2prof.symbols +102 -0
- data/test/test_Autoscaling_groups.rb +336 -0
- data/test/test_EC2.rb +68 -0
- data/test/test_EC2_availability_zones.rb +49 -0
- data/test/test_EC2_console.rb +54 -0
- data/test/test_EC2_elastic_ips.rb +144 -0
- data/test/test_EC2_image_attributes.rb +238 -0
- data/test/test_EC2_images.rb +197 -0
- data/test/test_EC2_instances.rb +429 -0
- data/test/test_EC2_keypairs.rb +123 -0
- data/test/test_EC2_products.rb +48 -0
- data/test/test_EC2_responses.rb +53 -0
- data/test/test_EC2_s3_xmlsimple.rb +80 -0
- data/test/test_EC2_security_groups.rb +205 -0
- data/test/test_EC2_snapshots.rb +83 -0
- data/test/test_EC2_volumes.rb +142 -0
- data/test/test_ELB_load_balancers.rb +239 -0
- data/test/test_helper.rb +23 -0
- data/wsdl/2007-08-29.ec2.wsdl +1269 -0
- data/wsdl/2008-02-01.ec2.wsdl +1614 -0
- data/wsdl/2008-05-05.ec2.wsdl +2052 -0
- data/wsdl/2008-12-01.ec2.wsdl +2354 -0
- metadata +218 -0
@@ -0,0 +1,336 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
context "autoscaling " do
|
4
|
+
before do
|
5
|
+
@as = AWS::Autoscaling::Base.new( :access_key_id => "not a key", :secret_access_key => "not a secret" )
|
6
|
+
|
7
|
+
@valid_create_launch_configuration_params = {
|
8
|
+
:image_id => "ami-ed46a784",
|
9
|
+
:launch_configuration_name => "TestAutoscalingGroupName",
|
10
|
+
:instance_type => "m1.small"
|
11
|
+
}
|
12
|
+
|
13
|
+
@error_response_for_creation = <<-RESPONSE
|
14
|
+
<ErrorResponse xmlns="http://autoscaling.amazonaws.com/doc/2009-05-15/">
|
15
|
+
<Error>
|
16
|
+
<Type>Sender</Type>
|
17
|
+
<Code>AlreadyExists</Code>
|
18
|
+
<Message>Launch Configuration by this name already exists - A launch configuration already exists with the name TestAutoscalingGroupName</Message>
|
19
|
+
</Error>
|
20
|
+
<RequestId>31d00b03-ad6a-11de-a47f-a5c562feca13</RequestId>
|
21
|
+
</ErrorResponse>
|
22
|
+
RESPONSE
|
23
|
+
|
24
|
+
@delete_launch_configuration_response = <<-RESPONSE
|
25
|
+
<DeleteLaunchConfigurationResponse xmlns="http://autoscaling.amazonaws.com/doc/2009-05-15/">
|
26
|
+
<ResponseMetadata>
|
27
|
+
<RequestId>5f5717d3-ad6c-11de-b1c0-1b00aadc5f72</RequestId>
|
28
|
+
</ResponseMetadata>
|
29
|
+
</DeleteLaunchConfigurationResponse>
|
30
|
+
RESPONSE
|
31
|
+
|
32
|
+
@create_launch_configuration_response = "<CreateLaunchConfigurationResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">\n <ResponseMetadata>\n <RequestId>6062466f-ad6c-11de-b82f-996c936914c5</RequestId>\n </ResponseMetadata>\n</CreateLaunchConfigurationResponse>\n"
|
33
|
+
|
34
|
+
@create_autoscaling_group_response = "<CreateAutoScalingGroupResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">\n <ResponseMetadata>\n <RequestId>cc4f9960-ad6e-11de-b82f-996c936914c5</RequestId>\n </ResponseMetadata>\n</CreateAutoScalingGroupResponse>\n"
|
35
|
+
|
36
|
+
@delete_autoscaling_group = "<DeleteAutoScalingGroupResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
37
|
+
<ResponseMetadata><RequestId>e64fc4c3-e10b-11dd-a73e-2d774d6aee71</RequestId></ResponseMetadata></DeleteAutoScalingGroupResponse>"
|
38
|
+
@create_or_update_trigger_response = "<CreateOrUpdateScalingTriggerResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
39
|
+
<ResponseMetadata>
|
40
|
+
<RequestId>503d309d-e10b-11dd-a73e-2d774d6aee71</RequestId>
|
41
|
+
</ResponseMetadata>
|
42
|
+
</CreateOrUpdateScalingTriggerResponse>"
|
43
|
+
end
|
44
|
+
|
45
|
+
specify "AWS::Autoscaling::Base should give back a nice response if there is an error" do
|
46
|
+
@as.stubs(:make_request).with('CreateLaunchConfiguration', {
|
47
|
+
'ImageId' => 'ami-ed46a784',
|
48
|
+
'LaunchConfigurationName' => 'TestAutoscalingGroupName',
|
49
|
+
'InstanceType' => "m1.small"
|
50
|
+
}).returns stub(:body => @error_response_for_creation, :is_a? => true)
|
51
|
+
|
52
|
+
response = @as.create_launch_configuration( :image_id => "ami-ed46a784", :launch_configuration_name => "TestAutoscalingGroupName", :instance_type => "m1.small")
|
53
|
+
response.should.be.an.instance_of Hash
|
54
|
+
response["Error"]["Message"].should.equal "Launch Configuration by this name already exists - A launch configuration already exists with the name TestAutoscalingGroupName"
|
55
|
+
end
|
56
|
+
|
57
|
+
specify "AWS::Autoscaling::Base should destroy a launch configuration just fine" do
|
58
|
+
@as.stubs(:make_request).with('DeleteLaunchConfiguration', {
|
59
|
+
'LaunchConfigurationName' => 'TestAutoscalingGroupName1'
|
60
|
+
}).returns stub(:body => @delete_launch_configuration_response, :is_a? => true)
|
61
|
+
|
62
|
+
response = @as.delete_launch_configuration( :launch_configuration_name => "TestAutoscalingGroupName1" )
|
63
|
+
response.should.be.an.instance_of Hash
|
64
|
+
end
|
65
|
+
|
66
|
+
specify "AWS::Autoscaling::Base should create a launch configuration" do
|
67
|
+
@as.stubs(:make_request).with('CreateLaunchConfiguration', {
|
68
|
+
'ImageId' => 'ami-ed46a784',
|
69
|
+
'LaunchConfigurationName' => 'CustomTestAutoscalingGroupName',
|
70
|
+
'InstanceType' => "m1.small"
|
71
|
+
}).returns stub(:body => @create_launch_configuration_response, :is_a? => true)
|
72
|
+
|
73
|
+
response = @as.create_launch_configuration( :image_id => "ami-ed46a784", :launch_configuration_name => "CustomTestAutoscalingGroupName", :instance_type => "m1.small")
|
74
|
+
response.should.be.an.instance_of Hash
|
75
|
+
end
|
76
|
+
|
77
|
+
specify "AWS::Autoscaling::Base should be able to create a new autoscaling group" do
|
78
|
+
@as.stubs(:make_request).with("CreateAutoScalingGroup", {
|
79
|
+
'AutoScalingGroupName' => 'CloudteamTestAutoscalingGroup1',
|
80
|
+
'AvailabilityZones.member.1' => 'us-east-1a',
|
81
|
+
'LoadBalancerNames' => 'TestLoadBalancerName',
|
82
|
+
'LaunchConfigurationName' => 'CloudteamTestAutoscaling',
|
83
|
+
'MinSize' => "1", 'MaxSize' => "3"
|
84
|
+
}).returns stub(:body => @create_autoscaling_group_response, :is_a? => true)
|
85
|
+
response = @as.create_autoscaling_group(:autoscaling_group_name => "CloudteamTestAutoscalingGroup1", :availability_zones => "us-east-1a", :load_balancer_names => "TestLoadBalancerName", :launch_configuration_name => "CloudteamTestAutoscaling", :min_size => 1, :max_size => 3)
|
86
|
+
response.should.be.an.instance_of Hash
|
87
|
+
end
|
88
|
+
|
89
|
+
specify "AWS::Autoscaling::Base should destroy an autoscaling group" do
|
90
|
+
@as.stubs(:make_request).with('DeleteAutoScalingGroup', {
|
91
|
+
'AutoScalingGroupName' => 'TestAutoscalingGroupName1'
|
92
|
+
}).returns stub(:body => @delete_autoscaling_group, :is_a? => true)
|
93
|
+
|
94
|
+
response = @as.delete_autoscaling_group( :autoscaling_group_name => "TestAutoscalingGroupName1" )
|
95
|
+
response.should.be.an.instance_of Hash
|
96
|
+
end
|
97
|
+
|
98
|
+
specify "AWS::Autoscaling::Base should be able to create a new scaling trigger" do
|
99
|
+
@as.stubs(:make_request).with("CreateOrUpdateScalingTrigger", {
|
100
|
+
'AutoScalingGroupName' => 'AutoScalingGroupName',
|
101
|
+
'Unit' => "Seconds",
|
102
|
+
'Dimensions.member.1.Name' => "AutoScalingGroupName",
|
103
|
+
'Dimensions.member.1.Value' => "Bob",
|
104
|
+
'MeasureName' => "CPUUtilization",
|
105
|
+
'Statistic' => 'Average',
|
106
|
+
'Period' => '120',
|
107
|
+
'TriggerName' => "AFunNameForATrigger",
|
108
|
+
'LowerThreshold' => "0.2",
|
109
|
+
'LowerBreachScaleIncrement' => "-1",
|
110
|
+
'UpperThreshold' => "1.5",
|
111
|
+
'UpperBreachScaleIncrement' => "1",
|
112
|
+
'BreachDuration' => "120"
|
113
|
+
}).returns stub(:body => @create_or_update_trigger_response, :is_a? => true)
|
114
|
+
|
115
|
+
valid_create_or_update_scaling_trigger_params = {:autoscaling_group_name => "AutoScalingGroupName", :dimensions => {:name => "AutoScalingGroupName", :value => "Bob"}, :unit => "Seconds", :measure_name => "CPUUtilization", :statistic => "Average", :period => 120, :trigger_name => "AFunNameForATrigger", :lower_threshold => 0.2, :lower_breach_scale_increment => "-1", :upper_threshold => 1.5, :upper_breach_scale_increment => 1, :breach_duration => 120}
|
116
|
+
|
117
|
+
%w(dimensions autoscaling_group_name measure_name statistic period trigger_name lower_threshold lower_breach_scale_increment upper_threshold upper_breach_scale_increment breach_duration).each do |meth_str|
|
118
|
+
lambda { @as.create_or_updated_scaling_trigger(valid_create_or_update_scaling_trigger_params.merge(meth_str.to_sym=>nil)) }.should.raise(AWS::ArgumentError)
|
119
|
+
end
|
120
|
+
|
121
|
+
response = @as.create_or_updated_scaling_trigger(valid_create_or_update_scaling_trigger_params)
|
122
|
+
response.should.be.an.instance_of Hash
|
123
|
+
end
|
124
|
+
|
125
|
+
specify "AWS::Autoscaling::Base should destroy a launch configuration group" do
|
126
|
+
@as.stubs(:make_request).with('DeleteLaunchConfiguration', {
|
127
|
+
'LaunchConfigurationName' => 'LaunchConfiguration'
|
128
|
+
}).returns stub(:body => " <DeleteLaunchConfigurationResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
129
|
+
<ResponseMetadata><RequestId>e64fc4c3-e10b-11dd-a73e-2d774d6aee71</RequestId></ResponseMetadata>
|
130
|
+
</DeleteLaunchConfigurationResponse>", :is_a? => true)
|
131
|
+
|
132
|
+
response = @as.delete_launch_configuration( :launch_configuration_name => "LaunchConfiguration" )
|
133
|
+
response.should.be.an.instance_of Hash
|
134
|
+
end
|
135
|
+
|
136
|
+
specify "AWS::Autoscaling::Base should destroy a scaling trigger" do
|
137
|
+
@as.stubs(:make_request).with('DeleteTrigger', {
|
138
|
+
'TriggerName' => 'DeletingTrigger', 'AutoScalingGroupName' => "Name"
|
139
|
+
}).returns stub(:body => " <DeleteTriggerResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
140
|
+
<ResponseMetadata>
|
141
|
+
<RequestId>cca38097-e10b-11dd-a73e-2d774d6aee71</RequestId>
|
142
|
+
</ResponseMetadata>
|
143
|
+
</DeleteTriggerResponse>", :is_a? => true)
|
144
|
+
|
145
|
+
response = @as.delete_trigger( :trigger_name => "DeletingTrigger", :autoscaling_group_name => "Name" )
|
146
|
+
response.should.be.an.instance_of Hash
|
147
|
+
end
|
148
|
+
|
149
|
+
specify "AWS::Autoscaling::Base should describe the autoscaling groups" do
|
150
|
+
@as.stubs(:make_request).with('DescribeAutoScalingGroups', {
|
151
|
+
'AutoScalingGroupNames.member.1' => "webtier"
|
152
|
+
}).returns stub(:body => "<DescribeAutoScalingGroupsResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
153
|
+
<DescribeAutoScalingGroupsResult>
|
154
|
+
<AutoScalingGroups>
|
155
|
+
<member>
|
156
|
+
<MinSize>0</MinSize>
|
157
|
+
<CreatedTime>2009-01-13T00:38:54Z</CreatedTime>
|
158
|
+
<AvailabilityZones>
|
159
|
+
<member>us-east-1c</member>
|
160
|
+
</AvailabilityZones>
|
161
|
+
<Cooldown>0</Cooldown>
|
162
|
+
<LaunchConfigurationName>wt20080929</LaunchConfigurationName>
|
163
|
+
<AutoScalingGroupName>webtier</AutoScalingGroupName>
|
164
|
+
<DesiredCapacity>1</DesiredCapacity>
|
165
|
+
<Instances>
|
166
|
+
<member>
|
167
|
+
<InstanceId>i-8fa224e6</InstanceId>
|
168
|
+
<LifecycleState>InService</LifecycleState>
|
169
|
+
<AvailabilityZone>us-east-1c</AvailabilityZone>
|
170
|
+
</member>
|
171
|
+
</Instances>
|
172
|
+
<MaxSize>1</MaxSize>
|
173
|
+
</member>
|
174
|
+
</AutoScalingGroups>
|
175
|
+
</DescribeAutoScalingGroupsResult>
|
176
|
+
<ResponseMetadata>
|
177
|
+
<RequestId>70f2e8af-e10b-11dd-a73e-2d774d6aee71</RequestId>
|
178
|
+
</ResponseMetadata>
|
179
|
+
</DescribeAutoScalingGroupsResponse>", :is_a? => true)
|
180
|
+
|
181
|
+
response = @as.describe_autoscaling_groups( :autoscaling_group_names => ["webtier"] )
|
182
|
+
response.should.be.an.instance_of Hash
|
183
|
+
end
|
184
|
+
|
185
|
+
specify "AWS::Autoscaling::Base should describe the launch configurations" do
|
186
|
+
@as.stubs(:make_request).with('DescribeLaunchConfigurations', {
|
187
|
+
'AutoScalingGroupNames.member.1' => "webtier"
|
188
|
+
}).returns stub(:body => "<DescribeLaunchConfigurationsResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
189
|
+
<DescribeLaunchConfigurationsResult>
|
190
|
+
<LaunchConfigurations>
|
191
|
+
<member>
|
192
|
+
<InstanceType>m1.small</InstanceType>
|
193
|
+
<BlockDeviceMappings/>
|
194
|
+
<KeyName/>
|
195
|
+
<SecurityGroups/>
|
196
|
+
<ImageId>ami-f7c5219e</ImageId>
|
197
|
+
<RamdiskId/>
|
198
|
+
<CreatedTime>2009-01-13T00:35:31Z</CreatedTime>
|
199
|
+
<KernelId/>
|
200
|
+
<LaunchConfigurationName>wt20080929</LaunchConfigurationName>
|
201
|
+
<UserData/>
|
202
|
+
</member>
|
203
|
+
</LaunchConfigurations>
|
204
|
+
</DescribeLaunchConfigurationsResult>
|
205
|
+
<ResponseMetadata>
|
206
|
+
<RequestId>2e14cb6c-e10a-11dd-a73e-2d774d6aee71</RequestId>
|
207
|
+
</ResponseMetadata>
|
208
|
+
</DescribeLaunchConfigurationsResponse>", :is_a? => true)
|
209
|
+
|
210
|
+
response = @as.describe_launch_configurations( :launch_configuration_names => ["webtier"] )
|
211
|
+
response.should.be.an.instance_of Hash
|
212
|
+
end
|
213
|
+
|
214
|
+
|
215
|
+
specify "AWS::Autoscaling::Base should describe the launch configurations" do
|
216
|
+
@as.stubs(:make_request).with('DescribeScalingActivities', {
|
217
|
+
'AutoScalingGroupName' => "webtier"
|
218
|
+
}).returns stub(:body => "<DescribeScalingActivitiesResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
219
|
+
<DescribeScalingActivitiesResult>
|
220
|
+
<Activities>
|
221
|
+
<member>
|
222
|
+
<ActivityId>885b2900-0f2e-497a-8ec6-b1b90a9ddee0</ActivityId>
|
223
|
+
<StartTime>2009-03-29T04:07:07Z</StartTime>
|
224
|
+
<Progress>0</Progress>
|
225
|
+
<StatusCode>InProgress</StatusCode>
|
226
|
+
<Cause>Automated Capacity Adjustment</Cause>
|
227
|
+
<Description>Launching a new EC2 instance</Description>
|
228
|
+
</member>
|
229
|
+
</Activities>
|
230
|
+
</DescribeScalingActivitiesResult>
|
231
|
+
<ResponseMetadata>
|
232
|
+
<RequestId>f0321780-e10a-11dd-a73e-2d774d6aee71</RequestId>
|
233
|
+
</ResponseMetadata>
|
234
|
+
</DescribeScalingActivitiesResponse>", :is_a? => true)
|
235
|
+
|
236
|
+
response = @as.describe_scaling_activities( :autoscaling_group_name => "webtier" )
|
237
|
+
response.should.be.an.instance_of Hash
|
238
|
+
end
|
239
|
+
|
240
|
+
specify "AWS::Autoscaling::Base should describe triggers" do
|
241
|
+
@as.stubs(:make_request).with('DescribeTriggers', {
|
242
|
+
'AutoScalingGroupName' => "webtier"
|
243
|
+
}).returns stub(:body => " <DescribeTriggersResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
244
|
+
<DescribeTriggersResult>
|
245
|
+
<Triggers>
|
246
|
+
<member>
|
247
|
+
<BreachDuration>300</BreachDuration>
|
248
|
+
<UpperBreachScaleIncrement>1</UpperBreachScaleIncrement>
|
249
|
+
<CreatedTime>2009-01-13T00:44:19Z</CreatedTime>
|
250
|
+
<UpperThreshold>60.0</UpperThreshold>
|
251
|
+
<Status>NoData</Status>
|
252
|
+
<LowerThreshold>0.0</LowerThreshold>
|
253
|
+
<Period>60</Period>
|
254
|
+
<LowerBreachScaleIncrement>-1</LowerBreachScaleIncrement>
|
255
|
+
<TriggerName>tenpct</TriggerName>
|
256
|
+
<Statistic>Average</Statistic>
|
257
|
+
<Unit>None</Unit>
|
258
|
+
<Namespace>AWS/EC2</Namespace>
|
259
|
+
<Dimensions>
|
260
|
+
|
261
|
+
<member>
|
262
|
+
<Name>AutoScalingGroupName</Name>
|
263
|
+
<Value>webtier</Value>
|
264
|
+
</member>
|
265
|
+
</Dimensions>
|
266
|
+
<AutoScalingGroupName>webtier</AutoScalingGroupName>
|
267
|
+
<MeasureName>CPUUtilization</MeasureName>
|
268
|
+
</member>
|
269
|
+
</Triggers>
|
270
|
+
</DescribeTriggersResult>
|
271
|
+
<ResponseMetadata>
|
272
|
+
<RequestId>5c33c82a-e10b-11dd-a73e-2d774d6aee71</RequestId>
|
273
|
+
</ResponseMetadata>
|
274
|
+
</DescribeTriggersResponse>", :is_a? => true)
|
275
|
+
|
276
|
+
response = @as.describe_triggers( :autoscaling_group_name => "webtier" )
|
277
|
+
response.should.be.an.instance_of Hash
|
278
|
+
end
|
279
|
+
|
280
|
+
specify "AWS::Autoscaling::Base should describe triggers" do
|
281
|
+
@as.stubs(:make_request).with('SetDesiredCapacity', {
|
282
|
+
'AutoScalingGroupName' => "name", 'DesiredCapacity' => '10'
|
283
|
+
}).returns stub(:body => " <SetDesiredCapacityResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
284
|
+
<ResponseMetadata>
|
285
|
+
<RequestId>d3f2091c-e10a-11dd-a73e- 2d774d6aee71</RequestId>
|
286
|
+
</ResponseMetadata>
|
287
|
+
</SetDesiredCapacityResponse>
|
288
|
+
", :is_a? => true)
|
289
|
+
|
290
|
+
response = @as.set_desired_capacity( :autoscaling_group_name => "name", :desired_capacity => "10" )
|
291
|
+
response.should.be.an.instance_of Hash
|
292
|
+
end
|
293
|
+
|
294
|
+
|
295
|
+
specify "AWS::Autoscaling::Base should terminate an instance in an autoscaling group" do
|
296
|
+
@as.stubs(:make_request).with('TerminateInstanceInAutoScalingGroup', {
|
297
|
+
'InstanceId' => "i-instance1"
|
298
|
+
}).returns stub(:body => " <DescribeTriggersResponse xmlns=\"http://autoscaling.amazonaws.com/doc/2009-05-15/\">
|
299
|
+
<DescribeTriggersResult>
|
300
|
+
<Triggers>
|
301
|
+
<member>
|
302
|
+
<BreachDuration>300</BreachDuration>
|
303
|
+
<UpperBreachScaleIncrement>1</UpperBreachScaleIncrement>
|
304
|
+
<CreatedTime>2009-01-13T00:44:19Z</CreatedTime>
|
305
|
+
<UpperThreshold>60.0</UpperThreshold>
|
306
|
+
<Status>NoData</Status>
|
307
|
+
<LowerThreshold>0.0</LowerThreshold>
|
308
|
+
<Period>60</Period>
|
309
|
+
<LowerBreachScaleIncrement>-1</LowerBreachScaleIncrement>
|
310
|
+
<TriggerName>tenpct</TriggerName>
|
311
|
+
<Statistic>Average</Statistic>
|
312
|
+
<Unit>None</Unit>
|
313
|
+
<Namespace>AWS/EC2</Namespace>
|
314
|
+
<Dimensions>
|
315
|
+
|
316
|
+
<member>
|
317
|
+
<Name>AutoScalingGroupName</Name>
|
318
|
+
<Value>webtier</Value>
|
319
|
+
</member>
|
320
|
+
</Dimensions>
|
321
|
+
<AutoScalingGroupName>webtier</AutoScalingGroupName>
|
322
|
+
<MeasureName>CPUUtilization</MeasureName>
|
323
|
+
</member>
|
324
|
+
</Triggers>
|
325
|
+
</DescribeTriggersResult>
|
326
|
+
<ResponseMetadata>
|
327
|
+
<RequestId>5c33c82a-e10b-11dd-a73e-2d774d6aee71</RequestId>
|
328
|
+
</ResponseMetadata>
|
329
|
+
</DescribeTriggersResponse>", :is_a? => true)
|
330
|
+
|
331
|
+
response = @as.terminate_instance_in_autoscaling_group( :instance_id => "i-instance1" )
|
332
|
+
response.should.be.an.instance_of Hash
|
333
|
+
end
|
334
|
+
|
335
|
+
|
336
|
+
end
|
data/test/test_EC2.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#--
|
2
|
+
# Amazon Web Services EC2 Query API Ruby library
|
3
|
+
#
|
4
|
+
# Ruby Gem Name:: amazon-ec2
|
5
|
+
# Author:: Glenn Rempe (mailto:glenn@rempe.us)
|
6
|
+
# Copyright:: Copyright (c) 2007-2008 Glenn Rempe
|
7
|
+
# License:: Distributes under the same terms as Ruby
|
8
|
+
# Home:: http://github.com/grempe/amazon-ec2/tree/master
|
9
|
+
#++
|
10
|
+
|
11
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
12
|
+
|
13
|
+
context "The EC2 method " do
|
14
|
+
|
15
|
+
before do
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "AWS::EC2::Base attribute readers should be available" do
|
19
|
+
@ec2 = AWS::EC2::Base.new( :access_key_id => "not a key",
|
20
|
+
:secret_access_key => "not a secret",
|
21
|
+
:use_ssl => true,
|
22
|
+
:server => "foo.example.com" )
|
23
|
+
|
24
|
+
@ec2.use_ssl.should.equal true
|
25
|
+
@ec2.port.should.equal 443
|
26
|
+
@ec2.server.should.equal "foo.example.com"
|
27
|
+
end
|
28
|
+
|
29
|
+
specify "AWS::EC2::Base should work with insecure connections as well" do
|
30
|
+
@ec2 = AWS::EC2::Base.new( :access_key_id => "not a key",
|
31
|
+
:secret_access_key => "not a secret",
|
32
|
+
:use_ssl => false,
|
33
|
+
:server => "foo.example.com" )
|
34
|
+
|
35
|
+
@ec2.use_ssl.should.equal false
|
36
|
+
@ec2.port.should.equal 80
|
37
|
+
@ec2.server.should.equal "foo.example.com"
|
38
|
+
end
|
39
|
+
|
40
|
+
specify "AWS::EC2::Base should allow specification of port" do
|
41
|
+
@ec2 = AWS::EC2::Base.new( :access_key_id => "not a key",
|
42
|
+
:secret_access_key => "not a secret",
|
43
|
+
:use_ssl => true,
|
44
|
+
:server => "foo.example.com",
|
45
|
+
:port => 8443 )
|
46
|
+
|
47
|
+
@ec2.use_ssl.should.equal true
|
48
|
+
@ec2.port.should.equal 8443
|
49
|
+
@ec2.server.should.equal "foo.example.com"
|
50
|
+
end
|
51
|
+
|
52
|
+
specify "AWS.canonical_string(path) should conform to Amazon's requirements " do
|
53
|
+
path = {"name1" => "value1", "name2" => "value2", "name3" => "value3"}
|
54
|
+
if ENV['EC2_URL'].nil? || ENV['EC2_URL'] == 'https://ec2.amazonaws.com'
|
55
|
+
AWS.canonical_string(path, 'ec2.amazonaws.com').should.equal "POST\nec2.amazonaws.com\n/\nname1=value1&name2=value2&name3=value3"
|
56
|
+
elsif ENV['EC2_URL'] == 'https://us-east-1.ec2.amazonaws.com'
|
57
|
+
AWS.canonical_string(path, 'ec2.amazonaws.com').should.equal "POST\nus-east-1.ec2.amazonaws.com\n/\nname1=value1&name2=value2&name3=value3"
|
58
|
+
elsif ENV['EC2_URL'] == 'https://eu-west-1.ec2.amazonaws.com'
|
59
|
+
AWS.canonical_string(path, 'ec2.amazonaws.com').should.equal "POST\neu-west-1.ec2.amazonaws.com\n/\nname1=value1&name2=value2&name3=value3"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
specify "AWS.encode should return the expected string" do
|
64
|
+
AWS.encode("secretaccesskey", "foobar123", urlencode=true).should.equal "e3jeuDc3DIX2mW8cVqWiByj4j5g%3D"
|
65
|
+
AWS.encode("secretaccesskey", "foobar123", urlencode=false).should.equal "e3jeuDc3DIX2mW8cVqWiByj4j5g="
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#--
|
2
|
+
# Amazon Web Services EC2 Query API Ruby library
|
3
|
+
#
|
4
|
+
# Ruby Gem Name:: amazon-ec2
|
5
|
+
# Author:: Glenn Rempe (mailto:glenn@rempe.us)
|
6
|
+
# Copyright:: Copyright (c) 2007-2008 Glenn Rempe
|
7
|
+
# License:: Distributes under the same terms as Ruby
|
8
|
+
# Home:: http://github.com/grempe/amazon-ec2/tree/master
|
9
|
+
#++
|
10
|
+
|
11
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
12
|
+
|
13
|
+
context "EC2 availability zones" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
@ec2 = AWS::EC2::Base.new( :access_key_id => "not a key", :secret_access_key => "not a secret" )
|
17
|
+
|
18
|
+
@describe_availability_zones_response_body = <<-RESPONSE
|
19
|
+
<DescribeAvailabilityZonesResponse xmlns="http://ec2.amazonaws.com/doc/2008-02-01/">
|
20
|
+
<availabilityZoneInfo>
|
21
|
+
<item>
|
22
|
+
<zoneName>us-east-1a</zoneName>
|
23
|
+
<zoneState>available</zoneState>
|
24
|
+
</item>
|
25
|
+
<item>
|
26
|
+
<zoneName>us-east-1b</zoneName>
|
27
|
+
<zoneState>available</zoneState>
|
28
|
+
</item>
|
29
|
+
</availabilityZoneInfo>
|
30
|
+
</DescribeAvailabilityZonesResponse>
|
31
|
+
RESPONSE
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
specify "should be able to be described with describe_availability_zones" do
|
36
|
+
@ec2.stubs(:make_request).with('DescribeAvailabilityZones', { "ZoneName.1" => "us-east-1a", "ZoneName.2" => "us-east-1b" }).
|
37
|
+
returns stub(:body => @describe_availability_zones_response_body, :is_a? => true)
|
38
|
+
@ec2.describe_availability_zones( :zone_name => ["us-east-1a", "us-east-1b"] ).should.be.an.instance_of Hash
|
39
|
+
|
40
|
+
response = @ec2.describe_availability_zones( :zone_name => ["us-east-1a", "us-east-1b"] )
|
41
|
+
|
42
|
+
response.availabilityZoneInfo.item[0].zoneName.should.equal "us-east-1a"
|
43
|
+
response.availabilityZoneInfo.item[0].zoneState.should.equal "available"
|
44
|
+
|
45
|
+
response.availabilityZoneInfo.item[1].zoneName.should.equal "us-east-1b"
|
46
|
+
response.availabilityZoneInfo.item[1].zoneState.should.equal "available"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|