cucumber-puppet 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/bin/cucumber-puppet +1 -2
- data/lib/cucumber-puppet/helper.rb +12 -6
- data/lib/cucumber-puppet/puppet.rb +23 -4
- data/lib/cucumber-puppet/rake/task.rb +5 -4
- data/lib/generators/world/steps/catalog_specs.rb +67 -0
- data/lib/generators/world/steps/file.rb +18 -3
- data/lib/generators/world/steps/package.rb +9 -8
- data/lib/generators/world/steps/puppet.rb +13 -8
- data/lib/generators/world/steps/user.rb +13 -1
- data/man/cucumber-puppet-gen.1 +78 -0
- data/man/cucumber-puppet.1 +137 -0
- metadata +32 -33
data/VERSION.yml
CHANGED
data/bin/cucumber-puppet
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
require 'cucumber-puppet'
|
2
2
|
|
3
|
+
# Private helper methods.
|
3
4
|
module CucumberPuppet::Helper
|
4
|
-
|
5
|
+
private
|
6
|
+
|
7
|
+
# Finds the root of the puppet directory tree according to Puppet's
|
5
8
|
# directory naming convention. Relevant sub-trees are:
|
9
|
+
#
|
6
10
|
# - <puppetdir>/features/modules/$module
|
7
11
|
# - <puppetdir>/modules/$module/features
|
12
|
+
#
|
8
13
|
# In case no tree is identified, assumes cwd is <puppetdir>.
|
9
|
-
def find_root
|
14
|
+
def find_root
|
15
|
+
cwd = Dir.getwd
|
10
16
|
path = cwd.split('/')
|
11
17
|
|
12
18
|
if cwd.match('features$') and not cwd.match("modules/")
|
@@ -14,19 +20,19 @@ module CucumberPuppet::Helper
|
|
14
20
|
path.pop
|
15
21
|
elsif cwd.match('features/modules$')
|
16
22
|
# <puppetdir>/features/modules
|
17
|
-
path.pop
|
23
|
+
2.times { path.pop }
|
18
24
|
elsif cwd.match('features/modules/[^/]*$')
|
19
25
|
# <puppetdir>/features/modules/$module
|
20
|
-
path.pop
|
26
|
+
3.times { path.pop }
|
21
27
|
elsif cwd.match('modules$')
|
22
28
|
# <puppetdir>/modules
|
23
29
|
path.pop
|
24
30
|
elsif cwd.match('/modules/[^/]*$')
|
25
31
|
# <puppetdir>/modules/$module
|
26
|
-
path.pop
|
32
|
+
2.times { path.pop }
|
27
33
|
elsif cwd.match('/modules/[^/]*/features$')
|
28
34
|
# <puppetdir>/modules/$module/features
|
29
|
-
path.pop
|
35
|
+
3.times { path.pop }
|
30
36
|
end
|
31
37
|
|
32
38
|
path.join('/')
|
@@ -1,7 +1,10 @@
|
|
1
1
|
require 'puppet'
|
2
2
|
require 'puppet/network/client'
|
3
3
|
|
4
|
+
# A class for accessing Puppet's internal state regarding a certain node or
|
5
|
+
# class.
|
4
6
|
class CucumberPuppet
|
7
|
+
# Returns a new CucumberPuppet object.
|
5
8
|
def initialize
|
6
9
|
@confdir = "/etc/puppet"
|
7
10
|
@manifest = @confdir + "/manifest/site.pp"
|
@@ -21,21 +24,31 @@ class CucumberPuppet
|
|
21
24
|
Puppet::Util::Log.level = :notice
|
22
25
|
end
|
23
26
|
|
27
|
+
# Set Puppet's log level to 'debug'.
|
24
28
|
def debug
|
25
29
|
Puppet::Util::Log.level = :debug
|
26
30
|
end
|
27
31
|
|
32
|
+
# Define Puppet classes to include in a feature's testnode.
|
28
33
|
def klass=(klass)
|
34
|
+
# XXX sth like klass.split(/,/) and remove whitespace
|
29
35
|
@klass = klass.to_a
|
30
36
|
end
|
31
37
|
|
32
|
-
|
38
|
+
# Compile catalog for configured testnode.
|
39
|
+
#
|
40
|
+
# @confdir defaults to '/etc/puppet'
|
41
|
+
# @manifest defaults to @confdir + '/manifests/site.pp'
|
42
|
+
#
|
43
|
+
def compile_catalog( node = nil )
|
33
44
|
Puppet[:confdir] = @confdir
|
34
45
|
Puppet[:manifest] = @manifest
|
35
46
|
Puppet.parse_config
|
36
47
|
|
37
|
-
node
|
38
|
-
|
48
|
+
unless node.is_a?(Puppet::Node)
|
49
|
+
node = Puppet::Node.new(@facts['hostname'], :classes => @klass)
|
50
|
+
node.merge(@facts)
|
51
|
+
end
|
39
52
|
|
40
53
|
begin
|
41
54
|
# Compile our catalog
|
@@ -57,7 +70,13 @@ class CucumberPuppet
|
|
57
70
|
end
|
58
71
|
end
|
59
72
|
|
60
|
-
|
73
|
+
# Returns an Object with the given title from catalog.
|
74
|
+
def get_resource(title)
|
61
75
|
@catalog.resource(title)
|
62
76
|
end
|
77
|
+
# XXX add deprecation warning for resource()
|
78
|
+
def resource(title)
|
79
|
+
get_resource(title)
|
80
|
+
end
|
81
|
+
|
63
82
|
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# CucumberPuppetRakeTask.new
|
6
6
|
#
|
7
7
|
# This defines a task 'cucumber_puppet' that will run features in 'features'
|
8
|
-
# and 'modules
|
8
|
+
# and 'modules/*/features'.
|
9
9
|
#
|
10
10
|
# To further configure the task, you can pass a block:
|
11
11
|
#
|
@@ -14,16 +14,16 @@
|
|
14
14
|
# end
|
15
15
|
|
16
16
|
class CucumberPuppetRakeTask
|
17
|
-
# extra options to pass to cucumber
|
18
17
|
attr_accessor :cucumber_opts
|
19
18
|
|
20
|
-
#
|
19
|
+
# Extra options to pass to cucumber via cucumber-puppet.
|
20
|
+
# An Array is preferred, so convert if String.
|
21
21
|
def cucumber_opts=(opts)
|
22
22
|
@cucumber_opts = String === opts ? opts.split(' ') : opts
|
23
23
|
end
|
24
24
|
|
25
25
|
|
26
|
-
#
|
26
|
+
# Define CucumberPuppet Rake task.
|
27
27
|
def initialize(task_name = 'cucumber_puppet',
|
28
28
|
desc = 'Run cucumber-puppet features')
|
29
29
|
@task_name = task_name
|
@@ -34,6 +34,7 @@ class CucumberPuppetRakeTask
|
|
34
34
|
define_task
|
35
35
|
end
|
36
36
|
|
37
|
+
private
|
37
38
|
def define_task
|
38
39
|
desc @desc
|
39
40
|
task @task_name do
|
@@ -0,0 +1,67 @@
|
|
1
|
+
Given /^a node specified by "([^\"]*)"$/ do |file|
|
2
|
+
# file: yaml node file, usually from /var/lib/puppet/yaml/node
|
3
|
+
fail("Cannot find node facts #{file}.") unless File.exist?(file)
|
4
|
+
@node = YAML.load_file(file)
|
5
|
+
file("Invalid node file #{file}, this should come from " +
|
6
|
+
"/var/lib/puppet/yaml/node.") unless @node.is_a?(Puppet::Node)
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I compile its catalog$/ do
|
10
|
+
compile_catalog(@node)
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^all "([^\"]*)" should resolve$/ do |parameter|
|
14
|
+
# paramter: before, notify, require, or subscribe
|
15
|
+
@catalog.resources.each do |name|
|
16
|
+
resource = get_resource(name)
|
17
|
+
|
18
|
+
dependency = resource[parameter]
|
19
|
+
next unless dependency
|
20
|
+
if dependency.is_a?(Array)
|
21
|
+
dependency.each do |dep|
|
22
|
+
fail("#{resource} cannot #{parameter} #{dep}, not in catalog.") \
|
23
|
+
unless get_resource(dep.to_s)
|
24
|
+
end
|
25
|
+
elsif dependency.is_a?(Puppet::Resource::Reference)
|
26
|
+
fail("#{resource} cannot #{parameter} #{dependency}, not in catalog.") \
|
27
|
+
unless get_resource(dependency.to_s)
|
28
|
+
else
|
29
|
+
fail("#{resource} #{parameter} #{dependency} of unknown class.")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Then /^all file sources should exist in git repository$/ do
|
35
|
+
@catalog.resources.each do |name|
|
36
|
+
next unless name.match(/^File/)
|
37
|
+
file = get_resource(name)
|
38
|
+
|
39
|
+
next unless file['source']
|
40
|
+
source = file['source']
|
41
|
+
|
42
|
+
filepath = source.gsub(%r{^puppet:///([^/]*)/(.*)$}, 'modules/\1/files/\2')
|
43
|
+
fail("#{name}: source #{filepath} not in git repository.") unless
|
44
|
+
system("git cat-file -e :#{filepath} > /dev/null 2>&1")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
Then /^all file templates should exist in git repository$/ do
|
49
|
+
Dir.glob('modules/*/templates/**.erb').each do |template|
|
50
|
+
fail("#{template} not in git.") unless
|
51
|
+
system("git cat-file -e :#{template} > /dev/null 2>&1")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
Then /^all resource dependencies should resolve$/ do
|
56
|
+
steps %Q{
|
57
|
+
Then all "before" should resolve
|
58
|
+
And all "notify" should resolve
|
59
|
+
And all "require" should resolve
|
60
|
+
And all "subscribe" should resolve
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
Then /^compilation should succeed$/ do
|
65
|
+
fail("Catalog compilation failed.") unless
|
66
|
+
@catalog.is_a?(Puppet::Resource::Catalog)
|
67
|
+
end
|
@@ -1,3 +1,13 @@
|
|
1
|
+
Then /^following directories should be created:$/ do |directories|
|
2
|
+
directories.hashes.each do |dir|
|
3
|
+
steps %Q{
|
4
|
+
Then there should be a resource "File[#{dir['name']}]"
|
5
|
+
And the state should be "directory"
|
6
|
+
And the directory should have standard permissions
|
7
|
+
}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
1
11
|
Then /^the file should be a symlink to "([^\"]*)"$/ do |target|
|
2
12
|
fail unless @resource["ensure"] == target
|
3
13
|
end
|
@@ -6,11 +16,16 @@ Then /^the file should contain "([^\"]*)"$/ do |text|
|
|
6
16
|
fail unless @resource["content"].include?(text)
|
7
17
|
end
|
8
18
|
|
9
|
-
Then /^the (file|script) should have standard permissions$/ do |type|
|
10
|
-
|
19
|
+
Then /^the (directory|file|script) should have standard permissions$/ do |type|
|
20
|
+
case type
|
21
|
+
when "directory"
|
22
|
+
mode = "0755"
|
23
|
+
when "file"
|
11
24
|
mode = "0444"
|
12
|
-
|
25
|
+
when "script"
|
13
26
|
mode = "0555"
|
27
|
+
else
|
28
|
+
fail
|
14
29
|
end
|
15
30
|
|
16
31
|
steps %Q{
|
@@ -1,13 +1,14 @@
|
|
1
|
-
Then /^
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
Then /^following packages should be dealt with:$/ do |packages|
|
2
|
+
packages.hashes.each do |package|
|
3
|
+
steps %Q{
|
4
|
+
Then package "#{package['name']}" should be "#{package['state']}"
|
5
|
+
}
|
6
|
+
end
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
-
Then /^package "([^\"]*)" should not be installed$/ do |package|
|
9
|
+
Then /^package "([^\"]*)" should be "([^\"]*)"$/ do |package, state|
|
10
10
|
steps %Q{
|
11
|
-
Then there should be
|
11
|
+
Then there should be a resource "Package[#{package}]"
|
12
|
+
And the state should be "#{state}"
|
12
13
|
}
|
13
14
|
end
|
@@ -32,22 +32,32 @@ end
|
|
32
32
|
|
33
33
|
Then /^the [a-z]* should notify "([^\"]*)"$/ do |res|
|
34
34
|
fail unless @resource["notify"].to_s == res
|
35
|
+
steps %Q{
|
36
|
+
Then the catalog should contain "#{res}"
|
37
|
+
}
|
35
38
|
end
|
36
39
|
|
37
|
-
Then /^the [a-z]* should require "([^\"]*)"$/ do |
|
40
|
+
Then /^the [a-z]* should require "([^\"]*)"$/ do |res|
|
38
41
|
req = @resource["require"]
|
39
42
|
if req.is_a?(Array)
|
40
43
|
found = false
|
41
44
|
req.each do |r|
|
42
|
-
if r.to_s ==
|
45
|
+
if r.to_s == res
|
43
46
|
found = true
|
44
47
|
break
|
45
48
|
end
|
46
49
|
end
|
47
50
|
fail unless found
|
48
51
|
else
|
49
|
-
fail unless req.to_s ==
|
52
|
+
fail unless req.to_s == res
|
50
53
|
end
|
54
|
+
steps %Q{
|
55
|
+
Then the catalog should contain "#{res}"
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
Then /^the catalog should contain "([^\"]*)"$/ do |res|
|
60
|
+
fail unless resource(res)
|
51
61
|
end
|
52
62
|
|
53
63
|
Then /^the state should be "([^\"]*)"$/ do |state|
|
@@ -58,8 +68,3 @@ Then /^there should be a resource "([^\"]*)"$/ do |res|
|
|
58
68
|
@resource = resource(res)
|
59
69
|
fail unless @resource
|
60
70
|
end
|
61
|
-
|
62
|
-
Then /^there should be no resource "([^\"]*)"$/ do |res|
|
63
|
-
@resource = resource(res)
|
64
|
-
fail if @resource
|
65
|
-
end
|
@@ -1,3 +1,15 @@
|
|
1
|
+
Then /^"([^\"]*)" should be in groups? "([^\"]*)"$/ do |user, groups|
|
2
|
+
steps %Q{
|
3
|
+
Then there should be a resource "User[#{user}]"
|
4
|
+
And the user should be in groups "#{groups}"
|
5
|
+
}
|
6
|
+
end
|
7
|
+
|
1
8
|
Then /^the user should be in groups "([^\"]*)"$/ do |groups|
|
2
|
-
|
9
|
+
g = @resource["groups"]
|
10
|
+
g_s = g
|
11
|
+
if g.is_a?(Array)
|
12
|
+
g_s = g.join(' ')
|
13
|
+
end
|
14
|
+
fail unless g_s == groups
|
3
15
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
.\" generated with Ronn/v0.7.3
|
2
|
+
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
+
.
|
4
|
+
.TH "CUCUMBER\-PUPPET\-GEN" "1" "August 2010" "" ""
|
5
|
+
.
|
6
|
+
.SH "NAME"
|
7
|
+
\fBcucumber\-puppet\-gen\fR \- Generator script for cucumber\-puppet
|
8
|
+
.
|
9
|
+
.SH "SYNOPSIS"
|
10
|
+
\fBcucumber\-puppet\-gen\fR feature MODULE FEATURE
|
11
|
+
.
|
12
|
+
.P
|
13
|
+
\fBcucumber\-puppet\-gen\fR world
|
14
|
+
.
|
15
|
+
.SH "DESCRIPTION"
|
16
|
+
\fBcucumber\-puppet\-gen\fR generates feature files and initializes a Puppet tree for use with \fBcucumber\-puppet\fR\.
|
17
|
+
.
|
18
|
+
.TP
|
19
|
+
\fBcucumber\-puppet\-gen\fR feature MODULE FEATURE
|
20
|
+
Generate a feature file from template for feature FEATURE and module MODULE\. Depending on the current working directory, the feature is either placed in \fBfeatures/modules/MODULE/FEATURE\.feature\fR or, if called from the \fBmodules/\fR subdirectory tree, \fBmodules/MODULE/features/FEATURE\.feature\fR\.
|
21
|
+
.
|
22
|
+
.TP
|
23
|
+
\fBcucumber\-puppet\-gen\fR world
|
24
|
+
Initialize Puppet tree for use with \fBcucumber\-puppet\fR, to be run from the Puppet tree\'s root\.
|
25
|
+
.
|
26
|
+
.SH "EXAMPLES"
|
27
|
+
Initialize the Puppet tree:
|
28
|
+
.
|
29
|
+
.IP "" 4
|
30
|
+
.
|
31
|
+
.nf
|
32
|
+
|
33
|
+
$ cd puppet
|
34
|
+
$ cucumber\-puppet\-gen world
|
35
|
+
.
|
36
|
+
.fi
|
37
|
+
.
|
38
|
+
.IP "" 0
|
39
|
+
.
|
40
|
+
.P
|
41
|
+
Generated files are to be found in \fBfeatures/steps/\fR and \fBfeatures/support/\fR\.
|
42
|
+
.
|
43
|
+
.P
|
44
|
+
Create a feature file for module \fIfoo\fR\'s \fIbar\fR feature:
|
45
|
+
.
|
46
|
+
.IP "" 4
|
47
|
+
.
|
48
|
+
.nf
|
49
|
+
|
50
|
+
$ cd puppet
|
51
|
+
$ cucumber\-puppet\-gen feature foo bar
|
52
|
+
.
|
53
|
+
.fi
|
54
|
+
.
|
55
|
+
.IP "" 0
|
56
|
+
.
|
57
|
+
.P
|
58
|
+
Create the same feature file to be bundled with the module:
|
59
|
+
.
|
60
|
+
.IP "" 4
|
61
|
+
.
|
62
|
+
.nf
|
63
|
+
|
64
|
+
$ cd puppet/modules
|
65
|
+
$ cucumber\-puppet\-gen feature foo bar
|
66
|
+
.
|
67
|
+
.fi
|
68
|
+
.
|
69
|
+
.IP "" 0
|
70
|
+
.
|
71
|
+
.SH "REPORTING BUGS"
|
72
|
+
Report bugs to \fIcucumber\-puppet@erisiandiscord\.de\fR or go to http://github\.com/nistude/cucumber\-puppet/issues
|
73
|
+
.
|
74
|
+
.SH "COPYRIGHT"
|
75
|
+
\fBcucumber\-puppet\fR is Copyright (c) 2010 Nikolay Sturm \fIsturm@nistu\.de\fR
|
76
|
+
.
|
77
|
+
.SH "SEE ALSO"
|
78
|
+
cucumber\-puppet(1)
|
@@ -0,0 +1,137 @@
|
|
1
|
+
.\" generated with Ronn/v0.7.3
|
2
|
+
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
+
.
|
4
|
+
.TH "CUCUMBER\-PUPPET" "1" "August 2010" "" ""
|
5
|
+
.
|
6
|
+
.SH "NAME"
|
7
|
+
\fBcucumber\-puppet\fR \- Puppet manifest testing with Cucumber
|
8
|
+
.
|
9
|
+
.SH "SYNOPSIS"
|
10
|
+
\fBcucumber\-puppet\fR [ OPTIONS ] FILE | DIR \.\.\.
|
11
|
+
.
|
12
|
+
.SH "DESCRIPTION"
|
13
|
+
\fBcucumber\-puppet\fR is a tool for behavioral testing of Puppet manifests\. It provides the glue necessary to access Puppet\'s data structures from Cucumber\'s step definitions\.
|
14
|
+
.
|
15
|
+
.P
|
16
|
+
\fBcucumber\-puppet\fR takes a list of feature files or directories, containing feature files, as argument\. These will then be run through \fBcucumber\fR\. It needs to be started from somewhere inside the Puppet directory tree\.
|
17
|
+
.
|
18
|
+
.TP
|
19
|
+
\fB\-h\fR, \fB\-\-help\fR
|
20
|
+
Show help message\.
|
21
|
+
.
|
22
|
+
.TP
|
23
|
+
\fB\-\-version\fR
|
24
|
+
Show version number\.
|
25
|
+
.
|
26
|
+
.P
|
27
|
+
The following options are passed on to \fBcucumber\fR\. See \fBcucumber \-\-help\fR for further details\.
|
28
|
+
.
|
29
|
+
.TP
|
30
|
+
\fB\-b\fR, \fB\-\-backtrace\fR
|
31
|
+
Show full backtrace for all errors\.
|
32
|
+
.
|
33
|
+
.TP
|
34
|
+
\fB\-e\fR, \fB\-\-exclude\fR \fIPATTERN\fR
|
35
|
+
Don\'t run feature files or require ruby files matching \fIPATTERN\fR\.
|
36
|
+
.
|
37
|
+
.TP
|
38
|
+
\fB\-f\fR, \fB\-\-format\fR \fIFORMAT\fR
|
39
|
+
How to format features (Default: pretty)\.
|
40
|
+
.
|
41
|
+
.TP
|
42
|
+
\fB\-n\fR, \fB\-\-name\fR \fINAME\fR
|
43
|
+
Only run matching feature elements\.
|
44
|
+
.
|
45
|
+
.TP
|
46
|
+
\fB\-o\fR, \fB\-\-out\fR \fIFILE\fR|\fIDIR\fR
|
47
|
+
Write output to \fIFILE\fR|\fIDIR\fR\.
|
48
|
+
.
|
49
|
+
.TP
|
50
|
+
\fB\-t\fR, \fB\-\-tags\fR \fITAG\-EXPRESSION\fR
|
51
|
+
Only run features/scenarios matching \fITAG\-EXPRESSION\fR\.
|
52
|
+
.
|
53
|
+
.TP
|
54
|
+
\fB\-v\fR, \fB\-\-verbose\fR
|
55
|
+
Show files and features loaded\.
|
56
|
+
.
|
57
|
+
.TP
|
58
|
+
\fB\-x\fR, \fB\-\-expand\fR
|
59
|
+
Expand Scenario Outline Tables in output\.
|
60
|
+
.
|
61
|
+
.SH "FILES"
|
62
|
+
\fBcucumber\-puppet\fR assumes a certain directory structure to magically find necessary support files\. Relative to the Puppet directory\'s root, the structure looks like this:
|
63
|
+
.
|
64
|
+
.TP
|
65
|
+
\fBfeatures/\fR
|
66
|
+
The generic place to store Cucumber files\.
|
67
|
+
.
|
68
|
+
.TP
|
69
|
+
\fBfeatures/modules/foo/\fR
|
70
|
+
Feature files for module \fIfoo\fR go here\.
|
71
|
+
.
|
72
|
+
.TP
|
73
|
+
\fBfeatures/modules/foo/bar\.feature\fR
|
74
|
+
File containing scenarios for the \fIbar\fR feature\.
|
75
|
+
.
|
76
|
+
.TP
|
77
|
+
\fBfeatures/steps/\fR
|
78
|
+
Step definitions go here\. To distinguish local extensions, it is suggested putting these into files named \fBmodule_foo\.rb\fR or \fBdefine_bar\.rb\fR\. Although names don\'t really matter to cucumber, as long as files have the proper suffix\.
|
79
|
+
.
|
80
|
+
.TP
|
81
|
+
\fBfeatures/support/\fR
|
82
|
+
Cucumber support files go here\.
|
83
|
+
.
|
84
|
+
.P
|
85
|
+
\fBcucumber\-puppet\fR also supports bundling features with modules\. In this case it looks for features, step definitions and support files in \fBmodules/foo/features/\fR like so:
|
86
|
+
.
|
87
|
+
.TP
|
88
|
+
\fBmodules/foo/features/bar\.feature\fR
|
89
|
+
Bundled feature file\.
|
90
|
+
.
|
91
|
+
.TP
|
92
|
+
\fBmodules/foo/features/steps/bar\.rb\fR
|
93
|
+
Bundled step definition file\.
|
94
|
+
.
|
95
|
+
.SH "EXAMPLES"
|
96
|
+
To run all features found in a directory:
|
97
|
+
.
|
98
|
+
.IP "" 4
|
99
|
+
.
|
100
|
+
.nf
|
101
|
+
|
102
|
+
$ cucumber\-puppet features
|
103
|
+
.
|
104
|
+
.fi
|
105
|
+
.
|
106
|
+
.IP "" 0
|
107
|
+
.
|
108
|
+
.P
|
109
|
+
To run a single feature:
|
110
|
+
.
|
111
|
+
.IP "" 4
|
112
|
+
.
|
113
|
+
.nf
|
114
|
+
|
115
|
+
$ cucumber\-puppet features/modules/foo/bar\.feature
|
116
|
+
.
|
117
|
+
.fi
|
118
|
+
.
|
119
|
+
.IP "" 0
|
120
|
+
.
|
121
|
+
.SH "REPORTING BUGS"
|
122
|
+
Report bugs to \fIcucumber\-puppet@erisiandiscord\.de\fR or go to http://github\.com/nistude/cucumber\-puppet/issues
|
123
|
+
.
|
124
|
+
.SH "COPYRIGHT"
|
125
|
+
\fBcucumber\-puppet\fR is Copyright (c) 2010 Nikolay Sturm \fIsturm@nistu\.de\fR
|
126
|
+
.
|
127
|
+
.SH "SEE ALSO"
|
128
|
+
cucumber\-puppet\-gen(1)
|
129
|
+
.
|
130
|
+
.P
|
131
|
+
Behavior Driven Development: http://behaviour\-driven\.org/ http://en\.wikipedia\.org/wiki/Behavior_driven_development
|
132
|
+
.
|
133
|
+
.P
|
134
|
+
Cucumber: http://cukes\.info/
|
135
|
+
.
|
136
|
+
.P
|
137
|
+
Puppet: http://www\.puppetlabs\.com/puppet/introduction/
|
metadata
CHANGED
@@ -1,12 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-puppet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
segments:
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
version: 0.0.5
|
4
|
+
version: 0.0.6
|
10
5
|
platform: ruby
|
11
6
|
authors:
|
12
7
|
- Nikolay Sturm
|
@@ -14,37 +9,40 @@ autorequire:
|
|
14
9
|
bindir: bin
|
15
10
|
cert_chain: []
|
16
11
|
|
17
|
-
date: 2010-
|
12
|
+
date: 2010-08-23 00:00:00 +02:00
|
18
13
|
default_executable:
|
19
14
|
dependencies:
|
20
15
|
- !ruby/object:Gem::Dependency
|
21
16
|
name: cucumber
|
22
|
-
|
23
|
-
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
20
|
requirements:
|
25
21
|
- - ">="
|
26
22
|
- !ruby/object:Gem::Version
|
27
|
-
segments:
|
28
|
-
- 0
|
29
|
-
- 6
|
30
|
-
- 4
|
31
23
|
version: 0.6.4
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: gem-man
|
32
27
|
type: :runtime
|
33
|
-
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.2.0
|
34
|
+
version:
|
34
35
|
- !ruby/object:Gem::Dependency
|
35
36
|
name: templater
|
36
|
-
|
37
|
-
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
40
|
requirements:
|
39
41
|
- - ">="
|
40
42
|
- !ruby/object:Gem::Version
|
41
|
-
segments:
|
42
|
-
- 1
|
43
|
-
- 0
|
44
43
|
version: "1.0"
|
45
|
-
|
46
|
-
|
47
|
-
description: cucumber-puppet supports writing behavioural tests for Puppet manifests
|
44
|
+
version:
|
45
|
+
description: cucumber-puppet is a tool for behavioral testing of Puppet manifests
|
48
46
|
email: cucumber-puppet@erisiandiscord.de
|
49
47
|
executables:
|
50
48
|
- cucumber-puppet
|
@@ -61,16 +59,19 @@ files:
|
|
61
59
|
- lib/cucumber-puppet/puppet.rb
|
62
60
|
- lib/cucumber-puppet/rake/task.rb
|
63
61
|
- lib/generators/feature/%feature_name%.feature
|
62
|
+
- man/cucumber-puppet.1
|
63
|
+
- man/cucumber-puppet-gen.1
|
64
64
|
- VERSION.yml
|
65
|
-
- lib/generators/world/support/world.rb
|
66
|
-
- lib/generators/world/support/hooks.rb
|
67
|
-
- lib/generators/world/steps/user.rb
|
68
|
-
- lib/generators/world/steps/puppet.rb
|
69
|
-
- lib/generators/world/steps/cron.rb
|
70
|
-
- lib/generators/world/steps/service.rb
|
71
65
|
- lib/generators/world/steps/package.rb
|
66
|
+
- lib/generators/world/steps/catalog_specs.rb
|
72
67
|
- lib/generators/world/steps/exec.rb
|
68
|
+
- lib/generators/world/steps/user.rb
|
73
69
|
- lib/generators/world/steps/file.rb
|
70
|
+
- lib/generators/world/steps/cron.rb
|
71
|
+
- lib/generators/world/steps/puppet.rb
|
72
|
+
- lib/generators/world/steps/service.rb
|
73
|
+
- lib/generators/world/support/hooks.rb
|
74
|
+
- lib/generators/world/support/world.rb
|
74
75
|
has_rdoc: true
|
75
76
|
homepage: http://github.com/nistude/cucumber-puppet/
|
76
77
|
licenses: []
|
@@ -84,20 +85,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
84
85
|
requirements:
|
85
86
|
- - ">="
|
86
87
|
- !ruby/object:Gem::Version
|
87
|
-
segments:
|
88
|
-
- 0
|
89
88
|
version: "0"
|
89
|
+
version:
|
90
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
92
|
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
segments:
|
95
|
-
- 0
|
96
94
|
version: "0"
|
95
|
+
version:
|
97
96
|
requirements: []
|
98
97
|
|
99
98
|
rubyforge_project:
|
100
|
-
rubygems_version: 1.3.
|
99
|
+
rubygems_version: 1.3.5
|
101
100
|
signing_key:
|
102
101
|
specification_version: 3
|
103
102
|
summary: Puppet manifest testing with Cucumber
|