File: test_gem_package_tar_output.rb

package info (click to toggle)
jruby 1.7.26-1%2Bdeb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 84,572 kB
  • sloc: ruby: 669,910; java: 253,056; xml: 35,152; ansic: 9,187; yacc: 7,267; cpp: 5,244; sh: 1,036; makefile: 345; jsp: 48; tcl: 40
file content (128 lines) | stat: -rw-r--r-- 2,971 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
require 'rubygems/package/tar_test_case'
require 'rubygems/package/tar_output'
require 'rubygems/security'

class TestGemPackageTarOutput < Gem::Package::TarTestCase

  def setup
    super

    @file = File.join @tempdir, 'bla2.tar'
  end

  def test_self_open
    open @file, 'wb' do |tar_io|
      Gem::Package::TarOutput.open tar_io do |tar_writer|
        tar_writer.add_file_simple 'README', 0, 17 do |io|
          io.write "This is a README\n"
        end

        tar_writer.metadata = "This is some metadata\n"
      end
    end

    files = util_extract

    name, data = files.shift
    assert_equal 'data.tar.gz', name

    gz = Zlib::GzipReader.new StringIO.new(data)

    Gem::Package::TarReader.new gz do |tar_reader|
      tar_reader.each do |entry|
        assert_equal 'README', entry.full_name
        assert_equal "This is a README\n", entry.read
      end
    end

    gz.close

    name, data = files.shift
    assert_equal 'metadata.gz', name

    gz = Zlib::GzipReader.new StringIO.new(data)
    assert_equal "This is some metadata\n", gz.read

    assert_empty files
  ensure
    gz.close if gz
  end

  def test_verify_duplicate_file
    FileUtils.mkdir_p 'lib'
    FileUtils.touch 'lib/code.rb'

    build = Gem::Package.new @gem
    build.spec = @spec
    build.setup_signer
    open @gem, 'wb' do |gem_io|
      Gem::Package::TarWriter.new gem_io do |gem|
        build.add_metadata gem
        build.add_contents gem

        gem.add_file_simple 'a.sig', 0444, 0
        gem.add_file_simple 'a.sig', 0444, 0
      end
    end

    package = Gem::Package.new @gem

    e = assert_raises Gem::Security::Exception do
      package.verify
    end

    assert_equal 'duplicate files in the package: ("a.sig")', e.message
  end


  if defined? OpenSSL then
    def test_self_open_signed
      @private_key = File.expand_path('test/rubygems/private_key.pem', @@project_dir)
      @public_cert = File.expand_path('test/rubygems/public_cert.pem', @@project_dir)

      signer = Gem::Security::Signer.new @private_key, [@public_cert]

      open @file, 'wb' do |tar_io|
        Gem::Package::TarOutput.open tar_io, signer do |tar_writer|
          tar_writer.add_file_simple 'README', 0, 17 do |io|
            io.write "This is a README\n"
          end

          tar_writer.metadata = "This is some metadata\n"
        end
      end

      files = util_extract

      name, data = files.shift
      assert_equal 'data.tar.gz', name

      name, data = files.shift
      assert_equal 'metadata.gz', name

      name, data = files.shift
      assert_equal 'data.tar.gz.sig', name

      name, data = files.shift
      assert_equal 'metadata.gz.sig', name

      assert_empty files
    end
  end

  def util_extract
    files = []

    open @file, 'rb' do |io|
      Gem::Package::TarReader.new io do |tar_reader|
        tar_reader.each do |entry|
          files << [entry.full_name, entry.read]
        end
      end
    end

    files
  end

end