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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c2475905b4f530aaa6299d8ff7a85c05c588bb3
4
- data.tar.gz: f2cfa1b86883199dee6760ae43dfbed5e8dcbe70
3
+ metadata.gz: 54159e4f77534537d3907df5c163f8625a10eee2
4
+ data.tar.gz: 4477e96cb8863e4a8b1f192cbbf72d134cc58a5b
5
5
  SHA512:
6
- metadata.gz: 6b7b4f2e271d4731f99256bc3f44be758e821b1ec44c82ace19cf3c59b846ef1d77dc7bb433159ba2686fdd5acf7aad632b6269e520202725a790770cf373d7d
7
- data.tar.gz: 7dda9db4a723a9d479ff4e589bb9d3dbb9295d8dc939320287021b35b42468e12e22d4f5a8a91da590bd28983e89fe37dcf54c105fe99c5749095b922af98511
6
+ metadata.gz: f5c973e21cba0028b335e65b7e15907196347065bb44a16fef4a5cdc765c0e0f49b9145c17b2aa1cdd753f7f9df746bc4b9a6e200020082631e93a4656e04eab
7
+ data.tar.gz: 9b21fd80402af11295d8f4b5087890e4d017d6ae75aa416b6cdc900b5d729bf58a4eb35d839b2d25f3ce1137abed8704e786e278cfc16c357d2a5eb63eece882
@@ -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"
@@ -4,7 +4,6 @@ module Producer
4
4
  class ShellCommand < Action
5
5
  def apply
6
6
  remote.execute(arguments.first, output)
7
- output.puts
8
7
  end
9
8
  end
10
9
  end
@@ -13,10 +13,11 @@ module Producer
13
13
  end
14
14
  end
15
15
 
16
- define_test :file_contains, Tests::FileContains
17
- define_test :has_env, Tests::HasEnv
18
- define_test :has_dir, Tests::HasDir
19
- define_test :has_file, Tests::HasFile
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
@@ -0,0 +1,14 @@
1
+ module Producer
2
+ module Core
3
+ module Tests
4
+ class HasExecutable < Test
5
+ def verify
6
+ remote.execute("type #{arguments.first}")
7
+ true
8
+ rescue RemoteCommandExecutionError
9
+ false
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  module Producer
2
2
  module Core
3
- VERSION = '0.1.14'
3
+ VERSION = '0.1.15'
4
4
  end
5
5
  end
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'
@@ -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.0'
21
- s.add_dependency 'net-sftp', '~> 2.1.2'
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
@@ -15,7 +15,7 @@ module Producer::Core
15
15
  sh.apply
16
16
  end
17
17
 
18
- it 'writes the returned output with a record separator' do
18
+ it 'writes the returned output' do
19
19
  sh.apply
20
20
  expect(output).to eq "#{command_args}\n"
21
21
  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[file_contains has_dir has_env has_file].each do |test|
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
- # FIXME: We rely a lot on mocking net-sftp heavily, while we already use a
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 do
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 'some arguments'
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
- def sends_packet(type, *args)
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.14
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: 2015-04-03 00:00:00.000000000 Z
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.0
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.0
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.2
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.2
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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.4.5
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: