producer-core 0.1.11 → 0.1.12

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: e6a27039a047e17f8490bd070f3906b435939441
4
- data.tar.gz: 7f1c4c346f1258e97f59454a6bcf3a20c6e02288
3
+ metadata.gz: 1ed15ccec37cb38bc7c4ea42a911708acd30630f
4
+ data.tar.gz: bc36933dae78ef8311eb2e840ab22cbb2927dd11
5
5
  SHA512:
6
- metadata.gz: 1b84f00106289af7baa8f57ab9aa336eaf2f4a9114a5a7553d5431e83ec8a04b8512ed37657c1599367bd75f41f8f99fabb241eada0c3bf4c9c88c2c5a88bc80
7
- data.tar.gz: c3ed29fc5633c033e6f35f83d990325d0cdbce10a8a753cbc9f1e7f063795633ad9c465bc322327963ddeb096ec3e0e6c16f6919d2ffef6b753108a52016c7e9
6
+ metadata.gz: 9128d8070fb39fa4cc1e4a6ba1ea9a19c29ac32b2088a412d2da5b66a5560b3b6bf9332a689423d246f936eb6aa9552b0e97a131679e11670048be996f194ceb
7
+ data.tar.gz: 1be0962d9d254e3f33a04636b66413084f957541456d7202cf120da1085d4cd33b856dcb464532356188e9123e77127be1ffa390a22caf3e283df3afd2919d99
@@ -0,0 +1,14 @@
1
+ @sshd
2
+ Feature: `mkdir' task action
3
+
4
+ Scenario: creates directory given as argument
5
+ Given a recipe with:
6
+ """
7
+ target 'some_host.test'
8
+
9
+ task :create_some_dir do
10
+ mkdir 'some_directory'
11
+ end
12
+ """
13
+ When I successfully execute the recipe
14
+ Then the remote directory "some_directory" must exists
@@ -1,7 +1,15 @@
1
+ Given /^a remote directory named "([^"]+)"$/ do |path|
2
+ create_dir path
3
+ end
4
+
1
5
  Given /^a remote file named "([^"]+)"$/ do |file_name|
2
6
  write_file file_name, ''
3
7
  end
4
8
 
9
+ Then /^the remote directory "([^"]+)" should exists$/ do |path|
10
+ check_directory_presence([path], true)
11
+ end
12
+
5
13
  Then /^the remote file "([^"]+)" should contain "([^"]+)"/ do |path, content|
6
14
  check_file_content path, content, true
7
15
  end
@@ -0,0 +1,23 @@
1
+ @sshd
2
+ Feature: `has_dir' condition keyword
3
+
4
+ Background:
5
+ Given a recipe with:
6
+ """
7
+ target 'some_host.test'
8
+
9
+ task :testing_directory_existence do
10
+ condition { has_dir 'some_directory' }
11
+
12
+ echo 'evaluated'
13
+ end
14
+ """
15
+
16
+ Scenario: succeeds when directory exists
17
+ Given a remote directory named "some_directory"
18
+ When I successfully execute the recipe
19
+ Then the output must contain "evaluated"
20
+
21
+ Scenario: fails when directory does not exist
22
+ When I successfully execute the recipe
23
+ Then the output must not contain "evaluated"
@@ -0,0 +1,15 @@
1
+ module Producer
2
+ module Core
3
+ module Actions
4
+ class Mkdir < Action
5
+ def apply
6
+ fs.mkdir path
7
+ end
8
+
9
+ def path
10
+ arguments.first
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -14,6 +14,7 @@ module Producer
14
14
  end
15
15
 
16
16
  define_test :has_env, Tests::HasEnv
17
+ define_test :has_dir, Tests::HasDir
17
18
  define_test :has_file, Tests::HasFile
18
19
 
19
20
  attr_reader :block, :env, :tests
@@ -14,12 +14,22 @@ module Producer
14
14
  @sftp ||= @remote.session.sftp.connect
15
15
  end
16
16
 
