blob: d0403dd14312c550cd6dc06a456143884637da34 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
def debian_compatible?
(ohai[:platform] == 'debian') || (ohai[:platform] == "ubuntu")
end
def chef_test_dpkg_installed?
shell_out("dpkg -l chef-integration-test").status.success?
end
def purge_chef_integration_debs
if debian_compatible? && chef_test_dpkg_installed?
shell_out!("dpkg -r chef-integration-test")
shell_out("dpkg --clear-avail")
end
end
Given /^I have configured my apt sources for integration tests$/ do
File.open("/etc/apt/sources.list.d/chef-integration-test.list", "w+") do |f|
f.puts "deb http://localhost:9000/ sid main"
end
end
def remove_integration_test_apt_source
FileUtils.rm("/etc/apt/sources.list.d/chef-integration-test.list")
rescue Errno::ENOENT
Chef::Log.info("Attempted to remove integration test from /etc/apt/sources.list.d but it didn't exist")
end
After("@apt") do
remove_integration_test_apt_source
purge_chef_integration_debs
shell_out! "apt-get clean"
end
Before('@dpkg') do
purge_chef_integration_debs
end
Before('@apt') do
purge_chef_integration_debs
shell_out! "apt-get clean"
end
After('@dpkg') do
purge_chef_integration_debs
end
Given "I am running on a debian compatible OS" do
unless debian_compatible?
pending("This test can only run on debian or ubuntu, but you have #{ohai[:platform]}")
end
end
Given "my dpkg architecture is 'amd64'" do
unless `dpkg --print-architecture`.strip == "amd64"
pending("This scenario can only run on an amd64 system")
end
end
Given "the deb package '$pkg_name' is available" do |pkg_name|
source = File.expand_path(File.dirname(__FILE__) + "/../data/apt/#{pkg_name}-1_amd64.deb")
dest = File.join(tmpdir, File.basename(source))
FileUtils.cp(source, dest)
end
Given "the apt server is running" do
self.apt_server_thread = Thread.new do
trap("INT") do
apt_server.shutdown
apt_server_thread.join
end
apt_server.start
end
Chef::Log.debug "Waiting for apt server to start"
until tcp_test_port("localhost", 9000) do
Chef::Log.debug "."
sleep 1
end
Chef::Log.debug "done"
end
Given "I have updated my apt cache" do
shell_out!("apt-get update")
end
Given /^the gems server is running$/ do
self.gemserver_thread = Thread.new do
trap("INT") do
gemserver.shutdown
gemserver_thread.join
end
gemserver.start
end
end
Given /^that I have the (.+) package system installed$/ do |package_system|
unless package_system_available?(package_system)
pending "This Cucumber feature will not execute, as it is missing the #{package_system} packaging system."
end
end
Then /^there should be a binary on the path called '(.+)'$/ do |binary_name|
binary_name.strip!
result = `which #{binary_name}`
result.should_not =~ /not found/
end
Then /^there should not be a binary on the path called '(.+)'$/ do |binary_name|
binary_name.strip!
result = `which #{binary_name}`.strip
unless result.empty?
result.should =~ /not found/
end
end
Then /^the gem '(.+)' version '(.+)' should be installed$/ do |gem_name, version|
Then "a file named 'installed-gems/gems/#{gem_name}-#{version}' should exist"
end
Then "the gem '$gem_name' version '$version' should not be installed" do |gem_name, version|
Then "a file named 'installed-gems/gems/#{gem_name}-#{version}' should not exist"
end
def dpkg_should_be_installed(pkg_name)
shell_out!("dpkg -l #{pkg_name}")
end
Then "the dpkg package '$package_name' should be installed" do |package_name|
dpkg_should_be_installed(package_name)
end
def tcp_test_port(hostname, port)
tcp_socket = TCPSocket.new(hostname, port)
true
rescue Errno::ETIMEDOUT
false
rescue Errno::ECONNREFUSED
false
ensure
tcp_socket && tcp_socket.close
end
|