tpkg 2.3.3 → 2.3.4
Sign up to get free protection for your applications and to get access to all the features.
- 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,398 @@
|
|
1
|
+
#
|
2
|
+
# Test tpkg's ability to upgrade packages
|
3
|
+
#
|
4
|
+
|
5
|
+
require File.expand_path('tpkgtest', File.dirname(__FILE__))
|
6
|
+
|
7
|
+
# Note that all first-time installs in this file are done using the upgrade
|
8
|
+
# method to ensure that it works in that capacity. (Elsewhere in the test
|
9
|
+
# suite first-time installs are done with the install method.)
|
10
|
+
|
11
|
+
class TpkgUpgradeTests < Test::Unit::TestCase
|
12
|
+
include TpkgTests
|
13
|
+
|
14
|
+
def setup
|
15
|
+
Tpkg::set_prompt(false)
|
16
|
+
|
17
|
+
@pkgfiles = []
|
18
|
+
['a', 'b'].each do |pkgname|
|
19
|
+
# Make sure the files in the a packages don't conflict with
|
20
|
+
# the b packages
|
21
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
22
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
23
|
+
FileUtils.mkdir(File.join(srcdir, 'reloc'))
|
24
|
+
File.open(File.join(srcdir, 'reloc', pkgname), 'w') do |file|
|
25
|
+
file.puts pkgname
|
26
|
+
end
|
27
|
+
# Make the 'b' packages depend on 'a' so that we ensure that we
|
28
|
+
# can upgrade a package on which other packages depend.
|
29
|
+
deps = {}
|
30
|
+
if pkgname == 'b'
|
31
|
+
deps['a'] = {}
|
32
|
+
end
|
33
|
+
['1.0', '2.0'].each do |pkgver|
|
34
|
+
@pkgfiles << make_package(:change => {'name' => pkgname, 'version' => pkgver}, :source_directory => srcdir, :dependencies => deps, :remove => ['operatingsystem', 'architecture'])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Create pkg c-1.2-3 and c-2.3-1
|
40
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
41
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
42
|
+
FileUtils.mkdir(File.join(srcdir, 'reloc'))
|
43
|
+
File.open(File.join(srcdir, 'reloc', 'c'), 'w') do |file|
|
44
|
+
file.puts "this file belong to c package"
|
45
|
+
end
|
46
|
+
@pkgfiles << make_package(:change => {'name' => 'c', 'version' => '1.2', 'package_version' => '3'}, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
47
|
+
@pkgfiles << make_package(:change => {'name' => 'c', 'version' => '2.3', 'package_version' => '1'}, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
48
|
+
end
|
49
|
+
|
50
|
+
@testroot = Dir.mktmpdir('testroot')
|
51
|
+
@testbase = File.join(@testroot, 'home', 'tpkg')
|
52
|
+
FileUtils.mkdir_p(@testbase)
|
53
|
+
@tpkg = Tpkg.new(:file_system_root => @testroot, :base => File.join('home', 'tpkg'), :sources => @pkgfiles)
|
54
|
+
@tpkg.upgrade(['a=1.0', 'b=1.0'], PASSPHRASE)
|
55
|
+
end
|
56
|
+
|
57
|
+
# pkg ordera-1 and orderb-1 are installed. Package orderb depends on ordera.
|
58
|
+
# Now if we were to upgrade orderb-1 to orderb-2, which depends on ordera-2, then
|
59
|
+
# tpkg should do things in the following order:
|
60
|
+
# remove orderb-1, remove ordera-1, install ordera-2, install orderb-2
|
61
|
+
def test_upgrade_order
|
62
|
+
pkgfiles = []
|
63
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
64
|
+
# Create pkg ordera-1 and orderb-1
|
65
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
66
|
+
pkgfiles << make_package(:change => { 'name' => 'ordera', 'version' => '1' }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
67
|
+
deps = {'ordera'=> {'minimum_version' => '1.0'}}
|
68
|
+
pkgfiles << make_package(:change => { 'name' => 'orderb', 'version' => '1' }, :source_directory => srcdir, :dependencies => deps, :remove => ['operatingsystem', 'architecture'])
|
69
|
+
|
70
|
+
# Create pkg ordera-2, which has a file called pkga2
|
71
|
+
FileUtils.mkdir(File.join(srcdir, 'reloc'))
|
72
|
+
File.open(File.join(srcdir, 'reloc', 'pkga2'), 'w') do |file|
|
73
|
+
file.puts "Hello world"
|
74
|
+
end
|
75
|
+
pkgfiles << make_package(:change => { 'name' => 'ordera', 'version' => '2' }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
76
|
+
FileUtils.rm(File.join(srcdir, 'reloc', 'pkga2'))
|
77
|
+
|
78
|
+
# Create pkg orderb-2, which test that a file called pkga2 exists. We will use this
|
79
|
+
# to ensure that during the upgrade, pkg b-2 is installed after pkg a-2
|
80
|
+
deps = {'ordera'=> {'minimum_version' => '2.0'}}
|
81
|
+
File.open(File.join(srcdir, 'preinstall'), 'w') do |scriptfile|
|
82
|
+
scriptfile.puts('#!/bin/sh')
|
83
|
+
# Test that tpkg set $TPKG_HOME before running the script
|
84
|
+
scriptfile.puts('ls "$TPKG_HOME"/pkga2 || exit 1')
|
85
|
+
end
|
86
|
+
File.chmod(0755, File.join(srcdir, 'preinstall'))
|
87
|
+
pkgfiles << make_package(:change => { 'name' => 'orderb', 'version' => '2' }, :source_directory => srcdir, :dependencies => deps, :remove => ['operatingsystem', 'architecture'])
|
88
|
+
end
|
89
|
+
|
90
|
+
tpkg = Tpkg.new(:file_system_root => @testroot, :base => File.join('home', 'tpkg'), :sources => pkgfiles)
|
91
|
+
tpkg.upgrade(['ordera=1.0', 'orderb=1.0'], PASSPHRASE)
|
92
|
+
|
93
|
+
assert_nothing_raised { tpkg.upgrade(['orderb']) }
|
94
|
+
|
95
|
+
pkgfiles.each { |pkgfile| FileUtils.rm_f(pkgfile) }
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_upgrade
|
99
|
+
assert_nothing_raised { @tpkg.upgrade(['a']) }
|
100
|
+
# Should have two packages installed: a-2.0 and b-1.0
|
101
|
+
metadata = @tpkg.metadata_for_installed_packages
|
102
|
+
assert_equal(2, metadata.length)
|
103
|
+
apkg = nil
|
104
|
+
bpkg = nil
|
105
|
+
metadata.each do |m|
|
106
|
+
if m[:name] == 'a'
|
107
|
+
apkg = m
|
108
|
+
elsif m[:name] == 'b'
|
109
|
+
bpkg = m
|
110
|
+
end
|
111
|
+
end
|
112
|
+
assert_not_nil(apkg)
|
113
|
+
assert_equal('2.0', apkg[:version])
|
114
|
+
assert_not_nil(bpkg)
|
115
|
+
assert_equal('1.0', bpkg[:version])
|
116
|
+
|
117
|
+
assert_nothing_raised { @tpkg.upgrade }
|
118
|
+
# Should have two packages installed: a-2.0 and b-2.0
|
119
|
+
metadata = @tpkg.metadata_for_installed_packages
|
120
|
+
assert_equal(2, metadata.length)
|
121
|
+
apkg = nil
|
122
|
+
bpkg = nil
|
123
|
+
metadata.each do |m|
|
124
|
+
if m[:name] == 'a'
|
125
|
+
apkg = m
|
126
|
+
elsif m[:name] == 'b'
|
127
|
+
bpkg = m
|
128
|
+
end
|
129
|
+
end
|
130
|
+
assert_not_nil(apkg)
|
131
|
+
assert_equal('2.0', apkg[:version])
|
132
|
+
assert_not_nil(bpkg)
|
133
|
+
assert_equal('2.0', bpkg[:version])
|
134
|
+
|
135
|
+
# These test cases are for: Can't upgrade if package has higher version
|
136
|
+
# number but lower package version number
|
137
|
+
# install c-1.2-3
|
138
|
+
assert_nothing_raised{@tpkg.upgrade(['c=1.2'], PASSPHRASE)}
|
139
|
+
metadata = @tpkg.metadata_for_installed_packages
|
140
|
+
assert_equal(3, metadata.length)
|
141
|
+
# upgrade to c-2.3-1
|
142
|
+
assert_nothing_raised{@tpkg.upgrade(['c'], PASSPHRASE)}
|
143
|
+
metadata = @tpkg.metadata_for_installed_packages
|
144
|
+
cpkg = nil
|
145
|
+
metadata.each do |m|
|
146
|
+
if m[:name] == 'c'
|
147
|
+
assert_equal('2.3', m[:version])
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
# Test an upgrade using a filename rather than a package spec ('a')
|
153
|
+
def test_upgrade_by_filename
|
154
|
+
a2pkgfile = @pkgfiles.find {|pkgfile| pkgfile =~ /a-2.0/}
|
155
|
+
assert_nothing_raised { @tpkg.upgrade([a2pkgfile]) }
|
156
|
+
# Should have two packages installed: a-2.0 and b-1.0
|
157
|
+
metadata = @tpkg.metadata_for_installed_packages
|
158
|
+
assert_equal(2, metadata.length)
|
159
|
+
apkg = nil
|
160
|
+
bpkg = nil
|
161
|
+
metadata.each do |m|
|
162
|
+
if m[:name] == 'a'
|
163
|
+
apkg = m
|
164
|
+
elsif m[:name] == 'b'
|
165
|
+
bpkg = m
|
166
|
+
end
|
167
|
+
end
|
168
|
+
assert_not_nil(apkg)
|
169
|
+
assert_equal('2.0', apkg[:version])
|
170
|
+
assert_not_nil(bpkg)
|
171
|
+
assert_equal('1.0', bpkg[:version])
|
172
|
+
end
|
173
|
+
|
174
|
+
# Test upgrading all packages by passing no arguments to upgrade
|
175
|
+
def test_upgrade_all
|
176
|
+
assert_nothing_raised { @tpkg.upgrade }
|
177
|
+
# Should have two packages installed: a-2.0 and b-2.0
|
178
|
+
metadata = @tpkg.metadata_for_installed_packages
|
179
|
+
assert_equal(2, metadata.length)
|
180
|
+
apkg = nil
|
181
|
+
bpkg = nil
|
182
|
+
metadata.each do |m|
|
183
|
+
if m[:name] == 'a'
|
184
|
+
apkg = m
|
185
|
+
elsif m[:name] == 'b'
|
186
|
+
bpkg = m
|
187
|
+
end
|
188
|
+
end
|
189
|
+
assert_not_nil(apkg)
|
190
|
+
assert_equal('2.0', apkg[:version])
|
191
|
+
assert_not_nil(bpkg)
|
192
|
+
assert_equal('2.0', bpkg[:version])
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_upgrade_with_externals_add
|
196
|
+
oldpkg = nil
|
197
|
+
newpkg = nil
|
198
|
+
extname1 = 'testext1'
|
199
|
+
extdata1 = "This is a test of an external hook\nwith multiple lines\nof data"
|
200
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
201
|
+
# Older version has no external, newer version has external
|
202
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
203
|
+
oldpkg = make_package(:change => { 'name' => 'externalpkg', 'version' => '1' }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
204
|
+
newpkg = make_package(:change => { 'name' => 'externalpkg', 'version' => '2' }, :externals => { extname1 => {'data' => extdata1} }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
205
|
+
end
|
206
|
+
# Make external scripts which write the data they receive to temporary
|
207
|
+
# files, so that we can verify the external scripts received the data
|
208
|
+
# properly.
|
209
|
+
exttmpfile1 = Tempfile.new('tpkgtest_external')
|
210
|
+
externalsdir = File.join(@testroot, 'usr', 'lib', 'tpkg', 'externals')
|
211
|
+
FileUtils.mkdir_p(externalsdir)
|
212
|
+
extscript1 = File.join(externalsdir, extname1)
|
213
|
+
File.open(extscript1, 'w') do |file|
|
214
|
+
file.puts('#!/bin/sh')
|
215
|
+
# Operation (install/remove)
|
216
|
+
file.puts("echo $2 >> #{exttmpfile1.path}")
|
217
|
+
# Data
|
218
|
+
file.puts("cat >> #{exttmpfile1.path}")
|
219
|
+
end
|
220
|
+
File.chmod(0755, extscript1)
|
221
|
+
# And run the test
|
222
|
+
assert_nothing_raised { @tpkg.upgrade([oldpkg], PASSPHRASE) }
|
223
|
+
assert_equal('', IO.read(exttmpfile1.path))
|
224
|
+
assert_nothing_raised { @tpkg.upgrade([newpkg], PASSPHRASE) }
|
225
|
+
assert_equal("install\n#{extdata1}", IO.read(exttmpfile1.path))
|
226
|
+
FileUtils.rm_f(oldpkg)
|
227
|
+
FileUtils.rm_f(newpkg)
|
228
|
+
end
|
229
|
+
|
230
|
+
def test_upgrade_with_externals_add_second
|
231
|
+
oldpkg = nil
|
232
|
+
newpkg = nil
|
233
|
+
extname1 = 'testext1'
|
234
|
+
extdata1 = "This is a test of an external hook\nwith multiple lines\nof data"
|
235
|
+
extname2 = 'testext2'
|
236
|
+
extdata2 = "This is a test of a different external hook\nwith multiple lines\nof different data"
|
237
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
238
|
+
# Older version has one external, newer version has same external plus an
|
239
|
+
# additional one
|
240
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
241
|
+
oldpkg = make_package(:change => { 'name' => 'externalpkg', 'version' => '1' }, :externals => { extname1 => {'data' => extdata1} }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
242
|
+
newpkg = make_package(:change => { 'name' => 'externalpkg', 'version' => '2' }, :externals => { extname1 => {'data' => extdata1}, extname2 => {'data' => extdata2} }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
243
|
+
end
|
244
|
+
# Make external scripts which write the data they receive to temporary
|
245
|
+
# files, so that we can verify the external scripts received the data
|
246
|
+
# properly.
|
247
|
+
exttmpfile1 = Tempfile.new('tpkgtest_external')
|
248
|
+
exttmpfile2 = Tempfile.new('tpkgtest_external')
|
249
|
+
externalsdir = File.join(@testroot, 'usr', 'lib', 'tpkg', 'externals')
|
250
|
+
FileUtils.mkdir_p(externalsdir)
|
251
|
+
extscript1 = File.join(externalsdir, extname1)
|
252
|
+
extscript2 = File.join(externalsdir, extname2)
|
253
|
+
File.open(extscript1, 'w') do |file|
|
254
|
+
file.puts('#!/bin/sh')
|
255
|
+
# Operation (install/remove)
|
256
|
+
file.puts("echo $2 >> #{exttmpfile1.path}")
|
257
|
+
# Data
|
258
|
+
file.puts("cat >> #{exttmpfile1.path}")
|
259
|
+
end
|
260
|
+
File.open(extscript2, 'w') do |file|
|
261
|
+
file.puts('#!/bin/sh')
|
262
|
+
# Operation (install/remove)
|
263
|
+
file.puts("echo $2 >> #{exttmpfile2.path}")
|
264
|
+
# Data
|
265
|
+
file.puts("cat >> #{exttmpfile2.path}")
|
266
|
+
end
|
267
|
+
File.chmod(0755, extscript1)
|
268
|
+
File.chmod(0755, extscript2)
|
269
|
+
# And run the test
|
270
|
+
assert_nothing_raised { @tpkg.upgrade([oldpkg], PASSPHRASE) }
|
271
|
+
assert_equal("install\n#{extdata1}", IO.read(exttmpfile1.path))
|
272
|
+
assert_equal('', IO.read(exttmpfile2.path))
|
273
|
+
assert_nothing_raised { @tpkg.upgrade([newpkg], PASSPHRASE) }
|
274
|
+
# The expectation is that since the old and new packages have the same
|
275
|
+
# extname1 external that it will not be run during the upgrade, and thus
|
276
|
+
# the extdata1 should only occur once in the tempfile.
|
277
|
+
assert_equal("install\n#{extdata1}", IO.read(exttmpfile1.path))
|
278
|
+
assert_equal("install\n#{extdata2}", IO.read(exttmpfile2.path))
|
279
|
+
FileUtils.rm_f(oldpkg)
|
280
|
+
FileUtils.rm_f(newpkg)
|
281
|
+
end
|
282
|
+
|
283
|
+
def test_upgrade_with_externals_different_data
|
284
|
+
oldpkg = nil
|
285
|
+
newpkg = nil
|
286
|
+
extname1 = 'testext1'
|
287
|
+
extdata1 = "This is a test of an external hook\nwith multiple lines\nof data"
|
288
|
+
extdata2 = "This is a test of an external hook\nwith multiple lines\nof different data"
|
289
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
290
|
+
# Both versions have an external with the same name but different data
|
291
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
292
|
+
oldpkg = make_package(:change => { 'name' => 'externalpkg', 'version' => '1' }, :externals => { extname1 => {'data' => extdata1} }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
293
|
+
newpkg = make_package(:change => { 'name' => 'externalpkg', 'version' => '2' }, :externals => { extname1 => {'data' => extdata2} }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
294
|
+
end
|
295
|
+
# Make external scripts which write the data they receive to temporary
|
296
|
+
# files, so that we can verify the external scripts received the data
|
297
|
+
# properly.
|
298
|
+
exttmpfile1 = Tempfile.new('tpkgtest_external')
|
299
|
+
externalsdir = File.join(@testroot, 'usr', 'lib', 'tpkg', 'externals')
|
300
|
+
FileUtils.mkdir_p(externalsdir)
|
301
|
+
extscript1 = File.join(externalsdir, extname1)
|
302
|
+
File.open(extscript1, 'w') do |file|
|
303
|
+
file.puts('#!/bin/sh')
|
304
|
+
# Operation (install/remove)
|
305
|
+
file.puts("echo $2 >> #{exttmpfile1.path}")
|
306
|
+
# Data
|
307
|
+
file.puts("cat >> #{exttmpfile1.path}")
|
308
|
+
end
|
309
|
+
File.chmod(0755, extscript1)
|
310
|
+
# And run the test
|
311
|
+
assert_nothing_raised { @tpkg.upgrade([oldpkg], PASSPHRASE) }
|
312
|
+
assert_equal("install\n#{extdata1}", IO.read(exttmpfile1.path))
|
313
|
+
assert_nothing_raised { @tpkg.upgrade([newpkg], PASSPHRASE) }
|
314
|
+
assert_equal("install\n#{extdata1}remove\n#{extdata1}install\n#{extdata2}", IO.read(exttmpfile1.path))
|
315
|
+
FileUtils.rm_f(oldpkg)
|
316
|
+
FileUtils.rm_f(newpkg)
|
317
|
+
end
|
318
|
+
|
319
|
+
# Install pkgA and pkgB, both of version 1.0. pkgB depends on pkgA, min and
|
320
|
+
# max version 1.0. Try to upgrade pkgA to 2.0. This should not be allowed.
|
321
|
+
def test_upgrade_with_strict_dependency
|
322
|
+
pkgfiles = []
|
323
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
324
|
+
# Create pkg stricta-1 and strictb-1
|
325
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
326
|
+
pkgfiles << make_package(:change => { 'name' => 'stricta', 'version' => '1.0' }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
327
|
+
pkgfiles << make_package(:change => { 'name' => 'stricta', 'version' => '2.0' }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
328
|
+
pkgfiles << make_package(:change => { 'name' => 'strictb', 'version' => '1.0' }, :source_directory => srcdir, :dependencies => {'stricta' => {'minimum_version' => '1.0', 'maximum_version' => '1.0'}}, :remove => ['operatingsystem', 'architecture'])
|
329
|
+
end
|
330
|
+
|
331
|
+
tpkg = Tpkg.new(:file_system_root => @testroot, :base => File.join('home', 'tpkg'), :sources => pkgfiles)
|
332
|
+
tpkg.upgrade(['stricta=1.0', 'strictb=1.0'], PASSPHRASE)
|
333
|
+
metadata = @tpkg.metadata_for_installed_packages
|
334
|
+
|
335
|
+
# Should not be able to upgrade stricta to 2.0
|
336
|
+
tpkg.upgrade(['stricta'])
|
337
|
+
|
338
|
+
metadata = @tpkg.metadata_for_installed_packages
|
339
|
+
|
340
|
+
apkg = nil
|
341
|
+
bpkg = nil
|
342
|
+
metadata.each do |m|
|
343
|
+
if m[:name] == 'stricta'
|
344
|
+
apkg = m
|
345
|
+
elsif m[:name] == 'strictb'
|
346
|
+
bpkg = m
|
347
|
+
end
|
348
|
+
end
|
349
|
+
# Package stricta should still be of version 1.0
|
350
|
+
assert_equal('1.0', apkg[:version])
|
351
|
+
|
352
|
+
pkgfiles.each { |pkgfile| FileUtils.rm_f(pkgfile) }
|
353
|
+
end
|
354
|
+
|
355
|
+
# b-1 depends on a-2
|
356
|
+
# b-2 depends on a-1
|
357
|
+
# Can we upgrade from b-1 to b-2?
|
358
|
+
def test_upgrade_with_dependency_rollback
|
359
|
+
pkgfiles = []
|
360
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
361
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
362
|
+
pkgfiles << make_package(:change => { 'name' => 'deprolla', 'version' => '1' }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
363
|
+
pkgfiles << make_package(:change => { 'name' => 'deprolla', 'version' => '2' }, :source_directory => srcdir, :remove => ['operatingsystem', 'architecture'])
|
364
|
+
pkgfiles << make_package(:change => { 'name' => 'deprollb', 'version' => '1' }, :source_directory => srcdir, :dependencies => {'deprolla' => {'minimum_version' => '2', 'maximum_version' => '2'}}, :remove => ['operatingsystem', 'architecture'])
|
365
|
+
pkgfiles << make_package(:change => { 'name' => 'deprollb', 'version' => '2' }, :source_directory => srcdir, :dependencies => {'deprolla' => {'minimum_version' => '1', 'maximum_version' => '1'}}, :remove => ['operatingsystem', 'architecture'])
|
366
|
+
end
|
367
|
+
|
368
|
+
tpkg = Tpkg.new(:file_system_root => @testroot, :base => File.join('home', 'tpkg'), :sources => pkgfiles)
|
369
|
+
tpkg.upgrade(['deprollb=1.0'], PASSPHRASE)
|
370
|
+
metadata = @tpkg.metadata_for_installed_packages
|
371
|
+
|
372
|
+
tpkg.upgrade(['deprollb'])
|
373
|
+
|
374
|
+
metadata = @tpkg.metadata_for_installed_packages
|
375
|
+
|
376
|
+
apkg = nil
|
377
|
+
bpkg = nil
|
378
|
+
metadata.each do |m|
|
379
|
+
if m[:name] == 'deprolla'
|
380
|
+
apkg = m
|
381
|
+
elsif m[:name] == 'deprollb'
|
382
|
+
bpkg = m
|
383
|
+
end
|
384
|
+
end
|
385
|
+
# Package b should version 2
|
386
|
+
assert_equal('2', bpkg[:version])
|
387
|
+
# Package a should version 1
|
388
|
+
assert_equal('1', apkg[:version])
|
389
|
+
|
390
|
+
pkgfiles.each { |pkgfile| FileUtils.rm_f(pkgfile) }
|
391
|
+
end
|
392
|
+
|
393
|
+
def teardown
|
394
|
+
@pkgfiles.each { |pkgfile| FileUtils.rm_f(pkgfile) }
|
395
|
+
FileUtils.rm_rf(@testroot)
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#
|
2
|
+
# Test the Version class
|
3
|
+
#
|
4
|
+
|
5
|
+
require File.expand_path('tpkgtest', File.dirname(__FILE__))
|
6
|
+
require 'tpkg/versiontype'
|
7
|
+
|
8
|
+
class VersionTests < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_version
|
11
|
+
assert(Version.new('1') == Version.new('1'))
|
12
|
+
assert(Version.new('1') == Version.new('1.0'))
|
13
|
+
assert(Version.new('.5') == Version.new('0.5'))
|
14
|
+
assert(Version.new('5.') == Version.new('5'))
|
15
|
+
assert(Version.new('5.') == Version.new('5.0'))
|
16
|
+
|
17
|
+
assert(Version.new('1') >= Version.new('1'))
|
18
|
+
assert(Version.new('1') >= Version.new('1.0'))
|
19
|
+
|
20
|
+
assert(Version.new('1') < Version.new('1.1'))
|
21
|
+
assert(Version.new('1.01') < Version.new('1.1'))
|
22
|
+
assert(Version.new('1.009') < Version.new('1.010'))
|
23
|
+
assert(Version.new('1') < Version.new('2'))
|
24
|
+
assert(Version.new('1.0') < Version.new('2.0'))
|
25
|
+
assert(Version.new('1.0') < Version.new('2.0.0'))
|
26
|
+
assert(Version.new('2.5') < Version.new('2.5.1'))
|
27
|
+
assert(Version.new('2.5.1') < Version.new('2.6'))
|
28
|
+
assert(Version.new('2.9') < Version.new('2.10'))
|
29
|
+
|
30
|
+
assert(Version.new('1') != Version.new('2'))
|
31
|
+
assert(Version.new('1') != Version.new('2.0'))
|
32
|
+
assert(Version.new('1..0') != Version.new('1'))
|
33
|
+
assert(Version.new('1..0') != Version.new('1.0'))
|
34
|
+
assert(Version.new('1..0') != Version.new('1.0.0'))
|
35
|
+
|
36
|
+
assert(Version.new('.5') < Version.new('5.0'))
|
37
|
+
assert(Version.new('.5') < Version.new('5'))
|
38
|
+
|
39
|
+
assert(Version.new('a') < Version.new('b'))
|
40
|
+
assert(Version.new('1.0a') < Version.new('1.0b'))
|
41
|
+
assert(Version.new('1.0') < Version.new('1.0b'))
|
42
|
+
assert(Version.new('1.0.a') < Version.new('1.0.b'))
|
43
|
+
assert(Version.new('1.9a') < Version.new('1.10b'))
|
44
|
+
assert(Version.new('1.9a.2') != Version.new('1.9.a.2'))
|
45
|
+
assert(Version.new('1.9a.2') < Version.new('1.10b.1'))
|
46
|
+
|
47
|
+
assert_nothing_raised {Version.new('0') <=> Version.new(0)}
|
48
|
+
assert(Version.new('0') == Version.new(0))
|
49
|
+
|
50
|
+
# The result of this comparison is meaningless, we just want to
|
51
|
+
# verify that it doesn't throw an exception
|
52
|
+
assert_nothing_raised { Version.new('1.a') <=> Version.new('1.1') }
|
53
|
+
end
|
54
|
+
end
|