2017-07-06 06:22:44 -04:00
|
|
|
require "tmpdir"
|
|
|
|
require "service/shared_service_tests"
|
|
|
|
|
|
|
|
class ActiveStorage::Service::MirrorServiceTest < ActiveSupport::TestCase
|
|
|
|
PRIMARY_DISK_SERVICE = ActiveStorage::Service.configure(:Disk, root: File.join(Dir.tmpdir, "active_storage"))
|
2017-07-08 18:41:14 -04:00
|
|
|
MIRROR_SERVICES = (1..3).map do |i|
|
|
|
|
ActiveStorage::Service.configure(:Disk, root: File.join(Dir.tmpdir, "active_storage_mirror_#{i}"))
|
|
|
|
end
|
2017-07-06 06:22:44 -04:00
|
|
|
|
2017-07-08 18:41:14 -04:00
|
|
|
SERVICE = ActiveStorage::Service.configure :Mirror, primary: PRIMARY_DISK_SERVICE, mirrors: MIRROR_SERVICES
|
2017-07-06 06:22:44 -04:00
|
|
|
|
|
|
|
include ActiveStorage::Service::SharedServiceTests
|
|
|
|
|
2017-07-06 07:53:26 -04:00
|
|
|
test "uploading to all services" do
|
2017-07-06 06:22:44 -04:00
|
|
|
begin
|
|
|
|
data = "Something else entirely!"
|
2017-07-06 07:53:26 -04:00
|
|
|
key = upload(data, to: @service)
|
2017-07-06 06:22:44 -04:00
|
|
|
|
|
|
|
assert_equal data, PRIMARY_DISK_SERVICE.download(key)
|
2017-07-08 18:41:14 -04:00
|
|
|
MIRROR_SERVICES.each do |mirror|
|
|
|
|
assert_equal data, mirror.download(key)
|
|
|
|
end
|
2017-07-06 06:22:44 -04:00
|
|
|
ensure
|
|
|
|
@service.delete key
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-07-06 07:53:26 -04:00
|
|
|
test "downloading from primary service" do
|
|
|
|
data = "Something else entirely!"
|
|
|
|
key = upload(data, to: PRIMARY_DISK_SERVICE)
|
|
|
|
|
|
|
|
assert_equal data, @service.download(key)
|
|
|
|
end
|
|
|
|
|
|
|
|
test "deleting from all services" do
|
|
|
|
@service.delete FIXTURE_KEY
|
|
|
|
assert_not PRIMARY_DISK_SERVICE.exist?(FIXTURE_KEY)
|
2017-07-08 18:41:14 -04:00
|
|
|
MIRROR_SERVICES.each do |mirror|
|
|
|
|
assert_not mirror.exist?(FIXTURE_KEY)
|
|
|
|
end
|
2017-07-06 07:53:26 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "URL generation in primary service" do
|
|
|
|
travel_to Time.now do
|
|
|
|
assert_equal PRIMARY_DISK_SERVICE.url(FIXTURE_KEY, expires_in: 2.minutes, disposition: :inline, filename: "test.txt"),
|
|
|
|
@service.url(FIXTURE_KEY, expires_in: 2.minutes, disposition: :inline, filename: "test.txt")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-07-06 10:01:18 -04:00
|
|
|
private
|
|
|
|
def upload(data, to:)
|
|
|
|
SecureRandom.base58(24).tap do |key|
|
2017-07-08 18:41:14 -04:00
|
|
|
io = StringIO.new(data).tap(&:read)
|
|
|
|
@service.upload key, io, checksum: Digest::MD5.base64digest(data)
|
|
|
|
assert io.eof?
|
2017-07-06 10:01:18 -04:00
|
|
|
end
|
2017-07-06 07:53:26 -04:00
|
|
|
end
|
2017-07-06 06:22:44 -04:00
|
|
|
end
|