backup restorer: tidy pg_dump schema portability logic, add test

This commit is contained in:
Michael Brown 2018-03-15 18:09:06 -04:00 committed by Guo Xiang Tan
parent 463d6a057c
commit 63a1e9b60a
2 changed files with 34 additions and 14 deletions

View File

@ -8,6 +8,22 @@ module BackupRestore
class Restorer
attr_reader :success
def self.pg_produces_portable_dump?(version)
version = Gem::Version.new(version)
%w{
10.3
9.6.8
9.5.12
9.4.17
9.3.22
}.each do |unportable_version|
return false if Gem::Dependency.new("", "~> #{unportable_version}").match?("", version)
end
true
end
def initialize(user_id, opts = {})
@user_id = user_id
@client_id = opts[:client_id]
@ -266,20 +282,7 @@ module BackupRestore
end
def can_restore_into_different_schema?
dumped_by_version = Gem::Version.new(get_dumped_by_version)
return false if dumped_by_version >= Gem::Version.new("10.3")
%w{
9.6.8
9.5.12
9.4.17
9.3.22
}.each do |version|
return false if Gem::Dependency.new("", "~> #{version}").match?("", dumped_by_version)
end
true
self.class.pg_produces_portable_dump?(get_dumped_by_version)
end
def restore_dump_command

View File

@ -0,0 +1,17 @@
require 'rails_helper'
describe BackupRestore::Restorer do
it 'detects which pg_dump output is restorable to different schemas' do
{
"9.6.7" => true,
"9.6.8" => false,
"9.6.9" => false,
"10.2" => true,
"10.3" => false,
"10.3.1" => false,
"10.4" => false,
}.each do |key, value|
expect(described_class.pg_produces_portable_dump?(key)).to eq(value)
end
end
end