PageRenderTime 36ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/test/digest/test_digest.rb

https://github.com/ahwuyeah/ruby
Ruby | 201 lines | 158 code | 37 blank | 6 comment | 7 complexity | 8626e87a404b57ba7d5ef42e5f9361de MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-3.0, Unlicense, GPL-2.0
  1. #!/usr/bin/env ruby
  2. #
  3. # $RoughId: test.rb,v 1.4 2001/07/13 15:38:27 knu Exp $
  4. # $Id$
  5. require 'test/unit'
  6. require 'tempfile'
  7. require 'digest'
  8. %w[digest/md5 digest/rmd160 digest/sha1 digest/sha2 digest/bubblebabble].each do |lib|
  9. begin
  10. require lib
  11. rescue LoadError
  12. end
  13. end
  14. module TestDigest
  15. Data1 = "abc"
  16. Data2 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
  17. def test_s_new
  18. self.class::DATA.each do |str, hexdigest|
  19. assert_raise(ArgumentError) { self.class::ALGO.new("") }
  20. end
  21. end
  22. def test_s_hexdigest
  23. self.class::DATA.each do |str, hexdigest|
  24. actual = self.class::ALGO.hexdigest(str)
  25. assert_equal(hexdigest, actual)
  26. assert_equal(Encoding::US_ASCII, actual.encoding)
  27. end
  28. end
  29. def test_s_base64digest
  30. self.class::DATA.each do |str, hexdigest|
  31. digest = [hexdigest].pack("H*")
  32. actual = self.class::ALGO.base64digest(str)
  33. assert_equal([digest].pack("m0"), actual)
  34. assert_equal(Encoding::US_ASCII, actual.encoding)
  35. end
  36. end
  37. def test_s_digest
  38. self.class::DATA.each do |str, hexdigest|
  39. digest = [hexdigest].pack("H*")
  40. actual = self.class::ALGO.digest(str)
  41. assert_equal(digest, actual)
  42. assert_equal(Encoding::BINARY, actual.encoding)
  43. end
  44. end
  45. def test_update
  46. # This test is also for digest() and hexdigest()
  47. str = "ABC"
  48. md = self.class::ALGO.new
  49. md.update str
  50. assert_equal(self.class::ALGO.hexdigest(str), md.hexdigest)
  51. assert_equal(self.class::ALGO.digest(str), md.digest)
  52. end
  53. def test_eq
  54. # This test is also for clone()
  55. md1 = self.class::ALGO.new
  56. md1 << "ABC"
  57. assert_equal(md1, md1.clone, self.class::ALGO)
  58. bug9913 = '[ruby-core:62967] [Bug #9913]'
  59. assert_not_equal(md1, nil, bug9913)
  60. md2 = self.class::ALGO.new
  61. md2 << "A"
  62. assert_not_equal(md1, md2, self.class::ALGO)
  63. md2 << "BC"
  64. assert_equal(md1, md2, self.class::ALGO)
  65. end
  66. def test_s_file
  67. Tempfile.create("test_digest_file", mode: File::BINARY) { |tmpfile|
  68. str = "hello, world.\r\n"
  69. tmpfile.print str
  70. tmpfile.close
  71. assert_equal self.class::ALGO.new.update(str), self.class::ALGO.file(tmpfile.path)
  72. }
  73. end
  74. def test_instance_eval
  75. assert_nothing_raised {
  76. self.class::ALGO.new.instance_eval { update "a" }
  77. }
  78. end
  79. def test_alignment
  80. md = self.class::ALGO.new
  81. assert_nothing_raised('#4320') {
  82. md.update('a' * 97)
  83. md.update('a' * 97)
  84. md.hexdigest
  85. }
  86. end
  87. def test_bubblebabble
  88. expected = "xirek-hasol-fumik-lanax"
  89. assert_equal expected, Digest.bubblebabble('message')
  90. end
  91. def test_bubblebabble_class
  92. expected = "xopoh-fedac-fenyh-nehon-mopel-nivor-lumiz-rypon-gyfot-cosyz-rimez-lolyv-pekyz-rosud-ricob-surac-toxox"
  93. assert_equal expected, Digest::SHA256.bubblebabble('message')
  94. end
  95. def test_bubblebabble_instance
  96. expected = "xumor-boceg-dakuz-sulic-gukoz-rutas-mekek-zovud-gunap-vabov-genin-rygyg-sanun-hykac-ruvah-dovah-huxex"
  97. hash = Digest::SHA256.new
  98. assert_equal expected, hash.bubblebabble
  99. end
  100. class TestMD5 < Test::Unit::TestCase
  101. include TestDigest
  102. ALGO = Digest::MD5
  103. DATA = {
  104. Data1 => "900150983cd24fb0d6963f7d28e17f72",
  105. Data2 => "8215ef0796a20bcaaae116d3876c664a",
  106. }
  107. end if defined?(Digest::MD5)
  108. class TestSHA1 < Test::Unit::TestCase
  109. include TestDigest
  110. ALGO = Digest::SHA1
  111. DATA = {
  112. Data1 => "a9993e364706816aba3e25717850c26c9cd0d89d",
  113. Data2 => "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
  114. }
  115. end if defined?(Digest::SHA1)
  116. class TestSHA256 < Test::Unit::TestCase
  117. include TestDigest
  118. ALGO = Digest::SHA256
  119. DATA = {
  120. Data1 => "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
  121. Data2 => "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
  122. }
  123. end if defined?(Digest::SHA256)
  124. class TestSHA384 < Test::Unit::TestCase
  125. include TestDigest
  126. ALGO = Digest::SHA384
  127. DATA = {
  128. Data1 => "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7",
  129. Data2 => "3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b",
  130. }
  131. end if defined?(Digest::SHA384)
  132. class TestSHA512 < Test::Unit::TestCase
  133. include TestDigest
  134. ALGO = Digest::SHA512
  135. DATA = {
  136. Data1 => "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
  137. Data2 => "204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445",
  138. }
  139. end if defined?(Digest::SHA512)
  140. class TestSHA2 < Test::Unit::TestCase
  141. def test_s_file
  142. Tempfile.create("test_digest_file") { |tmpfile|
  143. str = Data1
  144. tmpfile.print str
  145. tmpfile.close
  146. assert_equal "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7", Digest::SHA2.file(tmpfile.path, 384).hexdigest
  147. }
  148. end
  149. end if defined?(Digest::SHA2)
  150. class TestRMD160 < Test::Unit::TestCase
  151. include TestDigest
  152. ALGO = Digest::RMD160
  153. DATA = {
  154. Data1 => "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc",
  155. Data2 => "12a053384a9c0c88e405a06c27dcf49ada62eb2b",
  156. }
  157. end if defined?(Digest::RMD160)
  158. class TestBase < Test::Unit::TestCase
  159. def test_base
  160. bug3810 = '[ruby-core:32231]'
  161. assert_raise(NotImplementedError, bug3810) {Digest::Base.new}
  162. end
  163. end
  164. end