cuken 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.
- data/Gemfile +1 -1
- data/Gemfile.lock +8 -8
- data/VERSION +1 -1
- data/cuken.gemspec +19 -5
- data/features/about.md +110 -27
- data/features/chef_examples/cookbooks_cookbook.feature +2 -2
- data/features/chef_examples/zenoss/01_chef_server_setup.feature +205 -0
- data/features/chef_examples/zenoss/02_monitor_vm_setup.feature +139 -0
- data/features/chef_examples/zenoss/03_monitor_chef_setup.feature +109 -0
- data/features/step_definitions/cuken_steps.rb +16 -0
- data/features/support/env.rb +1 -0
- data/lib/cuken/api/chef/common.rb +20 -0
- data/lib/cuken/api/chef/cookbook.rb +62 -1
- data/lib/cuken/api/chef/data_bag.rb +89 -0
- data/lib/cuken/api/chef/knife.rb +16 -0
- data/lib/cuken/api/chef/role.rb +71 -0
- data/lib/cuken/api/chef.rb +51 -9
- data/lib/cuken/api/file.rb +68 -0
- data/lib/cuken/api/vagrant/common.rb +85 -0
- data/lib/cuken/api/vagrant/v_m.rb +125 -0
- data/lib/cuken/api/vagrant.rb +83 -0
- data/lib/cuken/chef.rb +16 -0
- data/lib/cuken/cucumber/chef/common.rb +4 -0
- data/lib/cuken/cucumber/chef/cookbook.rb +16 -2
- data/lib/cuken/cucumber/chef/data_bag.rb +48 -16
- data/lib/cuken/cucumber/chef/role.rb +30 -0
- data/lib/cuken/cucumber/chef.rb +16 -5
- data/lib/cuken/cucumber/cmd.rb +16 -0
- data/lib/cuken/cucumber/common.rb +16 -0
- data/lib/cuken/cucumber/file.rb +52 -0
- data/lib/cuken/cucumber/git/hooks.rb +28 -0
- data/lib/cuken/cucumber/rvm.rb +16 -0
- data/lib/cuken/cucumber/ssh/hooks.rb +31 -0
- data/lib/cuken/cucumber/ssh.rb +16 -0
- data/lib/cuken/cucumber/vagrant/common.rb +93 -0
- data/lib/cuken/cucumber/vagrant/hooks.rb +35 -0
- data/lib/cuken/cucumber/vagrant.rb +26 -0
- data/lib/cuken/vagrant.rb +19 -0
- metadata +18 -4
data/lib/cuken/api/file.rb
CHANGED
@@ -69,6 +69,74 @@ module Cuken
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
+
def place_file(src, dst)
|
73
|
+
dest = Pathname(dst).expand_path.realdirpath
|
74
|
+
FileUtils.mkdir_p((dest+src).dirname.to_s)
|
75
|
+
in_current_dir do
|
76
|
+
opts = {:verbose => true, :preserve => true, :remove_destination => true}
|
77
|
+
FileUtils.cp_r(src, (dest+src).to_s, opts).should be_nil
|
78
|
+
FileUtils.compare_file(src, (dest+src).to_s).should be_true
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def place_folder_contents(dest_dir_name, src_dir_name)
|
83
|
+
dest = Pathname(dest_dir_name).expand_path.realdirpath
|
84
|
+
dest_parent = dest.dirname.to_s
|
85
|
+
FileUtils.mkdir_p((dest+src_dir_name).to_s)
|
86
|
+
in_current_dir do
|
87
|
+
opts = {:verbose => true, :preserve => true, :remove_destination => true}
|
88
|
+
FileUtils.cp_r(src_dir_name+'/.', dest.to_s, opts).should be_nil
|
89
|
+
end
|
90
|
+
Dir.glob("#{src_dir_name}/**/*").each do |fn|
|
91
|
+
if File.file?(fn)
|
92
|
+
fn2 = File.join(dest_parent, fn)
|
93
|
+
FileUtils.compare_file(fn, fn2).should be_true
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def check_placed_file_content(file, partial_content, expect_match)
|
99
|
+
prep_for_placed_fs_check do
|
100
|
+
content = IO.read(file)
|
101
|
+
if expect_match
|
102
|
+
content.should include partial_content
|
103
|
+
else
|
104
|
+
content.should_not include partial_content
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def prep_for_placed_fs_check(&block)
|
110
|
+
stop_processes!
|
111
|
+
block.call
|
112
|
+
end
|
113
|
+
|
114
|
+
def check_placed_file_presence(paths, expect_presence)
|
115
|
+
prep_for_placed_fs_check do
|
116
|
+
paths.each do |path|
|
117
|
+
if expect_presence
|
118
|
+
::File.should be_file(path)
|
119
|
+
else
|
120
|
+
::File.should_not be_file(path)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def check_placed_directory_presence(paths, expect_presence)
|
127
|
+
prep_for_placed_fs_check do
|
128
|
+
paths.each do |path|
|
129
|
+
if expect_presence
|
130
|
+
dest = Pathname(path).expand_path.realdirpath
|
131
|
+
Pathname(dest).mkpath
|
132
|
+
Pathname(path).should be_directory
|
133
|
+
else
|
134
|
+
Pathname(path).should_not be_directory
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
72
140
|
end
|
73
141
|
end
|
74
142
|
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
module ::Cuken
|
18
|
+
module Api
|
19
|
+
module Vagrant
|
20
|
+
module Common
|
21
|
+
|
22
|
+
def establish_vm_interactive_ssh(boxname)
|
23
|
+
cmd = vagrant.vm[boxname.to_sym].ssh.ssh_connect_command
|
24
|
+
run_interactive(unescape(cmd))
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_vagrant_file(path, expect_presence = true)
|
28
|
+
vagrant.path = Pathname(path).expand_path.realdirpath
|
29
|
+
if expect_presence
|
30
|
+
vagrant.path.exist?.should be_true
|
31
|
+
else
|
32
|
+
vagrant.path.exist?.should be_false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def check_vagrant_file_presence(path, expect_presence = true)
|
37
|
+
if Pathname(chef.root_dir).exist?
|
38
|
+
in_chef_root do
|
39
|
+
if expect_presence
|
40
|
+
load_vagrant_file(path)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
else
|
44
|
+
in_current_dir do
|
45
|
+
if expect_presence
|
46
|
+
load_vagrant_file(path)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def check_vm_active(name, expect_active = true )
|
53
|
+
in_chef_root do
|
54
|
+
if expect_active
|
55
|
+
if vagrant.environment.local_data[:active][name].nil?
|
56
|
+
vagrant.up(name)
|
57
|
+
end
|
58
|
+
vagrant.environment.local_data[:active][name].should_not be_nil
|
59
|
+
else
|
60
|
+
if vagrant.environment.local_data[:active][name]
|
61
|
+
vagrant.halt(name)
|
62
|
+
end
|
63
|
+
vagrant.environment.local_data[:active][name].should be_nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def check_vm_state(name, state, expect_state = true )
|
69
|
+
in_chef_root do
|
70
|
+
if expect_state
|
71
|
+
vagrant.vm[name.to_sym].vm.state.should == state
|
72
|
+
else
|
73
|
+
vagrant.vm[name.to_sym].vm.state.should_not == state
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def run_vm_manager_command(cmd, vm_name, vm_manager = :vagrant)
|
79
|
+
method(vm_manager).call.send(cmd, vm_name)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
@@ -0,0 +1,125 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
module ::Cuken
|
18
|
+
module Api
|
19
|
+
module Vagrant
|
20
|
+
module VM
|
21
|
+
attr_accessor :name
|
22
|
+
attr_writer :path
|
23
|
+
attr_reader :vm, :vagrant_vm
|
24
|
+
|
25
|
+
def initialize(name)
|
26
|
+
e = environment
|
27
|
+
@vagrant_vm = ::Vagrant::VM.new(:env => e, :name => name)
|
28
|
+
@vm = {}
|
29
|
+
@name = name
|
30
|
+
environment.vm = {}
|
31
|
+
get_vm(name)
|
32
|
+
@vagrant_vm
|
33
|
+
end
|
34
|
+
|
35
|
+
def vm_config
|
36
|
+
@vm_config ||= environment.instance_variable_get(:@config).instance_variable_get(:@vm)
|
37
|
+
end
|
38
|
+
|
39
|
+
def vms
|
40
|
+
@vms = environment.instance_variable_get(:@vms)
|
41
|
+
end
|
42
|
+
|
43
|
+
# def name
|
44
|
+
# @name ||= 'cuken'
|
45
|
+
# end
|
46
|
+
|
47
|
+
def uuid
|
48
|
+
@vm.uuid
|
49
|
+
end
|
50
|
+
|
51
|
+
def path
|
52
|
+
@path ||= Pathname.pwd
|
53
|
+
end
|
54
|
+
|
55
|
+
def vagrantfile
|
56
|
+
vf = path + 'Vagrantfile'
|
57
|
+
vf.exist? ? vf : nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def environment
|
61
|
+
@environment = ::Vagrant::Environment.new(:cwd => path).reload_config!
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_vm(box_name)
|
65
|
+
unless environment.multivm?
|
66
|
+
@vm[:primary] = environment.primary_vm
|
67
|
+
else
|
68
|
+
if box_name
|
69
|
+
@vm[box_name.to_sym] = environment.vms[box_name.to_sym]
|
70
|
+
else
|
71
|
+
tmpvm = environment.vms.first
|
72
|
+
@vm[tmpvm[0]] = tmpvm[1]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
environment.vm = @vm
|
76
|
+
end
|
77
|
+
|
78
|
+
def configuration
|
79
|
+
@configuration ||= instance_variable_get :@config
|
80
|
+
end
|
81
|
+
|
82
|
+
def state(name)
|
83
|
+
vm[name.to_sym].vm.state
|
84
|
+
end
|
85
|
+
|
86
|
+
def run_vagrant_cli(cmd, vm_name)
|
87
|
+
::Vagrant::CLI.start([cmd, vm_name], :env => environment)
|
88
|
+
end
|
89
|
+
|
90
|
+
def up(vm_name = name)
|
91
|
+
run_vagrant_cli(__method__.to_s, vm_name)
|
92
|
+
end
|
93
|
+
|
94
|
+
def destroy(vm_name = name)
|
95
|
+
run_vagrant_cli(__method__.to_s, vm_name)
|
96
|
+
end
|
97
|
+
|
98
|
+
def halt(vm_name = name)
|
99
|
+
run_vagrant_cli(__method__.to_s, vm_name)
|
100
|
+
end
|
101
|
+
|
102
|
+
def provision(vm_name = name)
|
103
|
+
run_vagrant_cli(__method__.to_s, vm_name)
|
104
|
+
end
|
105
|
+
|
106
|
+
def status(vm_name = name)
|
107
|
+
run_vagrant_cli(__method__.to_s, vm_name)
|
108
|
+
end
|
109
|
+
|
110
|
+
def suspend(vm_name = name)
|
111
|
+
run_vagrant_cli(__method__.to_s, vm_name)
|
112
|
+
end
|
113
|
+
|
114
|
+
def resume(vm_name = name)
|
115
|
+
run_vagrant_cli(__method__.to_s, vm_name)
|
116
|
+
end
|
117
|
+
|
118
|
+
def reload(vm_name = name)
|
119
|
+
run_vagrant_cli(__method__.to_s, vm_name)
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
require 'vagrant' unless defined? ::Vagrant
|
18
|
+
|
19
|
+
require 'cuken/api/common'
|
20
|
+
require 'cuken/api/vagrant/common'
|
21
|
+
require 'cuken/api/vagrant/v_m'
|
22
|
+
|
23
|
+
module ::Cuken
|
24
|
+
module Api
|
25
|
+
module Vagrant
|
26
|
+
|
27
|
+
include ::Cuken::Api::Vagrant::Common
|
28
|
+
|
29
|
+
class VVM
|
30
|
+
include ::Cuken::Api::Vagrant::VM
|
31
|
+
end
|
32
|
+
|
33
|
+
def vagrant(box_name = nil)
|
34
|
+
@vagrant ||= VVM.new(box_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def switch_vagrant_environment
|
38
|
+
@vagrant = nil
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
module ::Vagrant
|
46
|
+
class SSH
|
47
|
+
|
48
|
+
# In order to run Aruba's 'When I type "..."' steps:
|
49
|
+
# Returns a Vagrant SSH connection string for the environment's virtual machine,
|
50
|
+
# This method optionally takes a hash of options which override the configuration values.
|
51
|
+
def ssh_connect_command(opts={})
|
52
|
+
if Mario::Platform.windows?
|
53
|
+
raise Errors::SSHUnavailableWindows, :key_path => env.config.ssh.private_key_path,
|
54
|
+
:ssh_port => port(opts)
|
55
|
+
end
|
56
|
+
|
57
|
+
raise Errors::SSHUnavailable if !Kernel.system("which ssh > /dev/null 2>&1")
|
58
|
+
|
59
|
+
options = {}
|
60
|
+
options[:port] = port(opts)
|
61
|
+
[:host, :username, :private_key_path].each do |param|
|
62
|
+
options[param] = opts[param] || env.config.ssh.send(param)
|
63
|
+
end
|
64
|
+
|
65
|
+
check_key_permissions(options[:private_key_path])
|
66
|
+
|
67
|
+
# Command line options
|
68
|
+
command_options = ["-p #{options[:port]}", "-o UserKnownHostsFile=/dev/null",
|
69
|
+
"-o StrictHostKeyChecking=no", "-o IdentitiesOnly=yes",
|
70
|
+
"-i #{options[:private_key_path]}"]
|
71
|
+
command_options << "-o ForwardAgent=yes" if env.config.ssh.forward_agent
|
72
|
+
|
73
|
+
if env.config.ssh.forward_x11
|
74
|
+
# Both are required so that no warnings are shown regarding X11
|
75
|
+
command_options << "-o ForwardX11=yes"
|
76
|
+
command_options << "-o ForwardX11Trusted=yes"
|
77
|
+
end
|
78
|
+
|
79
|
+
"ssh #{command_options.join(" ")} #{options[:username]}@#{options[:host]}".strip
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
data/lib/cuken/chef.rb
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
1
17
|
require 'grit'
|
2
18
|
|
3
19
|
require 'cuken/common'
|
@@ -24,6 +24,18 @@
|
|
24
24
|
#
|
25
25
|
World(::Cuken::Api::Chef::Cookbook)
|
26
26
|
|
27
|
+
When /^I load the Cookbooks:$/ do |table|
|
28
|
+
cookbooks_load(table)
|
29
|
+
end
|
30
|
+
|
31
|
+
Then /^these remote Cookbooks exist:$/ do |table|
|
32
|
+
check_remote_cookbook_table_presence(table)
|
33
|
+
end
|
34
|
+
|
35
|
+
Then /^these remote Cookbooks do not exist:$/ do |table|
|
36
|
+
check_remote_cookbook_table_presence(table, false)
|
37
|
+
end
|
38
|
+
|
27
39
|
Given /^the remote Cookbook repository "([^"]*)"$/ do |ckbk_repo|
|
28
40
|
in_current_dir do
|
29
41
|
repo = Dir.exist?(ckbk_repo) ? Pathname(ckbk_repo).expand_path.realdirpath : ckbk_repo
|
@@ -91,7 +103,7 @@ Then /^the local Site\-Cookbook "([^"]*)" exists$/ do |ckbk|
|
|
91
103
|
end
|
92
104
|
|
93
105
|
And /^these local Cookbooks exist:$/ do |table|
|
94
|
-
|
106
|
+
check_cookbook_table_presence(table)
|
95
107
|
end
|
96
108
|
|
97
109
|
And /^these local Site\-Cookbooks exist:$/ do |table|
|
@@ -129,7 +141,9 @@ When /^I clone the Cookbooks:$/ do |table|
|
|
129
141
|
src['branch'] = hsh['branch'] if hsh['branch']
|
130
142
|
src['tag'] = hsh['tag'] if hsh['tag']
|
131
143
|
src['ref'] = hsh['ref'] if hsh['ref']
|
132
|
-
|
144
|
+
ckbk = hsh['cookbook'] if hsh['cookbook']
|
145
|
+
ckbk = hsh['site-cookbook'] if hsh['site-cookbook']
|
146
|
+
local_repo = chef_clone_repo(hsh['destination'], true, chef.cookbooks_uri + ckbk + '.git', src )
|
133
147
|
Pathname(local_repo).exist?.should be_true
|
134
148
|
end
|
135
149
|
end
|
@@ -1,27 +1,59 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Portions of this work are derived from the Chef project
|
6
|
+
# The original license header follows:
|
7
|
+
#
|
8
|
+
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
9
|
+
# License:: Apache License, Version 2.0
|
10
|
+
#
|
11
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
12
|
+
# you may not use this file except in compliance with the License.
|
13
|
+
# You may obtain a copy of the License at
|
14
|
+
#
|
15
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
16
|
+
#
|
17
|
+
# Unless required by applicable law or agreed to in writing, software
|
18
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
19
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
20
|
+
# See the License for the specific language governing permissions and
|
21
|
+
# limitations under the License.
|
22
|
+
#
|
23
|
+
World(::Cuken::Api::Chef::DataBag)
|
24
|
+
|
1
25
|
###
|
2
26
|
# Given
|
3
27
|
###
|
4
|
-
#Given /^I create the "([^"]*)" Data Bag$/ do |arg1|
|
5
|
-
# pending # express the regexp above with the code you wish you had
|
6
|
-
#end
|
7
28
|
|
8
29
|
###
|
9
30
|
# When
|
10
31
|
###
|
11
|
-
#When /^I add these Cookbook Data Bag items:$/ do |table|
|
12
|
-
# # table is a Cucumber::Ast::Table
|
13
|
-
# pending # express the regexp above with the code you wish you had
|
14
|
-
#end
|
15
32
|
|
16
33
|
###
|
17
34
|
# Then
|
18
35
|
###
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
36
|
+
|
37
|
+
Given /^I create the Data Bag "([^"]*)"$/ do |data_bag_name|
|
38
|
+
data_bag_create(data_bag_name)
|
39
|
+
end
|
40
|
+
|
41
|
+
When /^I add these Cookbook Data Bag items:$/ do |table|
|
42
|
+
load_data_bag_item_table(table)
|
43
|
+
end
|
44
|
+
|
45
|
+
Then /^these Data Bags exist:$/ do |table|
|
46
|
+
check_data_bag_table_presence(table)
|
47
|
+
end
|
48
|
+
|
49
|
+
Then /^these Data Bags do not exist:$/ do |table|
|
50
|
+
check_data_bag_table_presence(table, false)
|
51
|
+
end
|
52
|
+
|
53
|
+
Then /^these Data Bags contain:$/ do |table|
|
54
|
+
check_data_bag_content_table(table)
|
55
|
+
end
|
56
|
+
|
57
|
+
Then /^these Data Bags do not contain:$/ do |table|
|
58
|
+
check_data_bag_content_table(table, false)
|
59
|
+
end
|
@@ -1,3 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
World(::Cuken::Api::Chef::Role)
|
18
|
+
|
19
|
+
When /^I load the Cookbook Roles:$/ do |table|
|
20
|
+
load_role_table(table)
|
21
|
+
end
|
22
|
+
|
23
|
+
And /^these Roles exist:$/ do |table|
|
24
|
+
check_role_table_presence(table)
|
25
|
+
end
|
26
|
+
|
27
|
+
And /^these Roles do not exist:$/ do |table|
|
28
|
+
check_role_table_presence(table, false)
|
29
|
+
end
|
30
|
+
|
1
31
|
###
|
2
32
|
# Given
|
3
33
|
###
|
data/lib/cuken/cucumber/chef.rb
CHANGED
@@ -1,13 +1,24 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
1
17
|
load 'aruba/cucumber.rb' unless defined? ::Aruba
|
2
18
|
require 'grit'
|
3
19
|
|
4
20
|
World(::Cuken::Api::Chef)
|
5
21
|
|
6
|
-
Before do
|
7
|
-
@aruba_timeout_seconds.nil? || @aruba_timeout_seconds < 20 ? @aruba_timeout_seconds = 20 : @aruba_timeout_seconds
|
8
|
-
::Grit::Git.git_timeout = 3610
|
9
|
-
end
|
10
|
-
|
11
22
|
require 'cuken/cucumber/chef/common'
|
12
23
|
require 'cuken/cucumber/chef/knife'
|
13
24
|
require 'cuken/cucumber/chef/cookbook'
|
data/lib/cuken/cucumber/cmd.rb
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
1
17
|
load 'aruba/cucumber.rb' unless defined? ::Aruba
|
2
18
|
|
3
19
|
World(::Cuken::Api::Cmd)
|
@@ -1,3 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
1
17
|
|
2
18
|
Given /^Assumption: (.*)$/ do |msg|
|
3
19
|
announce_or_puts(msg)
|
data/lib/cuken/cucumber/file.rb
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Hedgehog (<hedgehogshiatus@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Hedgehog.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
1
17
|
load 'aruba/cucumber.rb' unless defined? ::Aruba
|
2
18
|
World(::Cuken::Api::File)
|
3
19
|
|
@@ -91,6 +107,22 @@ Given /^we record the a-mtime of "([^"]*)"$/ do |filename|
|
|
91
107
|
record_amtimes(filename)
|
92
108
|
end
|
93
109
|
|
110
|
+
#
|
111
|
+
# Placing and placed files and folders refer to taking a file for Aruba's scratch folder, moving it
|
112
|
+
# outside of that ephemeral area and verifying the contents.
|
113
|
+
#
|
114
|
+
When /^I place "([^"]*)" in "([^"]*)"$/ do |src, dst|
|
115
|
+
place_file(src, dst)
|
116
|
+
end
|
117
|
+
|
118
|
+
And /^the placed directory "([^"]*)" exists$/ do |directory|
|
119
|
+
check_placed_directory_presence([directory], true)
|
120
|
+
end
|
121
|
+
|
122
|
+
And /^the placed directory "([^"]*)" does not exist$/ do |directory|
|
123
|
+
check_placed_directory_presence([directory], false)
|
124
|
+
end
|
125
|
+
|
94
126
|
Then /^the directory "([^"]*)" has decimal mode "(\d+)"$/ do |dirname, expected_mode|
|
95
127
|
check_modes(expected_mode, dirname)
|
96
128
|
end
|
@@ -103,6 +135,26 @@ Then /^the directory "([^"]*)" is owned by "([^"]*)"$/ do |dirname, owner|
|
|
103
135
|
check_uid(dirname, owner)
|
104
136
|
end
|
105
137
|
|
138
|
+
And /^I place all in "([^"]*)" in "([^"]*)"$/ do |src_dir_name, dest_dir_name|
|
139
|
+
place_folder_contents(dest_dir_name, src_dir_name)
|
140
|
+
end
|
141
|
+
|
142
|
+
And /^the placed file "([^"]*)" contains:$/ do |file, partial_content|
|
143
|
+
check_placed_file_content(file, partial_content, true)
|
144
|
+
end
|
145
|
+
|
146
|
+
And /^the placed file "([^"]*)" contains "([^"]*)"$/ do |file, partial_content|
|
147
|
+
check_placed_file_content(file, partial_content, true)
|
148
|
+
end
|
149
|
+
|
150
|
+
And /^the placed file "([^"]*)" exists$/ do |file|
|
151
|
+
check_placed_file_presence([file], true)
|
152
|
+
end
|
153
|
+
|
154
|
+
And /^the placed file "([^"]*)" does not exist$/ do |file|
|
155
|
+
check_placed_file_presence([file], false)
|
156
|
+
end
|
157
|
+
|
106
158
|
Then /^the file "([^"]*)" is owned by "([^"]*)"$/ do |filename, owner|
|
107
159
|
check_uid(filename, owner)
|
108
160
|
end
|