tpkg 2.3.3 → 2.3.4
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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/Portfile +39 -0
- data/Portfile.template +39 -0
- data/README.md +43 -0
- data/Rakefile +468 -18
- data/bin/gem2tpkg +2 -2
- data/bin/tpkg +18 -13
- data/bin/tpkg_uploader +132 -0
- data/ca.pem +1 -0
- data/control +7 -0
- data/depend +3 -0
- data/externals-etch/authorized_keys +40 -0
- data/externals-etch/group +9 -0
- data/externals-etch/iptables +38 -0
- data/externals-etch/limits +30 -0
- data/externals-etch/nfs +30 -0
- data/externals-etch/sudo +30 -0
- data/externals-etch/supplemental_groups +8 -0
- data/externals-etch/sysctl +30 -0
- data/externals-etch/user +41 -0
- data/externals/group +39 -0
- data/externals/supplemental_groups +48 -0
- data/externals/user +39 -0
- data/lib/tpkg.rb +260 -991
- data/lib/tpkg/os.rb +164 -0
- data/lib/tpkg/os/debian.rb +159 -0
- data/lib/tpkg/os/freebsd.rb +113 -0
- data/lib/tpkg/os/macosx.rb +113 -0
- data/lib/tpkg/os/redhat.rb +173 -0
- data/lib/tpkg/os/solaris.rb +101 -0
- data/lib/tpkg/os/windows.rb +26 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify.rb +67 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/errors.rb +127 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/kwalify.schema.yaml +58 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/main.rb +442 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/messages.rb +173 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/meta-validator.rb +275 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/parser/base.rb +127 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/parser/yaml.rb +841 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/rule.rb +559 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-java.eruby +222 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-php.eruby +104 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-ruby.eruby +113 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/types.rb +156 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util.rb +158 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/assert-text-equal.rb +46 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/hash-interface.rb +18 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/hashlike.rb +51 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/option-parser.rb +220 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/ordered-hash.rb +57 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/testcase-helper.rb +112 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/validator.rb +282 -0
- data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/yaml-parser.rb +870 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh.rb +219 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/agent.rb +179 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/constants.rb +18 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/key_manager.rb +219 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/abstract.rb +60 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/password.rb +39 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/publickey.rb +92 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/pageant.rb +183 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/session.rb +134 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/buffer.rb +340 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/buffered_io.rb +198 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/config.rb +205 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/channel.rb +630 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/constants.rb +33 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/session.rb +597 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/term.rb +178 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/errors.rb +85 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/key_factory.rb +102 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/known_hosts.rb +129 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/loggable.rb +61 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/packet.rb +102 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/prompt.rb +93 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/command.rb +75 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/errors.rb +14 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/http.rb +94 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/socks4.rb +70 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/socks5.rb +142 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/ruby_compat.rb +43 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/service/forward.rb +288 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test.rb +89 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/channel.rb +129 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/extensions.rb +152 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/kex.rb +44 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/local_packet.rb +51 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/packet.rb +81 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/remote_packet.rb +38 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/script.rb +157 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/socket.rb +64 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/algorithms.rb +384 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/cipher_factory.rb +97 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/constants.rb +30 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac.rb +31 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/abstract.rb +79 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/md5.rb +12 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/none.rb +15 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/sha1.rb +13 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/identity_cipher.rb +55 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex.rb +13 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/openssl.rb +127 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/packet_stream.rb +235 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/server_version.rb +71 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/session.rb +276 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/state.rb +206 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/lenient.rb +30 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/null.rb +12 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/strict.rb +53 -0
- data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/version.rb +62 -0
- data/lib/tpkg/version.rb +3 -0
- data/man/man1/cpan2tpkg.1 +82 -0
- data/man/man1/gem2tpkg.1 +120 -0
- data/man/man1/tpkg.1 +411 -0
- data/pkginfo +8 -0
- data/postinstall.solaris +11 -0
- data/postremove.solaris +16 -0
- data/schema/schema-1.0.5.yml +0 -0
- data/schema/schema-1.0.6.yml +0 -0
- data/schema/schema-1.0.7.yml +0 -0
- data/schema/schema-1.0.8.yml +0 -0
- data/schema/schema-1.0.9.yml +0 -0
- data/schema/schema.yml +0 -0
- data/schema/tpkg-1.0.0.dtd +0 -0
- data/schema/tpkg-1.0.1.dtd +0 -0
- data/schema/tpkg-1.0.2.dtd +0 -0
- data/schema/tpkg-1.0.3.dtd +0 -0
- data/schema/tpkg-1.0.4.dtd +0 -0
- data/schema/tpkg-1.0.5.dtd +0 -0
- data/schema/tpkg-1.0.6.dtd +0 -0
- data/schema/tpkg-1.0.7.dtd +0 -0
- data/schema/tpkg-1.0.8.dtd +0 -0
- data/schema/tpkg-1.0.9.dtd +0 -0
- data/schema/tpkg.dtd +0 -0
- data/test/TODO +30 -0
- data/test/premadetestpkg/pkg_without_file_metadata-1.0-1.tpkg +0 -0
- data/test/test_checksum.rb +53 -0
- data/test/test_compress.rb +55 -0
- data/test/test_conflict.rb +41 -0
- data/test/test_crontabs.rb +398 -0
- data/test/test_dependency.rb +1113 -0
- data/test/test_downgrade.rb +80 -0
- data/test/test_download.rb +95 -0
- data/test/test_encrypt.rb +136 -0
- data/test/test_filemetadata.rb +131 -0
- data/test/test_initscript.rb +93 -0
- data/test/test_install.rb +186 -0
- data/test/test_lock.rb +82 -0
- data/test/test_make.rb +410 -0
- data/test/test_metadata.rb +805 -0
- data/test/test_misc.rb +379 -0
- data/test/test_options.rb +1711 -0
- data/test/test_os.rb +193 -0
- data/test/test_os_debian.rb +99 -0
- data/test/test_os_freebsd.rb +89 -0
- data/test/test_os_macosx.rb +79 -0
- data/test/test_os_redhat.rb +124 -0
- data/test/test_os_solaris.rb +85 -0
- data/test/test_os_windows.rb +26 -0
- data/test/test_query.rb +134 -0
- data/test/test_remove.rb +539 -0
- data/test/test_tar.rb +99 -0
- data/test/test_unpack.rb +977 -0
- data/test/test_upgrade.rb +398 -0
- data/test/test_version.rb +54 -0
- data/test/testcmds/crontab +14 -0
- data/test/testcmds/debian/apt-cache +145 -0
- data/test/testcmds/debian/dpkg-query +16 -0
- data/test/testcmds/freebsd/pkg_info +13 -0
- data/test/testcmds/macosx/port +35 -0
- data/test/testcmds/redhat/rpmbuild +6 -0
- data/test/testcmds/redhat/yum +90 -0
- data/test/testcmds/solaris/pkginfo +25 -0
- data/test/testcmds/solaris/pkgutil +36 -0
- data/test/testpkg/reloc/encfile +2 -0
- data/test/testpkg/reloc/file +2 -0
- data/test/testpkg/reloc/precryptfile +1 -0
- data/test/testpkg/reloc/precryptfile.plaintext +3 -0
- data/test/testpkg/tpkg-bad-ownergroup.xml +25 -0
- data/test/testpkg/tpkg-bad-ownergroup.yml +18 -0
- data/test/testpkg/tpkg-default-perms.xml +28 -0
- data/test/testpkg/tpkg-default-perms.yml +20 -0
- data/test/testpkg/tpkg-good-ownergroup.xml +25 -0
- data/test/testpkg/tpkg-good-ownergroup.yml +18 -0
- data/test/testpkg/tpkg-nativedeps.yml +13 -0
- data/test/testpkg/tpkg-nofiles.xml +14 -0
- data/test/testpkg/tpkg-nofiles.yml +9 -0
- data/test/testpkg/tpkg.xml +35 -0
- data/test/testpkg/tpkg.yml +25 -0
- data/test/tpkgtest.rb +300 -0
- data/tpkg.conf +16 -0
- data/tpkg.gemspec +24 -0
- data/tpkg.spec +28 -0
- data/tpkg.xml +17 -0
- data/tpkg_profile.sh +32 -0
- metadata +306 -31
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Tests Red Hat OS abstraction code
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
require File.expand_path('tpkgtest', File.dirname(__FILE__))
|
|
6
|
+
|
|
7
|
+
# Make private methods public so that we can test them
|
|
8
|
+
class Tpkg::OS::RedHat
|
|
9
|
+
public :create_rpm
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class TpkgOSRedHatTests < Test::Unit::TestCase
|
|
13
|
+
include TpkgTests
|
|
14
|
+
|
|
15
|
+
def setup
|
|
16
|
+
@redhat = Tpkg::OS::RedHat.new(
|
|
17
|
+
:yumcmd => File.join(TESTCMDDIR, 'redhat/yum'),
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_supported
|
|
22
|
+
fact = Facter::Util::Fact.new('operatingsystem')
|
|
23
|
+
Facter.stubs(:[]).returns(fact)
|
|
24
|
+
fact.stubs(:value).returns('RedHat')
|
|
25
|
+
assert Tpkg::OS::RedHat.supported?
|
|
26
|
+
fact.stubs(:value).returns('CentOS')
|
|
27
|
+
assert Tpkg::OS::RedHat.supported?
|
|
28
|
+
fact.stubs(:value).returns('Fedora')
|
|
29
|
+
assert Tpkg::OS::RedHat.supported?
|
|
30
|
+
fact.stubs(:value).returns('Other')
|
|
31
|
+
refute Tpkg::OS::RedHat.supported?
|
|
32
|
+
end
|
|
33
|
+
def test_initialize
|
|
34
|
+
[:yumcmd, :rpmcmd, :rpmbuildcmd].each do |cmdvar|
|
|
35
|
+
redhat = Tpkg::OS::RedHat.new(cmdvar => TESTCMD)
|
|
36
|
+
assert_equal TESTCMD, redhat.instance_variable_get("@#{cmdvar}")
|
|
37
|
+
redhat = Tpkg::OS::RedHat.new(:testcmd => TESTCMD)
|
|
38
|
+
assert_equal TESTCMD, redhat.instance_variable_get("@#{cmdvar}")
|
|
39
|
+
end
|
|
40
|
+
[true, false].each do |quietval|
|
|
41
|
+
redhat = Tpkg::OS::RedHat.new(:quiet => quietval)
|
|
42
|
+
assert_equal quietval, redhat.instance_variable_get(:@quiet)
|
|
43
|
+
end
|
|
44
|
+
# Test that super is called
|
|
45
|
+
[true, false].each do |debugval|
|
|
46
|
+
redhat = Tpkg::OS::RedHat.new(:debug => debugval)
|
|
47
|
+
assert_equal debugval, redhat.instance_variable_get(:@debug)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
def test_init_links
|
|
51
|
+
correct = (2..5).collect{|i| "/etc/rc.d/rc#{i}.d/S99script"}
|
|
52
|
+
assert_equal correct, @redhat.init_links('/path/to/init/script', {:init => {}})
|
|
53
|
+
end
|
|
54
|
+
def test_cron_dot_d_directory
|
|
55
|
+
assert_equal '/etc/cron.d', @redhat.cron_dot_d_directory
|
|
56
|
+
end
|
|
57
|
+
def test_available_native_packages
|
|
58
|
+
assert_equal(
|
|
59
|
+
[
|
|
60
|
+
{:metadata=>
|
|
61
|
+
{:name=>'curl', :version=>'7.19.7', :package_version=>'26.el6_2.4'},
|
|
62
|
+
:source=>:native_installed,
|
|
63
|
+
:prefer=>true},
|
|
64
|
+
],
|
|
65
|
+
@redhat.available_native_packages('curl'))
|
|
66
|
+
assert_equal(
|
|
67
|
+
[
|
|
68
|
+
{:metadata=>
|
|
69
|
+
{:name=>'wget', :version=>'1.12', :package_version=>'1.4.el6'},
|
|
70
|
+
:source=>:native_available}
|
|
71
|
+
],
|
|
72
|
+
@redhat.available_native_packages('wget'))
|
|
73
|
+
assert_equal [], @redhat.available_native_packages('bogus')
|
|
74
|
+
end
|
|
75
|
+
def test_install_native_package
|
|
76
|
+
redhat = Tpkg::OS::RedHat.new
|
|
77
|
+
redhat.expects(:system).with('yum -y install curl-7.19.7-26.el6_2.4')
|
|
78
|
+
redhat.install_native_package(
|
|
79
|
+
{:metadata => {:name => 'curl', :version => '7.19.7', :package_version => '26.el6_2.4'}})
|
|
80
|
+
end
|
|
81
|
+
def test_upgrade_native_package
|
|
82
|
+
redhat = Tpkg::OS::RedHat.new
|
|
83
|
+
redhat.expects(:system).with('yum -y install curl-7.19.7-26.el6_2.4')
|
|
84
|
+
redhat.install_native_package(
|
|
85
|
+
{:metadata => {:name => 'curl', :version => '7.19.7', :package_version => '26.el6_2.4'}})
|
|
86
|
+
end
|
|
87
|
+
def test_stub_native_pkg
|
|
88
|
+
metafile = File.join(TESTPKGDIR, 'tpkg-nativedeps.yml')
|
|
89
|
+
metatext = File.read(metafile)
|
|
90
|
+
metadata = Metadata.new(metatext, 'yml')
|
|
91
|
+
redhat = Tpkg::OS::RedHat.new(
|
|
92
|
+
:rpmbuildcmd => File.join(TESTCMDDIR, 'redhat/rpmbuild'))
|
|
93
|
+
redhat.expects(:create_rpm).returns('/path/to/rpm.rpm')
|
|
94
|
+
redhat.expects(:system).with('rpm -i /path/to/rpm.rpm')
|
|
95
|
+
redhat.stub_native_pkg({:metadata => metadata})
|
|
96
|
+
end
|
|
97
|
+
def test_remove_native_stub_pkg
|
|
98
|
+
metafile = File.join(TESTPKGDIR, 'tpkg-nativedeps.yml')
|
|
99
|
+
metatext = File.read(metafile)
|
|
100
|
+
metadata = Metadata.new(metatext, 'yml')
|
|
101
|
+
redhat = Tpkg::OS::RedHat.new
|
|
102
|
+
redhat.expects(:system).with('yum -y remove stub_for_testpkg')
|
|
103
|
+
redhat.remove_native_stub_pkg({:metadata => metadata})
|
|
104
|
+
end
|
|
105
|
+
def test_os_version
|
|
106
|
+
fact = Facter::Util::Fact.new('lsbmajdistrelease')
|
|
107
|
+
fact.stubs(:value).returns('6')
|
|
108
|
+
Facter.expects(:[]).with('lsbmajdistrelease').returns(fact).at_least_once
|
|
109
|
+
assert_equal '6', Tpkg::OS::RedHat.new.os_version
|
|
110
|
+
end
|
|
111
|
+
def test_create_rpm
|
|
112
|
+
# Test that rpmbuild is called with reasonable arguments
|
|
113
|
+
redhat = Tpkg::OS::RedHat.new(:quiet => true)
|
|
114
|
+
redhat.expects(:system).
|
|
115
|
+
with(regexp_matches(%r{rpmbuild -bb --define '_topdir .*' .*/SPECS/pkg.spec}))
|
|
116
|
+
redhat.create_rpm('test', [{:name => 'dep1'}, {:name => 'dep2'}])
|
|
117
|
+
# Test that, with a fake rpmbuild, the method produces the expected result
|
|
118
|
+
redhat = Tpkg::OS::RedHat.new(
|
|
119
|
+
:rpmbuildcmd => File.join(TESTCMDDIR, 'redhat/rpmbuild'))
|
|
120
|
+
fakerpm = redhat.create_rpm('test', [{:name => 'dep1'}, {:name => 'dep2'}])
|
|
121
|
+
assert_equal 'This is a fake rpm', File.read(fakerpm)
|
|
122
|
+
FileUtils.rm_f(fakerpm)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Tests Solaris OS abstraction code
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
require File.expand_path('tpkgtest', File.dirname(__FILE__))
|
|
6
|
+
|
|
7
|
+
class TpkgOSSolarisTests < Test::Unit::TestCase
|
|
8
|
+
include TpkgTests
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
@pkginfo = File.join(TESTCMDDIR, 'solaris/pkginfo')
|
|
12
|
+
@pkgutil = File.join(TESTCMDDIR, 'solaris/pkgutil')
|
|
13
|
+
@solaris = Tpkg::OS::Solaris.new(
|
|
14
|
+
:pkginfocmd => @pkginfo,
|
|
15
|
+
:pkgutilcmd => @pkgutil,
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_supported
|
|
20
|
+
fact = Facter::Util::Fact.new('operatingsystem')
|
|
21
|
+
Facter.expects(:[]).with('operatingsystem').returns(fact).at_least_once
|
|
22
|
+
fact.stubs(:value).returns('Solaris')
|
|
23
|
+
assert Tpkg::OS::Solaris.supported?
|
|
24
|
+
fact.stubs(:value).returns('Other')
|
|
25
|
+
refute Tpkg::OS::Solaris.supported?
|
|
26
|
+
end
|
|
27
|
+
def test_initialize
|
|
28
|
+
[:pkginfocmd, :pkgutilcmd].each do |cmdvar|
|
|
29
|
+
solaris = Tpkg::OS::Solaris.new(cmdvar => TESTCMD)
|
|
30
|
+
assert_equal TESTCMD, solaris.instance_variable_get("@#{cmdvar}")
|
|
31
|
+
solaris = Tpkg::OS::Solaris.new(:testcmd => TESTCMD)
|
|
32
|
+
assert_equal TESTCMD, solaris.instance_variable_get("@#{cmdvar}")
|
|
33
|
+
end
|
|
34
|
+
# Test that super is called
|
|
35
|
+
[true, false].each do |debugval|
|
|
36
|
+
solaris = Tpkg::OS::Solaris.new(:debug => debugval)
|
|
37
|
+
assert_equal debugval, solaris.instance_variable_get(:@debug)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
def test_init_links
|
|
41
|
+
correct = (2..3).collect{|i| "/etc/rc#{i}.d/S99script"}
|
|
42
|
+
assert_equal correct, @solaris.init_links('/path/to/init/script', {:init => {}})
|
|
43
|
+
end
|
|
44
|
+
def test_available_native_packages
|
|
45
|
+
assert_equal(
|
|
46
|
+
[
|
|
47
|
+
{:metadata=>
|
|
48
|
+
{:name=>'CSWcurl', :version => '7.25.0', :package_version => '2012.04.26'},
|
|
49
|
+
:source=>:native_installed,
|
|
50
|
+
:prefer=>true},
|
|
51
|
+
{:metadata=>
|
|
52
|
+
{:name=>'CSWcurl', :version => '7.25.0', :package_version => '2012.04.26'},
|
|
53
|
+
:source=>:native_available},
|
|
54
|
+
],
|
|
55
|
+
@solaris.available_native_packages('CSWcurl'))
|
|
56
|
+
assert_equal(
|
|
57
|
+
[
|
|
58
|
+
{:metadata=>
|
|
59
|
+
{:name=>'CSWwget', :version=>'1.13.4', :package_version=>'2012.05.12'},
|
|
60
|
+
:source=>:native_available},
|
|
61
|
+
],
|
|
62
|
+
@solaris.available_native_packages('CSWwget'))
|
|
63
|
+
assert_equal(
|
|
64
|
+
[
|
|
65
|
+
{:metadata=>
|
|
66
|
+
{:name=>'SUNWzfsu', :version=>'11.10.0', :package_version=>'2006.05.18.01.46'},
|
|
67
|
+
:source=>:native_installed,
|
|
68
|
+
:prefer=>true},
|
|
69
|
+
],
|
|
70
|
+
@solaris.available_native_packages('SUNWzfsu'))
|
|
71
|
+
assert_equal [], @solaris.available_native_packages('bogus')
|
|
72
|
+
end
|
|
73
|
+
def test_native_pkg_to_install_string
|
|
74
|
+
assert_equal 'pkg-1.0,REV=1', @solaris.native_pkg_to_install_string({:metadata => {:name => 'pkg', :version => '1.0', :package_version => '1'}})
|
|
75
|
+
assert_equal 'pkg-1.0', @solaris.native_pkg_to_install_string({:metadata => {:name => 'pkg', :version => '1.0'}})
|
|
76
|
+
end
|
|
77
|
+
def test_install_native_package
|
|
78
|
+
@solaris.expects(:system).with("#{@pkgutil} -y -i CSWcurl-7.25.0,REV=2012.04.26")
|
|
79
|
+
@solaris.install_native_package({:metadata => {:name => 'CSWcurl', :version => '7.25.0', :package_version => '2012.04.26'}})
|
|
80
|
+
end
|
|
81
|
+
def test_upgrade_native_package
|
|
82
|
+
@solaris.expects(:system).with("#{@pkgutil} -y -u CSWcurl-7.25.0,REV=2012.04.26")
|
|
83
|
+
@solaris.upgrade_native_package({:metadata => {:name => 'CSWcurl', :version => '7.25.0', :package_version => '2012.04.26'}})
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Tests Windows OS abstraction code
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
require File.expand_path('tpkgtest', File.dirname(__FILE__))
|
|
6
|
+
|
|
7
|
+
class TpkgOSWindowsTests < Test::Unit::TestCase
|
|
8
|
+
include TpkgTests
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
@windows = Tpkg::OS::Windows.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_supported
|
|
15
|
+
fact = Facter::Util::Fact.new('operatingsystem')
|
|
16
|
+
Facter.expects(:[]).with('operatingsystem').returns(fact).at_least_once
|
|
17
|
+
fact.stubs(:value).returns('windows')
|
|
18
|
+
assert Tpkg::OS::Windows.supported?
|
|
19
|
+
fact.stubs(:value).returns('Other')
|
|
20
|
+
refute Tpkg::OS::Windows.supported?
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_sudo_default
|
|
24
|
+
refute @windows.sudo_default?
|
|
25
|
+
end
|
|
26
|
+
end
|
data/test/test_query.rb
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# Test tpkg's query features
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
require File.expand_path('tpkgtest', File.dirname(__FILE__))
|
|
8
|
+
|
|
9
|
+
class TpkgQueryTests < Test::Unit::TestCase
|
|
10
|
+
include TpkgTests
|
|
11
|
+
|
|
12
|
+
def setup
|
|
13
|
+
Tpkg::set_prompt(false)
|
|
14
|
+
|
|
15
|
+
# temp dir that will automatically get deleted at end of test run, can be
|
|
16
|
+
# used for storing packages
|
|
17
|
+
@tempoutdir = Dir.mktmpdir('tempoutdir')
|
|
18
|
+
|
|
19
|
+
# Make up our regular test package
|
|
20
|
+
@pkgfile = make_package(:output_directory => @tempoutdir)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_metadata_for_installed_packages
|
|
24
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
25
|
+
apkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'a', 'version' => '2.0' }, :remove => ['operatingsystem', 'architecture'])
|
|
26
|
+
tpkg = Tpkg.new(:base => testbase, :sources => [apkg])
|
|
27
|
+
tpkg.install(['a'], PASSPHRASE)
|
|
28
|
+
metadata = tpkg.metadata_for_installed_packages
|
|
29
|
+
assert_equal(1, metadata.length)
|
|
30
|
+
assert_equal('a', metadata.first[:name])
|
|
31
|
+
FileUtils.rm_f(apkg)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_installed_packages
|
|
36
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
37
|
+
apkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'a', 'version' => '2.0' }, :remove => ['operatingsystem', 'architecture'])
|
|
38
|
+
bpkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'b', 'version' => '2.0' }, :remove => ['operatingsystem', 'architecture'])
|
|
39
|
+
tpkg = Tpkg.new(:base => testbase, :sources => [apkg, bpkg])
|
|
40
|
+
tpkg.install(['a', 'b'], PASSPHRASE)
|
|
41
|
+
|
|
42
|
+
instpkgs = tpkg.installed_packages
|
|
43
|
+
assert_equal(2, instpkgs.length)
|
|
44
|
+
assert(instpkgs.any? {|instpkg| instpkg[:metadata][:name] == 'a'})
|
|
45
|
+
assert(instpkgs.any? {|instpkg| instpkg[:metadata][:name] == 'b'})
|
|
46
|
+
assert(instpkgs.all? {|instpkg| instpkg[:source] == :currently_installed})
|
|
47
|
+
assert(instpkgs.all? {|instpkg| instpkg[:prefer] == true})
|
|
48
|
+
|
|
49
|
+
instpkgs = tpkg.installed_packages('b')
|
|
50
|
+
assert_equal(1, instpkgs.length)
|
|
51
|
+
assert_equal('b', instpkgs.first[:metadata][:name])
|
|
52
|
+
|
|
53
|
+
FileUtils.rm_f(apkg)
|
|
54
|
+
FileUtils.rm_f(bpkg)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_installed_packages_that_meet_requirement
|
|
59
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
60
|
+
tpkg = Tpkg.new(:base => testbase)
|
|
61
|
+
pkgfiles = []
|
|
62
|
+
['1.0', '2.0'].each do |ver|
|
|
63
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
64
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
65
|
+
pkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'a', 'version' => ver }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
|
66
|
+
tpkg.install([pkg], PASSPHRASE)
|
|
67
|
+
pkgfiles << pkg
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
result = tpkg.installed_packages_that_meet_requirement
|
|
71
|
+
assert_equal(2, result.length)
|
|
72
|
+
result = tpkg.installed_packages_that_meet_requirement({:name => 'a'})
|
|
73
|
+
assert_equal(2, result.length)
|
|
74
|
+
result = tpkg.installed_packages_that_meet_requirement({:name => 'a', :minimum_version => '2.0'})
|
|
75
|
+
assert_equal(1, result.length)
|
|
76
|
+
pkgfiles.each { |pkg| FileUtils.rm_f(pkg) }
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_files_for_installed_packages
|
|
81
|
+
pkgfiles = []
|
|
82
|
+
# Make up a couple of packages with different files in them so that
|
|
83
|
+
# they don't conflict
|
|
84
|
+
['a', 'b'].each do |pkgname|
|
|
85
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
86
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
87
|
+
FileUtils.mkdir_p(File.join(srcdir, 'reloc', 'directory'))
|
|
88
|
+
File.open(File.join(srcdir, 'reloc', 'directory', pkgname), 'w') do |file|
|
|
89
|
+
file.puts pkgname
|
|
90
|
+
end
|
|
91
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => {'name' => pkgname}, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
96
|
+
tpkg = Tpkg.new(:base => testbase, :sources => pkgfiles)
|
|
97
|
+
tpkg.install(['a', 'b'], PASSPHRASE)
|
|
98
|
+
|
|
99
|
+
files = tpkg.files_for_installed_packages
|
|
100
|
+
assert_equal(2, files.length)
|
|
101
|
+
files.each do |pkgfile, fip|
|
|
102
|
+
assert_equal(0, fip[:root].length) # Neither package has non-relocatable files
|
|
103
|
+
assert_equal(2, fip[:reloc].length) # Each package has two relocatable files (a directory and a file)
|
|
104
|
+
pkgname = fip[:metadata][:name]
|
|
105
|
+
assert_equal(File.join('directory', ''), fip[:reloc].first)
|
|
106
|
+
assert_equal(File.join('directory', pkgname), fip[:reloc].last)
|
|
107
|
+
assert_equal(File.join(testbase, 'directory', ''), fip[:normalized].first)
|
|
108
|
+
assert_equal(File.join(testbase, 'directory', pkgname), fip[:normalized].last)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
files = tpkg.files_for_installed_packages(pkgfiles.first)
|
|
112
|
+
assert_equal(1, files.length)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
pkgfiles.each { |pkg| FileUtils.rm_f(pkg) }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def test_files_in_package
|
|
119
|
+
files = Tpkg::files_in_package(@pkgfile)
|
|
120
|
+
assert_equal(0, files[:root].length)
|
|
121
|
+
pwd = Dir.pwd
|
|
122
|
+
Dir.chdir(File.join(TESTPKGDIR, 'reloc'))
|
|
123
|
+
reloc_expected = Dir.glob('*')
|
|
124
|
+
Dir.chdir(pwd)
|
|
125
|
+
assert_equal(reloc_expected.length, files[:reloc].length)
|
|
126
|
+
reloc_expected.each { |r| assert(files[:reloc].include?(r)) }
|
|
127
|
+
files[:reloc].each { |r| assert(reloc_expected.include?(r)) }
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def teardown
|
|
131
|
+
FileUtils.rm_rf(@tempoutdir)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
data/test/test_remove.rb
ADDED
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Test tpkg's ability to remove packages
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
require File.expand_path('tpkgtest', File.dirname(__FILE__))
|
|
6
|
+
|
|
7
|
+
class TpkgRemoveTests < Test::Unit::TestCase
|
|
8
|
+
include TpkgTests
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
Tpkg::set_prompt(false)
|
|
12
|
+
|
|
13
|
+
# temp dir that will automatically get deleted at end of test run, can be
|
|
14
|
+
# used for storing packages
|
|
15
|
+
@tempoutdir = Dir.mktmpdir('tempoutdir')
|
|
16
|
+
|
|
17
|
+
# Pretend to be an OS with init script support
|
|
18
|
+
fact = Facter::Util::Fact.new('operatingsystem')
|
|
19
|
+
fact.stubs(:value).returns('RedHat')
|
|
20
|
+
Facter.stubs(:[]).returns(fact)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_remove_dep
|
|
24
|
+
# b and c depends on a
|
|
25
|
+
# d depends on b
|
|
26
|
+
pkgfiles = []
|
|
27
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'a' }, :remove => ['operatingsystem', 'architecture'])
|
|
28
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'b' }, :remove => ['operatingsystem', 'architecture'], :dependencies => {'a' => {}})
|
|
29
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'c' }, :remove => ['operatingsystem', 'architecture'], :dependencies => {'a' => {}})
|
|
30
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'd' }, :remove => ['operatingsystem', 'architecture'], :dependencies => {'b' => {}})
|
|
31
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
32
|
+
tpkg = Tpkg.new(:base => testbase, :sources => pkgfiles)
|
|
33
|
+
assert_nothing_raised { tpkg.install(pkgfiles, PASSPHRASE) }
|
|
34
|
+
|
|
35
|
+
# a, b, c and d are installed
|
|
36
|
+
metadata = tpkg.metadata_for_installed_packages
|
|
37
|
+
assert_equal(4, metadata.length)
|
|
38
|
+
|
|
39
|
+
# removing a with :remove_all_dep option should remove b, c and d as well
|
|
40
|
+
assert_nothing_raised { tpkg.remove(['a'], {:remove_all_dep => true})}
|
|
41
|
+
metadata = tpkg.metadata_for_installed_packages
|
|
42
|
+
assert_equal(0, metadata.length)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_remove_prereq
|
|
47
|
+
# e requires c
|
|
48
|
+
# d requires c and b
|
|
49
|
+
# c requires a
|
|
50
|
+
pkgfiles = []
|
|
51
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'a' }, :remove => ['operatingsystem', 'architecture'])
|
|
52
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'b' }, :remove => ['operatingsystem', 'architecture'])
|
|
53
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'c' }, :remove => ['operatingsystem', 'architecture'], :dependencies => {'a' => {}})
|
|
54
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'd' }, :remove => ['operatingsystem', 'architecture'], :dependencies => {'c' => {}, 'b' => {}})
|
|
55
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => { 'name' => 'e' }, :remove => ['operatingsystem', 'architecture'], :dependencies => {'c' => {}})
|
|
56
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
57
|
+
tpkg = Tpkg.new(:base => testbase, :sources => pkgfiles)
|
|
58
|
+
assert_nothing_raised { tpkg.install(pkgfiles, PASSPHRASE) }
|
|
59
|
+
|
|
60
|
+
# a, b, c, d and e are installed
|
|
61
|
+
metadata = tpkg.metadata_for_installed_packages
|
|
62
|
+
assert_equal(5, metadata.length)
|
|
63
|
+
|
|
64
|
+
# removing d with :remove_all_prereq option should remove d and b only and not c and a because
|
|
65
|
+
# e still depends on c
|
|
66
|
+
assert_nothing_raised { tpkg.remove(['d'], {:remove_all_prereq => true})}
|
|
67
|
+
metadata = tpkg.metadata_for_installed_packages
|
|
68
|
+
assert_equal(3, metadata.length)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_remove
|
|
73
|
+
pkgfiles = []
|
|
74
|
+
# Make up a couple of packages with different files in them so that
|
|
75
|
+
# they don't conflict
|
|
76
|
+
['a', 'b'].each do |pkgname|
|
|
77
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
78
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
79
|
+
FileUtils.mkdir_p(File.join(srcdir, 'reloc', 'directory'))
|
|
80
|
+
File.open(File.join(srcdir, 'reloc', 'directory', pkgname), 'w') do |file|
|
|
81
|
+
file.puts pkgname
|
|
82
|
+
end
|
|
83
|
+
File.open(File.join(srcdir, 'reloc', 'directory', "#{pkgname}.conf"), 'w') do |file|
|
|
84
|
+
file.puts pkgname
|
|
85
|
+
end
|
|
86
|
+
pkgfiles << make_package(:output_directory => @tempoutdir, :change => {'name' => pkgname}, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'], :files => { "directory/#{pkgname}.conf" => { 'config' => true}})
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
91
|
+
testbase = File.join(testroot, 'home', 'tpkg')
|
|
92
|
+
FileUtils.mkdir_p(testbase)
|
|
93
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => pkgfiles)
|
|
94
|
+
|
|
95
|
+
tpkg.install(['a', 'b'], PASSPHRASE)
|
|
96
|
+
|
|
97
|
+
assert_nothing_raised { tpkg.remove(['a']) }
|
|
98
|
+
|
|
99
|
+
assert(!File.exist?(File.join(testbase, 'directory', 'a')))
|
|
100
|
+
assert(File.exist?(File.join(testbase, 'directory', 'b')))
|
|
101
|
+
|
|
102
|
+
assert_nothing_raised { tpkg.remove(['b']) }
|
|
103
|
+
|
|
104
|
+
assert(!File.exist?(File.join(testbase, 'directory', 'b')))
|
|
105
|
+
assert(!File.exist?(File.join(testbase, 'directory')))
|
|
106
|
+
assert(File.exist?(File.join(testbase)))
|
|
107
|
+
|
|
108
|
+
# Test that we can use package filename for remove
|
|
109
|
+
tpkg.install(['a', 'b'], PASSPHRASE)
|
|
110
|
+
filenames = pkgfiles.collect{ |pkgfile| File.basename(pkgfile)}
|
|
111
|
+
assert_nothing_raised { tpkg.remove(filenames) }
|
|
112
|
+
assert(!File.exist?(File.join(testbase, 'directory', 'a')))
|
|
113
|
+
assert(!File.exist?(File.join(testbase, 'directory', 'b')))
|
|
114
|
+
assert(!File.exist?(File.join(testbase, 'directory')))
|
|
115
|
+
assert(File.exist?(File.join(testbase)))
|
|
116
|
+
|
|
117
|
+
# Remove a file manually. tpkg.remove should warn that the file
|
|
118
|
+
# is missing but not abort.
|
|
119
|
+
tpkg.install(['a'], PASSPHRASE)
|
|
120
|
+
File.delete(File.join(testbase, 'directory', 'a'))
|
|
121
|
+
puts "Missing file warning expected here:"
|
|
122
|
+
assert_nothing_raised { tpkg.remove(['a']) }
|
|
123
|
+
|
|
124
|
+
# Insert another file into the directory. tpkg.remove should warn
|
|
125
|
+
# that the directory isn't empty but not abort.
|
|
126
|
+
tpkg.install(['a'], PASSPHRASE)
|
|
127
|
+
File.open(File.join(testbase, 'directory', 'anotherfile'), 'w') do |file|
|
|
128
|
+
file.puts 'junk'
|
|
129
|
+
end
|
|
130
|
+
assert_nothing_raised { tpkg.remove(['a']) }
|
|
131
|
+
|
|
132
|
+
# Test removing all packages by passing no arguments to remove
|
|
133
|
+
tpkg.install(['a', 'b'], PASSPHRASE)
|
|
134
|
+
assert_nothing_raised { tpkg.remove }
|
|
135
|
+
assert(!File.exist?(File.join(testbase, 'directory', 'a')))
|
|
136
|
+
assert(!File.exist?(File.join(testbase, 'directory', 'b')))
|
|
137
|
+
|
|
138
|
+
# Test removing config files
|
|
139
|
+
# If config file has been modified, then tpkg should not remove it
|
|
140
|
+
tpkg.install(['a', 'b'], PASSPHRASE)
|
|
141
|
+
File.open(File.join(testbase, 'directory', "a.conf"), 'w') do |file|
|
|
142
|
+
file.puts "Modified"
|
|
143
|
+
end
|
|
144
|
+
assert_nothing_raised { tpkg.remove }
|
|
145
|
+
assert(File.exist?(File.join(testbase, 'directory', 'a.conf')))
|
|
146
|
+
assert(!File.exist?(File.join(testbase, 'directory', 'b.conf')))
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Clean up
|
|
150
|
+
pkgfiles.each { |pkgfile| FileUtils.rm_f(pkgfile) }
|
|
151
|
+
|
|
152
|
+
# Test that preremove/postremove are run at the right points
|
|
153
|
+
# Make up a package with scripts that create files so we can check timestamps
|
|
154
|
+
# Also, test tpkg should chdir to package unpack directory before calling
|
|
155
|
+
# pre/post/install/remove scripts
|
|
156
|
+
scriptfiles = {}
|
|
157
|
+
pkgfile = nil
|
|
158
|
+
|
|
159
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
160
|
+
# Include the stock test package contents
|
|
161
|
+
system("#{Tpkg::find_tar} -C #{TESTPKGDIR} --exclude .svn -cf - . | #{Tpkg::find_tar} -C #{srcdir} -xf -")
|
|
162
|
+
|
|
163
|
+
# Add some dummy file for testing relative path
|
|
164
|
+
File.open(File.join(srcdir, "dummyfile"), 'w') do |file|
|
|
165
|
+
file.puts("hello world")
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Then add scripts
|
|
169
|
+
['preremove', 'postremove'].each do |script|
|
|
170
|
+
File.open(File.join(srcdir, script), 'w') do |scriptfile|
|
|
171
|
+
# We have each script write to a temporary file (so that we can
|
|
172
|
+
# check the timestamp of that file to ensure proper ordering) and
|
|
173
|
+
# print out the name of the file (just to aid debugging)
|
|
174
|
+
tmpfile = Tempfile.new('tpkgtest_script')
|
|
175
|
+
scriptfiles[script] = tmpfile
|
|
176
|
+
scriptfile.puts('#!/bin/sh')
|
|
177
|
+
# Test that tpkg set $TPKG_HOME before running the script
|
|
178
|
+
scriptfile.puts('echo TPKG_HOME: \"$TPKG_HOME\"')
|
|
179
|
+
# Test that we had chdir'ed to package unpack directory
|
|
180
|
+
scriptfile.puts('ls dummyfile || exit 1')
|
|
181
|
+
scriptfile.puts('test -n "$TPKG_HOME" || exit 1')
|
|
182
|
+
scriptfile.puts("echo #{script} > #{tmpfile.path}")
|
|
183
|
+
scriptfile.puts("echo #{script}: #{tmpfile.path}")
|
|
184
|
+
scriptfile.puts('sleep 1')
|
|
185
|
+
end
|
|
186
|
+
File.chmod(0755, File.join(srcdir, script))
|
|
187
|
+
end
|
|
188
|
+
# Change name of package so that the file doesn't conflict with @pkgfile
|
|
189
|
+
pkgfile = make_package(:output_directory => @tempoutdir, :source_directory => srcdir, :change => {'name' => 'scriptpkg'}, :remove => ['operatingsystem', 'architecture'])
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Install the script package
|
|
193
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
194
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => [pkgfile])
|
|
195
|
+
assert_nothing_raised { tpkg.install([pkgfile], PASSPHRASE) }
|
|
196
|
+
assert_nothing_raised { tpkg.remove(['scriptpkg']) }
|
|
197
|
+
# FIXME: Need a way to test that the package remove occurred between the two scripts
|
|
198
|
+
assert(File.stat(scriptfiles['preremove'].path).mtime < File.stat(scriptfiles['postremove'].path).mtime)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Test init script handling
|
|
202
|
+
pkg = nil
|
|
203
|
+
pkg2 = nil
|
|
204
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
205
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
206
|
+
FileUtils.mkdir_p(File.join(srcdir, 'reloc'))
|
|
207
|
+
File.open(File.join(srcdir, 'reloc', 'myinit'), 'w') do |file|
|
|
208
|
+
file.puts('init script')
|
|
209
|
+
end
|
|
210
|
+
pkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'initpkg' }, :source_directory => srcdir, :files => { 'myinit' => { 'init' => {} } }, :remove => ['operatingsystem', 'architecture'])
|
|
211
|
+
pkg2 = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'initpkg2' }, :source_directory => srcdir, :files => { 'myinit' => { 'init' => {} } }, :remove => ['operatingsystem', 'architecture'])
|
|
212
|
+
end
|
|
213
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
214
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => [pkg,pkg2])
|
|
215
|
+
tpkg2 = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg2'), :sources => [pkg,pkg2])
|
|
216
|
+
metadata = Tpkg::metadata_from_package(pkg)
|
|
217
|
+
metadata2 = Tpkg::metadata_from_package(pkg2)
|
|
218
|
+
tpkg.install([pkg], PASSPHRASE)
|
|
219
|
+
tpkg2.install([pkg2], PASSPHRASE)
|
|
220
|
+
tpkg.remove(['initpkg'])
|
|
221
|
+
tpkg.init_links(metadata).each do |link, init_script|
|
|
222
|
+
assert(!File.exist?(link) && !File.symlink?(link))
|
|
223
|
+
end
|
|
224
|
+
# Test the handling of packages with conflicting init scripts.
|
|
225
|
+
# The link should end up named with a '1' at the end.
|
|
226
|
+
# Make sure it is still there after the removal of 'initpkg'
|
|
227
|
+
tpkg2.init_links(metadata2).each do |link, init_script|
|
|
228
|
+
assert(File.symlink?(link + '1'))
|
|
229
|
+
assert_equal(init_script, File.readlink(link + '1'))
|
|
230
|
+
end
|
|
231
|
+
# Now remove 'initpkg2' and verify that it is gone
|
|
232
|
+
tpkg2.remove(['initpkg2'])
|
|
233
|
+
tpkg2.init_links(metadata2).each do |link, init_script|
|
|
234
|
+
assert(!File.exist?(link + '1') && !File.symlink?(link + '1'))
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# Test external handling
|
|
239
|
+
extname = 'testext'
|
|
240
|
+
extdata = "This is a test of an external hook\nwith multiple lines\nof data"
|
|
241
|
+
pkg = nil
|
|
242
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
243
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
244
|
+
pkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'externalpkg' }, :externals => { extname => { 'data' => extdata } }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
|
245
|
+
end
|
|
246
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
247
|
+
externalsdir = File.join(testroot, 'usr', 'lib', 'tpkg', 'externals')
|
|
248
|
+
FileUtils.mkdir_p(externalsdir)
|
|
249
|
+
# Create an external script which puts the data into a file named after
|
|
250
|
+
# the package, and removes any files named after the package on removal.
|
|
251
|
+
Dir.mktmpdir('externaltest') do |externaltestdir|
|
|
252
|
+
extscript = File.join(externalsdir, extname)
|
|
253
|
+
File.open(extscript, 'w') do |file|
|
|
254
|
+
file.puts <<EOF
|
|
255
|
+
#!/bin/sh
|
|
256
|
+
set -e
|
|
257
|
+
|
|
258
|
+
pkgfile=$1
|
|
259
|
+
operation=$2
|
|
260
|
+
|
|
261
|
+
requestfile=#{externaltestdir}/$pkgfile
|
|
262
|
+
|
|
263
|
+
case "$operation" in
|
|
264
|
+
'install')
|
|
265
|
+
mkdir -p `dirname "$requestfile"`
|
|
266
|
+
tmpfile=`mktemp "$requestfile.XXXXXX"` || exit 1
|
|
267
|
+
# Dump in the data passed to us on stdin
|
|
268
|
+
cat >> $tmpfile
|
|
269
|
+
;;
|
|
270
|
+
'remove')
|
|
271
|
+
rm -f "$requestfile".*
|
|
272
|
+
# Avoid generating SIGPIPE in tpkg
|
|
273
|
+
cat > /dev/null
|
|
274
|
+
;;
|
|
275
|
+
*)
|
|
276
|
+
echo "$0: Invalid arguments"
|
|
277
|
+
exit 1
|
|
278
|
+
;;
|
|
279
|
+
esac
|
|
280
|
+
EOF
|
|
281
|
+
end
|
|
282
|
+
File.chmod(0755, extscript)
|
|
283
|
+
# And run the test
|
|
284
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => [pkg])
|
|
285
|
+
tpkg.install([pkg], PASSPHRASE)
|
|
286
|
+
assert(Dir.entries(externaltestdir).length > 2)
|
|
287
|
+
assert_nothing_raised { tpkg.remove(['externalpkg']) }
|
|
288
|
+
# . and ..
|
|
289
|
+
assert_equal(2, Dir.entries(externaltestdir).length)
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
# Test handling of external with datafile
|
|
294
|
+
# The datafile is only read at install, not at remove, so this really
|
|
295
|
+
# doesn't test a unique code path. Rather it just serves to verify that
|
|
296
|
+
# nothing breaks on removal in the face of a datafile being defined.
|
|
297
|
+
extname = 'testext'
|
|
298
|
+
extdata = "This is a test of an external hook\nwith multiple lines\nof data from a datafile"
|
|
299
|
+
pkg = nil
|
|
300
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
301
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
302
|
+
# Create the datafile
|
|
303
|
+
File.open(File.join(srcdir, 'datafile'), 'w') do |file|
|
|
304
|
+
file.print(extdata)
|
|
305
|
+
end
|
|
306
|
+
pkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'externalpkg' }, :externals => { extname => { 'datafile' => './datafile' } }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
|
307
|
+
end
|
|
308
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
309
|
+
externalsdir = File.join(testroot, 'usr', 'lib', 'tpkg', 'externals')
|
|
310
|
+
FileUtils.mkdir_p(externalsdir)
|
|
311
|
+
# Create an external script which puts the data into a file named after
|
|
312
|
+
# the package, and removes any files named after the package on removal.
|
|
313
|
+
Dir.mktmpdir('externaltest') do |externaltestdir|
|
|
314
|
+
extscript = File.join(externalsdir, extname)
|
|
315
|
+
File.open(extscript, 'w') do |file|
|
|
316
|
+
file.puts <<EOF
|
|
317
|
+
#!/bin/sh
|
|
318
|
+
set -e
|
|
319
|
+
|
|
320
|
+
pkgfile=$1
|
|
321
|
+
operation=$2
|
|
322
|
+
|
|
323
|
+
requestfile=#{externaltestdir}/$pkgfile
|
|
324
|
+
|
|
325
|
+
case "$operation" in
|
|
326
|
+
'install')
|
|
327
|
+
mkdir -p `dirname "$requestfile"`
|
|
328
|
+
tmpfile=`mktemp "$requestfile.XXXXXX"` || exit 1
|
|
329
|
+
# Dump in the data passed to us on stdin
|
|
330
|
+
cat >> $tmpfile
|
|
331
|
+
;;
|
|
332
|
+
'remove')
|
|
333
|
+
rm -f "$requestfile".*
|
|
334
|
+
# Avoid generating SIGPIPE in tpkg
|
|
335
|
+
cat > /dev/null
|
|
336
|
+
;;
|
|
337
|
+
*)
|
|
338
|
+
echo "$0: Invalid arguments"
|
|
339
|
+
exit 1
|
|
340
|
+
;;
|
|
341
|
+
esac
|
|
342
|
+
EOF
|
|
343
|
+
end
|
|
344
|
+
File.chmod(0755, extscript)
|
|
345
|
+
# And run the test
|
|
346
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => [pkg])
|
|
347
|
+
tpkg.install([pkg], PASSPHRASE)
|
|
348
|
+
assert(Dir.entries(externaltestdir).length > 2)
|
|
349
|
+
assert_nothing_raised { tpkg.remove(['externalpkg']) }
|
|
350
|
+
# . and ..
|
|
351
|
+
assert_equal(2, Dir.entries(externaltestdir).length)
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
# Test handling of external with datascript
|
|
356
|
+
# The datascript is only run at install, not at remove, so this really
|
|
357
|
+
# doesn't test a unique code path. Rather it just serves to verify that
|
|
358
|
+
# nothing breaks on removal in the face of a datascript being defined.
|
|
359
|
+
extname = 'testext'
|
|
360
|
+
extdata = "This is a test of an external hook\nwith multiple lines\nof data from a datascript"
|
|
361
|
+
pkg = nil
|
|
362
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
363
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
364
|
+
# Create the datascript
|
|
365
|
+
File.open(File.join(srcdir, 'datascript'), 'w') do |file|
|
|
366
|
+
file.puts('#!/bin/sh')
|
|
367
|
+
# echo may or may not add a trailing \n depending on which echo we end
|
|
368
|
+
# up, so use printf, which doesn't add things.
|
|
369
|
+
file.puts("printf \"#{extdata}\"")
|
|
370
|
+
end
|
|
371
|
+
File.chmod(0755, File.join(srcdir, 'datascript'))
|
|
372
|
+
pkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'externalpkg' }, :externals => { extname => { 'datascript' => './datascript' } }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
|
373
|
+
end
|
|
374
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
375
|
+
externalsdir = File.join(testroot, 'usr', 'lib', 'tpkg', 'externals')
|
|
376
|
+
FileUtils.mkdir_p(externalsdir)
|
|
377
|
+
# Create an external script which puts the data into a file named after
|
|
378
|
+
# the package, and removes any files named after the package on removal.
|
|
379
|
+
Dir.mktmpdir('externaltest') do |externaltestdir|
|
|
380
|
+
extscript = File.join(externalsdir, extname)
|
|
381
|
+
File.open(extscript, 'w') do |file|
|
|
382
|
+
file.puts <<EOF
|
|
383
|
+
#!/bin/sh
|
|
384
|
+
set -e
|
|
385
|
+
|
|
386
|
+
pkgfile=$1
|
|
387
|
+
operation=$2
|
|
388
|
+
|
|
389
|
+
requestfile=#{externaltestdir}/$pkgfile
|
|
390
|
+
|
|
391
|
+
case "$operation" in
|
|
392
|
+
'install')
|
|
393
|
+
mkdir -p `dirname "$requestfile"`
|
|
394
|
+
tmpfile=`mktemp "$requestfile.XXXXXX"` || exit 1
|
|
395
|
+
# Dump in the data passed to us on stdin
|
|
396
|
+
cat >> $tmpfile
|
|
397
|
+
;;
|
|
398
|
+
'remove')
|
|
399
|
+
rm -f "$requestfile".*
|
|
400
|
+
# Avoid generating SIGPIPE in tpkg
|
|
401
|
+
cat > /dev/null
|
|
402
|
+
;;
|
|
403
|
+
*)
|
|
404
|
+
echo "$0: Invalid arguments"
|
|
405
|
+
exit 1
|
|
406
|
+
;;
|
|
407
|
+
esac
|
|
408
|
+
EOF
|
|
409
|
+
end
|
|
410
|
+
File.chmod(0755, extscript)
|
|
411
|
+
# And run the test
|
|
412
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => [pkg])
|
|
413
|
+
tpkg.install([pkg], PASSPHRASE)
|
|
414
|
+
assert(Dir.entries(externaltestdir).length > 2)
|
|
415
|
+
assert_nothing_raised { tpkg.remove(['externalpkg']) }
|
|
416
|
+
# . and ..
|
|
417
|
+
assert_equal(2, Dir.entries(externaltestdir).length)
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
def test_remove_init_scripts
|
|
423
|
+
metadata = nil
|
|
424
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
425
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
426
|
+
create_metadata_file(File.join(srcdir, 'tpkg.xml'), :change => { 'name' => 'initpkg' }, :files => { 'etc/init.d/initscript' => { 'init' => {} } })
|
|
427
|
+
metadata = Metadata.new(File.read(File.join(srcdir, 'tpkg.xml')), 'xml')
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
431
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'))
|
|
432
|
+
|
|
433
|
+
link = nil
|
|
434
|
+
init_script = nil
|
|
435
|
+
tpkg.init_links(metadata).each do |l, is|
|
|
436
|
+
link = l
|
|
437
|
+
init_script = is
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
# init_links returns an empty list on platforms where tpkg doesn't have
|
|
441
|
+
# init script support
|
|
442
|
+
if link
|
|
443
|
+
# Standard symlink using the base name is removed
|
|
444
|
+
FileUtils.mkdir_p(File.dirname(link))
|
|
445
|
+
File.symlink(init_script, link)
|
|
446
|
+
tpkg.remove_init_scripts(metadata)
|
|
447
|
+
assert(!File.exist?(link) && !File.symlink?(link))
|
|
448
|
+
|
|
449
|
+
# Links with suffixes from 1..9 are removed
|
|
450
|
+
1.upto(9) do |i|
|
|
451
|
+
FileUtils.rm(Dir.glob(link + '*'))
|
|
452
|
+
File.symlink(init_script, link + i.to_s)
|
|
453
|
+
File.symlink(init_script, link + '1') if (i != 1)
|
|
454
|
+
2.upto(i-1) do |j|
|
|
455
|
+
File.symlink('somethingelse', link + j.to_s)
|
|
456
|
+
end
|
|
457
|
+
tpkg.remove_init_scripts(metadata)
|
|
458
|
+
assert(!File.exist?(link) && !File.symlink?(link))
|
|
459
|
+
assert(!File.exist?(link + '1') && !File.symlink?(link + '1'))
|
|
460
|
+
2.upto(i-1) do |j|
|
|
461
|
+
assert(File.symlink?(link + j.to_s))
|
|
462
|
+
assert_equal('somethingelse', File.readlink(link + j.to_s))
|
|
463
|
+
end
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
# Links with suffixes of 0 or 10 are left alone
|
|
467
|
+
File.symlink(init_script, link + '0')
|
|
468
|
+
File.symlink(init_script, link + '10')
|
|
469
|
+
tpkg.remove_init_scripts(metadata)
|
|
470
|
+
assert(File.symlink?(link + '0'))
|
|
471
|
+
assert_equal(init_script, File.readlink(link + '0'))
|
|
472
|
+
assert(File.symlink?(link + '10'))
|
|
473
|
+
assert_equal(init_script, File.readlink(link + '10'))
|
|
474
|
+
|
|
475
|
+
# Running as non-root, permissions issues prevent link removal, warning
|
|
476
|
+
FileUtils.rm(Dir.glob(link + '*'))
|
|
477
|
+
File.symlink(init_script, link)
|
|
478
|
+
File.chmod(0000, File.dirname(link))
|
|
479
|
+
assert_nothing_raised { tpkg.remove_init_scripts(metadata) }
|
|
480
|
+
# FIXME: look for warning in stderr
|
|
481
|
+
File.chmod(0755, File.dirname(link))
|
|
482
|
+
assert(File.symlink?(link))
|
|
483
|
+
assert_equal(init_script, File.readlink(link))
|
|
484
|
+
end
|
|
485
|
+
end
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
# Test that the remove method calls remove_crontabs as appropriate
|
|
489
|
+
def test_remove_remove_crontabs
|
|
490
|
+
# FIXME
|
|
491
|
+
end
|
|
492
|
+
|
|
493
|
+
def test_skip_remove_stop
|
|
494
|
+
# Make a test package with an init script
|
|
495
|
+
pkg = nil
|
|
496
|
+
tmpfile = Tempfile.new('tpkgtest_script')
|
|
497
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
498
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
499
|
+
FileUtils.mkdir_p(File.join(srcdir, 'reloc'))
|
|
500
|
+
initscript = File.join(srcdir, 'reloc', 'myinit')
|
|
501
|
+
File.open(initscript, 'w') do |file|
|
|
502
|
+
file.puts('#!/bin/sh')
|
|
503
|
+
file.puts('case "$1" in')
|
|
504
|
+
file.puts("'stop')")
|
|
505
|
+
file.puts(" echo 'test_skip_remove_stop' > #{tmpfile.path}")
|
|
506
|
+
file.puts(' ;;')
|
|
507
|
+
file.puts('esac')
|
|
508
|
+
end
|
|
509
|
+
File.chmod(0755, initscript)
|
|
510
|
+
pkg = make_package(:output_directory => @tempoutdir, :change => { 'name' => 'initpkg' }, :source_directory => srcdir, :files => { 'myinit' => { 'init' => {} } }, :remove => ['operatingsystem', 'architecture'])
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
# Removing the package without skip_remove_stop should run the init script
|
|
514
|
+
# with a "stop" argument on package removal
|
|
515
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
516
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => [pkg])
|
|
517
|
+
tpkg.install([pkg], PASSPHRASE)
|
|
518
|
+
tpkg.remove(['initpkg'])
|
|
519
|
+
assert_equal("test_skip_remove_stop\n", File.read(tmpfile.path))
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
# Clear out the temp file to reset
|
|
523
|
+
File.open(tmpfile.path, 'w') {}
|
|
524
|
+
|
|
525
|
+
# Removing the package with skip_remove_stop should not run the init
|
|
526
|
+
# script on package removal
|
|
527
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
528
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => [pkg])
|
|
529
|
+
tpkg.install([pkg], PASSPHRASE)
|
|
530
|
+
tpkg.remove(['initpkg'], :skip_remove_stop => true)
|
|
531
|
+
assert_equal("", File.read(tmpfile.path))
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
def teardown
|
|
536
|
+
FileUtils.rm_rf(@tempoutdir)
|
|
537
|
+
end
|
|
538
|
+
end
|
|
539
|
+
|