17
+ def dir?(path)
18
+ sftp.stat!(path).directory?
19
+ rescue Net::SFTP::StatusException
20
+ false
21
+ end
22
+
17
23
  def file?(path)
18
24
  sftp.stat!(path).file?
19
25
  rescue Net::SFTP::StatusException
20
26
  false
21
27
  end
22
28
 
29
+ def mkdir(path)
30
+ sftp.mkdir! path
31
+ end
32
+
23
33
  def file_write(path, content)
24
34
  sftp.file.open path, 'w' do |f|
25
35
  f.write content
@@ -13,6 +13,7 @@ module Producer
13
13
  define_action :echo, Actions::Echo
14
14
  define_action :sh, Actions::ShellCommand
15
15
 
16
+ define_action :mkdir, Actions::Mkdir
16
17
  define_action :file_write, Actions::FileWriter
17
18
 
18
19
  attr_reader :env, :block, :actions
@@ -0,0 +1,11 @@
1
+ module Producer
2
+ module Core
3
+ module Tests
4
+ class HasDir < Test
5
+ def verify
6
+ fs.dir? arguments.first
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  module Producer
2
2
  module Core
3
- VERSION = '0.1.11'
3
+ VERSION = '0.1.12'
4
4
  end
5
5
  end
data/lib/producer/core.rb CHANGED
@@ -2,10 +2,12 @@
2
2
  require 'producer/core/action'
3
3
  require 'producer/core/actions/echo'
4
4
  require 'producer/core/actions/shell_command'
5
+ require 'producer/core/actions/mkdir'
5
6
  require 'producer/core/actions/file_writer'
6
7
 
7
8
  # condition tests (need to be defined before the condition DSL)
8
9
  require 'producer/core/test'
10
+ require 'producer/core/tests/has_dir'
9
11
  require 'producer/core/tests/has_env'
10
12
  require 'producer/core/tests/has_file'
11
13
 
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  module Producer::Core
4
4
  describe Actions::FileWriter do
5
- let(:env) { Env.new }
6
- let(:path) { 'some_path' }
7
- let(:content) { 'some_content' }
8
- subject(:writer) { Actions::FileWriter.new(env, path, content) }
5
+ let(:env) { Env.new }
6
+ let(:path) { 'some_path' }
7
+ let(:content) { 'some_content' }
8
+ subject(:writer) { Actions::FileWriter.new(env, path, content) }
9
9
 
10
10
  describe '#apply' do
11
11
  it 'writes content to file on remote filesystem' do
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ module Producer::Core
4
+ describe Actions::Mkdir do
5
+ let(:env) { Env.new }
6
+ let(:path) { 'some_path' }
7
+ subject(:mkdir) { Actions::Mkdir.new(env, path) }
8
+
9
+ describe '#apply' do
10
+ it 'creates directory on remote filesystem' do
11
+ expect(mkdir.fs).to receive(:mkdir).with(path)
12
+ mkdir.apply
13
+ end
14
+ end
15
+
16
+ describe '#path' do
17
+ it 'returns the path' do
18
+ expect(mkdir.path).to eq path
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -6,7 +6,7 @@ module Producer::Core
6
6
  let(:env) { double 'env' }
7
7
  subject(:dsl) { Condition::DSL.new(env, &block) }
8
8
 
9
- %w[has_env has_file].each do |test|
9
+ %w[has_dir has_env has_file].each do |test|
10
10
  it "has `#{test}' test defined" do
11
11
  expect(dsl).to respond_to test.to_sym
12
12
  end
@@ -31,6 +31,45 @@ module Producer::Core
31
31
  end
32
32
  end
33
33
 
