libgems 0.0.1

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.
Files changed (177) hide show
  1. data/ChangeLog +5811 -0
  2. data/History.txt +887 -0
  3. data/LICENSE.txt +51 -0
  4. data/README.md +87 -0
  5. data/Rakefile +113 -0
  6. data/lib/gauntlet_libgems.rb +50 -0
  7. data/lib/libgems.rb +1246 -0
  8. data/lib/libgems/builder.rb +102 -0
  9. data/lib/libgems/command.rb +534 -0
  10. data/lib/libgems/command_manager.rb +182 -0
  11. data/lib/libgems/commands/build_command.rb +53 -0
  12. data/lib/libgems/commands/cert_command.rb +86 -0
  13. data/lib/libgems/commands/check_command.rb +80 -0
  14. data/lib/libgems/commands/cleanup_command.rb +106 -0
  15. data/lib/libgems/commands/contents_command.rb +98 -0
  16. data/lib/libgems/commands/dependency_command.rb +195 -0
  17. data/lib/libgems/commands/environment_command.rb +133 -0
  18. data/lib/libgems/commands/fetch_command.rb +67 -0
  19. data/lib/libgems/commands/generate_index_command.rb +133 -0
  20. data/lib/libgems/commands/help_command.rb +172 -0
  21. data/lib/libgems/commands/install_command.rb +178 -0
  22. data/lib/libgems/commands/list_command.rb +35 -0
  23. data/lib/libgems/commands/lock_command.rb +110 -0
  24. data/lib/libgems/commands/mirror_command.rb +111 -0
  25. data/lib/libgems/commands/outdated_command.rb +33 -0
  26. data/lib/libgems/commands/owner_command.rb +75 -0
  27. data/lib/libgems/commands/pristine_command.rb +93 -0
  28. data/lib/libgems/commands/push_command.rb +56 -0
  29. data/lib/libgems/commands/query_command.rb +280 -0
  30. data/lib/libgems/commands/rdoc_command.rb +91 -0
  31. data/lib/libgems/commands/search_command.rb +31 -0
  32. data/lib/libgems/commands/server_command.rb +86 -0
  33. data/lib/libgems/commands/sources_command.rb +157 -0
  34. data/lib/libgems/commands/specification_command.rb +125 -0
  35. data/lib/libgems/commands/stale_command.rb +27 -0
  36. data/lib/libgems/commands/uninstall_command.rb +83 -0
  37. data/lib/libgems/commands/unpack_command.rb +121 -0
  38. data/lib/libgems/commands/update_command.rb +160 -0
  39. data/lib/libgems/commands/which_command.rb +86 -0
  40. data/lib/libgems/config_file.rb +345 -0
  41. data/lib/libgems/custom_require.rb +44 -0
  42. data/lib/libgems/defaults.rb +101 -0
  43. data/lib/libgems/dependency.rb +227 -0
  44. data/lib/libgems/dependency_installer.rb +286 -0
  45. data/lib/libgems/dependency_list.rb +208 -0
  46. data/lib/libgems/doc_manager.rb +242 -0
  47. data/lib/libgems/errors.rb +35 -0
  48. data/lib/libgems/exceptions.rb +91 -0
  49. data/lib/libgems/ext.rb +18 -0
  50. data/lib/libgems/ext/builder.rb +56 -0
  51. data/lib/libgems/ext/configure_builder.rb +25 -0
  52. data/lib/libgems/ext/ext_conf_builder.rb +24 -0
  53. data/lib/libgems/ext/rake_builder.rb +39 -0
  54. data/lib/libgems/format.rb +81 -0
  55. data/lib/libgems/gem_openssl.rb +92 -0
  56. data/lib/libgems/gem_path_searcher.rb +100 -0
  57. data/lib/libgems/gem_runner.rb +79 -0
  58. data/lib/libgems/gemcutter_utilities.rb +49 -0
  59. data/lib/libgems/indexer.rb +720 -0
  60. data/lib/libgems/install_update_options.rb +125 -0
  61. data/lib/libgems/installer.rb +604 -0
  62. data/lib/libgems/local_remote_options.rb +135 -0
  63. data/lib/libgems/old_format.rb +153 -0
  64. data/lib/libgems/package.rb +97 -0
  65. data/lib/libgems/package/f_sync_dir.rb +23 -0
  66. data/lib/libgems/package/tar_header.rb +266 -0
  67. data/lib/libgems/package/tar_input.rb +222 -0
  68. data/lib/libgems/package/tar_output.rb +144 -0
  69. data/lib/libgems/package/tar_reader.rb +106 -0
  70. data/lib/libgems/package/tar_reader/entry.rb +141 -0
  71. data/lib/libgems/package/tar_writer.rb +241 -0
  72. data/lib/libgems/package_task.rb +126 -0
  73. data/lib/libgems/platform.rb +183 -0
  74. data/lib/libgems/remote_fetcher.rb +414 -0
  75. data/lib/libgems/require_paths_builder.rb +18 -0
  76. data/lib/libgems/requirement.rb +153 -0
  77. data/lib/libgems/security.rb +814 -0
  78. data/lib/libgems/server.rb +872 -0
  79. data/lib/libgems/source_index.rb +597 -0
  80. data/lib/libgems/source_info_cache.rb +395 -0
  81. data/lib/libgems/source_info_cache_entry.rb +56 -0
  82. data/lib/libgems/spec_fetcher.rb +337 -0
  83. data/lib/libgems/specification.rb +1487 -0
  84. data/lib/libgems/test_utilities.rb +147 -0
  85. data/lib/libgems/text.rb +65 -0
  86. data/lib/libgems/uninstaller.rb +278 -0
  87. data/lib/libgems/user_interaction.rb +527 -0
  88. data/lib/libgems/validator.rb +240 -0
  89. data/lib/libgems/version.rb +316 -0
  90. data/lib/libgems/version_option.rb +65 -0
  91. data/lib/rbconfig/datadir.rb +20 -0
  92. data/test/bogussources.rb +8 -0
  93. data/test/data/gem-private_key.pem +27 -0
  94. data/test/data/gem-public_cert.pem +20 -0
  95. data/test/fake_certlib/openssl.rb +7 -0
  96. data/test/foo/discover.rb +0 -0
  97. data/test/gem_installer_test_case.rb +97 -0
  98. data/test/gem_package_tar_test_case.rb +132 -0
  99. data/test/gemutilities.rb +605 -0
  100. data/test/insure_session.rb +43 -0
  101. data/test/mockgemui.rb +56 -0
  102. data/test/plugin/exception/libgems_plugin.rb +2 -0
  103. data/test/plugin/load/libgems_plugin.rb +1 -0
  104. data/test/plugin/standarderror/libgems_plugin.rb +2 -0
  105. data/test/private_key.pem +27 -0
  106. data/test/public_cert.pem +20 -0
  107. data/test/rubygems_plugin.rb +21 -0
  108. data/test/simple_gem.rb +66 -0
  109. data/test/test_config.rb +12 -0
  110. data/test/test_gem.rb +780 -0
  111. data/test/test_gem_builder.rb +27 -0
  112. data/test/test_gem_command.rb +178 -0
  113. data/test/test_gem_command_manager.rb +207 -0
  114. data/test/test_gem_commands_build_command.rb +74 -0
  115. data/test/test_gem_commands_cert_command.rb +124 -0
  116. data/test/test_gem_commands_check_command.rb +18 -0
  117. data/test/test_gem_commands_contents_command.rb +156 -0
  118. data/test/test_gem_commands_dependency_command.rb +216 -0
  119. data/test/test_gem_commands_environment_command.rb +144 -0
  120. data/test/test_gem_commands_fetch_command.rb +76 -0
  121. data/test/test_gem_commands_generate_index_command.rb +135 -0
  122. data/test/test_gem_commands_install_command.rb +315 -0
  123. data/test/test_gem_commands_list_command.rb +36 -0
  124. data/test/test_gem_commands_lock_command.rb +68 -0
  125. data/test/test_gem_commands_mirror_command.rb +60 -0
  126. data/test/test_gem_commands_outdated_command.rb +40 -0
  127. data/test/test_gem_commands_owner_command.rb +105 -0
  128. data/test/test_gem_commands_pristine_command.rb +108 -0
  129. data/test/test_gem_commands_push_command.rb +81 -0
  130. data/test/test_gem_commands_query_command.rb +426 -0
  131. data/test/test_gem_commands_server_command.rb +59 -0
  132. data/test/test_gem_commands_sources_command.rb +209 -0
  133. data/test/test_gem_commands_specification_command.rb +139 -0
  134. data/test/test_gem_commands_stale_command.rb +38 -0
  135. data/test/test_gem_commands_uninstall_command.rb +83 -0
  136. data/test/test_gem_commands_unpack_command.rb +199 -0
  137. data/test/test_gem_commands_update_command.rb +207 -0
  138. data/test/test_gem_commands_which_command.rb +66 -0
  139. data/test/test_gem_config_file.rb +287 -0
  140. data/test/test_gem_dependency.rb +149 -0
  141. data/test/test_gem_dependency_installer.rb +661 -0
  142. data/test/test_gem_dependency_list.rb +230 -0
  143. data/test/test_gem_doc_manager.rb +31 -0
  144. data/test/test_gem_ext_configure_builder.rb +84 -0
  145. data/test/test_gem_ext_ext_conf_builder.rb +173 -0
  146. data/test/test_gem_ext_rake_builder.rb +81 -0
  147. data/test/test_gem_format.rb +70 -0
  148. data/test/test_gem_gem_path_searcher.rb +78 -0
  149. data/test/test_gem_gem_runner.rb +45 -0
  150. data/test/test_gem_gemcutter_utilities.rb +103 -0
  151. data/test/test_gem_indexer.rb +673 -0
  152. data/test/test_gem_install_update_options.rb +68 -0
  153. data/test/test_gem_installer.rb +857 -0
  154. data/test/test_gem_local_remote_options.rb +97 -0
  155. data/test/test_gem_package_tar_header.rb +130 -0
  156. data/test/test_gem_package_tar_input.rb +112 -0
  157. data/test/test_gem_package_tar_output.rb +97 -0
  158. data/test/test_gem_package_tar_reader.rb +46 -0
  159. data/test/test_gem_package_tar_reader_entry.rb +109 -0
  160. data/test/test_gem_package_tar_writer.rb +144 -0
  161. data/test/test_gem_package_task.rb +59 -0
  162. data/test/test_gem_platform.rb +264 -0
  163. data/test/test_gem_remote_fetcher.rb +740 -0
  164. data/test/test_gem_requirement.rb +292 -0
  165. data/test/test_gem_server.rb +356 -0
  166. data/test/test_gem_silent_ui.rb +113 -0
  167. data/test/test_gem_source_index.rb +461 -0
  168. data/test/test_gem_spec_fetcher.rb +410 -0
  169. data/test/test_gem_specification.rb +1334 -0
  170. data/test/test_gem_stream_ui.rb +218 -0
  171. data/test/test_gem_text.rb +43 -0
  172. data/test/test_gem_uninstaller.rb +146 -0
  173. data/test/test_gem_validator.rb +63 -0
  174. data/test/test_gem_version.rb +181 -0
  175. data/test/test_gem_version_option.rb +89 -0
  176. data/test/test_kernel.rb +59 -0
  177. metadata +402 -0
