REFACTOR: Simplify backup version check

Adds specs for inalid version number in metadata file.
Follow-up to c3cd2389fe
This commit is contained in:
Gerhard Schlager 2020-01-15 16:41:02 +01:00
parent 135d09d671
commit 68a7ae3091
2 changed files with 58 additions and 37 deletions

View File

@ -19,11 +19,7 @@ module BackupRestore
def validate def validate
metadata = extract_metadata metadata = extract_metadata
if metadata[:version].blank? if !metadata[:version].is_a?(Integer)
raise MetaDataError.new("Version not defined in metadata file.")
end
if !metadata[:version].is_a?(String) && !metadata[:version].is_a?(Integer)
raise MetaDataError.new("Version is not in a valid format.") raise MetaDataError.new("Version is not in a valid format.")
end end

View File

@ -23,52 +23,77 @@ describe BackupRestore::MetaDataHandler do
BackupRestore::MetaDataHandler.new(logger, filename, tmp_directory).validate BackupRestore::MetaDataHandler.new(logger, filename, tmp_directory).validate
end end
it "extracts metadata from file when metadata file exists" do context "metadata file" do
metadata = '{"source":"discourse","version":20160329101122}' it "extracts metadata from file when metadata file exists" do
metadata = '{"source":"discourse","version":20160329101122}'
with_metadata_file(metadata) do |dir| with_metadata_file(metadata) do |dir|
expect(validate_metadata(backup_filename, dir)) expect(validate_metadata(backup_filename, dir))
.to include(version: 20160329101122) .to include(version: 20160329101122)
end
end
it "raises an exception when the metadata file contains invalid JSON" do
currupt_metadata = '{"version":20160329101122'
with_metadata_file(currupt_metadata) do |dir|
expect { validate_metadata(backup_filename, dir) }
.to raise_error(BackupRestore::MetaDataError)
end
end
it "raises an exception when the metadata file is empty" do
with_metadata_file('') do |dir|
expect { validate_metadata(backup_filename, dir) }
.to raise_error(BackupRestore::MetaDataError)
end
end
it "raises an exception when the metadata file contains an invalid version number" do
metadata = '{"source":"discourse","version":"1abcdefghijklm"}'
with_metadata_file(metadata) do |dir|
expect { validate_metadata(backup_filename, dir) }
.to raise_error(BackupRestore::MetaDataError)
end
end
it "raises an exception when the metadata file contains an empty version number" do
metadata = '{"source":"discourse","version":""}'
with_metadata_file(metadata) do |dir|
expect { validate_metadata(backup_filename, dir) }
.to raise_error(BackupRestore::MetaDataError)
end
end end
end end
it "extracts metadata from filename when metadata file does not exist" do context "filename" do
with_metadata_file(nil) do |dir| it "extracts metadata from filename when metadata file does not exist" do
expect(validate_metadata(backup_filename, dir)) with_metadata_file(nil) do |dir|
.to include(version: 20191108000414) expect(validate_metadata(backup_filename, dir))
.to include(version: 20191108000414)
end
end end
end
it "raises an exception when the metadata file contains invalid JSON" do it "raises an exception when the filename contains no version number" do
currupt_metadata = '{"version":20160329101122' filename = 'discourse-2019-11-18-143242.tar.gz'
with_metadata_file(currupt_metadata) do |dir| expect { validate_metadata(filename, nil) }
expect { validate_metadata(backup_filename, dir) }
.to raise_error(BackupRestore::MetaDataError) .to raise_error(BackupRestore::MetaDataError)
end end
end
it "raises an exception when the metadata file is empty" do it "raises an exception when the filename contains an invalid version number" do
with_metadata_file('') do |dir| filename = 'discourse-2019-11-18-143242-v123456789.tar.gz'
expect { validate_metadata(backup_filename, dir) } expect { validate_metadata(filename, nil) }
.to raise_error(BackupRestore::MetaDataError)
filename = 'discourse-2019-11-18-143242-v1abcdefghijklm.tar.gz'
expect { validate_metadata(filename, nil) }
.to raise_error(BackupRestore::MetaDataError) .to raise_error(BackupRestore::MetaDataError)
end end
end end
it "raises an exception when the filename contains no version number" do
filename = 'discourse-2019-11-18-143242.tar.gz'
expect { validate_metadata(filename, nil) }
.to raise_error(BackupRestore::MetaDataError)
end
it "raises an exception when the filename contains an invalid version number" do
filename = 'discourse-2019-11-18-143242-v123456789.tar.gz'
expect { validate_metadata(filename, nil) }
.to raise_error(BackupRestore::MetaDataError)
end
it "raises an exception when the backup's version is newer than the current version" do it "raises an exception when the backup's version is newer than the current version" do
new_backup_filename = 'discourse-2019-11-18-143242-v20191113193141.sql.gz' new_backup_filename = 'discourse-2019-11-18-143242-v20191113193141.sql.gz'