# 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