mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-23 23:04:48 +08:00
This commit introduces new features and utilities related to the backup and restore system that make use of remote URLs: - `discourse restore` accepts a URL to a backup file - `discourse backup_url` generates a URL of a backup file (S3 only) - `discourse import_backup_url` downloads a backup file from a URL to the configured backup store This can be used to move content between two Discourse instances by backing up the entire site, copying the backup URL, importing or restoring it on the other instance.
69 lines
2.1 KiB
Ruby
Vendored
69 lines
2.1 KiB
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
require_relative "shared_context_for_backup_restore"
|
|
|
|
RSpec.describe BackupRestore::BackupFileHandler do
|
|
include_context "with shared backup restore context"
|
|
|
|
it "works with current backup file format" do
|
|
expect_decompress_and_clean_up_to_work(
|
|
backup_filename: "backup_since_v1.6.tar.gz",
|
|
require_metadata_file: false,
|
|
require_uploads: true,
|
|
)
|
|
end
|
|
|
|
it "works with URLs" do
|
|
expect_decompress_and_clean_up_to_work(
|
|
backup_filename: "backup_since_v1.6.tar.gz",
|
|
url: "https://example.com/backups/backup_since_v1.6.tar.gz",
|
|
require_metadata_file: false,
|
|
require_uploads: true,
|
|
)
|
|
end
|
|
|
|
it "works with SQL only backup file" do
|
|
expect_decompress_and_clean_up_to_work(
|
|
backup_filename: "sql_only_backup.sql.gz",
|
|
expected_dump_filename: "sql_only_backup.sql",
|
|
require_metadata_file: false,
|
|
require_uploads: false,
|
|
)
|
|
end
|
|
|
|
it "works with backup file which uses wrong upload path" do
|
|
expect_decompress_and_clean_up_to_work(
|
|
backup_filename: "backup_with_wrong_upload_path.tar.gz",
|
|
require_metadata_file: false,
|
|
require_uploads: true,
|
|
expected_upload_paths: %w[
|
|
uploads/default/original/1X/both.txt
|
|
uploads/default/original/1X/only-uploads.txt
|
|
uploads/default/original/1X/only-var.txt
|
|
],
|
|
) do |upload_path|
|
|
content = File.read(upload_path).chomp
|
|
|
|
case File.basename(upload_path)
|
|
when "both.txt", "only-var.txt"
|
|
expect(content).to eq("var")
|
|
when "only-uploads.txt"
|
|
expect(content).to eq("uploads")
|
|
end
|
|
end
|
|
end
|
|
|
|
it "allows overriding the backup store" do
|
|
SiteSetting.s3_backup_bucket = "s3-backup-bucket"
|
|
SiteSetting.s3_access_key_id = "s3-access-key-id"
|
|
SiteSetting.s3_secret_access_key = "s3-secret-access-key"
|
|
SiteSetting.backup_location = BackupLocationSiteSetting::S3
|
|
|
|
expect_decompress_and_clean_up_to_work(
|
|
backup_filename: "backup_since_v1.6.tar.gz",
|
|
require_metadata_file: false,
|
|
require_uploads: true,
|
|
location: BackupLocationSiteSetting::LOCAL,
|
|
)
|
|
end
|
|
end
|