読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(akashic report) 進捗報告: DeleteObjectを実装した

とりまこれは通るようになった.

  test("delete an object") { p =>
    import p._

    client.createBucket("myb")
    val f = getTestFile("test.txt")

    client.putObject("myb", "myobj1", f)
    client.putObject("myb", "myobj2", f)
    assert(client.listObjects("myb").getObjectSummaries.size === 2)

    client.deleteObject("myb", "myobj1")
    assert(client.listObjects("myb").getObjectSummaries.size === 1)
    assert(client.listObjects("myb").getObjectSummaries.get(0).getKey === "myobj2")
  }

  test("put -> delete -> put") { p =>
    import p._

    client.createBucket("myb")
    val f = getTestFile("test.txt")
    assert(client.listObjects("myb").getObjectSummaries.size === 0)
    client.putObject("myb", "a", f)
    assert(client.listObjects("myb").getObjectSummaries.size === 1)
    client.deleteObject("myb", "a")
    assert(client.listObjects("myb").getObjectSummaries.size === 0)
    client.putObject("myb", "a", f)
    assert(client.listObjects("myb").getObjectSummaries.size === 1)
  }

DeleteObjectは, 1) バージョン指定 2) バケットのバージョニング によって挙動が変わる.

DELETE Object - Amazon Simple Storage Service

x-amz-delete-marker: Specifies whether the versioned object that was permanently deleted was (true) or was not (false) a delete marker. In a simple DELETE, this header indicates whether (true) or not (false) a delete marker was created.

  1. (versionIdが指定された場合) 削除したオブジェクトがversionedかどうかを示す
  2. そうでない場合(simple DELETE. delete markerを追加する) delete markerが追加されたかを示す. もし先頭のバージョンがdelete markerである場合は, delete markerは追加してはならない?

x-amz-version-id: Returns the version ID of the delete marker created as a result of the DELETE operation. If you delete a specific object version, the value returned by this header is the version ID of the object version deleted.

  1. delete markerが追加された場合は, そのversionIdを示す
  2. もしversionId指定で削除した場合は, そのIDを示す

色々なケースで全然挙動が変わるため, 実装も根元からスイッチする必要がある. 今はバージョニングを実装していないが, 将来的には対応するため, 難しくはないが鬱陶しい.

Multipart Upload, Signature, Presigned Requestまで実装してテストしたら, ベータとしてテストとドキュメントに回る.