producer-core 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/features/actions/sh.feature +2 -2
- data/features/tests/has_executable.feature +30 -0
- data/lib/producer/core/actions/shell_command.rb +0 -1
- data/lib/producer/core/condition/dsl.rb +5 -4
- data/lib/producer/core/testing/mock_remote.rb +8 -1
- data/lib/producer/core/tests/has_executable.rb +14 -0
- data/lib/producer/core/version.rb +1 -1
- data/lib/producer/core.rb +1 -0
- data/producer-core.gemspec +6 -6
- data/spec/producer/core/actions/shell_command_spec.rb +1 -1
- data/spec/producer/core/condition/dsl_spec.rb +7 -1
- data/spec/producer/core/remote/fs_spec.rb +2 -7
- data/spec/producer/core/testing/mock_remote_spec.rb +21 -2
- data/spec/producer/core/tests/has_executable_spec.rb +29 -0
- data/spec/support/net_ssh_story_helpers.rb +1 -34
- metadata +28 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54159e4f77534537d3907df5c163f8625a10eee2
|
4
|
+
data.tar.gz: 4477e96cb8863e4a8b1f192cbbf72d134cc58a5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5c973e21cba0028b335e65b7e15907196347065bb44a16fef4a5cdc765c0e0f49b9145c17b2aa1cdd753f7f9df746bc4b9a6e200020082631e93a4656e04eab
|
7
|
+
data.tar.gz: 9b21fd80402af11295d8f4b5087890e4d017d6ae75aa416b6cdc900b5d729bf58a4eb35d839b2d25f3ce1137abed8704e786e278cfc16c357d2a5eb63eece882
|
data/features/actions/sh.feature
CHANGED
@@ -19,11 +19,11 @@ Feature: `sh' task action
|
|
19
19
|
target 'some_host.test'
|
20
20
|
|
21
21
|
task :some_task do
|
22
|
-
sh '\echo from remote'
|
22
|
+
sh '\echo hello from remote'
|
23
23
|
end
|
24
24
|
"""
|
25
25
|
When I successfully execute the recipe
|
26
|
-
Then the output must contain "from remote"
|
26
|
+
Then the output must contain exactly "hello from remote\n"
|
27
27
|
|
28
28
|
Scenario: aborts on failed command execution
|
29
29
|
Given a recipe with:
|
@@ -0,0 +1,30 @@
|
|
1
|
+
@sshd
|
2
|
+
Feature: `has_executable' condition keyword
|
3
|
+
|
4
|
+
Scenario: succeeds when remote executable is available
|
5
|
+
Given a recipe with:
|
6
|
+
"""
|
7
|
+
target 'some_host.test'
|
8
|
+
|
9
|
+
task :testing_executable_availability do
|
10
|
+
condition { has_executable 'true' }
|
11
|
+
|
12
|
+
echo 'evaluated'
|
13
|
+
end
|
14
|
+
"""
|
15
|
+
When I successfully execute the recipe
|
16
|
+
Then the output must contain "evaluated"
|
17
|
+
|
18
|
+
Scenario: succeeds when remote executable is available
|
19
|
+
Given a recipe with:
|
20
|
+
"""
|
21
|
+
target 'some_host.test'
|
22
|
+
|
23
|
+
task :testing_executable_availability do
|
24
|
+
condition { has_executable 'some_non_existent_executable' }
|
25
|
+
|
26
|
+
echo 'evaluated'
|
27
|
+
end
|
28
|
+
"""
|
29
|
+
When I successfully execute the recipe
|
30
|
+
Then the output must not contain "evaluated"
|
@@ -13,10 +13,11 @@ module Producer
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
define_test :file_contains,
|
17
|
-
define_test :has_env,
|
18
|
-
define_test :
|
19
|
-
define_test :
|
16
|
+
define_test :file_contains, Tests::FileContains
|
17
|
+
define_test :has_env, Tests::HasEnv
|
18
|
+
define_test :has_executable, Tests::HasExecutable
|
19
|
+
define_test :has_dir, Tests::HasDir
|
20
|
+
define_test :has_file, Tests::HasFile
|
20
21
|
|
21
22
|
attr_reader :block, :env, :tests
|
22
23
|
|
@@ -12,11 +12,18 @@ module Producer
|
|
12
12
|
|
13
13
|
case program
|
14
14
|
when 'echo'
|
15
|
-
output << tokens.join(' ')
|
15
|
+
output << tokens.join(' ') << "\n"
|
16
16
|
when 'true'
|
17
17
|
output << ''
|
18
18
|
when 'false'
|
19
19
|
raise RemoteCommandExecutionError
|
20
|
+
when 'type'
|
21
|
+
raise RemoteCommandExecutionError unless %w[
|
22
|
+
echo
|
23
|
+
true
|
24
|
+
false
|
25
|
+
type
|
26
|
+
].include? tokens.first
|
20
27
|
end
|
21
28
|
|
22
29
|
output
|
data/lib/producer/core.rb
CHANGED
@@ -19,6 +19,7 @@ require 'producer/core/test'
|
|
19
19
|
require 'producer/core/tests/file_contains'
|
20
20
|
require 'producer/core/tests/has_dir'
|
21
21
|
require 'producer/core/tests/has_env'
|
22
|
+
require 'producer/core/tests/has_executable'
|
22
23
|
require 'producer/core/tests/has_file'
|
23
24
|
|
24
25
|
require 'producer/core/cli'
|
data/producer-core.gemspec
CHANGED
@@ -17,11 +17,11 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.executables = s.files.grep(/\Abin\//) { |f| File.basename(f) }
|
18
18
|
|
19
19
|
|
20
|
-
s.add_dependency 'net-ssh', '~> 2.7
|
21
|
-
s.add_dependency 'net-sftp', '~> 2.1
|
20
|
+
s.add_dependency 'net-ssh', '~> 2.7'
|
21
|
+
s.add_dependency 'net-sftp', '~> 2.1'
|
22
22
|
|
23
|
-
s.add_development_dependency 'rspec'
|
24
|
-
s.add_development_dependency 'cucumber'
|
25
|
-
s.add_development_dependency 'aruba'
|
26
|
-
s.add_development_dependency 'rake'
|
23
|
+
s.add_development_dependency 'rspec', '~> 2.14'
|
24
|
+
s.add_development_dependency 'cucumber', '~> 1.3'
|
25
|
+
s.add_development_dependency 'aruba', '~> 0.5'
|
26
|
+
s.add_development_dependency 'rake', '~> 10.1'
|
27
27
|
end
|
@@ -7,7 +7,13 @@ module Producer::Core
|
|
7
7
|
let(:env) { double 'env' }
|
8
8
|
subject(:dsl) { DSL.new(env, &block) }
|
9
9
|
|
10
|
-
%w[
|
10
|
+
%w[
|
11
|
+
file_contains
|
12
|
+
has_dir
|
13
|
+
has_env
|
14
|
+
has_executable
|
15
|
+
has_file
|
16
|
+
].each do |test|
|
11
17
|
it "has `#{test}' test defined" do
|
12
18
|
expect(dsl).to respond_to test.to_sym
|
13
19
|
end
|
@@ -48,16 +48,11 @@ module Producer::Core
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
#
|
52
|
-
# part of net-ssh story helpers, which are more close to integration tests.
|
53
|
-
describe '#file?', :ssh do
|
51
|
+
describe '#file?' do
|
54
52
|
let(:file_path) { 'some_file_path' }
|
55
53
|
let(:stat) { double 'stat' }
|
56
54
|
|
57
|
-
before
|
58
|
-
sftp_story
|
59
|
-
allow(fs.sftp).to receive(:stat!) { stat }
|
60
|
-
end
|
55
|
+
before { allow(sftp).to receive(:stat!) { stat } }
|
61
56
|
|
62
57
|
context 'when path given as argument exists' do
|
63
58
|
context 'when path is a file' do
|
@@ -20,8 +20,8 @@ module Producer::Core
|
|
20
20
|
context 'dummy echo command' do
|
21
21
|
let(:command) { 'echo some arguments' }
|
22
22
|
|
23
|
-
it 'returns command arguments' do
|
24
|
-
expect(remote.execute(command)).to eq
|
23
|
+
it 'returns command arguments ended by a record separator' do
|
24
|
+
expect(remote.execute(command)).to eq "some arguments\n"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -40,6 +40,25 @@ module Producer::Core
|
|
40
40
|
expect { remote.execute(command) }.to raise_error(RemoteCommandExecutionError)
|
41
41
|
end
|
42
42
|
end
|
43
|
+
|
44
|
+
context 'dummy type command' do
|
45
|
+
context 'executable exists' do
|
46
|
+
let(:command) { 'type true' }
|
47
|
+
|
48
|
+
it 'returns an empty string' do
|
49
|
+
expect(remote.execute(command)).to eq ''
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'executable does not exist' do
|
54
|
+
let(:command) { 'type some_non_existent_executable' }
|
55
|
+
|
56
|
+
it 'raises a RemoteCommandExecutionError' do
|
57
|
+
expect { remote.execute(command) }
|
58
|
+
.to raise_error(RemoteCommandExecutionError)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
43
62
|
end
|
44
63
|
end
|
45
64
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Producer::Core
|
4
|
+
module Tests
|
5
|
+
describe HasExecutable, :env do
|
6
|
+
subject(:has_env) { HasExecutable.new(env, executable) }
|
7
|
+
|
8
|
+
it_behaves_like 'test'
|
9
|
+
|
10
|
+
describe '#verify' do
|
11
|
+
context 'executable exists' do
|
12
|
+
let(:executable) { 'true' }
|
13
|
+
|
14
|
+
it 'returns true' do
|
15
|
+
expect(has_env.verify).to be true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'executable does not exist' do
|
20
|
+
let(:executable) { 'some_non_existent_executable' }
|
21
|
+
|
22
|
+
it 'returns false' do
|
23
|
+
expect(has_env.verify).to be false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,24 +1,7 @@
|
|
1
1
|
module NetSSHStoryHelpers
|
2
2
|
require 'net/ssh/test'
|
3
|
-
include Net::SSH::Test
|
4
|
-
|
5
|
-
# FIXME: must be moved elsewhere or implemented another way/form.
|
6
|
-
class ::Net::SSH::Test::Channel
|
7
|
-
def gets_packet(type, *args)
|
8
|
-
gets_data(sftp_packet(type, *args))
|
9
|
-
end
|
10
3
|
|
11
|
-
|
12
|
-
sends_data(sftp_packet(type, *args))
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def sftp_packet(type, *args)
|
18
|
-
data = Net::SSH::Buffer.from(*args)
|
19
|
-
Net::SSH::Buffer.from(:long, data.length + 1, :byte, type, :raw, data).to_s
|
20
|
-
end
|
21
|
-
end
|
4
|
+
include Net::SSH::Test
|
22
5
|
|
23
6
|
def story_with_new_channel
|
24
7
|
story do |session|
|
@@ -29,22 +12,6 @@ module NetSSHStoryHelpers
|
|
29
12
|
end
|
30
13
|
end
|
31
14
|
|
32
|
-
def sftp_story
|
33
|
-
story do |session|
|
34
|
-
ch = session.opens_channel
|
35
|
-
ch.sends_subsystem 'sftp'
|
36
|
-
ch.sends_packet(
|
37
|
-
Net::SFTP::Constants::PacketTypes::FXP_INIT, :long,
|
38
|
-
Net::SFTP::Session::HIGHEST_PROTOCOL_VERSION_SUPPORTED
|
39
|
-
)
|
40
|
-
ch.gets_packet(
|
41
|
-
Net::SFTP::Constants::PacketTypes::FXP_VERSION, :long,
|
42
|
-
Net::SFTP::Session::HIGHEST_PROTOCOL_VERSION_SUPPORTED
|
43
|
-
)
|
44
|
-
yield ch if block_given?
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
15
|
def expect_story_completed
|
49
16
|
raise 'there is no story to expect' if socket.script.events.empty?
|
50
17
|
yield
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: producer-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibault Jouan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|
@@ -16,84 +16,84 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.7
|
19
|
+
version: '2.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.7
|
26
|
+
version: '2.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: net-sftp
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.1
|
33
|
+
version: '2.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.1
|
40
|
+
version: '2.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.14'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.14'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: cucumber
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '1.3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: aruba
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '0.5'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '0.5'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '10.1'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '10.1'
|
97
97
|
description: |
|
98
98
|
Software provisioning tool, including a DSL to write "recipes".
|
99
99
|
email: tj@a13.fr
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- features/tests/file_contains.feature
|
136
136
|
- features/tests/has_dir.feature
|
137
137
|
- features/tests/has_env.feature
|
138
|
+
- features/tests/has_executable.feature
|
138
139
|
- features/tests/has_file.feature
|
139
140
|
- features/tests/negated_test.feature
|
140
141
|
- lib/producer/core.rb
|
@@ -164,6 +165,7 @@ files:
|
|
164
165
|
- lib/producer/core/tests/file_contains.rb
|
165
166
|
- lib/producer/core/tests/has_dir.rb
|
166
167
|
- lib/producer/core/tests/has_env.rb
|
168
|
+
- lib/producer/core/tests/has_executable.rb
|
167
169
|
- lib/producer/core/tests/has_file.rb
|
168
170
|
- lib/producer/core/version.rb
|
169
171
|
- lib/producer/core/worker.rb
|
@@ -195,6 +197,7 @@ files:
|
|
195
197
|
- spec/producer/core/tests/file_contains_spec.rb
|
196
198
|
- spec/producer/core/tests/has_dir_spec.rb
|
197
199
|
- spec/producer/core/tests/has_env_spec.rb
|
200
|
+
- spec/producer/core/tests/has_executable_spec.rb
|
198
201
|
- spec/producer/core/tests/has_file_spec.rb
|
199
202
|
- spec/producer/core/worker_spec.rb
|
200
203
|
- spec/spec_helper.rb
|
@@ -223,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
226
|
version: '0'
|
224
227
|
requirements: []
|
225
228
|
rubyforge_project:
|
226
|
-
rubygems_version: 2.
|
229
|
+
rubygems_version: 2.2.2
|
227
230
|
signing_key:
|
228
231
|
specification_version: 4
|
229
232
|
summary: Provisioning tool
|
@@ -255,6 +258,7 @@ test_files:
|
|
255
258
|
- features/tests/file_contains.feature
|
256
259
|
- features/tests/has_dir.feature
|
257
260
|
- features/tests/has_env.feature
|
261
|
+
- features/tests/has_executable.feature
|
258
262
|
- features/tests/has_file.feature
|
259
263
|
- features/tests/negated_test.feature
|
260
264
|
- spec/fixtures/recipes/empty.rb
|
@@ -284,6 +288,7 @@ test_files:
|
|
284
288
|
- spec/producer/core/tests/file_contains_spec.rb
|
285
289
|
- spec/producer/core/tests/has_dir_spec.rb
|
286
290
|
- spec/producer/core/tests/has_env_spec.rb
|
291
|
+
- spec/producer/core/tests/has_executable_spec.rb
|
287
292
|
- spec/producer/core/tests/has_file_spec.rb
|
288
293
|
- spec/producer/core/worker_spec.rb
|
289
294
|
- spec/spec_helper.rb
|
@@ -293,4 +298,3 @@ test_files:
|
|
293
298
|
- spec/support/shared_action.rb
|
294
299
|
- spec/support/shared_test.rb
|
295
300
|
- spec/support/test_env_helpers.rb
|
296
|
-
has_rdoc:
|