Consider that the metadata has changed when the Last-Modified changes

Also adds a spec for it
This commit is contained in:
Greg Karékinian 2018-04-30 16:39:12 +02:00
parent ca0127d6a6
commit f14ef4dc21
4 changed files with 26 additions and 2 deletions

View File

@ -289,10 +289,9 @@ module RemoteStorage
def metadata_changed?(old_metadata, new_metadata) def metadata_changed?(old_metadata, new_metadata)
# check metadata relevant to the directory listing # check metadata relevant to the directory listing
# ie. the timestamp (m) is not relevant, because it's not used in
# the listing
return old_metadata["e"] != new_metadata[:e] || return old_metadata["e"] != new_metadata[:e] ||
old_metadata["s"] != new_metadata[:s].to_s || old_metadata["s"] != new_metadata[:s].to_s ||
old_metadata["m"] != new_metadata[:m] ||
old_metadata["t"] != new_metadata[:t] old_metadata["t"] != new_metadata[:t]
end end

View File

@ -24,6 +24,14 @@ describe "S3 provider" do
stub_request(:put, "#{container_url_for("phil")}/food/aguacate"). stub_request(:put, "#{container_url_for("phil")}/food/aguacate").
with(body: "muy deliciosa"). with(body: "muy deliciosa").
to_return(status: 200, headers: { etag: '"0815etag"' }) to_return(status: 200, headers: { etag: '"0815etag"' })
stub_request(:put, "#{container_url_for("phil")}/food/banano").
with(body: "si").
to_return(status: 200, headers: { etag: '"0815etag"' })
stub_request(:put, "#{container_url_for("phil")}/food/banano").
with(body: "oh, no").
to_return(status: 200, headers: { etag: '"0817etag"' })
stub_request(:head, "#{container_url_for("phil")}/food/banano").
to_return(status: 200, headers: { last_modified: "Fri, 04 Mar 2016 12:20:20 GMT" })
stub_request(:head, "#{container_url_for("phil")}/food/aguacate"). stub_request(:head, "#{container_url_for("phil")}/food/aguacate").
to_return(status: 200, headers: { last_modified: "Fri, 04 Mar 2016 12:20:18 GMT" }) to_return(status: 200, headers: { last_modified: "Fri, 04 Mar 2016 12:20:18 GMT" })
stub_request(:delete, "#{container_url_for("phil")}/food/aguacate"). stub_request(:delete, "#{container_url_for("phil")}/food/aguacate").

View File

@ -38,6 +38,17 @@ shared_examples_for 'a REST adapter' do
metadata["m"].length.must_equal 13 metadata["m"].length.must_equal 13
end end
it "updates the metadata object in redis when it changes" do
put "/phil/food/banano", "si"
put "/phil/food/banano", "oh, no"
metadata = redis.hgetall "rs:m:phil:food/banano"
metadata["s"].must_equal "6"
metadata["t"].must_equal "text/plain; charset=utf-8"
metadata["e"].must_equal "0817etag"
metadata["m"].must_equal "1457094020000"
end
it "creates the directory objects metadata in redis" do it "creates the directory objects metadata in redis" do
put "/phil/food/aguacate", "si" put "/phil/food/aguacate", "si"
put "/phil/food/camaron", "yummi" put "/phil/food/camaron", "yummi"

View File

@ -24,6 +24,12 @@ describe "Swift provider" do
stub_request(:put, "#{container_url_for("phil")}/food/aguacate"). stub_request(:put, "#{container_url_for("phil")}/food/aguacate").
with(body: "muy deliciosa"). with(body: "muy deliciosa").
to_return(status: 200, headers: { etag: "0815etag", last_modified: "Fri, 04 Mar 2016 12:20:18 GMT" }) to_return(status: 200, headers: { etag: "0815etag", last_modified: "Fri, 04 Mar 2016 12:20:18 GMT" })
stub_request(:put, "#{container_url_for("phil")}/food/banano").
with(body: "si").
to_return(status: 200, headers: { etag: "0815etag", last_modified: "Fri, 04 Mar 2016 12:20:18 GMT" })
stub_request(:put, "#{container_url_for("phil")}/food/banano").
with(body: "oh, no").
to_return(status: 200, headers: { etag: "0817etag", last_modified: "Fri, 04 Mar 2016 12:20:20 GMT" })
stub_request(:head, "#{container_url_for("phil")}/food/aguacate"). stub_request(:head, "#{container_url_for("phil")}/food/aguacate").
to_return(status: 200, headers: { last_modified: "Fri, 04 Mar 2016 12:20:18 GMT" }) to_return(status: 200, headers: { last_modified: "Fri, 04 Mar 2016 12:20:18 GMT" })
stub_request(:delete, "#{container_url_for("phil")}/food/aguacate"). stub_request(:delete, "#{container_url_for("phil")}/food/aguacate").