2014-09-25 04:52:09 +08:00
|
|
|
require "s3_helper"
|
2015-10-11 17:41:23 +08:00
|
|
|
require "rails_helper"
|
2014-09-25 04:52:09 +08:00
|
|
|
|
|
|
|
describe "S3Helper" do
|
2018-09-17 08:57:50 +08:00
|
|
|
before(:each) do
|
|
|
|
SiteSetting.enable_s3_uploads = true
|
|
|
|
SiteSetting.s3_access_key_id = "abc"
|
|
|
|
SiteSetting.s3_secret_access_key = "def"
|
2014-09-25 04:52:09 +08:00
|
|
|
|
2018-09-17 08:57:50 +08:00
|
|
|
@lifecycle = <<~XML
|
2017-11-13 12:36:45 +08:00
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
|
|
|
|
<Rule>
|
|
|
|
<ID>old_rule</ID>
|
|
|
|
<Prefix>projectdocs/</Prefix>
|
|
|
|
<Status>Enabled</Status>
|
|
|
|
<Expiration>
|
|
|
|
<Days>3650</Days>
|
|
|
|
</Expiration>
|
|
|
|
</Rule>
|
|
|
|
<Rule>
|
|
|
|
<ID>purge-tombstone</ID>
|
|
|
|
<Prefix>test/</Prefix>
|
|
|
|
<Status>Enabled</Status>
|
|
|
|
<Expiration>
|
|
|
|
<Days>3650</Days>
|
|
|
|
</Expiration>
|
|
|
|
</Rule>
|
|
|
|
</LifecycleConfiguration>
|
|
|
|
XML
|
2018-09-17 08:57:50 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "can correctly set the purge policy" do
|
|
|
|
SiteSetting.s3_configure_tombstone_policy = true
|
|
|
|
|
|
|
|
stub_request(:get, "http://169.254.169.254/latest/meta-data/iam/security-credentials/").
|
|
|
|
to_return(status: 404, body: "", headers: {})
|
2017-11-13 12:36:45 +08:00
|
|
|
|
|
|
|
stub_request(:get, "https://bob.s3.amazonaws.com/?lifecycle").
|
2018-09-17 08:57:50 +08:00
|
|
|
to_return(status: 200, body: @lifecycle, headers: {})
|
2017-11-13 12:36:45 +08:00
|
|
|
|
|
|
|
stub_request(:put, "https://bob.s3.amazonaws.com/?lifecycle").
|
|
|
|
with do |req|
|
|
|
|
|
|
|
|
hash = Hash.from_xml(req.body.to_s)
|
|
|
|
rules = hash["LifecycleConfiguration"]["Rule"]
|
|
|
|
|
|
|
|
expect(rules.length).to eq(2)
|
2018-09-17 08:57:50 +08:00
|
|
|
expect(rules[1]["Expiration"]["Days"]).to eq("100")
|
2017-11-13 12:36:45 +08:00
|
|
|
# fixes the bad filter
|
|
|
|
expect(rules[0]["Filter"]["Prefix"]).to eq("projectdocs/")
|
|
|
|
end.to_return(status: 200, body: "", headers: {})
|
|
|
|
|
2018-09-17 08:57:50 +08:00
|
|
|
helper = S3Helper.new('bob', 'tomb')
|
|
|
|
helper.update_tombstone_lifecycle(100)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "can skip policy update when s3_configure_tombstone_policy is false" do
|
|
|
|
SiteSetting.s3_configure_tombstone_policy = false
|
2017-11-13 12:36:45 +08:00
|
|
|
|
|
|
|
helper = S3Helper.new('bob', 'tomb')
|
|
|
|
helper.update_tombstone_lifecycle(100)
|
|
|
|
end
|
|
|
|
|
2018-09-10 16:34:40 +08:00
|
|
|
describe '#list' do
|
|
|
|
it 'creates the prefix correctly' do
|
|
|
|
{
|
|
|
|
'some/bucket' => 'bucket/testing',
|
|
|
|
'some' => 'testing'
|
|
|
|
}.each do |bucket_name, prefix|
|
|
|
|
s3_helper = S3Helper.new(bucket_name)
|
|
|
|
bucket = stub('s3_bucket')
|
|
|
|
s3_helper.expects(:s3_bucket).returns(bucket)
|
|
|
|
bucket.expects(:objects).with(prefix: prefix)
|
|
|
|
s3_helper.list('testing')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2014-09-25 04:52:09 +08:00
|
|
|
end
|