cucumber-chef 2.0.3.pre → 2.0.3

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.
@@ -172,7 +172,7 @@ module Cucumber
172
172
  cookbook_repo = ::Chef::CookbookLoader.new(@cookbooks_path)
173
173
  cookbook_repo.each do |name, cookbook|
174
174
  $logger.debug { "::Chef::CookbookUploader(#{name}) ATTEMPT" }
175
- ::Chef::CookbookUploader.new(cookbook, @cookbooks_path, :force => true).upload_cookbook
175
+ ::Chef::CookbookUploader.new(cookbook, @cookbooks_path, :force => true).upload_cookbooks
176
176
  $logger.debug { "::Chef::CookbookUploader(#{name}) UPLOADED" }
177
177
  end
178
178
  #@command.knife([ "cookbook upload cucumber-chef", "-o", @cookbooks_path ], :silence => true)
@@ -94,17 +94,41 @@ Then /^I should( not)? see the "([^\"]*)" of "([^\"]*)" in the output$/ do |bool
94
94
  end
95
95
  end
96
96
 
97
- Then /^path "([^\"]*)" should exist$/ do |dir|
98
- parent = File.dirname dir
99
- child = File.basename dir
97
+ Then /^(path|directory|file|symlink) "([^\"]*)" should exist$/ do |type, path|
98
+ parent = File.dirname path
99
+ child = File.basename path
100
100
  command = "ls %s" % [
101
101
  parent
102
102
  ]
103
103
  @output = @connection.exec!(command)
104
104
  @output.should =~ /#{child}/
105
+
106
+ # if a specific type (directory|file) was specified, test for it
107
+ command = "stat -c %%F %s" % [
108
+ path
109
+ ]
110
+ @output = @connection.exec!(command)
111
+ types = {
112
+ "file" => /regular file/,
113
+ "directory" => /directory/,
114
+ "symlink" => /symbolic link/
115
+ }
116
+
117
+ if types.keys.include? type
118
+ @output.should =~ types[type]
119
+ end
120
+ # if type == "file"
121
+ # @output.should =~ /regular file/
122
+ # end
123
+ # if type == "directory"
124
+ # @output.should =~ /directory/
125
+ # end
126
+ # if type == "symlink"
127
+ # @output.should =~ /symbolic link/
128
+ # end
105
129
  end
106
130
 
107
- Then /^path "([^\"]*)" should be owned by "([^\"]*)"$/ do |path, owner|
131
+ Then /^(?:path|directory|file) "([^\"]*)" should be owned by "([^\"]*)"$/ do |path, owner|
108
132
  command = "stat -c %%U:%%G %s" % [
109
133
  path
110
134
  ]
@@ -112,15 +136,44 @@ Then /^path "([^\"]*)" should be owned by "([^\"]*)"$/ do |path, owner|
112
136
  @output.should =~ /#{owner}/
113
137
  end
114
138
 
115
- Then /^file "([^\"]*)" should( not)? contain "([^\"]*)"$/ do |path, boolean, content|
139
+ # we can now match multi-line strings. We want to match *contiguous lines*
140
+ Then /^file "([^\"]*)" should( not)? contain/ do |path, boolean, content|
116
141
  command = "cat %s" % [
117
142
  path
118
143
  ]
119
- @output = @connection.exec!(command)
144
+
145
+ # turn the command-line output and the expectation string into Arrays and strip
146
+ # leading and trailing cruft from members
147
+ @output = @connection.exec!(command).split("\n").map{ |i| i.strip }
148
+ content = content.split("\n").map{ |i| i.strip }
149
+
150
+ # assume no match
151
+ match = false
152
+ count = 0
153
+
154
+ # step through the command output array
155
+ while count < @output.length
156
+ current = @output[count]
157
+
158
+ # if we get a match with the start of the expectation
159
+ if @output[count] == content[0]
160
+
161
+ # take a slice of the same size as that expectation
162
+ slice = @output[count..count + content.length - 1]
163
+
164
+ # and see if they match
165
+ if content == slice
166
+ match = true
167
+ end
168
+ end
169
+ count += 1
170
+ end
171
+
172
+ # there's a neater way to express this logic, but it's 17:30 and I'm going home
120
173
  if (!boolean)
121
- @output.should =~ /#{content}/
174
+ match.should == true
122
175
  else
123
- @output.should_not =~ /#{content}/
176
+ match.should == false
124
177
  end
125
178
  end
126
179
 
@@ -136,3 +189,25 @@ Then /^package "([^\"]*)" should be installed$/ do |package|
136
189
  @output = @connection.exec!(command)
137
190
  @output.should =~ /#{package}/
138
191
  end
192
+
193
+ # This regex is a little ugly, but it's so we can accept any of these
194
+ #
195
+ # * "foo" is running
196
+ # * service "foo" is running
197
+ # * application "foo" is running
198
+ # * process "foo" is running
199
+ #
200
+ # basically because I couldn't decide what they should be called. Maybe there's
201
+ # an Official Cucumber-chef Opinion on this. Still, Rubular is fun :)
202
+
203
+ # TiL that in Ruby regexes, "?:" marks a non-capturing group, which is how this
204
+ # works
205
+ Then /^(?:(?:service|application|process)? )?"([^\"]*)" should( not)? be running$/ do |service, boolean|
206
+ command = "ps ax"
207
+ @output = @connection.exec!(command)
208
+ if (!boolean)
209
+ @output.should =~ /#{service}/
210
+ else
211
+ @output.should_not =~ /#{service}/
212
+ end
213
+ end
@@ -24,7 +24,7 @@ module Cucumber
24
24
 
25
25
  ################################################################################
26
26
 
27
- VERSION = "2.0.3.pre" unless const_defined?(:VERSION)
27
+ VERSION = "2.0.3" unless const_defined?(:VERSION)
28
28
 
29
29
  ################################################################################
30
30
 
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-chef
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3.pre
5
- prerelease: 6
4
+ version: 2.0.3
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Stephen Nelson-Smith
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-08-30 00:00:00.000000000 Z
13
+ date: 2012-09-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: chef