Skip to content

Commit 38a475e

Browse files
committed
Prepare version storage
1 parent 4e4b8d4 commit 38a475e

File tree

3 files changed

+68
-2
lines changed

3 files changed

+68
-2
lines changed

server/src/main/java/com/adobe/testing/s3mock/store/ObjectStore.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public class ObjectStore extends StoreBase {
5454
private static final Logger LOG = LoggerFactory.getLogger(ObjectStore.class);
5555
private static final String META_FILE = "objectMetadata.json";
5656
private static final String DATA_FILE = "binaryData";
57+
private static final String VERSIONS_FILE = "versions.json";
5758

5859
/**
5960
* This map stores one lock object per S3Object ID.
@@ -471,11 +472,11 @@ private Path getObjectFolderPath(BucketMetadata bucket, UUID id) {
471472
}
472473

473474
private Path getMetaFilePath(BucketMetadata bucket, UUID id) {
474-
return Paths.get(getObjectFolderPath(bucket, id).toString(), META_FILE);
475+
return getObjectFolderPath(bucket, id).resolve(META_FILE);
475476
}
476477

477478
private Path getDataFilePath(BucketMetadata bucket, UUID id) {
478-
return Paths.get(getObjectFolderPath(bucket, id).toString(), DATA_FILE);
479+
return getObjectFolderPath(bucket, id).resolve(DATA_FILE);
479480
}
480481

481482
private void writeMetafile(BucketMetadata bucket, S3ObjectMetadata s3ObjectMetadata) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*************************************************************************
2+
* ADOBE CONFIDENTIAL
3+
* ___________________
4+
*
5+
* Copyright 2024 Adobe
6+
* All Rights Reserved.
7+
*
8+
* NOTICE: All information contained herein is, and remains
9+
* the property of Adobe and its suppliers, if any. The intellectual
10+
* and technical concepts contained herein are proprietary to Adobe
11+
* and its suppliers and are protected by all applicable intellectual
12+
* property laws, including trade secret and copyright laws.
13+
* Dissemination of this information or reproduction of this material
14+
* is strictly forbidden unless prior written permission is obtained
15+
* from Adobe.
16+
**************************************************************************/
17+
18+
package com.adobe.testing.s3mock.store;
19+
20+
import java.util.HashMap;
21+
import java.util.Map;
22+
import java.util.UUID;
23+
import java.util.concurrent.atomic.AtomicInteger;
24+
25+
public record S3ObjectVersions(
26+
UUID id,
27+
Map<Integer, String> versions,
28+
AtomicInteger latestVersionPointer
29+
) {
30+
31+
public S3ObjectVersions(UUID id) {
32+
this(id, new HashMap<>(), new AtomicInteger(0));
33+
}
34+
35+
public String createVersion() {
36+
String versionId = UUID.randomUUID().toString();
37+
versions.put(latestVersionPointer.incrementAndGet(), versionId);
38+
return versionId;
39+
}
40+
41+
public String getLatestVersion() {
42+
return versions.get(latestVersionPointer.get());
43+
}
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.adobe.testing.s3mock.store;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.UUID;
6+
import org.junit.jupiter.api.Test;
7+
8+
class S3ObjectVersionsTest {
9+
10+
@Test
11+
void testVersions() {
12+
var iut = new S3ObjectVersions(UUID.randomUUID());
13+
assertThat(iut.getLatestVersion()).isNull();
14+
assertThat(iut.latestVersionPointer().get()).isZero();
15+
16+
var version = iut.createVersion();
17+
assertThat(version).isNotBlank();
18+
assertThat(iut.latestVersionPointer().get()).isOne();
19+
assertThat(iut.getLatestVersion()).isEqualTo(version);
20+
}
21+
}

0 commit comments

Comments
 (0)