Class: Gem::Package::TarTestCase
Overview
A test case for Gem::Package::Tar* classes
Constant Summary
Constants inherited
from TestCase
TestCase::PRIVATE_KEY_PASSPHRASE, TestCase::TEST_PATH
Instance Attribute Summary
Attributes inherited from TestCase
#fetcher, #gem_repo, #uri
Instance Method Summary
collapse
-
#ASCIIZ(str, length) ⇒ Object
-
#assert_headers_equal(expected, actual) ⇒ Object
-
#calc_checksum(header) ⇒ Object
-
#header(type, fname, dname, length, mode, mtime, checksum = nil, linkname = "") ⇒ Object
-
#SP(s) ⇒ Object
-
#SP_Z(s) ⇒ Object
-
#tar_dir_header(name, prefix, mode, mtime) ⇒ Object
-
#tar_file_header(fname, dname, mode, length, mtime) ⇒ Object
-
#tar_symlink_header(fname, prefix, mode, mtime, linkname) ⇒ Object
-
#to_oct(n, pad_size) ⇒ Object
-
#util_dir_entry ⇒ Object
-
#util_entry(tar) ⇒ Object
-
#util_symlink_entry ⇒ Object
-
#Z(s) ⇒ Object
Methods inherited from TestCase
#add_to_fetcher, #all_spec_names, #assert_activate, #assert_contains_make_command, #assert_directory_exists, #assert_path_exists, #bindir, #build_rake_in, cert_path, #common_installer_setup, #common_installer_teardown, #dep, #dependency_request, #enable_shared, #exeext, #git_gem, #have_git?, #in_path?, #install_default_gems, #install_default_specs, #install_gem, #install_gem_user, #install_specs, java_platform?, #java_platform?, key_path, load_cert, load_key, #loaded_spec_names, make_command, #make_command, #mu_pp, #new_default_spec, #nmake_found?, #parse_make_command_line, process_based_port, #process_based_port, #quick_gem, #read_binary, #read_cache, #refute_path_exists, #req, rubybin, #save_gemspec, #save_loaded_features, #scan_make_command_lines, #setup, #spec, #spec_fetcher, #teardown, #uninstall_gem, #unresolved_names, #util_build_gem, #util_clear_RUBY_VERSION, #util_clear_gems, #util_gem, #util_gzip, #util_make_gems, #util_remove_gem, #util_restore_RUBY_VERSION, #util_set_RUBY_VERSION, #util_set_arch, #util_setup_spec_fetcher, #util_spec, #util_zip, #v, #vc_windows?, vc_windows?, #vendor_gem, #vendordir, #wait_for_child_process_to_exit, win_platform?, #win_platform?, #write_file
Methods included from Deprecate
deprecate, skip, skip=, skip_during
ui, #ui, ui=, #ui=, use_ui, #use_ui
Methods included from Text
#clean_text, #format_text, #levenshtein_distance, #min3, #truncate_text
Instance Method Details
#ASCIIZ(str, length) ⇒ Object
10
11
12
|
# File 'lib/rubygems/package/tar_test_case.rb', line 10
def ASCIIZ(str, length)
str + "\0" * (length - str.length)
end
|
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
|
# File 'lib/rubygems/package/tar_test_case.rb', line 26
def (expected, actual)
expected = expected.to_s unless String === expected
actual = actual.to_s unless String === actual
fields = %w[
name 100
mode 8
uid 8
gid 8
size 12
mtime 12
checksum 8
typeflag 1
linkname 100
magic 6
version 2
uname 32
gname 32
devmajor 8
devminor 8
prefix 155
]
offset = 0
until fields.empty? do
name = fields.shift
length = fields.shift.to_i
if name == "checksum"
chksum_off = offset
offset += length
next
end
assert_equal expected[offset, length], actual[offset, length],
"Field #{name} of the tar header differs."
offset += length
end
assert_equal expected[chksum_off, 8], actual[chksum_off, 8]
end
|
#calc_checksum(header) ⇒ Object
70
71
72
73
|
# File 'lib/rubygems/package/tar_test_case.rb', line 70
def calc_checksum()
sum = .unpack("C*").inject{|s,a| s + a}
SP(Z(to_oct(sum, 6)))
end
|
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
|
# File 'lib/rubygems/package/tar_test_case.rb', line 75
def (type, fname, dname, length, mode, mtime, checksum = nil, linkname = "")
checksum ||= " " * 8
arr = [ ASCIIZ(fname, 100), Z(to_oct(mode, 7)), Z(to_oct(0, 7)), Z(to_oct(0, 7)), Z(to_oct(length, 11)), Z(to_oct(mtime, 11)), checksum, type, ASCIIZ(linkname, 100), "ustar\0", "00", ASCIIZ("wheel", 32), ASCIIZ("wheel", 32), Z(to_oct(0, 7)), Z(to_oct(0, 7)), ASCIIZ(dname, 155) ]
h = arr.join
ret = h + "\0" * (512 - h.size)
assert_equal(512, ret.size)
ret
end
|
#SP(s) ⇒ Object
14
15
16
|
# File 'lib/rubygems/package/tar_test_case.rb', line 14
def SP(s)
s + " "
end
|
#SP_Z(s) ⇒ Object
18
19
20
|
# File 'lib/rubygems/package/tar_test_case.rb', line 18
def SP_Z(s)
s + " \0"
end
|
103
104
105
106
107
|
# File 'lib/rubygems/package/tar_test_case.rb', line 103
def (name, prefix, mode, mtime)
h = ("5", name, prefix, 0, mode, mtime)
checksum = calc_checksum(h)
("5", name, prefix, 0, mode, mtime, checksum)
end
|
109
110
111
112
113
|
# File 'lib/rubygems/package/tar_test_case.rb', line 109
def (fname, dname, mode, length, mtime)
h = ("0", fname, dname, length, mode, mtime)
checksum = calc_checksum(h)
("0", fname, dname, length, mode, mtime, checksum)
end
|
115
116
117
118
119
|
# File 'lib/rubygems/package/tar_test_case.rb', line 115
def (fname, prefix, mode, mtime, linkname)
h = ("2", fname, prefix, 0, mode, mtime, nil, linkname)
checksum = calc_checksum(h)
("2", fname, prefix, 0, mode, mtime, checksum, linkname)
end
|
#to_oct(n, pad_size) ⇒ Object
121
122
123
|
# File 'lib/rubygems/package/tar_test_case.rb', line 121
def to_oct(n, pad_size)
"%0#{pad_size}o" % n
end
|
#util_dir_entry ⇒ Object
133
134
135
|
# File 'lib/rubygems/package/tar_test_case.rb', line 133
def util_dir_entry
util_entry ("foo", "bar", 0, Time.now)
end
|
#util_entry(tar) ⇒ Object
#util_symlink_entry ⇒ Object
137
138
139
|
# File 'lib/rubygems/package/tar_test_case.rb', line 137
def util_symlink_entry
util_entry ("foo", "bar", 0, Time.now, "link")
end
|
#Z(s) ⇒ Object
22
23
24
|
# File 'lib/rubygems/package/tar_test_case.rb', line 22
def Z(s)
s + "\0"
end
|