vaguerent/test/unit/vagrant/util/file_checksum_test.rb

50 lines
1.5 KiB
Ruby

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
require File.expand_path("../../../base", __FILE__)
require 'digest/md5'
require 'digest/sha1'
require 'vagrant/util/file_checksum'
describe FileChecksum do
include_context "unit"
let(:environment) { isolated_environment }
it "should return a valid checksum for a file" do
file = environment.workdir.join("file")
file.open("w+") { |f| f.write("HELLO!") }
# Check multiple digests
instance = described_class.new(file, Digest::MD5)
expect(instance.checksum).to eq("9ac96c64417b5976a58839eceaa77956")
instance = described_class.new(file, Digest::SHA1)
expect(instance.checksum).to eq("264b207c7913e461c43d0f63d2512f4017af4755")
end
it "should support initialize with class or string" do
file = environment.workdir.join("file")
file.open("w+") { |f| f.write("HELLO!") }
%w(md5 sha1 sha256 sha384 sha512).each do |type|
klass = Digest.const_get(type.upcase)
t_i = described_class.new(file, type)
k_i = described_class.new(file, klass)
expect(t_i.checksum).to eq(k_i.checksum)
end
end
context "with an invalid digest" do
let(:fake_digest) { :fake_digest }
it "should raise an exception if the box has an invalid checksum type" do
file = environment.workdir.join("file")
file.open("w+") { |f| f.write("HELLO!") }
expect{ described_class.new(file, fake_digest) }.to raise_error(Vagrant::Errors::BoxChecksumInvalidType)
end
end
end