1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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
|
require "spec_helper"
describe Mixlib::Archive::Tar do
let(:tar_archive) { "../fixtures/test.tar" }
let(:tgz_archive) { "../fixtures/test.tgz" }
let(:tar_gz_archive) { "../fixtures/test.tar.gz" }
let(:extraction) { lambda { |f| } }
let(:destination) { Dir.mktmpdir }
let(:gzip_header) { [0x1F, 0x8B].pack("C*") }
before do
allow(IO).to receive(:binread).and_return(nil)
end
after do
FileUtils.remove_entry destination
end
describe "#reader" do
let(:raw) { double(File, closed?: true) }
before do
allow(Gem::Package::TarReader).to receive(:new).with(raw, &extraction).and_return(true)
end
context "with a gzipped file" do
before do
allow(IO).to receive(:binread).and_return(gzip_header)
end
it "creates the correct reader for a .tgz file" do
extractor = described_class.new(tgz_archive)
expect(File).to receive(:open).with(tgz_archive, "rb").and_return(raw)
expect(Zlib::GzipReader).to receive(:wrap).with(raw).and_return(raw)
extractor.send(:reader, &extraction)
end
it "creates the correct reader for a .tar.gz file" do
extractor = described_class.new(tar_gz_archive)
expect(File).to receive(:open).with(tar_gz_archive, "rb").and_return(raw)
expect(Zlib::GzipReader).to receive(:wrap).with(raw).and_return(raw)
extractor.send(:reader, &extraction)
end
end
context "with a regular tar file" do
let(:extractor) { described_class.new(tar_archive) }
it "creates the correct reader" do
expect(File).to receive(:open).with(tar_archive, "rb").and_return(raw)
extractor.send(:reader, &extraction)
end
end
end
end
|