34
+ describe '#dir?' do
35
+ let(:sftp) { double('sftp').as_null_object }
36
+ let(:path) { 'some_directory_path' }
37
+ let(:stat) { double 'stat' }
38
+
39
+ before do
40
+ allow(fs).to receive(:sftp) { sftp }
41
+ allow(sftp).to receive(:stat!).with(path) { stat }
42
+ end
43
+
44
+ context 'when path given as argument is a directory' do
45
+ before { allow(stat).to receive(:directory?) { true } }
46
+
47
+ it 'returns true' do
48
+ expect(fs.dir? path).to be true
49
+ end
50
+ end
51
+
52
+ context 'when path given as argument is not a directory' do
53
+ before { allow(stat).to receive(:directory?) { false } }
54
+
55
+ it 'returns false' do
56
+ expect(fs.dir? path).to be false
57
+ end
58
+ end
59
+
60
+ context 'when querying the path raises a Net::SFTP::StatusException' do
61
+ before do
62
+ response = double 'response', code: '42', message: 'some message'
63
+ ex = Net::SFTP::StatusException.new(response)
64
+ allow(sftp).to receive(:stat!).with(path).and_raise(ex)
65
+ end
66
+
67
+ it 'returns false' do
68
+ expect(fs.dir? path).to be false
69
+ end
70
+ end
71
+ end
72
+
34
73
  # FIXME: We rely a lot on mocking net-sftp heavily, while we already use a
35
74
  # part of net-ssh story helpers, which are more close to integration tests.
36
75
  describe '#file?', :ssh do
@@ -73,6 +112,18 @@ module Producer::Core
73
112
  end
74
113
  end
75
114
 
115
+ describe '#mkdir' do
116
+ let(:sftp) { double 'sftp' }
117
+ let(:path) { 'some_directory_path' }
118
+
119
+ before { allow(fs).to receive(:sftp) { sftp } }
120
+
121
+ it 'creates the directory' do
122
+ expect(sftp).to receive(:mkdir!).with(path)
123
+ fs.mkdir path
124
+ end
125
+ end
126
+
76
127
  describe '#file_write' do
77
128
  let(:sftp) { double('sftp').as_null_object }
78
129
  let(:file) { double('sftp').as_null_object }
@@ -6,7 +6,7 @@ module Producer::Core
6
6
  let(:env) { Env.new }
7
7
  subject(:dsl) { Task::DSL.new(env, &block) }
8
8
 
9
- %w[echo sh file_write].each do |action|
9
+ %w[echo sh mkdir file_write].each do |action|
10
10
  it "has `#{action}' action defined" do
11
11
  expect(dsl).to respond_to action.to_sym
12
12
  end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ module Producer::Core
4
+ describe Tests::HasDir do
5
+ let(:env) { Env.new }
6
+ let(:path) { 'some_directory' }
7
+ subject(:has_dir) { Tests::HasDir.new(env, path) }
8
+
9
+ it 'is a kind of test' do
10
+ expect(has_dir).to be_a Test
11
+ end
12
+
13
+ describe '#verify', :ssh do
14
+ before { sftp_story }
15
+
16
+ it 'delegates the call on remote FS' do
17
+ expect(env.remote.fs).to receive(:dir?).with(path)
18
+ has_dir.verify
19
+ end
20
+
21
+ it 'returns the dir existence' do
22
+ existence = double 'existence'
23
+ allow(env.remote.fs).to receive(:dir?) { existence }
24
+ expect(has_dir.verify).to be existence
25
+ end
26
+ end
27
+ end
28
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: producer-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thibault Jouan
@@ -110,10 +110,10 @@ files:
110
110
  - bin/producer
111
111
  - features/actions/echo.feature
112
112
  - features/actions/file_write.feature
113
+ - features/actions/mkdir.feature
113
114
  - features/actions/sh.feature
114
115
  - features/cli/usage.feature
115
116
  - features/recipes/ask.feature
116
- - features/recipes/env.feature
117
117
  - features/recipes/evaluation.feature
118
118
  - features/recipes/macro.feature
119
119
  - features/recipes/source.feature
@@ -128,6 +128,7 @@ files:
128
128
  - features/support/ssh.rb
129
129
  - features/tasks/condition.feature
130
130
  - features/tasks/evaluation.feature
131
+ - features/tests/has_dir.feature
131
132
  - features/tests/has_env.feature
132
133
  - features/tests/has_file.feature
133
134
  - features/tests/negated_test.feature
