cucumber-puppet 0.0.5 → 0.0.6
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.
- 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
|