summaryrefslogtreecommitdiff
path: root/test/rubygems
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-06-18 05:11:55 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-06-18 05:11:55 +0000
commitf20ad4889d5c7af44581373d25fd326ce796c4b3 (patch)
treeb7bf99329ed8c29768f2502d3bd418e57be32268 /test/rubygems
parent513345607da396f33b862dc2a48135e8a14bad99 (diff)
* lib/rubygems.rb, lib/rubygems/*, test/rubygems/*: Update rubygems
HEAD(2c6d256). It contains to update vendored Molinillo to 0.5.0. https://github.com/rubygems/rubygems/pull/1638 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55441 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems')
-rw-r--r--test/rubygems/test_bundled_ca.rb2
-rw-r--r--test/rubygems/test_gem_installer.rb71
-rw-r--r--test/rubygems/test_gem_package.rb12
-rw-r--r--test/rubygems/test_gem_package_tar_writer.rb24
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb12
-rw-r--r--test/rubygems/test_gem_security_signer.rb8
6 files changed, 125 insertions, 4 deletions
diff --git a/test/rubygems/test_bundled_ca.rb b/test/rubygems/test_bundled_ca.rb
index 5ce2850518..97a64af323 100644
--- a/test/rubygems/test_bundled_ca.rb
+++ b/test/rubygems/test_bundled_ca.rb
@@ -8,7 +8,7 @@ require 'rubygems/request'
# The tested hosts are explained in detail here: https://github.com/rubygems/rubygems/commit/5e16a5428f973667cabfa07e94ff939e7a83ebd9
#
-if ENV["TRAVIS"] || ENV["TEST_SSL"]
+if ENV["CI"] || ENV["TEST_SSL"]
class TestBundledCA < Gem::TestCase
THIS_FILE = File.expand_path __FILE__
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index dedb4c99ca..b8bf24e183 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -1106,6 +1106,77 @@ gem 'other', version
assert_path_exists expected_makefile
end
+ def test_install_extension_dir_is_removed_on_reinstall
+ @spec.extensions << "extconf.rb"
+ write_file File.join(@tempdir, "extconf.rb") do |io|
+ io.write <<-RUBY
+ require "mkmf"
+ create_makefile("#{@spec.name}")
+ RUBY
+ end
+
+ @spec.files += %w[extconf.rb]
+
+ path = Gem::Package.build @spec
+
+ # Install a gem with an extension
+ use_ui @ui do
+ installer = Gem::Installer.at path
+ installer.install
+ end
+
+ # pretend that a binary file was created as part of the build
+ should_be_removed = File.join(@spec.extension_dir, "#{@spec.name}.so")
+ write_file should_be_removed do |io|
+ io.write "DELETE ME ON REINSTALL"
+ end
+ assert_path_exists should_be_removed
+
+ # reinstall the gem, this is also the same as pristine
+ use_ui @ui do
+ installer = Gem::Installer.at path
+ installer.install
+ end
+
+ refute_path_exists should_be_removed
+ end
+
+ def test_find_lib_file_after_install
+ @spec.extensions << "extconf.rb"
+ write_file File.join(@tempdir, "extconf.rb") do |io|
+ io.write <<-RUBY
+ require "mkmf"
+ create_makefile("#{@spec.name}")
+ RUBY
+ end
+
+ write_file File.join(@tempdir, "a.c") do |io|
+ io.write <<-C
+ #include <ruby.h>
+ void Init_a() { }
+ C
+ end
+
+ Dir.mkdir File.join(@tempdir, "lib")
+ write_file File.join(@tempdir, 'lib', "b.rb") do |io|
+ io.write "# b.rb"
+ end
+
+ @spec.files += %w[extconf.rb lib/b.rb a.c]
+
+ use_ui @ui do
+ path = Gem::Package.build @spec
+
+ installer = Gem::Installer.at path
+ installer.install
+ end
+
+ expected = File.join @spec.full_require_paths.find { |path|
+ File.exist? File.join path, 'b.rb'
+ }, 'b.rb'
+ assert_equal expected, @spec.matches_for_glob('b.rb').first
+ end
+
def test_install_extension_and_script
@spec.extensions << "extconf.rb"
write_file File.join(@tempdir, "extconf.rb") do |io|
diff --git a/test/rubygems/test_gem_package.rb b/test/rubygems/test_gem_package.rb
index 2f8747bc97..9d47f0dea4 100644
--- a/test/rubygems/test_gem_package.rb
+++ b/test/rubygems/test_gem_package.rb
@@ -141,7 +141,9 @@ class TestGemPackage < Gem::Package::TarTestCase
FileUtils.mkdir_p 'lib'
open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end
- File.symlink('lib/code.rb', 'lib/code_sym.rb')
+
+ # NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb
+ File.symlink('code.rb', 'lib/code_sym.rb')
package = Gem::Package.new 'bogus.gem'
package.spec = spec
@@ -156,12 +158,16 @@ class TestGemPackage < Gem::Package::TarTestCase
Gem::Package::TarReader.new tar do |tar_io|
tar_io.each_entry do |entry|
- (entry.symlink? ? symlinks : files) << entry.full_name
+ if entry.symlink?
+ symlinks << { entry.full_name => entry.header.linkname }
+ else
+ files << entry.full_name
+ end
end
end
assert_equal %w[lib/code.rb], files
- assert_equal %w[lib/code_sym.rb], symlinks
+ assert_equal [{'lib/code_sym.rb' => 'lib/code.rb'}], symlinks
end
def test_build
diff --git a/test/rubygems/test_gem_package_tar_writer.rb b/test/rubygems/test_gem_package_tar_writer.rb
index 48d480ec53..bed1e3b221 100644
--- a/test/rubygems/test_gem_package_tar_writer.rb
+++ b/test/rubygems/test_gem_package_tar_writer.rb
@@ -229,6 +229,22 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
assert_equal ["#{'qwer/' * 19}bla", 'a' * 151],
@tar_writer.split_name("#{'a' * 151}/#{'qwer/' * 19}bla")
+ names = [
+ ([''] + ['123456789'] * 9 + ['1234567890']).join('/'), # 101 bytes (several pieces)
+ (['123456789'] * 9 + ['1234567890'] + ['']).join('/'), # 101 bytes (several pieces)
+ '/' * 99,
+ '/' * 100,
+ '/' * 101,
+ '/' * 102,
+ ]
+ names.each do |name|
+ newname, prefix = @tar_writer.split_name(name)
+ assert(!(newname.empty?), "split_name() returned empty name")
+ assert(newname.bytesize <= 100, "split_name() returned name longer than 100 bytes: '#{newname}' for '#{name}'")
+ assert(prefix.bytesize <= 155, "split_name() returned prefix longer than 155 bytes: '#{prefix}' for '#{name}'")
+ newname = [prefix, newname].join('/') unless prefix.empty?
+ assert_equal name, newname
+ end
end
def test_split_name_too_long_name
@@ -240,6 +256,14 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
@tar_writer.split_name name
end
assert_includes exception.message, name
+
+ # note, GNU tar 1.28 is unable to handle this case too,
+ # tested with "tar --format=ustar -cPf /tmp/foo.tartar -- /aaaaaa....a"
+ name = '/' + 'a' * 100
+ exception = assert_raises Gem::Package::TooLongFileName do
+ @tar_writer.split_name name
+ end
+ assert_includes exception.message, name
end
def test_split_name_too_long_prefix
diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb
index cf1b27d547..49b6b6656c 100644
--- a/test/rubygems/test_gem_remote_fetcher.rb
+++ b/test/rubygems/test_gem_remote_fetcher.rb
@@ -81,6 +81,7 @@ gems:
# Generated via:
# x = OpenSSL::PKey::DH.new(2048) # wait a while...
# x.to_s => pem
+ # x.priv_key.to_s => hex for OpenSSL::BN.new
TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
@@ -92,6 +93,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
-----END DH PARAMETERS-----
_end_of_pem_
+ TEST_KEY_DH2048.priv_key = OpenSSL::BN.new("108911488509734781344423639" \
+ "5585749502236089033416160524030987005037540379474123441273555416835" \
+ "4725688238369352738266590757370603937618499698665047757588998555345" \
+ "3446251978586372525530219375408331096098220027413238477359960428372" \
+ "0195464393332338164504352015535549496585792320286513563739305843396" \
+ "9294344974028713065472959376197728193162272314514335882399554394661" \
+ "5306385003430991221886779612878793446851681835397455333989268503748" \
+ "7862488679178398716189205737442996155432191656080664090596502674943" \
+ "7902481557157485795980326766117882761941455140582265347052939604724" \
+ "964857770053363840471912215799994973597613931991572884", 16)
+
def setup
@proxies = %w[https_proxy http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
@old_proxies = @proxies.map {|k| ENV[k] }
diff --git a/test/rubygems/test_gem_security_signer.rb b/test/rubygems/test_gem_security_signer.rb
index fe161762e5..685a13949e 100644
--- a/test/rubygems/test_gem_security_signer.rb
+++ b/test/rubygems/test_gem_security_signer.rb
@@ -205,5 +205,13 @@ c7NM7KZZjj7G++SXjYTEI1PHSA7aFQ/i/+qSUvx+Pg==
end
end
+ def test_sign_no_certs
+ signer = Gem::Security::Signer.new ALTERNATE_KEY, []
+
+ assert_raises Gem::Security::Exception do
+ signer.sign 'hello'
+ end
+ end
+
end if defined?(OpenSSL::SSL)