You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
4.1 KiB

require_relative('helper')
require 'tmpdir'
require 'pathname'
class RPMTransactionTests < Minitest::Test
PACKAGE_FILENAME = 'simple-1.0-0.i586.rpm'.freeze
def test_flags
RPM.transaction do |t|
assert_equal RPM::TRANS_FLAG_NONE, t.flags
t.flags = RPM::TRANS_FLAG_TEST
assert_equal RPM::TRANS_FLAG_TEST, t.flags
end
end
def test_iterator
RPM.transaction do |t|
it = t.init_iterator(nil, nil)
assert_kind_of RPM::MatchIterator, it
# assert it.count > 0
end
RPM.transaction do |t|
it = t.init_iterator(nil, nil)
it.regexp(:name, :glob, '*audio*')
it.each do |pkg|
assert pkg.name.include?('audio'), "'#{pkg.name}' contains 'audio'"
end
end
end
# FIXME: this is not working
def test_iterator_version
RPM.transaction do |t|
it = t.init_iterator(nil, nil)
it.version(RPM::Version.new('2.1'))
it.each do |sig|
# FIXME: check that this worked
end
end
end
def test_basic_transaction_setters
Dir.mktmpdir do |dir|
RPM.transaction do |t|
assert_equal '/', t.root_dir
t.root_dir = dir
assert_equal dir + '/', t.root_dir
end
end
Dir.mktmpdir do |dir|
RPM.transaction(dir) do |t|
assert_equal dir + '/', t.root_dir
end
end
end
def test_test_flag_install
pkg = RPM::Package.open(fixture(PACKAGE_FILENAME))
Dir.mktmpdir do |dir|
RPM.transaction(dir) do |t|
t.flags = RPM::TRANS_FLAG_TEST
t.install(pkg, fixture(PACKAGE_FILENAME))
t.commit
rpmdb_file = RPM::C.rpmvercmp(RPM::C.RPMVERSION, '4.16.0') >= 0 ? 'rpmdb.sqlite' : 'Packages'
assert File.exist?(File.join(dir, RPM['_dbpath'], rpmdb_file)), 'rpm db exists'
assert !File.exist?('/usr/share/simple/README'), "package #{pkg} was not installed"
ensure
# Force close so that RPM does not try to do it
# when the tmpdir is deleted
t.db.close
end
end
end
def test_install_and_remove
pkg = RPM::Package.open(fixture(PACKAGE_FILENAME))
Dir.mktmpdir do |dir|
RPM.transaction(dir) do |t|
begin
t.install(pkg, fixture(PACKAGE_FILENAME))
t.commit
rpmdb_file = RPM::C.rpmvercmp(RPM::C.RPMVERSION, '4.16.0') >= 0 ? 'rpmdb.sqlite' : 'Packages'
assert File.exist?(File.join(dir, RPM['_dbpath'], rpmdb_file)), 'rpm db exists'
assert File.exist?(File.join(dir, '/usr/share/simple/README')), "package #{pkg} should be installed"
ensure
# Force close so that RPM does not try to do it
# when the tmpdir is deleted
t.db.close
end
end
skip("Commit hangs on package delete")
RPM.transaction(dir) do |t|
begin
assert_raises TypeError do
t.delete(Object.new)
end
t.delete(pkg)
t.order
t.clean
t.commit
assert !File.exist?(File.join(dir, '/usr/share/simple/README')), "package #{pkg} should not be installed"
ensure
# Force close so that RPM does not try to do it
# when the tmpdir is deleted
t.db.close
end
end
end
end
def test_install_with_custom_callback
pkg = RPM::Package.open(fixture(PACKAGE_FILENAME))
Dir.mktmpdir do |dir|
RPM.transaction(dir) do |t|
begin
t.install(pkg, fixture(PACKAGE_FILENAME))
t.check do |problem|
STDERR.puts "Problem: #{problem}"
end
t.order
t.clean
t.commit do |data|
next case data.type
when :inst_open_file then
@f = File.open(data.key, 'r')
when :inst_close_file then @f.close
end
end
assert File.exist?(File.join(dir, '/usr/share/simple/README')),
"package #{pkg} should be installed"
ensure
# Force close so that RPM does not try to do it
# when the tmpdir is deleted
t.db.close
end
end
end
end
end