Current section
Files
Jump to
Current section
Files
test/hasher_test.exs
defmodule Belt.Test.Hasher do
use ExUnit.Case
alias Belt.Hasher
@input "My name is Ozymandias, king of kings\nLook on my works, ye Mighty, and despair!"
@hash_md5_raw <<56, 114, 4, 250, 42, 43, 140, 166, 79, 12, 38, 163, 167, 231, 209, 181>>
@hash_md5_b32 "hbzaj6rkfogkmtyme2r2pz6rwu======"
@hash_md5_b64 "OHIE+iorjKZPDCajp+fRtQ=="
@hash_sha "7208ff22e6a465b2070b0130bce1f1d129745c1c"
@hash_sha256 "475b8d521b295900117d970d3243fcf7bef27fb1f6786ae3af619416d6a6584a"
setup_all do
timestamp = System.os_time()
file = System.tmp_dir!()
|> Path.join("hasher-test-#{timestamp}")
File.open!(file, [:write], fn(file) ->
IO.write(file, @input)
end)
on_exit(fn ->
File.rm!(file)
end)
{:ok, file: file}
end
test "hash a binary" do
md5_raw = Hasher.hash(@input, :md5, encoding: :raw)
assert md5_raw == @hash_md5_raw
md5_raw = Hasher.hash(@input, :md5, encoding: :base32)
assert md5_raw == @hash_md5_b32
md5_raw = Hasher.hash(@input, :md5, encoding: :base64)
assert md5_raw == @hash_md5_b64
sha = Hasher.hash(@input, :sha)
assert sha == @hash_sha
sha256_uppercase = Hasher.hash(@input, :sha256, case: :upper)
assert sha256_uppercase == String.upcase(@hash_sha256)
end
test "hashing with multiple algorithms" do
hashes = Hasher.hash(@input, [:sha, :sha256])
assert hashes == [@hash_sha, @hash_sha256]
end
test "hash a stream" do
{:ok, stream} = StringIO.open(@input)
sha = stream
|> IO.binstream(1)
|> Hasher.hash_stream(:sha)
assert sha == @hash_sha
end
test "hash a file", context do
sha = Hasher.hash_file(context[:file], :sha)
assert sha == @hash_sha
end
end