@@ -0,0 +1,97 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require 'libgems/local_remote_options'
3
+ require 'libgems/command'
4
+
5
+ class TestGemLocalRemoteOptions < RubyGemTestCase
6
+
7
+ def setup
8
+ super
9
+
10
+ @cmd = LibGems::Command.new 'dummy', 'dummy'
11
+ @cmd.extend LibGems::LocalRemoteOptions
12
+ end
13
+
14
+ def test_add_local_remote_options
15
+ @cmd.add_local_remote_options
16
+
17
+ args = %w[-l -r -b -B 10 --source http://gems.example.com -p --update-sources]
18
+ assert @cmd.handles?(args)
19
+ end
20
+
21
+ def test_both_eh
22
+ assert_equal false, @cmd.both?
23
+
24
+ @cmd.options[:domain] = :local
25
+
26
+ assert_equal false, @cmd.both?
27
+
28
+ @cmd.options[:domain] = :both
29
+
30
+ assert_equal true, @cmd.both?
31
+ end
32
+
33
+ def test_local_eh
34
+ assert_equal false, @cmd.local?
35
+
36
+ @cmd.options[:domain] = :local
37
+
38
+ assert_equal true, @cmd.local?
39
+
40
+ @cmd.options[:domain] = :both
41
+
42
+ assert_equal true, @cmd.local?
43
+ end
44
+
45
+ def test_remote_eh
46
+ assert_equal false, @cmd.remote?
47
+
48
+ @cmd.options[:domain] = :remote
49
+
50
+ assert_equal true, @cmd.remote?
51
+
52
+ @cmd.options[:domain] = :both
53
+
54
+ assert_equal true, @cmd.remote?
55
+ end
56
+
57
+ def test_source_option
58
+ @cmd.add_source_option
59
+
60
+ s1 = URI.parse 'http://more-gems.example.com/'
61
+ s2 = URI.parse 'http://even-more-gems.example.com/'
62
+ s3 = URI.parse 'http://other-gems.example.com/some_subdir'
63
+ s4 = URI.parse 'http://more-gems.example.com/' # Intentional duplicate
64
+
65
+ @cmd.handle_options %W[--source #{s1} --source #{s2} --source #{s3} --source #{s4}]
66
+
67
+ assert_equal [s1.to_s, s2.to_s, "#{s3}/"], LibGems.sources
68
+ end
69
+
70
+ def test_update_sources_option
71
+ @cmd.add_update_sources_option
72
+
73
+ LibGems.configuration.update_sources = false
74
+
75
+ @cmd.handle_options %W[--update-sources]
76
+
77
+ assert_equal true, LibGems.configuration.update_sources
78
+
79
+ @cmd.handle_options %W[--no-update-sources]
80
+
81
+ assert_equal false, LibGems.configuration.update_sources
82
+ end
83
+
84
+ def test_source_option_bad
85
+ @cmd.add_source_option
86
+
87
+ s1 = 'htp://more-gems.example.com'
88
+
89
+ assert_raises OptionParser::InvalidArgument do
90
+ @cmd.handle_options %W[--source #{s1}]
91
+ end
92
+
93
+ assert_equal [@gem_repo], LibGems.sources
94
+ end
95
+
96
+ end
97
+
@@ -0,0 +1,130 @@
1
+ require File.expand_path('../gem_package_tar_test_case', __FILE__)
2
+ require 'libgems/package'
3
+
4
+ class TestGemPackageTarHeader < TarTestCase
5
+
6
+ def setup
7
+ super
8
+
9
+ header = {
10
+ :name => 'x',
11
+ :mode => 0644,
12
+ :uid => 1000,
13
+ :gid => 10000,
14
+ :size => 100,
15
+ :mtime => 12345,
16
+ :typeflag => '0',
17
+ :linkname => 'link',
18
+ :uname => 'user',
19
+ :gname => 'group',
20
+ :devmajor => 1,
21
+ :devminor => 2,
22
+ :prefix => 'y',
23
+ }
24
+
25
+ @tar_header = LibGems::Package::TarHeader.new header
26
+ end
27
+
28
+ def test_self_from
29
+ io = TempIO.new @tar_header.to_s
30
+
31
+ new_header = LibGems::Package::TarHeader.from io
32
+
33
+ assert_headers_equal @tar_header, new_header
34
+ end
35
+
36
+ def test_initialize
37
+ assert_equal '', @tar_header.checksum, 'checksum'
38
+ assert_equal 1, @tar_header.devmajor, 'devmajor'
39
+ assert_equal 2, @tar_header.devminor, 'devminor'
40
+ assert_equal 10000, @tar_header.gid, 'gid'
41
+ assert_equal 'group', @tar_header.gname, 'gname'
42
+ assert_equal 'link', @tar_header.linkname, 'linkname'
43
+ assert_equal 'ustar', @tar_header.magic, 'magic'
44
+ assert_equal 0644, @tar_header.mode, 'mode'
45
+ assert_equal 12345, @tar_header.mtime, 'mtime'
46
+ assert_equal 'x', @tar_header.name, 'name'
47
+ assert_equal 'y', @tar_header.prefix, 'prefix'
48
+ assert_equal 100, @tar_header.size, 'size'
49
+ assert_equal '0', @tar_header.typeflag, 'typeflag'
50
+ assert_equal 1000, @tar_header.uid, 'uid'
51
+ assert_equal 'user', @tar_header.uname, 'uname'
52
+ assert_equal '00', @tar_header.version, 'version'
53
+
54
+ refute_empty @tar_header, 'empty'
55
+ end
56
+
57
+ def test_initialize_bad
58
+ assert_raises ArgumentError do
59
+ LibGems::Package::TarHeader.new :name => '', :size => '', :mode => ''
60
+ end
61
+
62
+ assert_raises ArgumentError do
63
+ LibGems::Package::TarHeader.new :name => '', :size => '', :prefix => ''
64
+ end
65
+
66
+ assert_raises ArgumentError do
67
+ LibGems::Package::TarHeader.new :name => '', :prefix => '', :mode => ''
68
+ end
69
+
70
+ assert_raises ArgumentError do
71
+ LibGems::Package::TarHeader.new :prefix => '', :size => '', :mode => ''
72
+ end
73
+ end
74
+
75
+ def test_empty_eh
76
+ refute_empty @tar_header
77
+
78
+ @tar_header = LibGems::Package::TarHeader.new :name => 'x', :prefix => '',
79
+ :mode => 0, :size => 0,
80
+ :empty => true
81
+
82
+ assert_empty @tar_header
83
+ end
84
+
85
+ def test_equals2
86
+ assert_equal @tar_header, @tar_header
87
+ assert_equal @tar_header, @tar_header.dup
88
+ end
89
+
90
+ def test_to_s
91
+ expected = <<-EOF.split("\n").join
92
+ x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
93
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
94
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
95
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
96
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
97
+ \000\000\000\0000000644\0000001750\0000023420\00000000000144\00000000030071
98
+ \000012467\000 0link\000\000\000\000\000\000\000\000\000\000\000\000\000\000
99
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
100
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
101
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
102
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
103
+ \000\000\000\000\000\000ustar\00000user\000\000\000\000\000\000\000\000\000
104
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
105
+ group\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
106
+ \000\000\000\000\000\000\000\000\0000000001\0000000002\000y\000\000\000\000
107
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
108
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
109
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
110
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
111
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
112
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
113
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
114
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
115
+ \000\000\000\000\000\000\000\000\000\000
116
+ EOF
117
+
118
+ assert_headers_equal expected, @tar_header
119
+ end
120
+
121
+ def test_update_checksum
122
+ assert_equal '', @tar_header.checksum
123
+
124
+ @tar_header.update_checksum
125
+
126
+ assert_equal '012467', @tar_header.checksum
127
+ end
128
+
129
+ end
130
+
@@ -0,0 +1,112 @@
1
+ require File.expand_path('../gem_package_tar_test_case', __FILE__)
2
+ require 'libgems/package/tar_input'
3
+
4
+ class TestGemPackageTarInput < TarTestCase
5
+
6
+ # Sometimes the setgid bit doesn't take. Don't know if this is a problem on
7
+ # all systems, or just some. But for now, we will ignore it in the tests.
8
+ SETGID_BIT = 02000
9
+
10
+ def setup
11
+ super
12
+
13
+ inner_tar = tar_file_header("bla", "", 0612, 10)
14
+ inner_tar += "0123456789" + "\0" * 502
15
+ inner_tar += tar_file_header("foo", "", 0636, 5)
16
+ inner_tar += "01234" + "\0" * 507
17
+ inner_tar += tar_dir_header("__dir__", "", 0600)
18
+ inner_tar += "\0" * 1024
19
+ str = TempIO.new
20
+
21
+ begin
22
+ os = Zlib::GzipWriter.new str
23
+ os.write inner_tar
24
+ ensure
25
+ os.finish
26
+ end
27
+
28
+ str.rewind
29
+
30
+ @file = File.join @tempdir, 'bla.tar'
31
+
32
+ File.open @file, 'wb' do |f|
33
+ f.write tar_file_header("data.tar.gz", "", 0644, str.string.size)
34
+ f.write str.string
35
+ f.write "\0" * ((512 - (str.string.size % 512)) % 512 )
36
+
37
+ @spec = LibGems::Specification.new do |spec|
38
+ spec.author = "Mauricio :)"
39
+ end
40
+
41
+ meta = @spec.to_yaml
42
+
43
+ f.write tar_file_header("metadata", "", 0644, meta.size)
44
+ f.write meta + "\0" * (1024 - meta.size)
45
+ f.write "\0" * 1024
46
+ end
47
+
48
+ @entry_names = %w{bla foo __dir__}
49
+ @entry_sizes = [10, 5, 0]
50
+ #FIXME: are these modes system dependent?
51
+ @entry_modes = [0100612, 0100636, 040600]
52
+ @entry_files = %W[#{@tempdir}/bla #{@tempdir}/foo]
53
+ @entry_contents = %w[0123456789 01234]
54
+ end
55
+
56
+ def test_each_works
57
+ open @file, 'rb' do |io|
58
+ LibGems::Package::TarInput.open io do |tar_input|
59
+ count = 0
60
+
61
+ tar_input.each_with_index do |entry, i|
62
+ count = i
63
+
64
+ assert_kind_of LibGems::Package::TarReader::Entry, entry
65
+ assert_equal @entry_names[i], entry.header.name
66
+ assert_equal @entry_sizes[i], entry.header.size
67
+ end
68
+
69
+ assert_equal 2, count
70
+
71
+ assert_equal @spec, tar_input.metadata
72
+ end
73
+ end
74
+ end
75
+
76
+ def test_extract_entry_works
77
+ open @file, 'rb' do |io|
78
+ LibGems::Package::TarInput.open io do |tar_input|
79
+ assert_equal @spec, tar_input.metadata
80
+
81
+ count = 0
82
+
83
+ tar_input.each_with_index do |entry, i|
84
+ count = i
85
+ tar_input.extract_entry @tempdir, entry
86
+ name = File.join @tempdir, entry.header.name
87
+
88
+ if entry.directory? then
89
+ assert File.directory?(name)
90
+ else
91
+ assert File.file?(name)
92
+ assert_equal @entry_sizes[i], File.stat(name).size
93
+ #FIXME: win32? !!
94
+ end
95
+
96
+ unless LibGems.win_platform? then
97
+ assert_equal @entry_modes[i], File.stat(name).mode & (~SETGID_BIT)
98
+ end
99
+ end
100
+
101
+ assert_equal 2, count
102
+ end
103
+ end
104
+
105
+ @entry_files.each_with_index do |x, i|
106
+ assert File.file?(x)
107
+ assert_equal @entry_contents[i], LibGems.read_binary(x)
108
+ end
109
+ end
110
+
111
+ end
112
+
@@ -0,0 +1,97 @@
1
+ require File.expand_path('../gem_package_tar_test_case', __FILE__)
2
+ require 'libgems/package/tar_output'
3
+
4
+ class TestGemPackageTarOutput < TarTestCase
5
+
6
+ def setup
7
+ super
8
+
9
+ @file = File.join @tempdir, 'bla2.tar'
10
+ end
11
+
12
+ def test_self_open
13
+ open @file, 'wb' do |tar_io|
14
+ LibGems::Package::TarOutput.open tar_io do |tar_writer|
15
+ tar_writer.add_file_simple 'README', 0, 17 do |io|
16
+ io.write "This is a README\n"
17
+ end
18
+
19
+ tar_writer.metadata = "This is some metadata\n"
20
+ end
21
+ end
22
+
23
+ files = util_extract
24
+
25
+ name, data = files.shift
26
+ assert_equal 'data.tar.gz', name
27
+
28
+ gz = Zlib::GzipReader.new StringIO.new(data)
29
+
30
+ LibGems::Package::TarReader.new gz do |tar_reader|
31
+ tar_reader.each do |entry|
32
+ assert_equal 'README', entry.full_name
33
+ assert_equal "This is a README\n", entry.read
34
+ end
35
+ end
36
+
37
+ gz.close
38
+
39
+ name, data = files.shift
40
+ assert_equal 'metadata.gz', name
41
+
42
+ gz = Zlib::GzipReader.new StringIO.new(data)
43
+ assert_equal "This is some metadata\n", gz.read
44
+
45
+ assert_empty files
46
+ ensure
47
+ gz.close if gz
48
+ end
49
+
50
+ if defined? OpenSSL then
51
+ def test_self_open_signed
52
+ signer = LibGems::Security::Signer.new @private_key, [@public_cert]
53
+
54
+ open @file, 'wb' do |tar_io|
55
+ LibGems::Package::TarOutput.open tar_io, signer do |tar_writer|
56
+ tar_writer.add_file_simple 'README', 0, 17 do |io|
57
+ io.write "This is a README\n"
58
+ end
59
+
60
+ tar_writer.metadata = "This is some metadata\n"
61
+ end
62
+ end
63
+
64
+ files = util_extract
65
+
66
+ name, data = files.shift
67
+ assert_equal 'data.tar.gz', name
68
+
69
+ name, data = files.shift
70
+ assert_equal 'metadata.gz', name
71
+
72
+ name, data = files.shift
73
+ assert_equal 'data.tar.gz.sig', name
74
+
75
+ name, data = files.shift
76
+ assert_equal 'metadata.gz.sig', name
77
+
78
+ assert_empty files
79
+ end
80
+ end
81
+
82
+ def util_extract
83
+ files = []
84
+
85
+ open @file, 'rb' do |io|
86
+ LibGems::Package::TarReader.new io do |tar_reader|
87
+ tar_reader.each do |entry|
88
+ files << [entry.full_name, entry.read]
89
+ end
90
+ end
91
+ end
92
+
93
+ files
94
+ end
95
+
96
+ end
97
+
@@ -0,0 +1,46 @@
1
+ require File.expand_path('../gem_package_tar_test_case', __FILE__)
2
+ require 'libgems/package'
3
+
4
+ class TestGemPackageTarReader < TarTestCase
5
+
6
+ def test_each_entry
7
+ tar = tar_dir_header "foo", "bar", 0
8
+ tar << tar_file_header("bar", "baz", 0, 0)
9
+
10
+ io = TempIO.new tar
11
+
12
+ entries = 0
13
+
14
+ LibGems::Package::TarReader.new io do |tar_reader|
15
+ tar_reader.each_entry do |entry|
16
+ assert_kind_of LibGems::Package::TarReader::Entry, entry
17
+
18
+ entries += 1
19
+ end
20
+ end
21
+
22
+ assert_equal 2, entries
23
+ end
24
+
25
+ def test_rewind
26
+ content = ('a'..'z').to_a.join(" ")
27
+
28
+ str = tar_file_header("lib/foo", "", 010644, content.size) + content +
29
+ "\0" * (512 - content.size)
30
+ str << "\0" * 1024
31
+
32
+ LibGems::Package::TarReader.new(TempIO.new(str)) do |tar_reader|
33
+ 3.times do
34
+ tar_reader.rewind
35
+ i = 0
36
+ tar_reader.each_entry do |entry|
37
+ assert_equal(content, entry.read)
38
+ i += 1
39
+ end
40
+ assert_equal(1, i)
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+