@@ -135,6 +136,7 @@ files:
135
136
  - lib/producer/core/action.rb
136
137
  - lib/producer/core/actions/echo.rb
137
138
  - lib/producer/core/actions/file_writer.rb
139
+ - lib/producer/core/actions/mkdir.rb
138
140
  - lib/producer/core/actions/shell_command.rb
139
141
  - lib/producer/core/cli.rb
140
142
  - lib/producer/core/condition.rb
@@ -150,6 +152,7 @@ files:
150
152
  - lib/producer/core/task.rb
151
153
  - lib/producer/core/task/dsl.rb
152
154
  - lib/producer/core/test.rb
155
+ - lib/producer/core/tests/has_dir.rb
153
156
  - lib/producer/core/tests/has_env.rb
154
157
  - lib/producer/core/tests/has_file.rb
155
158
  - lib/producer/core/version.rb
@@ -161,6 +164,7 @@ files:
161
164
  - spec/producer/core/action_spec.rb
162
165
  - spec/producer/core/actions/echo_spec.rb
163
166
  - spec/producer/core/actions/file_writer_spec.rb
167
+ - spec/producer/core/actions/mkdir_spec.rb
164
168
  - spec/producer/core/actions/shell_command_spec.rb
165
169
  - spec/producer/core/cli_spec.rb
166
170
  - spec/producer/core/condition/dsl_spec.rb
@@ -175,6 +179,7 @@ files:
175
179
  - spec/producer/core/task/dsl_spec.rb
176
180
  - spec/producer/core/task_spec.rb
177
181
  - spec/producer/core/test_spec.rb
182
+ - spec/producer/core/tests/has_dir_spec.rb
178
183
  - spec/producer/core/tests/has_env_spec.rb
179
184
  - spec/producer/core/tests/has_file_spec.rb
180
185
  - spec/producer/core/worker_spec.rb
@@ -208,10 +213,10 @@ summary: Provisioning tool
208
213
  test_files:
209
214
  - features/actions/echo.feature
210
215
  - features/actions/file_write.feature
216
+ - features/actions/mkdir.feature
211
217
  - features/actions/sh.feature
212
218
  - features/cli/usage.feature
213
219
  - features/recipes/ask.feature
214
- - features/recipes/env.feature
215
220
  - features/recipes/evaluation.feature
216
221
  - features/recipes/macro.feature
217
222
  - features/recipes/source.feature
@@ -226,6 +231,7 @@ test_files:
226
231
  - features/support/ssh.rb
227
232
  - features/tasks/condition.feature
228
233
  - features/tasks/evaluation.feature
234
+ - features/tests/has_dir.feature
229
235
  - features/tests/has_env.feature
230
236
  - features/tests/has_file.feature
231
237
  - features/tests/negated_test.feature
@@ -235,6 +241,7 @@ test_files:
235
241
  - spec/producer/core/action_spec.rb
236
242
  - spec/producer/core/actions/echo_spec.rb
237
243
  - spec/producer/core/actions/file_writer_spec.rb
244
+ - spec/producer/core/actions/mkdir_spec.rb
238
245
  - spec/producer/core/actions/shell_command_spec.rb
239
246
  - spec/producer/core/cli_spec.rb
240
247
  - spec/producer/core/condition/dsl_spec.rb
@@ -249,6 +256,7 @@ test_files:
249
256
  - spec/producer/core/task/dsl_spec.rb
250
257
  - spec/producer/core/task_spec.rb
251
258
  - spec/producer/core/test_spec.rb
259
+ - spec/producer/core/tests/has_dir_spec.rb
252
260
  - spec/producer/core/tests/has_env_spec.rb
253
261
  - spec/producer/core/tests/has_file_spec.rb
254
262
  - spec/producer/core/worker_spec.rb
@@ -1,9 +0,0 @@
1
- Feature: `env' recipe keyword
2
-
3
- Scenario: exposes the internal env object
4
- Given a recipe with:
5
- """
6
- env
7
- """
8
- When I execute the recipe
9
- Then the exit status must be 0