x-pack/spec/geoip_database_management/metadata_spec.rb (68 lines of code) (raw):
# # Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# # or more contributor license agreements. Licensed under the Elastic License;
# # you may not use this file except in compliance with the Elastic License.
require 'geoip_database_management/manager'
require 'geoip_database_management/metadata'
require 'geoip_database_management/data_path'
require 'geoip_database_management/util'
describe LogStash::GeoipDatabaseManagement::Metadata, :aggregate_failures do
let(:temp_metadata_path) { Stud::Temporary.directory }
let(:data_path) { LogStash::GeoipDatabaseManagement::DataPath.new(temp_metadata_path) }
let(:dbm) { described_class.new(data_path) }
let(:logger) { double("Logger").as_null_object }
context "get all" do
it "returns multiple rows" do
dbm.save_metadata(LogStash::GeoipDatabaseManagement::CITY, "#{Time.now.to_i - 1}", gz_md5: SecureRandom.hex(40))
dbm.save_metadata(LogStash::GeoipDatabaseManagement::ASN, "#{Time.now.to_i}", gz_md5: SecureRandom.hex(40))
expect(dbm.get_all.size).to eq(2)
end
end
context "get metadata" do
context "when populated file exists" do
before(:each) do
dbm.save_metadata(LogStash::GeoipDatabaseManagement::CITY, "#{Time.now.to_i - 1}", gz_md5: SecureRandom.hex(40))
dbm.save_metadata(LogStash::GeoipDatabaseManagement::ASN, "#{Time.now.to_i}", gz_md5: SecureRandom.hex(40))
end
it "returns matching metadata" do
city_rows = dbm.get_metadata(LogStash::GeoipDatabaseManagement::CITY)
expect(city_rows.size).to eq(1)
expect(city_rows).to all satisfy {|row| row[described_class::Column::DATABASE_TYPE] == LogStash::GeoipDatabaseManagement::CITY }
asn_rows = dbm.get_metadata(LogStash::GeoipDatabaseManagement::ASN)
expect(asn_rows.size).to eq(1)
expect(asn_rows).to all satisfy {|row| row[described_class::Column::DATABASE_TYPE] == LogStash::GeoipDatabaseManagement::ASN }
end
end
context "when file does not exist" do
it "returns empty results" do
city_rows = dbm.get_metadata(LogStash::GeoipDatabaseManagement::CITY)
expect(city_rows).to be_empty
asn_rows = dbm.get_metadata(LogStash::GeoipDatabaseManagement::ASN)
expect(asn_rows).to be_empty
end
end
context "when empty file exists" do
before(:each) do
FileUtils.touch(temp_metadata_path)
end
it "returns empty results" do
city_rows = dbm.get_metadata(LogStash::GeoipDatabaseManagement::CITY)
expect(city_rows).to be_empty
asn_rows = dbm.get_metadata(LogStash::GeoipDatabaseManagement::ASN)
expect(asn_rows).to be_empty
end
end
context "saving" do
let(:database_dirname) { "#{Time.now.to_i}" }
let(:database_gz_md5) { "1bad1dea" }
let(:database_db_md5) { "0f1c1a17" }
before(:each) do
dbm.save_metadata(LogStash::GeoipDatabaseManagement::CITY, database_dirname, gz_md5: database_gz_md5)
end
it "saves the metadata" do
metadata = dbm.get_metadata(LogStash::GeoipDatabaseManagement::CITY).last
expect(metadata[described_class::Column::DATABASE_TYPE]).to eq(LogStash::GeoipDatabaseManagement::CITY)
check_at = metadata[described_class::Column::CHECK_AT]
expect(Time.now.to_i - check_at.to_i).to be < 100
expect(metadata[described_class::Column::DIRNAME]).to eq(database_dirname)
expect(metadata[described_class::Column::GZ_MD5]).to eq(database_gz_md5)
end
end
end
end