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,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
|