elasticity 5.0.1 → 5.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY.md +5 -0
- data/lib/elasticity.rb +6 -1
- data/lib/elasticity/aws_request_v2.rb +42 -0
- data/lib/elasticity/aws_request_v4.rb +98 -0
- data/lib/elasticity/aws_session.rb +72 -0
- data/lib/elasticity/aws_utils.rb +65 -0
- data/lib/elasticity/emr.rb +1 -1
- data/lib/elasticity/version.rb +1 -1
- data/spec/lib/elasticity/aws_request_v2_spec.rb +38 -0
- data/spec/lib/elasticity/aws_request_v4_spec.rb +80 -0
- data/spec/lib/elasticity/aws_session_spec.rb +191 -0
- data/spec/lib/elasticity/aws_utils_spec.rb +105 -0
- data/spec/lib/elasticity/emr_spec.rb +26 -26
- metadata +14 -5
- data/lib/elasticity/aws_request.rb +0 -135
- data/spec/lib/elasticity/aws_request_spec.rb +0 -274
@@ -0,0 +1,191 @@
|
|
1
|
+
describe Elasticity::AwsSession do
|
2
|
+
|
3
|
+
before do
|
4
|
+
Timecop.freeze(Time.at(1302461096))
|
5
|
+
end
|
6
|
+
|
7
|
+
after do
|
8
|
+
Timecop.return
|
9
|
+
end
|
10
|
+
|
11
|
+
subject do
|
12
|
+
Elasticity::AwsSession.new('access', 'secret')
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#initialize' do
|
16
|
+
|
17
|
+
context 'when access and/or secret keys are provided' do
|
18
|
+
it 'should set them to the provided values' do
|
19
|
+
subject.access_key.should == 'access'
|
20
|
+
subject.secret_key.should == 'secret'
|
21
|
+
subject.region.should == 'us-east-1'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when :region is nil' do
|
26
|
+
it 'should be an error' do
|
27
|
+
expect {
|
28
|
+
Elasticity::AwsSession.new('_', '_', :region => nil)
|
29
|
+
}.to raise_error Elasticity::MissingRegionError, 'A valid :region is required to connect to EMR'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when :region is specified' do
|
34
|
+
Elasticity::AwsSession.new('_', '_', :region => 'TEST_REGION').region.should == 'TEST_REGION'
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when either access or secret key is not provided or nil' do
|
38
|
+
|
39
|
+
context 'when the proper environment variables are set' do
|
40
|
+
|
41
|
+
context 'when access and secret key are not provided' do
|
42
|
+
let(:default_values) { Elasticity::AwsSession.new }
|
43
|
+
before do
|
44
|
+
ENV.stub(:[]).with('AWS_ACCESS_KEY_ID').and_return('ENV_ACCESS')
|
45
|
+
ENV.stub(:[]).with('AWS_SECRET_ACCESS_KEY').and_return('ENV_SECRET')
|
46
|
+
end
|
47
|
+
it 'should set access and secret keys' do
|
48
|
+
default_values.access_key.should == 'ENV_ACCESS'
|
49
|
+
default_values.secret_key.should == 'ENV_SECRET'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when access and secret key are nil' do
|
54
|
+
let(:nil_values) { Elasticity::AwsSession.new(nil, nil) }
|
55
|
+
before do
|
56
|
+
ENV.stub(:[]).with('AWS_ACCESS_KEY_ID').and_return('ENV_ACCESS')
|
57
|
+
ENV.stub(:[]).with('AWS_SECRET_ACCESS_KEY').and_return('ENV_SECRET')
|
58
|
+
end
|
59
|
+
it 'should set access and secret keys' do
|
60
|
+
nil_values.access_key.should == 'ENV_ACCESS'
|
61
|
+
nil_values.secret_key.should == 'ENV_SECRET'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'when the environment variables are not set' do
|
68
|
+
let(:missing_something) { Elasticity::AwsSession.new }
|
69
|
+
context 'when the access key is not set' do
|
70
|
+
before do
|
71
|
+
ENV.stub(:[]).with('AWS_ACCESS_KEY_ID').and_return(nil)
|
72
|
+
ENV.stub(:[]).with('AWS_SECRET_ACCESS_KEY').and_return('_')
|
73
|
+
end
|
74
|
+
it 'should raise an error' do
|
75
|
+
expect {
|
76
|
+
missing_something.access_key
|
77
|
+
}.to raise_error(Elasticity::MissingKeyError, 'Please provide an access key or set AWS_ACCESS_KEY_ID.')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
context 'when the secret key is not set' do
|
81
|
+
before do
|
82
|
+
ENV.stub(:[]).with('AWS_ACCESS_KEY_ID').and_return('_')
|
83
|
+
ENV.stub(:[]).with('AWS_SECRET_ACCESS_KEY').and_return(nil)
|
84
|
+
end
|
85
|
+
it 'should raise an error' do
|
86
|
+
expect {
|
87
|
+
missing_something.access_key
|
88
|
+
}.to raise_error(Elasticity::MissingKeyError, 'Please provide a secret key or set AWS_SECRET_ACCESS_KEY.')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
describe '#host' do
|
98
|
+
|
99
|
+
context 'when the region is not specified' do
|
100
|
+
its(:host) { should == 'elasticmapreduce.us-east-1.amazonaws.com' }
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'when the region is specified' do
|
104
|
+
let(:request_with_region) do
|
105
|
+
Elasticity::AwsSession.new('_', '_', {:region => 'us-west-1'})
|
106
|
+
end
|
107
|
+
it 'should incorporate the region into the hostname' do
|
108
|
+
request_with_region.host.should == 'elasticmapreduce.us-west-1.amazonaws.com'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
describe '#submit' do
|
115
|
+
|
116
|
+
context 'when there is not an error with the request' do
|
117
|
+
before do
|
118
|
+
@request = Elasticity::AwsRequestV4.new(subject, {})
|
119
|
+
@request.should_receive(:url).and_return('TEST_URL')
|
120
|
+
@request.should_receive(:payload).and_return('TEST_PAYLOAD')
|
121
|
+
@request.should_receive(:headers).and_return('TEST_HEADERS')
|
122
|
+
|
123
|
+
Elasticity::AwsRequestV4.should_receive(:new).with(subject, {}).and_return(@request)
|
124
|
+
RestClient.should_receive(:post).with('TEST_URL', 'TEST_PAYLOAD', 'TEST_HEADERS')
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'should POST a properly assembled request' do
|
128
|
+
subject.submit({})
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'when there is an EMR error with the request' do
|
133
|
+
let(:error_message) { 'ERROR_MESSAGE' }
|
134
|
+
let(:error_xml) do
|
135
|
+
<<-XML
|
136
|
+
<ErrorResponse xmlns="http://elasticmapreduce.amazonaws.com/doc/2009-03-31">
|
137
|
+
<Error>
|
138
|
+
<Message>#{error_message}</Message>
|
139
|
+
</Error>
|
140
|
+
</ErrorResponse>
|
141
|
+
XML
|
142
|
+
end
|
143
|
+
let(:error) do
|
144
|
+
RestClient::BadRequest.new.tap do |error|
|
145
|
+
error.stub(:http_body => error_xml)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should raise an Argument error with the body of the error' do
|
150
|
+
RestClient.should_receive(:post).and_raise(error)
|
151
|
+
expect {
|
152
|
+
subject.submit({})
|
153
|
+
}.to raise_error(ArgumentError, error_message)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
describe '#==' do
|
160
|
+
|
161
|
+
describe 'basic equality checks with subject' do
|
162
|
+
let(:same_object) { subject }
|
163
|
+
let(:same_values) { Elasticity::AwsSession.new('access', 'secret', {}) }
|
164
|
+
let(:diff_type) { Object.new }
|
165
|
+
|
166
|
+
it { should == same_object }
|
167
|
+
it { should == same_values }
|
168
|
+
it { should_not == diff_type }
|
169
|
+
end
|
170
|
+
|
171
|
+
describe 'deep comparisons' do
|
172
|
+
|
173
|
+
it 'should fail on access key check' do
|
174
|
+
Elasticity::AwsSession.new('access', '_').should_not == Elasticity::AwsSession.new('_', '_')
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'should fail on secret key check' do
|
178
|
+
Elasticity::AwsSession.new('_', 'secret').should_not == Elasticity::AwsSession.new('_', '_')
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'should fail on host check' do
|
182
|
+
aws1 = Elasticity::AwsSession.new('_', '_', :region => 'us-east-1')
|
183
|
+
aws2 = Elasticity::AwsSession.new('_', '_', :region => 'us-west-1')
|
184
|
+
aws1.should_not == aws2
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
describe Elasticity::AwsUtils do
|
2
|
+
|
3
|
+
describe '.convert_ruby_to_aws_v4' do
|
4
|
+
it 'should convert the params' do
|
5
|
+
add_jobflow_steps_params = {
|
6
|
+
:job_flow_id => 'j-1',
|
7
|
+
:string_values => [
|
8
|
+
'value1', 'value2'
|
9
|
+
],
|
10
|
+
:steps => [
|
11
|
+
{
|
12
|
+
:action_on_failure => 'CONTINUE',
|
13
|
+
:name => 'First New Job Step',
|
14
|
+
:hadoop_jar_step => {
|
15
|
+
:args => %w(arg1 arg2 arg3),
|
16
|
+
:jar => 'first_step.jar',
|
17
|
+
:main_class => 'first_class.jar'
|
18
|
+
}
|
19
|
+
},
|
20
|
+
{
|
21
|
+
:action_on_failure => 'CANCEL_AND_WAIT',
|
22
|
+
:name => 'Second New Job Step',
|
23
|
+
:hadoop_jar_step => {
|
24
|
+
:args => %w(arg4 arg5 arg6),
|
25
|
+
:jar => 'second_step.jar',
|
26
|
+
:main_class => 'second_class.jar'
|
27
|
+
}
|
28
|
+
}
|
29
|
+
]
|
30
|
+
}
|
31
|
+
expected_result = {
|
32
|
+
'JobFlowId' => 'j-1',
|
33
|
+
'StringValues' => ['value1', 'value2'],
|
34
|
+
'Steps' => [
|
35
|
+
{
|
36
|
+
'ActionOnFailure' => 'CONTINUE',
|
37
|
+
'Name' => 'First New Job Step',
|
38
|
+
'HadoopJarStep' => {
|
39
|
+
'Args' => %w(arg1 arg2 arg3),
|
40
|
+
'Jar' => 'first_step.jar',
|
41
|
+
'MainClass' => 'first_class.jar'
|
42
|
+
}
|
43
|
+
},
|
44
|
+
{
|
45
|
+
'ActionOnFailure' => 'CANCEL_AND_WAIT',
|
46
|
+
'Name' => 'Second New Job Step',
|
47
|
+
'HadoopJarStep' => {
|
48
|
+
'Args' => %w(arg4 arg5 arg6),
|
49
|
+
'Jar' => 'second_step.jar',
|
50
|
+
'MainClass' => 'second_class.jar'
|
51
|
+
}
|
52
|
+
}
|
53
|
+
]
|
54
|
+
}
|
55
|
+
Elasticity::AwsUtils.send(:convert_ruby_to_aws_v4, add_jobflow_steps_params).should == expected_result
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '.convert_ruby_to_aws' do
|
60
|
+
it 'should convert the params' do
|
61
|
+
add_jobflow_steps_params = {
|
62
|
+
:job_flow_id => 'j-1',
|
63
|
+
:steps => [
|
64
|
+
{
|
65
|
+
:action_on_failure => 'CONTINUE',
|
66
|
+
:name => 'First New Job Step',
|
67
|
+
:hadoop_jar_step => {
|
68
|
+
:args => %w(arg1 arg2 arg3),
|
69
|
+
:jar => 'first_step.jar',
|
70
|
+
:main_class => 'first_class.jar'
|
71
|
+
}
|
72
|
+
},
|
73
|
+
{
|
74
|
+
:action_on_failure => 'CANCEL_AND_WAIT',
|
75
|
+
:name => 'Second New Job Step',
|
76
|
+
:hadoop_jar_step => {
|
77
|
+
:args => %w(arg4 arg5 arg6),
|
78
|
+
:jar => 'second_step.jar',
|
79
|
+
:main_class => 'second_class.jar'
|
80
|
+
}
|
81
|
+
}
|
82
|
+
]
|
83
|
+
}
|
84
|
+
expected_result = {
|
85
|
+
'JobFlowId' => 'j-1',
|
86
|
+
'Steps.member.1.Name' => 'First New Job Step',
|
87
|
+
'Steps.member.1.ActionOnFailure' => 'CONTINUE',
|
88
|
+
'Steps.member.1.HadoopJarStep.Jar' => 'first_step.jar',
|
89
|
+
'Steps.member.1.HadoopJarStep.MainClass' => 'first_class.jar',
|
90
|
+
'Steps.member.1.HadoopJarStep.Args.member.1' => 'arg1',
|
91
|
+
'Steps.member.1.HadoopJarStep.Args.member.2' => 'arg2',
|
92
|
+
'Steps.member.1.HadoopJarStep.Args.member.3' => 'arg3',
|
93
|
+
'Steps.member.2.Name' => 'Second New Job Step',
|
94
|
+
'Steps.member.2.ActionOnFailure' => 'CANCEL_AND_WAIT',
|
95
|
+
'Steps.member.2.HadoopJarStep.Jar' => 'second_step.jar',
|
96
|
+
'Steps.member.2.HadoopJarStep.MainClass' => 'second_class.jar',
|
97
|
+
'Steps.member.2.HadoopJarStep.Args.member.1' => 'arg4',
|
98
|
+
'Steps.member.2.HadoopJarStep.Args.member.2' => 'arg5',
|
99
|
+
'Steps.member.2.HadoopJarStep.Args.member.3' => 'arg6'
|
100
|
+
}
|
101
|
+
Elasticity::AwsUtils.send(:convert_ruby_to_aws, add_jobflow_steps_params).should == expected_result
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
@@ -7,7 +7,7 @@ describe Elasticity::EMR do
|
|
7
7
|
describe '.new' do
|
8
8
|
|
9
9
|
context 'when arguments are provided' do
|
10
|
-
its(:aws_request) { should == Elasticity::
|
10
|
+
its(:aws_request) { should == Elasticity::AwsSession.new('ACCESS', 'SECRET', {}) }
|
11
11
|
end
|
12
12
|
|
13
13
|
context 'when arguments are not provided' do
|
@@ -17,7 +17,7 @@ describe Elasticity::EMR do
|
|
17
17
|
end
|
18
18
|
it 'should use environment variables' do
|
19
19
|
emr = Elasticity::EMR.new
|
20
|
-
emr.aws_request.should == Elasticity::
|
20
|
+
emr.aws_request.should == Elasticity::AwsSession.new('ENV_ACCESS', 'ENV_SECRET', {})
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -26,7 +26,7 @@ describe Elasticity::EMR do
|
|
26
26
|
describe '#add_instance_groups' do
|
27
27
|
|
28
28
|
it 'should send the correct params to AWS' do
|
29
|
-
Elasticity::
|
29
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
30
30
|
:operation => 'AddInstanceGroups',
|
31
31
|
:job_flow_id => 'JOBFLOW_ID',
|
32
32
|
:instance_groups => ['INSTANCE_GROUP_CONFIGS']
|
@@ -51,7 +51,7 @@ describe Elasticity::EMR do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'should return an array of the new instance groups IDs' do
|
54
|
-
Elasticity::
|
54
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(aws_response)
|
55
55
|
subject.add_instance_groups('', []).should == ['ig-1', 'ig-2', 'ig-3']
|
56
56
|
end
|
57
57
|
end
|
@@ -59,7 +59,7 @@ describe Elasticity::EMR do
|
|
59
59
|
context 'when a block is given' do
|
60
60
|
let(:result) { 'RESULT' }
|
61
61
|
it 'should yield the submission results' do
|
62
|
-
Elasticity::
|
62
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(result)
|
63
63
|
subject.add_instance_groups('', []) do |xml|
|
64
64
|
xml.should == 'RESULT'
|
65
65
|
end
|
@@ -71,7 +71,7 @@ describe Elasticity::EMR do
|
|
71
71
|
describe '#add_jobflow_steps' do
|
72
72
|
|
73
73
|
it 'should add the specified steps to the job flow' do
|
74
|
-
Elasticity::
|
74
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
75
75
|
:operation => 'AddJobFlowSteps',
|
76
76
|
:job_flow_id => 'JOBFLOW_ID',
|
77
77
|
:steps => ['_']
|
@@ -82,7 +82,7 @@ describe Elasticity::EMR do
|
|
82
82
|
context 'when a block is given' do
|
83
83
|
let(:result) { 'RESULT' }
|
84
84
|
it 'should yield the submission results' do
|
85
|
-
Elasticity::
|
85
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(result)
|
86
86
|
subject.add_jobflow_steps('', {}) do |xml|
|
87
87
|
xml.should == 'RESULT'
|
88
88
|
end
|
@@ -121,14 +121,14 @@ describe Elasticity::EMR do
|
|
121
121
|
end
|
122
122
|
|
123
123
|
it 'should return an array of properly populated JobFlowStatusES' do
|
124
|
-
Elasticity::
|
124
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(describe_jobflows_xml)
|
125
125
|
jobflow_statuses = subject.describe_jobflows
|
126
126
|
jobflow_statuses.map(&:name).should == ['Pig Job', 'Hive Job']
|
127
127
|
jobflow_statuses.map(&:class).should == [Elasticity::JobFlowStatus, Elasticity::JobFlowStatus]
|
128
128
|
end
|
129
129
|
|
130
130
|
it 'should describe all jobflows' do
|
131
|
-
Elasticity::
|
131
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
132
132
|
:operation => 'DescribeJobFlows'
|
133
133
|
})
|
134
134
|
subject.describe_jobflows
|
@@ -136,7 +136,7 @@ describe Elasticity::EMR do
|
|
136
136
|
|
137
137
|
context 'when additional parameters are provided' do
|
138
138
|
it 'should pass them through' do
|
139
|
-
Elasticity::
|
139
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
140
140
|
:CreatedBefore => '2011-10-04',
|
141
141
|
:operation => 'DescribeJobFlows'
|
142
142
|
})
|
@@ -147,7 +147,7 @@ describe Elasticity::EMR do
|
|
147
147
|
context 'when a block is given' do
|
148
148
|
let(:result) { 'RESULT' }
|
149
149
|
it 'should yield the submission results' do
|
150
|
-
Elasticity::
|
150
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(result)
|
151
151
|
subject.describe_jobflows do |xml|
|
152
152
|
xml.should == 'RESULT'
|
153
153
|
end
|
@@ -178,7 +178,7 @@ describe Elasticity::EMR do
|
|
178
178
|
}
|
179
179
|
|
180
180
|
it 'should describe the specified jobflow' do
|
181
|
-
Elasticity::
|
181
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
182
182
|
:operation => 'DescribeJobFlows',
|
183
183
|
:job_flow_ids => ['j-3UN6WX5RRO2AG']
|
184
184
|
})
|
@@ -186,7 +186,7 @@ describe Elasticity::EMR do
|
|
186
186
|
end
|
187
187
|
|
188
188
|
it 'should return a properly populated JobFlowStatus' do
|
189
|
-
Elasticity::
|
189
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(describe_jobflows_xml)
|
190
190
|
jobflow_status = subject.describe_jobflow('_')
|
191
191
|
jobflow_status.should be_a Elasticity::JobFlowStatus
|
192
192
|
jobflow_status.jobflow_id.should == 'j-3UN6WX5RRO2AG'
|
@@ -195,7 +195,7 @@ describe Elasticity::EMR do
|
|
195
195
|
context 'when a block is given' do
|
196
196
|
let(:result) { 'RESULT' }
|
197
197
|
it 'should yield the submission results' do
|
198
|
-
Elasticity::
|
198
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(result)
|
199
199
|
subject.describe_jobflow('') do |xml|
|
200
200
|
xml.should == 'RESULT'
|
201
201
|
end
|
@@ -218,7 +218,7 @@ describe Elasticity::EMR do
|
|
218
218
|
describe '#modify_instance_groups' do
|
219
219
|
|
220
220
|
it 'should modify the specified instance groups' do
|
221
|
-
Elasticity::
|
221
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
222
222
|
:operation => 'ModifyInstanceGroups',
|
223
223
|
:instance_groups => [{
|
224
224
|
:instance_group_id => 'ig-2T1HNUO61BG3O',
|
@@ -231,7 +231,7 @@ describe Elasticity::EMR do
|
|
231
231
|
context 'when a block is given' do
|
232
232
|
let(:result) { '_' }
|
233
233
|
it 'should yield the submission results' do
|
234
|
-
Elasticity::
|
234
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(result)
|
235
235
|
subject.modify_instance_groups({}) do |xml|
|
236
236
|
xml.should == '_'
|
237
237
|
end
|
@@ -243,7 +243,7 @@ describe Elasticity::EMR do
|
|
243
243
|
describe '#run_jobflow' do
|
244
244
|
|
245
245
|
it 'should start the specified job flow' do
|
246
|
-
Elasticity::
|
246
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
247
247
|
:operation => 'RunJobFlow',
|
248
248
|
:jobflow_params => '_'
|
249
249
|
})
|
@@ -265,7 +265,7 @@ describe Elasticity::EMR do
|
|
265
265
|
end
|
266
266
|
|
267
267
|
it 'should return the ID of the running job flow' do
|
268
|
-
Elasticity::
|
268
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(jobflow_xml_response)
|
269
269
|
subject.run_job_flow({}).should == 'j-G6N5HA528AD4'
|
270
270
|
end
|
271
271
|
end
|
@@ -273,7 +273,7 @@ describe Elasticity::EMR do
|
|
273
273
|
context 'when a block is given' do
|
274
274
|
let(:result) { '_' }
|
275
275
|
it 'should yield the submission results' do
|
276
|
-
Elasticity::
|
276
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(result)
|
277
277
|
subject.run_job_flow({}) do |xml|
|
278
278
|
xml.should == '_'
|
279
279
|
end
|
@@ -285,7 +285,7 @@ describe Elasticity::EMR do
|
|
285
285
|
describe '#terminate_jobflows' do
|
286
286
|
|
287
287
|
it 'should terminate the specific jobflow' do
|
288
|
-
Elasticity::
|
288
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
289
289
|
:operation => 'TerminateJobFlows',
|
290
290
|
:job_flow_ids => ['j-1']
|
291
291
|
})
|
@@ -295,7 +295,7 @@ describe Elasticity::EMR do
|
|
295
295
|
context 'when a block is given' do
|
296
296
|
let(:result) { '_' }
|
297
297
|
it 'should yield the termination results' do
|
298
|
-
Elasticity::
|
298
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(result)
|
299
299
|
subject.terminate_jobflows('j-1') do |xml|
|
300
300
|
xml.should == '_'
|
301
301
|
end
|
@@ -308,7 +308,7 @@ describe Elasticity::EMR do
|
|
308
308
|
|
309
309
|
context 'when protection is enabled' do
|
310
310
|
it 'should enable protection on the specified jobflows' do
|
311
|
-
Elasticity::
|
311
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
312
312
|
:operation => 'SetTerminationProtection',
|
313
313
|
:termination_protected => true,
|
314
314
|
:job_flow_ids => ['jobflow1', 'jobflow2']
|
@@ -319,7 +319,7 @@ describe Elasticity::EMR do
|
|
319
319
|
|
320
320
|
context 'when protection is disabled' do
|
321
321
|
it 'should disable protection on the specified jobflows' do
|
322
|
-
Elasticity::
|
322
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
323
323
|
:operation => 'SetTerminationProtection',
|
324
324
|
:termination_protected => false,
|
325
325
|
:job_flow_ids => ['jobflow1', 'jobflow2']
|
@@ -330,7 +330,7 @@ describe Elasticity::EMR do
|
|
330
330
|
|
331
331
|
context 'when protection is not specified' do
|
332
332
|
it 'should enable protection on the specified jobflows' do
|
333
|
-
Elasticity::
|
333
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with({
|
334
334
|
:operation => 'SetTerminationProtection',
|
335
335
|
:termination_protected => true,
|
336
336
|
:job_flow_ids => ['jobflow1', 'jobflow2']
|
@@ -342,7 +342,7 @@ describe Elasticity::EMR do
|
|
342
342
|
context 'when a block is given' do
|
343
343
|
let(:result) { '_' }
|
344
344
|
it 'should yield the termination results' do
|
345
|
-
Elasticity::
|
345
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).and_return(result)
|
346
346
|
subject.set_termination_protection([]) do |xml|
|
347
347
|
xml.should == '_'
|
348
348
|
end
|
@@ -355,7 +355,7 @@ describe Elasticity::EMR do
|
|
355
355
|
let(:params) { {:foo => 'bar'} }
|
356
356
|
|
357
357
|
it 'should pass through directly to the request and return the results of the request' do
|
358
|
-
Elasticity::
|
358
|
+
Elasticity::AwsSession.any_instance.should_receive(:submit).with(params).and_return('RESULT')
|
359
359
|
subject.direct(params).should == 'RESULT'
|
360
360
|
end
|
361
361
|
end
|