Skip to content
This repository was archived by the owner on Dec 4, 2023. It is now read-only.

Commit 2cc0e4e

Browse files
fix deleteObjects being broken on aws sdk 2.0 prerelease
1 parent 94aaffb commit 2cc0e4e

3 files changed

Lines changed: 26 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* fix bug with etag on FileProvider being alsays "0" ([#70](https://github.com/findify/s3mock/issues/70))
77
* fix last-modified header always being equal to "1970-01-01 00:00:00"([65](https://github.com/findify/s3mock/issues/70))
88
* wrong content-type for listObjects ([#60](https://github.com/findify/s3mock/issues/60))
9+
* deleteObjects broken on aws s3 sdk 2.0 ([#71](https://github.com/findify/s3mock/issues/60))
910

1011
0.2.3
1112
=======

src/main/scala/io/findify/s3mock/S3Mock.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ class S3Mock(port:Int, provider:Provider)(implicit system:ActorSystem = ActorSys
3737
concat(
3838
ListBucket().route(bucket),
3939
CreateBucket().route(bucket),
40-
DeleteBucket().route(bucket)
40+
DeleteBucket().route(bucket),
41+
DeleteObjects().route(bucket)
4142
)
4243
} ~ parameterMap { params =>
4344
path(RemainingPath) { key =>

src/test/scala/io/findify/s3mock/DeleteTest.scala

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package io.findify.s3mock
22

3+
import akka.http.scaladsl.Http
4+
import akka.http.scaladsl.model._
35
import com.amazonaws.services.s3.model.{AmazonS3Exception, DeleteObjectsRequest}
46

5-
import scala.collection.JavaConversions._
7+
import scala.collection.JavaConverters._
8+
import scala.concurrent.Await
69
import scala.util.Try
10+
import scala.concurrent.duration._
711

812
/**
913
* Created by shutty on 8/11/16.
@@ -13,9 +17,9 @@ class DeleteTest extends S3MockTest {
1317
val s3 = fixture.client
1418
it should "delete a bucket" in {
1519
s3.createBucket("del")
16-
s3.listBuckets().exists(_.getName == "del") shouldBe true
20+
s3.listBuckets().asScala.exists(_.getName == "del") shouldBe true
1721
s3.deleteBucket("del")
18-
s3.listBuckets().exists(_.getName == "del") shouldBe false
22+
s3.listBuckets().asScala.exists(_.getName == "del") shouldBe false
1923
}
2024

2125
it should "return 404 for non existent buckets when deleting" in {
@@ -25,9 +29,9 @@ class DeleteTest extends S3MockTest {
2529
it should "delete an object" in {
2630
s3.createBucket("delobj")
2731
s3.putObject("delobj", "somefile", "foo")
28-
s3.listObjects("delobj", "somefile").getObjectSummaries.exists(_.getKey == "somefile") shouldBe true
32+
s3.listObjects("delobj", "somefile").getObjectSummaries.asScala.exists(_.getKey == "somefile") shouldBe true
2933
s3.deleteObject("delobj", "somefile")
30-
s3.listObjects("delobj", "somefile").getObjectSummaries.exists(_.getKey == "somefile") shouldBe false
34+
s3.listObjects("delobj", "somefile").getObjectSummaries.asScala.exists(_.getKey == "somefile") shouldBe false
3135
}
3236

3337
it should "return 404 for non-existent keys when deleting" in {
@@ -59,5 +63,19 @@ class DeleteTest extends S3MockTest {
5963
val del = s3.deleteObject("delobj3", "some/path")
6064
s3.listObjects("delobj3", "some/path/").getObjectSummaries.size() shouldBe 2
6165
}
66+
67+
it should "work with aws sdk 2.0 style multi-object delete" in {
68+
implicit val mat = fixture.mat
69+
s3.createBucket("owntracks")
70+
s3.putObject("owntracks", "data/2017-07-31/10:34.json", "foo")
71+
s3.putObject("owntracks", "data/2017-07-31/16:23.json", "bar")
72+
val requestData = """<?xml version="1.0" encoding="UTF-8"?><Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Object><Key>data/2017-07-31/10:34.json</Key></Object><Object><Key>data/2017-07-31/16:23.json</Key></Object></Delete>"""
73+
val response = Await.result(Http(fixture.system).singleRequest(HttpRequest(
74+
method = HttpMethods.POST,
75+
uri = s"http://localhost:${fixture.port}/owntracks?delete",
76+
entity = HttpEntity(ContentType(MediaTypes.`application/xml`, HttpCharsets.`UTF-8`), requestData)
77+
)), 10.seconds)
78+
s3.listObjects("owntracks").getObjectSummaries.isEmpty shouldBe true
79+
}
6280
}
6381
}

0 commit comments

Comments
 (0)