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,805 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Test tpkg's ability to handle package metadata
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
require File.expand_path('tpkgtest', File.dirname(__FILE__))
|
|
6
|
+
require 'webrick'
|
|
7
|
+
require 'pathname'
|
|
8
|
+
|
|
9
|
+
class TpkgMetadataTests < 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
|
|
21
|
+
|
|
22
|
+
# Copy the package into a directory to test directory-related operations
|
|
23
|
+
@pkgdir = Dir.mktmpdir('pkgdir')
|
|
24
|
+
FileUtils.cp(@pkgfile, @pkgdir)
|
|
25
|
+
|
|
26
|
+
# Make a test repository
|
|
27
|
+
@testbase = Dir.mktmpdir('testbase')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_metadata_from_package
|
|
31
|
+
metadata = Tpkg::metadata_from_package(@pkgfile)
|
|
32
|
+
assert_equal('testpkg', metadata[:name], 'metadata_from_package name')
|
|
33
|
+
assert_equal('1.0', metadata[:version], 'metadata_from_package version')
|
|
34
|
+
assert_equal(File.basename(@pkgfile), metadata[:filename], 'metadata_from_package filename attribute')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# FIXME: Seems a bit odd that this never directly calls
|
|
38
|
+
# metadata_xml_to_hash. Some of this should be moved to
|
|
39
|
+
# test_metadata_from_package and then this converted to test
|
|
40
|
+
# metadata_xml_to_hash directly.
|
|
41
|
+
def test_metadata_xml_to_hash
|
|
42
|
+
# FIXME: test allowed_versions
|
|
43
|
+
pkgfile = make_package(:output_directory => @tempoutdir, :dependencies => {'testpkg2' => {'minimum_version' => '1.0', 'maximum_version' => '3.0', 'minimum_package_version' => '1.5', 'maximum_package_version' => '2.5'}, 'testpkg3' => {}})
|
|
44
|
+
metadata = nil
|
|
45
|
+
assert_nothing_raised { metadata = Tpkg::metadata_from_package(pkgfile)}
|
|
46
|
+
assert_equal('testpkg', metadata[:name])
|
|
47
|
+
assert_equal('1.0', metadata[:version])
|
|
48
|
+
assert_equal('1', metadata[:package_version])
|
|
49
|
+
assert_equal(2, metadata[:dependencies].length)
|
|
50
|
+
metadata[:dependencies].each do |depreq|
|
|
51
|
+
if depreq[:name] == 'testpkg2'
|
|
52
|
+
assert_equal('1.0', depreq[:minimum_version])
|
|
53
|
+
assert_equal('3.0', depreq[:maximum_version])
|
|
54
|
+
assert_equal('1.5', depreq[:minimum_package_version])
|
|
55
|
+
assert_equal('2.5', depreq[:maximum_package_version])
|
|
56
|
+
assert_equal(:tpkg, depreq[:type])
|
|
57
|
+
assert_equal(6, depreq.length) # :name, :type and 4 version requirements
|
|
58
|
+
else
|
|
59
|
+
assert_equal('testpkg3', depreq[:name])
|
|
60
|
+
assert_equal(:tpkg, depreq[:type])
|
|
61
|
+
assert_equal(2, depreq.length) # :name and :type only
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
FileUtils.rm_f(pkgfile)
|
|
65
|
+
|
|
66
|
+
# FIXME
|
|
67
|
+
# Confirm an exception is thrown if a required field is missing
|
|
68
|
+
# Confirm no problem if an optional field is missing
|
|
69
|
+
|
|
70
|
+
# Check that the array fields are handled properly
|
|
71
|
+
os = ['os1', 'os2', 'os3']
|
|
72
|
+
pkgfile = make_package(:change => {'name' => 'ostest', 'operatingsystem' => os.join(',')})
|
|
73
|
+
metadata = Tpkg::metadata_from_package(pkgfile)
|
|
74
|
+
assert_equal(os, metadata[:operatingsystem])
|
|
75
|
+
FileUtils.rm_f(pkgfile)
|
|
76
|
+
|
|
77
|
+
arch = ['arch1', 'arch2', 'arch3']
|
|
78
|
+
pkgfile = make_package(:change => {'name' => 'archtest', 'architecture' => arch.join(',')})
|
|
79
|
+
metadata = Tpkg::metadata_from_package(pkgfile)
|
|
80
|
+
assert_equal(arch, metadata[:architecture])
|
|
81
|
+
FileUtils.rm_f(pkgfile)
|
|
82
|
+
|
|
83
|
+
# FIXME: files
|
|
84
|
+
|
|
85
|
+
extname = 'testext'
|
|
86
|
+
extdata = "This is a test of parsing an external\nwith multiple lines\nof data"
|
|
87
|
+
pkgfile = make_package(:change => { 'name' => 'externalpkg' }, :externals => { extname => { 'data' => extdata } })
|
|
88
|
+
metadata = Tpkg::metadata_from_package(pkgfile)
|
|
89
|
+
assert_equal(extname, metadata[:externals].first[:name])
|
|
90
|
+
assert_equal(extdata, metadata[:externals].first[:data])
|
|
91
|
+
FileUtils.rm_f(pkgfile)
|
|
92
|
+
|
|
93
|
+
extname = 'testext'
|
|
94
|
+
extdata = "<element>Test external</element>\n<other>with XML data</other>"
|
|
95
|
+
pkgfile = make_package(:change => { 'name' => 'externalpkg' }, :externals => { extname => { 'data' => extdata } })
|
|
96
|
+
metadata = Tpkg::metadata_from_package(pkgfile)
|
|
97
|
+
assert_equal(extname, metadata[:externals].first[:name])
|
|
98
|
+
assert_equal(extdata, metadata[:externals].first[:data])
|
|
99
|
+
FileUtils.rm_f(pkgfile)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_metadata_from_directory
|
|
103
|
+
metadata = Tpkg::metadata_from_directory(@pkgdir)
|
|
104
|
+
assert_equal(1, metadata.length, 'metadata_from_directory number of results')
|
|
105
|
+
assert_equal('testpkg', metadata.first[:name], 'metadata_from_directory name')
|
|
106
|
+
assert_equal('1.0', metadata.first[:version], 'metadata_from_directory version')
|
|
107
|
+
assert_equal(File.basename(@pkgfile), metadata.first[:filename], 'metadata_from_directory filename attribute')
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_extract_metadata
|
|
111
|
+
assert_nothing_raised('extract_metadata') { Tpkg::extract_metadata(@pkgdir) }
|
|
112
|
+
# we don't generate metadata.xml anymore
|
|
113
|
+
# assert(File.file?(File.join(@pkgdir, 'metadata.xml')), 'extract_metadata metadata file')
|
|
114
|
+
# assert_equal(0644, File.stat(File.join(@pkgdir, 'metadata.xml')).mode & 07777, 'extract_metadata metadata file permissions')
|
|
115
|
+
# metadata_xml = nil
|
|
116
|
+
# assert_nothing_raised('extract_metadata metadata load') { metadata_xml = REXML::Document.new(File.open(File.join(@pkgdir, 'metadata.xml'))) }
|
|
117
|
+
# assert_equal(1, metadata_xml.elements.to_a('/tpkg_metadata/tpkg/name').size, 'extract_metadata name count')
|
|
118
|
+
# assert_equal('testpkg', metadata_xml.elements['/tpkg_metadata/tpkg/name'].text, 'extract_metadata name')
|
|
119
|
+
# assert_equal(File.basename(@pkgfile), metadata_xml.elements['/tpkg_metadata/tpkg'].attributes['filename'], 'extract_metadata filename attribute')
|
|
120
|
+
|
|
121
|
+
# YAML stuff
|
|
122
|
+
assert(File.file?(File.join(@pkgdir, 'metadata.yml')), 'extract_metadata metadata file')
|
|
123
|
+
assert_equal(0644, File.stat(File.join(@pkgdir, 'metadata.yml')).mode & 07777, 'extract_metadata metadata file permissions')
|
|
124
|
+
metadata_contents = File.read(File.join(@pkgdir, 'metadata.yml'))
|
|
125
|
+
metadata = Metadata::get_pkgs_metadata_from_yml_doc(metadata_contents)
|
|
126
|
+
assert_equal(1, metadata['testpkg'].size, 'extract_metadata name and count')
|
|
127
|
+
assert_equal(File.basename(@pkgfile), metadata['testpkg'].first[:filename], 'extract_metadata filename attribute')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def test_prep_metadata
|
|
131
|
+
# Add another package in the package directory to make the test a
|
|
132
|
+
# little more realistic
|
|
133
|
+
pkgfile2 = make_package(:change => {'name' => 'testpkg2', 'version' => '2.0'})
|
|
134
|
+
FileUtils.mv(pkgfile2, @pkgdir)
|
|
135
|
+
pkgfile2 = File.join(@pkgdir, File.basename(pkgfile2))
|
|
136
|
+
|
|
137
|
+
Tpkg::extract_metadata(@pkgdir)
|
|
138
|
+
|
|
139
|
+
# Source as filename
|
|
140
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
141
|
+
tpkg = Tpkg.new(:base => testbase, :sources => [@pkgfile])
|
|
142
|
+
assert_nothing_raised { tpkg.prep_metadata }
|
|
143
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg'].length)
|
|
144
|
+
# The metadata in the package is XML as produced by make_package. The
|
|
145
|
+
# metadata extracted by prep_metadata came from the metadata.yml file
|
|
146
|
+
# produced by extract_metadata. Someday we should implement a
|
|
147
|
+
# reasonable == in the Metadata class, but in the meantime check that
|
|
148
|
+
# they look similar by checking the name element.
|
|
149
|
+
assert_equal(Tpkg::metadata_from_package(@pkgfile)[:name],
|
|
150
|
+
tpkg.instance_variable_get(:@metadata)['testpkg'].first[:name])
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Source as directory
|
|
154
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
155
|
+
tpkg = Tpkg.new(:base => testbase, :sources => [@pkgdir])
|
|
156
|
+
assert_nothing_raised { tpkg.prep_metadata }
|
|
157
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg'].length)
|
|
158
|
+
assert_equal(Tpkg::metadata_from_package(@pkgfile)[:name],
|
|
159
|
+
tpkg.instance_variable_get(:@metadata)['testpkg'].first[:name])
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Source as relative directory
|
|
163
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
164
|
+
tpkg = Tpkg.new(:base => testbase,
|
|
165
|
+
:sources => [Pathname.new(@pkgdir).relative_path_from(Pathname.getwd).to_s])
|
|
166
|
+
assert_nothing_raised { tpkg.prep_metadata }
|
|
167
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg'].length)
|
|
168
|
+
assert_equal(Tpkg::metadata_from_package(@pkgfile)[:name],
|
|
169
|
+
tpkg.instance_variable_get(:@metadata)['testpkg'].first[:name])
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Source as URI
|
|
173
|
+
|
|
174
|
+
s = WEBrick::HTTPServer.new(:Port => 3500, :DocumentRoot => @pkgdir)
|
|
175
|
+
# There may be an easier way to push WEBrick into the background, but
|
|
176
|
+
# the WEBrick docs are mostly non-existent so I'm taking the quick and
|
|
177
|
+
# dirty route.
|
|
178
|
+
t = Thread.new { s.start }
|
|
179
|
+
|
|
180
|
+
source = 'http://localhost:3500/'
|
|
181
|
+
|
|
182
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
183
|
+
tpkg = Tpkg.new(:base => testbase, :sources => [source])
|
|
184
|
+
|
|
185
|
+
assert_nothing_raised { tpkg.prep_metadata }
|
|
186
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg'].length)
|
|
187
|
+
assert_equal(Tpkg::metadata_from_package(@pkgfile)[:name], tpkg.instance_variable_get(:@metadata)['testpkg'].first[:name])
|
|
188
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg2'].length)
|
|
189
|
+
assert_equal(Tpkg::metadata_from_package(pkgfile2)[:name], tpkg.instance_variable_get(:@metadata)['testpkg2'].first[:name])
|
|
190
|
+
pkgs = tpkg.instance_variable_get(:@metadata).collect {|m| m[1]}.flatten
|
|
191
|
+
assert_equal(2, pkgs.length)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Test when the package directory isn't at the root of the web
|
|
195
|
+
# server hierarchy
|
|
196
|
+
Dir.mkdir(File.join(@pkgdir, 'testdir'))
|
|
197
|
+
FileUtils.mv(File.join(@pkgdir, 'metadata.yml'), File.join(@pkgdir, 'testdir', 'metadata.yml'))
|
|
198
|
+
|
|
199
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
200
|
+
# With a trailing / on the URL
|
|
201
|
+
tpkg = Tpkg.new(:base => testbase, :sources => [source + 'testdir/'])
|
|
202
|
+
assert_nothing_raised { tpkg.prep_metadata }
|
|
203
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg'].length)
|
|
204
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg2'].length)
|
|
205
|
+
pkgs = tpkg.instance_variable_get(:@metadata).collect {|m| m[1]}.flatten
|
|
206
|
+
nonnativepkgs = pkgs.select do |pkg|
|
|
207
|
+
pkg[:source] != :native_installed && pkg[:source] != :native_available
|
|
208
|
+
end
|
|
209
|
+
assert_equal(2, nonnativepkgs.length)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
213
|
+
# Without a trailing / on the URL
|
|
214
|
+
tpkg = Tpkg.new(:base => testbase, :sources => [source + 'testdir'])
|
|
215
|
+
assert_nothing_raised { tpkg.prep_metadata }
|
|
216
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg'].length)
|
|
217
|
+
assert_equal(1, tpkg.instance_variable_get(:@metadata)['testpkg2'].length)
|
|
218
|
+
pkgs = tpkg.instance_variable_get(:@metadata).collect {|m| m[1]}.flatten
|
|
219
|
+
nonnativepkgs = pkgs.select do |pkg|
|
|
220
|
+
pkg[:source] != :native_installed && pkg[:source] != :native_available
|
|
221
|
+
end
|
|
222
|
+
assert_equal(2, nonnativepkgs.length)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
s.shutdown
|
|
226
|
+
t.kill
|
|
227
|
+
|
|
228
|
+
# No exception thrown if source is a non-existent directory
|
|
229
|
+
# FIXME: check stderr for warning
|
|
230
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
231
|
+
tpkg = Tpkg.new(:base => testbase, :sources => ['/path/does/not/exist'])
|
|
232
|
+
assert_nothing_raised { tpkg.prep_metadata }
|
|
233
|
+
assert_equal(0, tpkg.instance_variable_get(:@metadata).length)
|
|
234
|
+
end
|
|
235
|
+
# No exception thrown if source is a relative URI
|
|
236
|
+
# FIXME: check stderr for warning
|
|
237
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
238
|
+
tpkg = Tpkg.new(:base => testbase, :sources => ['relative/uri'])
|
|
239
|
+
assert_nothing_raised { tpkg.prep_metadata }
|
|
240
|
+
assert_equal(0, tpkg.instance_variable_get(:@metadata).length)
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def test_load_available_packages
|
|
245
|
+
# Add another package in the package directory to make the test a
|
|
246
|
+
# little more realistic
|
|
247
|
+
pkgfile2 = make_package(:change => {'name' => 'testpkg2', 'version' => '2.0'})
|
|
248
|
+
FileUtils.mv(pkgfile2, @pkgdir)
|
|
249
|
+
pkgfile2 = File.join(@pkgdir, File.basename(pkgfile2))
|
|
250
|
+
|
|
251
|
+
Tpkg::extract_metadata(@pkgdir)
|
|
252
|
+
|
|
253
|
+
s = WEBrick::HTTPServer.new(:Port => 3500, :DocumentRoot => @pkgdir)
|
|
254
|
+
# There may be an easier way to push WEBrick into the background, but
|
|
255
|
+
# the WEBrick docs are mostly non-existent so I'm taking the quick and
|
|
256
|
+
# dirty route.
|
|
257
|
+
t = Thread.new { s.start }
|
|
258
|
+
|
|
259
|
+
Dir.mktmpdir('testbase') do |testbase|
|
|
260
|
+
source = 'http://localhost:3500/'
|
|
261
|
+
tpkg = Tpkg.new(:base => testbase, :sources => [source])
|
|
262
|
+
|
|
263
|
+
assert_nothing_raised { tpkg.load_available_packages('testpkg') }
|
|
264
|
+
assert_equal(1, tpkg.instance_variable_get(:@available_packages)['testpkg'].length)
|
|
265
|
+
expected = Tpkg::metadata_from_package(@pkgfile)
|
|
266
|
+
actual = tpkg.instance_variable_get(:@available_packages)['testpkg'].first[:metadata]
|
|
267
|
+
assert_equal(expected.to_hash, actual.to_hash)
|
|
268
|
+
pkgs = tpkg.instance_variable_get(:@available_packages).collect {|m| m[1]}.flatten
|
|
269
|
+
assert_equal(1, pkgs.length)
|
|
270
|
+
|
|
271
|
+
assert_nothing_raised { tpkg.load_available_packages('testpkg2') }
|
|
272
|
+
assert_equal(1, tpkg.instance_variable_get(:@available_packages)['testpkg2'].length)
|
|
273
|
+
expected = Tpkg::metadata_from_package(pkgfile2)
|
|
274
|
+
actual = tpkg.instance_variable_get(:@available_packages)['testpkg2'].first[:metadata]
|
|
275
|
+
assert_equal(expected.to_hash, actual.to_hash)
|
|
276
|
+
pkgs = tpkg.instance_variable_get(:@available_packages).collect {|m| m[1]}.flatten
|
|
277
|
+
assert_equal(2, pkgs.length)
|
|
278
|
+
|
|
279
|
+
# Test with a package that isn't available
|
|
280
|
+
assert_nothing_raised { tpkg.load_available_packages('otherpkg') }
|
|
281
|
+
assert_equal(0, tpkg.instance_variable_get(:@available_packages)['otherpkg'].length)
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
s.shutdown
|
|
285
|
+
t.kill
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def test_pkg_for_native_package
|
|
289
|
+
tpkg = Tpkg.new(:base => @testbase)
|
|
290
|
+
name = 'testpkg'
|
|
291
|
+
version = '1.0.1'
|
|
292
|
+
package_version = '5.6'
|
|
293
|
+
source = :native_installed
|
|
294
|
+
pkg = nil
|
|
295
|
+
|
|
296
|
+
# Test with everything specified
|
|
297
|
+
assert_nothing_raised { pkg = Tpkg.pkg_for_native_package(name, version, package_version, source) }
|
|
298
|
+
assert_equal(name, pkg[:metadata][:name])
|
|
299
|
+
assert_equal(version, pkg[:metadata][:version])
|
|
300
|
+
assert_equal(package_version, pkg[:metadata][:package_version])
|
|
301
|
+
assert_equal(source, pkg[:source])
|
|
302
|
+
# If source == :native_installed the :prefer flag should be set
|
|
303
|
+
assert_equal(true, pkg[:prefer])
|
|
304
|
+
|
|
305
|
+
# Test with package_version not specified, it should be optional
|
|
306
|
+
assert_nothing_raised { pkg = Tpkg.pkg_for_native_package(name, version, nil, source) }
|
|
307
|
+
assert_equal(name, pkg[:metadata][:name])
|
|
308
|
+
assert_equal(version, pkg[:metadata][:version])
|
|
309
|
+
assert_equal(nil, pkg[:metadata][:package_version])
|
|
310
|
+
assert_equal(source, pkg[:source])
|
|
311
|
+
assert_equal(true, pkg[:prefer])
|
|
312
|
+
|
|
313
|
+
# Test with source == :native_available, :prefer flag should not be set
|
|
314
|
+
assert_nothing_raised { pkg = Tpkg.pkg_for_native_package(name, version, package_version, :native_available) }
|
|
315
|
+
assert_equal(name, pkg[:metadata][:name])
|
|
316
|
+
assert_equal(version, pkg[:metadata][:version])
|
|
317
|
+
assert_equal(package_version, pkg[:metadata][:package_version])
|
|
318
|
+
assert_equal(:native_available, pkg[:source])
|
|
319
|
+
assert_equal(nil, pkg[:prefer])
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
def test_get_pkgs_metadata_from_yml_doc
|
|
323
|
+
metadatayaml = <<YAML
|
|
324
|
+
---
|
|
325
|
+
name: pkgone
|
|
326
|
+
version: 1
|
|
327
|
+
maintainer: test@example.com
|
|
328
|
+
description: Package one
|
|
329
|
+
---
|
|
330
|
+
name: pkgone
|
|
331
|
+
version: 2
|
|
332
|
+
maintainer: newuser@example.com
|
|
333
|
+
description: Updated package
|
|
334
|
+
---
|
|
335
|
+
name: pkgtwo
|
|
336
|
+
version: 1
|
|
337
|
+
maintainer: otheruser@example.com
|
|
338
|
+
description: Package two
|
|
339
|
+
YAML
|
|
340
|
+
|
|
341
|
+
metadata = Metadata.get_pkgs_metadata_from_yml_doc(metadatayaml)
|
|
342
|
+
# Right overall data structure?
|
|
343
|
+
assert_kind_of(Hash, metadata)
|
|
344
|
+
# Both pkgone entries in the same hash key?
|
|
345
|
+
assert_equal(2, metadata['pkgone'].length)
|
|
346
|
+
# YAML parsed into right object?
|
|
347
|
+
firstpkgone = metadata['pkgone'].shift
|
|
348
|
+
assert_kind_of(Metadata, firstpkgone)
|
|
349
|
+
# Parsing looks reasonable?
|
|
350
|
+
assert_equal('pkgone', firstpkgone[:name])
|
|
351
|
+
# Just one pkgtwo entry in that hash key?
|
|
352
|
+
assert_equal(1, metadata['pkgtwo'].length)
|
|
353
|
+
# Object type and parsing looks reasonable?
|
|
354
|
+
pkgtwo = metadata['pkgtwo'].shift
|
|
355
|
+
assert_kind_of(Metadata, pkgtwo)
|
|
356
|
+
assert_equal('pkgtwo', pkgtwo[:name])
|
|
357
|
+
|
|
358
|
+
# Test the side-effect use case
|
|
359
|
+
metadata = {}
|
|
360
|
+
boguskey = 'Some bogus junk'
|
|
361
|
+
bogusvalue = ['a', 'b']
|
|
362
|
+
bogusvalue2 = ['1', '2']
|
|
363
|
+
metadata[boguskey] = bogusvalue.dup
|
|
364
|
+
metadata['pkgtwo'] = bogusvalue2.dup
|
|
365
|
+
Metadata.get_pkgs_metadata_from_yml_doc(metadatayaml, metadata)
|
|
366
|
+
# Make sure our boguskey hash entry was unchanged
|
|
367
|
+
assert_equal(bogusvalue, metadata[boguskey])
|
|
368
|
+
# Ensure the bogus entries we added to the pkgtwo entry were unchanged
|
|
369
|
+
assert_equal(bogusvalue2, metadata['pkgtwo'].shift(2))
|
|
370
|
+
# Metadata for pkgtwo was appended to our array?
|
|
371
|
+
pkgtwo = metadata['pkgtwo'].shift
|
|
372
|
+
assert_kind_of(Metadata, pkgtwo)
|
|
373
|
+
assert_equal('pkgtwo', pkgtwo[:name])
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
def test_instantiate_from_dir
|
|
377
|
+
Dir.mktmpdir('pkgdir') do |pkgdir|
|
|
378
|
+
yaml = <<YAML
|
|
379
|
+
name: pkgone
|
|
380
|
+
version: 1
|
|
381
|
+
maintainer: test@example.com
|
|
382
|
+
description: Package one
|
|
383
|
+
YAML
|
|
384
|
+
File.open(File.join(pkgdir, 'tpkg.yml'), 'w') do |file|
|
|
385
|
+
file.write yaml
|
|
386
|
+
end
|
|
387
|
+
metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
388
|
+
assert_kind_of(Metadata, metadata)
|
|
389
|
+
assert_equal('pkgone', metadata[:name])
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
Dir.mktmpdir('pkgdir') do |pkgdir|
|
|
393
|
+
xml = <<XML
|
|
394
|
+
<tpkg>
|
|
395
|
+
<name>pkgone</name>
|
|
396
|
+
<version>1</version>
|
|
397
|
+
<maintainer>test@example.com</maintainer>
|
|
398
|
+
<description>Package one</description>
|
|
399
|
+
</tpkg>
|
|
400
|
+
XML
|
|
401
|
+
File.open(File.join(pkgdir, 'tpkg.xml'), 'w') do |file|
|
|
402
|
+
file.write xml
|
|
403
|
+
end
|
|
404
|
+
metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
405
|
+
assert_kind_of(Metadata, metadata)
|
|
406
|
+
assert_equal('pkgone', metadata[:name])
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
def test_initialize
|
|
411
|
+
yaml = <<YAML
|
|
412
|
+
name: pkgone
|
|
413
|
+
version: 1
|
|
414
|
+
maintainer: test@example.com
|
|
415
|
+
description: Package one
|
|
416
|
+
YAML
|
|
417
|
+
|
|
418
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
419
|
+
assert_equal(yaml, metadata.text)
|
|
420
|
+
assert_equal('yml', metadata.format)
|
|
421
|
+
assert_equal(nil, metadata.file)
|
|
422
|
+
assert_equal(nil, metadata.source)
|
|
423
|
+
|
|
424
|
+
file = Tempfile.new('metadata').path
|
|
425
|
+
metadata = Metadata.new(yaml, 'yml', file)
|
|
426
|
+
assert_equal(yaml, metadata.text)
|
|
427
|
+
assert_equal('yml', metadata.format)
|
|
428
|
+
assert_equal(file, metadata.file)
|
|
429
|
+
assert_equal(nil, metadata.source)
|
|
430
|
+
|
|
431
|
+
source = 'http://example.com/tpkg/'
|
|
432
|
+
metadata = Metadata.new(yaml, 'yml', file, source)
|
|
433
|
+
assert_equal(yaml, metadata.text)
|
|
434
|
+
assert_equal('yml', metadata.format)
|
|
435
|
+
assert_equal(file, metadata.file)
|
|
436
|
+
assert_equal(source, metadata.source)
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
def test_square_brackets
|
|
440
|
+
# This method is just a convenience proxy for to_hash, so only minimal
|
|
441
|
+
# testing is called for here
|
|
442
|
+
yaml = <<YAML
|
|
443
|
+
name: pkgone
|
|
444
|
+
version: 1
|
|
445
|
+
maintainer: test@example.com
|
|
446
|
+
description: Package one
|
|
447
|
+
dependencies:
|
|
448
|
+
- name: dep1
|
|
449
|
+
- name: dep2
|
|
450
|
+
YAML
|
|
451
|
+
|
|
452
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
453
|
+
assert_equal('pkgone', metadata[:name])
|
|
454
|
+
assert_equal(1, metadata[:version])
|
|
455
|
+
assert_equal([{'name'=>'dep1', 'type'=>:tpkg},
|
|
456
|
+
{'name'=>'dep2', 'type'=>:tpkg}],
|
|
457
|
+
metadata[:dependencies])
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
def test_square_brackets_assign
|
|
461
|
+
# This method is just a convenience proxy for to_hash, so only minimal
|
|
462
|
+
# testing is called for here
|
|
463
|
+
yaml = <<YAML
|
|
464
|
+
name: pkgone
|
|
465
|
+
version: 1
|
|
466
|
+
maintainer: test@example.com
|
|
467
|
+
description: Package one
|
|
468
|
+
YAML
|
|
469
|
+
|
|
470
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
471
|
+
metadata[:name] = 'pkgtwo'
|
|
472
|
+
assert_equal('pkgtwo', metadata[:name])
|
|
473
|
+
metadata[:version] = 2
|
|
474
|
+
assert_equal(2, metadata[:version])
|
|
475
|
+
metadata[:dependencies] = [{'name'=>'dep1', 'type'=>:tpkg},
|
|
476
|
+
{'name'=>'dep2', 'type'=>:tpkg}]
|
|
477
|
+
assert_equal([{'name'=>'dep1', 'type'=>:tpkg},
|
|
478
|
+
{'name'=>'dep2', 'type'=>:tpkg}],
|
|
479
|
+
metadata[:dependencies])
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def test_to_hash
|
|
483
|
+
# FIXME
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
def test_write
|
|
487
|
+
Dir.mktmpdir('outputdir') do |outputdir|
|
|
488
|
+
yaml = <<YAML
|
|
489
|
+
name: pkgone
|
|
490
|
+
version: 1
|
|
491
|
+
maintainer: test@example.com
|
|
492
|
+
description: Package one
|
|
493
|
+
YAML
|
|
494
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
495
|
+
metadata.write(outputdir)
|
|
496
|
+
# tpkg.yml there?
|
|
497
|
+
assert(File.file?(File.join(outputdir, 'tpkg.yml')))
|
|
498
|
+
# and nothing else?
|
|
499
|
+
assert_equal(3, Dir.entries(outputdir).length)
|
|
500
|
+
# tpkg.yml contains the right stuff?
|
|
501
|
+
filelines = File.readlines(File.join(outputdir, 'tpkg.yml'))
|
|
502
|
+
filelines.each {|line| line.chomp!}
|
|
503
|
+
assert(filelines.include?('--- ') || filelines.include?('---'))
|
|
504
|
+
assert(filelines.include?('name: pkgone'))
|
|
505
|
+
assert(filelines.include?('version: 1'))
|
|
506
|
+
assert(filelines.include?('maintainer: test@example.com'))
|
|
507
|
+
assert(filelines.include?('description: Package one'))
|
|
508
|
+
assert_equal(5, filelines.length)
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
Dir.mktmpdir('outputdir') do |outputdir|
|
|
512
|
+
xml = <<XML
|
|
513
|
+
<tpkg>
|
|
514
|
+
<name>pkgone</name>
|
|
515
|
+
<version>1</version>
|
|
516
|
+
<maintainer>test@example.com</maintainer>
|
|
517
|
+
<description>Package one</description>
|
|
518
|
+
</tpkg>
|
|
519
|
+
XML
|
|
520
|
+
metadata = Metadata.new(xml, 'xml')
|
|
521
|
+
metadata.write(outputdir)
|
|
522
|
+
# tpkg.yml there?
|
|
523
|
+
assert(File.file?(File.join(outputdir, 'tpkg.yml')))
|
|
524
|
+
# and nothing else?
|
|
525
|
+
assert_equal(3, Dir.entries(outputdir).length)
|
|
526
|
+
# tpkg.yml contains the right stuff?
|
|
527
|
+
filelines = File.readlines(File.join(outputdir, 'tpkg.yml'))
|
|
528
|
+
filelines.each {|line| line.chomp!}
|
|
529
|
+
# The xml to yaml conversion yields slightly different but semantically
|
|
530
|
+
# equivalent results to a direct dump of yaml
|
|
531
|
+
filelines.delete('')
|
|
532
|
+
assert(filelines.include?('--- ') || filelines.include?('---'))
|
|
533
|
+
assert(filelines.include?('name: pkgone'))
|
|
534
|
+
assert(filelines.include?('version: "1"') || filelines.include?("version: '1'"))
|
|
535
|
+
assert(filelines.include?('maintainer: test@example.com'))
|
|
536
|
+
assert(filelines.include?('description: Package one'))
|
|
537
|
+
assert(filelines.include?('files: {}'))
|
|
538
|
+
assert_equal(6, filelines.length)
|
|
539
|
+
end
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
def test_add_tpkg_version
|
|
543
|
+
# yaml, no version, from file
|
|
544
|
+
yaml = <<YAML
|
|
545
|
+
name: pkgone
|
|
546
|
+
version: 1
|
|
547
|
+
maintainer: test@example.com
|
|
548
|
+
description: Package one
|
|
549
|
+
YAML
|
|
550
|
+
Dir.mktmpdir('pkgdir') do |pkgdir|
|
|
551
|
+
File.open(File.join(pkgdir, 'tpkg.yml'), 'w') do |file|
|
|
552
|
+
file.write yaml
|
|
553
|
+
end
|
|
554
|
+
metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
555
|
+
metadata.add_tpkg_version(Tpkg::VERSION)
|
|
556
|
+
|
|
557
|
+
# Added to in-memory data
|
|
558
|
+
assert_equal(Tpkg::VERSION, metadata[:tpkg_version])
|
|
559
|
+
# File updated
|
|
560
|
+
new_metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
561
|
+
assert_equal(Tpkg::VERSION, new_metadata[:tpkg_version])
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
# yaml, correct version, from file
|
|
565
|
+
yaml_with_correct_version = <<YAML
|
|
566
|
+
name: pkgone
|
|
567
|
+
version: 1
|
|
568
|
+
maintainer: test@example.com
|
|
569
|
+
description: Package one
|
|
570
|
+
tpkg_version: #{Tpkg::VERSION}
|
|
571
|
+
YAML
|
|
572
|
+
Dir.mktmpdir('pkgdir') do |pkgdir|
|
|
573
|
+
File.open(File.join(pkgdir, 'tpkg.yml'), 'w') do |file|
|
|
574
|
+
file.write yaml_with_correct_version
|
|
575
|
+
end
|
|
576
|
+
metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
577
|
+
metadata.add_tpkg_version(Tpkg::VERSION)
|
|
578
|
+
|
|
579
|
+
# In-memory data still correct
|
|
580
|
+
assert_equal(Tpkg::VERSION, metadata[:tpkg_version])
|
|
581
|
+
# File still correct
|
|
582
|
+
new_metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
583
|
+
assert_equal(Tpkg::VERSION, new_metadata[:tpkg_version])
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
# yaml, incorrect version, from file
|
|
587
|
+
yaml_with_incorrect_version = <<YAML
|
|
588
|
+
name: pkgone
|
|
589
|
+
version: 1
|
|
590
|
+
maintainer: test@example.com
|
|
591
|
+
description: Package one
|
|
592
|
+
tpkg_version: 0
|
|
593
|
+
YAML
|
|
594
|
+
Dir.mktmpdir('pkgdir') do |pkgdir|
|
|
595
|
+
File.open(File.join(pkgdir, 'tpkg.yml'), 'w') do |file|
|
|
596
|
+
file.write yaml_with_incorrect_version
|
|
597
|
+
end
|
|
598
|
+
metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
599
|
+
metadata.add_tpkg_version(Tpkg::VERSION)
|
|
600
|
+
|
|
601
|
+
# Version mismatch results in warning
|
|
602
|
+
# FIXME, how to check for warning?
|
|
603
|
+
# In-memory data remains incorrect
|
|
604
|
+
assert_equal(0, metadata[:tpkg_version])
|
|
605
|
+
# File remains incorrect
|
|
606
|
+
new_metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
607
|
+
assert_equal(0, new_metadata[:tpkg_version])
|
|
608
|
+
end
|
|
609
|
+
|
|
610
|
+
# yaml, no version, from string
|
|
611
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
612
|
+
metadata.add_tpkg_version(Tpkg::VERSION)
|
|
613
|
+
# Added to in-memory data
|
|
614
|
+
assert_equal(Tpkg::VERSION, metadata[:tpkg_version])
|
|
615
|
+
|
|
616
|
+
# xml, no version, from file
|
|
617
|
+
xml = <<XML
|
|
618
|
+
<tpkg>
|
|
619
|
+
<name>pkgone</name>
|
|
620
|
+
<version>1</version>
|
|
621
|
+
<maintainer>test@example.com</maintainer>
|
|
622
|
+
<description>Package one</description>
|
|
623
|
+
</tpkg>
|
|
624
|
+
XML
|
|
625
|
+
Dir.mktmpdir('pkgdir') do |pkgdir|
|
|
626
|
+
File.open(File.join(pkgdir, 'tpkg.xml'), 'w') do |file|
|
|
627
|
+
file.write xml
|
|
628
|
+
end
|
|
629
|
+
metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
630
|
+
metadata.add_tpkg_version(Tpkg::VERSION)
|
|
631
|
+
|
|
632
|
+
# Added to in-memory data
|
|
633
|
+
assert_equal(Tpkg::VERSION, metadata[:tpkg_version])
|
|
634
|
+
# File updated
|
|
635
|
+
new_metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
636
|
+
assert_equal(Tpkg::VERSION, new_metadata[:tpkg_version])
|
|
637
|
+
# FIXME: verify still complies with DTD?
|
|
638
|
+
end
|
|
639
|
+
|
|
640
|
+
# xml, correct version, from file
|
|
641
|
+
xml_with_correct_version = <<XML
|
|
642
|
+
<tpkg>
|
|
643
|
+
<name>pkgone</name>
|
|
644
|
+
<version>1</version>
|
|
645
|
+
<maintainer>test@example.com</maintainer>
|
|
646
|
+
<description>Package one</description>
|
|
647
|
+
<tpkg_version>#{Tpkg::VERSION}</tpkg_version>
|
|
648
|
+
</tpkg>
|
|
649
|
+
XML
|
|
650
|
+
Dir.mktmpdir('pkgdir') do |pkgdir|
|
|
651
|
+
File.open(File.join(pkgdir, 'tpkg.xml'), 'w') do |file|
|
|
652
|
+
file.write xml_with_correct_version
|
|
653
|
+
end
|
|
654
|
+
metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
655
|
+
metadata.add_tpkg_version(Tpkg::VERSION)
|
|
656
|
+
|
|
657
|
+
# In-memory data still correct
|
|
658
|
+
assert_equal(Tpkg::VERSION, metadata[:tpkg_version])
|
|
659
|
+
# File still correct
|
|
660
|
+
new_metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
661
|
+
assert_equal(Tpkg::VERSION, new_metadata[:tpkg_version])
|
|
662
|
+
# FIXME: verify still complies with DTD?
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
# xml, incorrect version, from file
|
|
666
|
+
xml_with_incorrect_version = <<XML
|
|
667
|
+
<tpkg>
|
|
668
|
+
<name>pkgone</name>
|
|
669
|
+
<version>1</version>
|
|
670
|
+
<maintainer>test@example.com</maintainer>
|
|
671
|
+
<description>Package one</description>
|
|
672
|
+
<tpkg_version>0</tpkg_version>
|
|
673
|
+
</tpkg>
|
|
674
|
+
XML
|
|
675
|
+
Dir.mktmpdir('pkgdir') do |pkgdir|
|
|
676
|
+
File.open(File.join(pkgdir, 'tpkg.xml'), 'w') do |file|
|
|
677
|
+
file.write xml_with_incorrect_version
|
|
678
|
+
end
|
|
679
|
+
metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
680
|
+
metadata.add_tpkg_version(Tpkg::VERSION)
|
|
681
|
+
|
|
682
|
+
# Version mismatch results in warning
|
|
683
|
+
# FIXME, how to check for warning?
|
|
684
|
+
# In-memory data remains incorrect
|
|
685
|
+
assert_equal('0', metadata[:tpkg_version])
|
|
686
|
+
# File remains incorrect
|
|
687
|
+
new_metadata = Metadata.instantiate_from_dir(pkgdir)
|
|
688
|
+
assert_equal('0', new_metadata[:tpkg_version])
|
|
689
|
+
end
|
|
690
|
+
|
|
691
|
+
# xml, no version, from string
|
|
692
|
+
metadata = Metadata.new(xml, 'xml')
|
|
693
|
+
metadata.add_tpkg_version(Tpkg::VERSION)
|
|
694
|
+
# Added to in-memory data
|
|
695
|
+
assert_equal(Tpkg::VERSION, metadata[:tpkg_version])
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
def test_generate_package_filename
|
|
699
|
+
# FIXME
|
|
700
|
+
end
|
|
701
|
+
|
|
702
|
+
def test_validate
|
|
703
|
+
# FIXME
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
def test_verify_yaml
|
|
707
|
+
# FIXME
|
|
708
|
+
end
|
|
709
|
+
|
|
710
|
+
def test_verify_required_fields
|
|
711
|
+
# FIXME
|
|
712
|
+
end
|
|
713
|
+
|
|
714
|
+
def test_get_native_deps
|
|
715
|
+
# Metadata with no dependencies
|
|
716
|
+
yaml = <<YAML
|
|
717
|
+
name: pkgone
|
|
718
|
+
version: 1
|
|
719
|
+
maintainer: test@example.com
|
|
720
|
+
description: Package one
|
|
721
|
+
YAML
|
|
722
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
723
|
+
assert_equal([], metadata.get_native_deps)
|
|
724
|
+
# Metadata with empty dependencies
|
|
725
|
+
yaml = <<YAML
|
|
726
|
+
name: pkgone
|
|
727
|
+
version: 1
|
|
728
|
+
maintainer: test@example.com
|
|
729
|
+
description: Package one
|
|
730
|
+
dependencies:
|
|
731
|
+
YAML
|
|
732
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
733
|
+
assert_equal([], metadata.get_native_deps)
|
|
734
|
+
# Metadata with dependencies but none native
|
|
735
|
+
yaml = <<YAML
|
|
736
|
+
name: pkgone
|
|
737
|
+
version: 1
|
|
738
|
+
maintainer: test@example.com
|
|
739
|
+
description: Package one
|
|
740
|
+
dependencies:
|
|
741
|
+
- name: dep1
|
|
742
|
+
- name: dep2
|
|
743
|
+
YAML
|
|
744
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
745
|
+
assert_equal([], metadata.get_native_deps)
|
|
746
|
+
# Metadata with native dependencies
|
|
747
|
+
yaml = <<YAML
|
|
748
|
+
name: pkgone
|
|
749
|
+
version: 1
|
|
750
|
+
maintainer: test@example.com
|
|
751
|
+
description: Package one
|
|
752
|
+
dependencies:
|
|
753
|
+
- name: dep1
|
|
754
|
+
- name: nativedep1
|
|
755
|
+
native: true
|
|
756
|
+
- name: nativedep2
|
|
757
|
+
native: true
|
|
758
|
+
YAML
|
|
759
|
+
metadata = Metadata.new(yaml, 'yml')
|
|
760
|
+
assert_equal([{'name'=>'nativedep1', 'native'=>true, 'type'=>:native},
|
|
761
|
+
{'name'=>'nativedep2', 'native'=>true, 'type'=>:native}],
|
|
762
|
+
metadata.get_native_deps)
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
def test_init_scripts
|
|
766
|
+
# FIXME
|
|
767
|
+
end
|
|
768
|
+
def test_init_links
|
|
769
|
+
pkg = nil
|
|
770
|
+
pkg2 = nil
|
|
771
|
+
Dir.mktmpdir('srcdir') do |srcdir|
|
|
772
|
+
FileUtils.cp(File.join(TESTPKGDIR, 'tpkg-nofiles.xml'), File.join(srcdir, 'tpkg.xml'))
|
|
773
|
+
FileUtils.mkdir_p(File.join(srcdir, 'reloc'))
|
|
774
|
+
File.open(File.join(srcdir, 'reloc', 'myinit'), 'w') do |file|
|
|
775
|
+
file.puts('init script')
|
|
776
|
+
end
|
|
777
|
+
pkg = make_package(:change => { 'name' => 'a' }, :source_directory => srcdir, :files => { 'myinit' => { 'init' => {} } }, :remove => ['operatingsystem', 'architecture'])
|
|
778
|
+
pkg2 = make_package(:change => { 'name' => 'b' }, :source_directory => srcdir, :files => { 'myinit' => { 'init' => { 'levels' => '' } } }, :remove => ['operatingsystem', 'architecture'])
|
|
779
|
+
end
|
|
780
|
+
Dir.mktmpdir('testroot') do |testroot|
|
|
781
|
+
testbase = File.join(testroot, 'home', 'tpkg')
|
|
782
|
+
FileUtils.mkdir_p(testbase)
|
|
783
|
+
tpkg = Tpkg.new(:file_system_root => testroot, :base => File.join('home', 'tpkg'), :sources => [pkg])
|
|
784
|
+
metadata = Tpkg::metadata_from_package(pkg)
|
|
785
|
+
metadata2 = Tpkg::metadata_from_package(pkg2)
|
|
786
|
+
links = tpkg.init_links(metadata)
|
|
787
|
+
links.each do |link, init_script|
|
|
788
|
+
# Not quite sure how to verify that link is valid without
|
|
789
|
+
# reproducing all of the code of init_links here
|
|
790
|
+
assert_equal(File.join(testroot, 'home', 'tpkg', 'myinit'), init_script)
|
|
791
|
+
end
|
|
792
|
+
# Test a package with an empty set of runlevels specified
|
|
793
|
+
assert(tpkg.init_links(metadata2).empty?)
|
|
794
|
+
end
|
|
795
|
+
FileUtils.rm_f(pkg)
|
|
796
|
+
FileUtils.rm_f(pkg2)
|
|
797
|
+
end
|
|
798
|
+
|
|
799
|
+
def teardown
|
|
800
|
+
FileUtils.rm_f(@pkgfile)
|
|
801
|
+
FileUtils.rm_rf(@pkgdir)
|
|
802
|
+
FileUtils.rm_rf(@testbase)
|
|
803
|
+
FileUtils.rm_rf(@tempoutdir)
|
|
804
|
+
end
|
|
805
|
+
end
|