producer-core 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
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: