Skip to content

Commit e079dd7

Browse files
authored
Merge pull request #144 from mlibrary/checksums
AIM-38 Generate checksum.md5 files
2 parents 4cc87a7 + d7aeec3 commit e079dd7

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed

config/config.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,8 @@ stages:
1818
- name: Postflight
1919
class: Postflight
2020
file: postflight
21+
- name: GenerateChecksums
22+
class: GenerateChecksums
23+
file: generate_checksums
2124

2225

lib/stage/generate_checksums.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/usr/bin/env ruby
2+
# frozen_string_literal: true
3+
4+
require "stage"
5+
6+
module ChecksumFileGenerator
7+
def self.write(path)
8+
FileUtils.cd(path) do
9+
`md5sum * > checksum.md5`
10+
end
11+
end
12+
end
13+
14+
class GenerateChecksums < Stage
15+
def run(agenda)
16+
@bar.steps = shipment.objid_directories.count
17+
shipment.objid_directories.each_with_index do |dir, i|
18+
@bar.step! i, dir
19+
remove_existing_checksum_file(dir)
20+
ChecksumFileGenerator.write(dir)
21+
end
22+
end
23+
24+
private
25+
26+
def remove_existing_checksum_file(dir)
27+
checksum_file_path = File.join(dir, "checksum.md5")
28+
FileUtils.rm_f(checksum_file_path) if File.exist?(checksum_file_path)
29+
end
30+
end
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
describe ChecksumFileGenerator do
2+
include_context "uses temp dir"
3+
context ".write" do
4+
it "writes an checksum.md5 file for files in a given directory" do
5+
FileUtils.cp("spec/fixtures/10_10_8_400.jp2", temp_dir_path)
6+
described_class.write(temp_dir_path)
7+
checksum_contents = File.read(File.join(temp_dir_path, "checksum.md5"))
8+
expect(checksum_contents).to include(" 10_10_8_400.jp2")
9+
end
10+
end
11+
end
12+
13+
describe GenerateChecksums do
14+
include_context "uses temp dir"
15+
let(:barcode) { "39015002231713" }
16+
let(:shipment_path) { "#{temp_dir_path}/test_shipment" }
17+
let(:item_path) { "#{shipment_path}/#{barcode}" }
18+
let(:shipment) { Shipment.new(shipment_path) }
19+
subject do
20+
described_class.new(shipment, config: Config.new({no_progress: true}))
21+
end
22+
23+
def set_up_shipment
24+
FileUtils.mkdir_p(item_path)
25+
FileUtils.cp("spec/fixtures/10_10_8_400.jp2", item_path)
26+
end
27+
28+
it "creates a checksum file" do
29+
set_up_shipment
30+
31+
subject.run!
32+
checksum_contents = File.read(File.join(item_path, "checksum.md5"))
33+
expect(checksum_contents).to include(" 10_10_8_400.jp2")
34+
end
35+
36+
it "original checksum file is removed before calculating checksum" do
37+
set_up_shipment
38+
FileUtils.touch("#{item_path}/checksum.md5")
39+
subject.run!
40+
checksum_contents = File.read(File.join(item_path, "checksum.md5"))
41+
expect(checksum_contents).to include(" 10_10_8_400.jp2")
42+
expect(checksum_contents).not_to include(" checksum.md5")
43+
end
44+
end

0 commit comments

Comments
 (0)