Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/backup/dump/postgres_spec.rb')
-rw-r--r--spec/lib/backup/dump/postgres_spec.rb76
1 files changed, 61 insertions, 15 deletions
diff --git a/spec/lib/backup/dump/postgres_spec.rb b/spec/lib/backup/dump/postgres_spec.rb
index f6a68ab6db9..1da2ee950db 100644
--- a/spec/lib/backup/dump/postgres_spec.rb
+++ b/spec/lib/backup/dump/postgres_spec.rb
@@ -3,17 +3,22 @@
require 'spec_helper'
RSpec.describe Backup::Dump::Postgres, feature_category: :backup_restore do
- describe '#dump' do
- let(:pg_database) { 'gitlabhq_test' }
- let(:destination_dir) { Dir.mktmpdir }
- let(:db_file_name) { File.join(destination_dir, 'output.gz') }
+ let(:pg_database) { 'gitlabhq_test' }
+ let(:pg_dump) { ::Gitlab::Backup::Cli::Utils::PgDump.new(database_name: pg_database) }
+ let(:default_compression_cmd) { 'gzip -c -1' }
- let(:pipes) { IO.pipe }
- let(:gzip_pid) { spawn('gzip -c -1', in: pipes[0], out: [db_file_name, 'w', 0o600]) }
- let(:pg_dump_pid) { Process.spawn('pg_dump', *args, pg_database, out: pipes[1]) }
- let(:args) { ['--help'] }
+ subject(:postgres) { described_class.new }
- subject { described_class.new }
+ describe '#compress_cmd' do
+ it 'returns default compression command' do
+ expect(postgres.compress_cmd).to eq(default_compression_cmd)
+ end
+ end
+
+ describe '#dump' do
+ let(:pipes) { IO.pipe }
+ let(:destination_dir) { Dir.mktmpdir }
+ let(:dump_file_name) { File.join(destination_dir, 'output.gz') }
before do
allow(IO).to receive(:pipe).and_return(pipes)
@@ -23,14 +28,55 @@ RSpec.describe Backup::Dump::Postgres, feature_category: :backup_restore do
FileUtils.remove_entry destination_dir
end
- it 'creates gzipped dump using supplied arguments' do
- expect(subject).to receive(:spawn).with('gzip -c -1', in: pipes.first,
- out: [db_file_name, 'w', 0o600]).and_return(gzip_pid)
- expect(Process).to receive(:spawn).with('pg_dump', *args, pg_database, out: pipes[1]).and_return(pg_dump_pid)
+ context 'with default compression method' do
+ it 'creates a dump file' do
+ postgres.dump(dump_file_name, pg_dump)
+
+ expect(File.exist?(dump_file_name)).to eq(true)
+ end
+
+ it 'default compression command is used' do
+ compressor_pid = spawn(default_compression_cmd, in: pipes[0], out: [dump_file_name, 'w', 0o600])
+
+ expect(postgres).to receive(:spawn).with(
+ default_compression_cmd,
+ in: pipes.first,
+ out: [dump_file_name, 'w', 0o600]).and_return(compressor_pid)
+
+ postgres.dump(dump_file_name, pg_dump)
+
+ expect(File.exist?(dump_file_name)).to eq(true)
+ end
+ end
+
+ context 'when COMPRESS_CMD is set to tee' do
+ let(:tee_pid) { spawn('tee', in: pipes[0], out: [dump_file_name, 'w', 0o600]) }
+
+ before do
+ stub_env('COMPRESS_CMD', 'tee')
+ end
+
+ it 'creates a dump file' do
+ postgres.dump(dump_file_name, pg_dump)
+
+ expect(File.exist?(dump_file_name)).to eq(true)
+ end
+
+ it 'passes through tee instead of gzip' do
+ custom_compression_command = 'tee'
+ compressor_pid = spawn(custom_compression_command, in: pipes[0], out: [dump_file_name, 'w', 0o600])
+
+ expect(postgres).to receive(:spawn).with(
+ custom_compression_command,
+ in: pipes.first,
+ out: [dump_file_name, 'w', 0o600]).and_return(compressor_pid)
- subject.dump(pg_database, db_file_name, args)
+ expect do
+ postgres.dump(dump_file_name, pg_dump)
+ end.to output(/Using custom COMPRESS_CMD 'tee'/).to_stdout
- expect(File.exist?(db_file_name)).to eq(true)
+ expect(File.exist?(dump_file_name)).to eq(true)
+ end
end
end
end