Put Java statements on separate lines
This commit is contained in:
1 parent
01c82a8223
commit
11bfe71124
15 files changed
+228
-85
No files matched your search
@@ -21,7 +21,9 @@ public final class ClusterIntegrationTest {
|
||||
switch (args[0]) {
|
||||
case "basic" -> {
|
||||
byte[] large = new byte[ClusterNode.MAX_SEGMENT + 37];
|
||||
for (int i = 0; i < large.length; i++) large[i] = (byte) (i * 31);
|
||||
for (int i = 0; i < large.length; i++) {
|
||||
large[i] = (byte) (i * 31);
|
||||
}
|
||||
String largeKey = "cluster-test/large";
|
||||
put(store, bucket, largeKey, large, false);
|
||||
try (var opened = store.open(bucket, largeKey)) {
|
||||
@@ -39,7 +41,10 @@ public final class ClusterIntegrationTest {
|
||||
"Overwrite was not visible");
|
||||
}
|
||||
store.delete(bucket, largeKey);
|
||||
try { store.open(bucket, largeKey); throw new AssertionError("Deleted object remained visible"); }
|
||||
try {
|
||||
store.open(bucket, largeKey);
|
||||
throw new AssertionError("Deleted object remained visible");
|
||||
}
|
||||
catch (StoreException error) { require(error.status == 404, "Wrong missing-object status"); }
|
||||
put(store, bucket, KEY, stable, false);
|
||||
require(store.ready(), "Healthy cluster is not ready");
|
||||
@@ -63,7 +68,10 @@ public final class ClusterIntegrationTest {
|
||||
put(store, bucket, "cluster-test/rejected", new byte[]{1}, false);
|
||||
throw new AssertionError("Write succeeded with only one node");
|
||||
} catch (StoreException error) { require(error.status == 503, "Wrong unavailable status"); }
|
||||
try { store.open(bucket, "cluster-test/rejected"); throw new AssertionError("Failed write became visible"); }
|
||||
try {
|
||||
store.open(bucket, "cluster-test/rejected");
|
||||
throw new AssertionError("Failed write became visible");
|
||||
}
|
||||
catch (StoreException error) { require(error.status == 404, "Partial object became visible"); }
|
||||
System.out.println("Cluster quorum-loss test passed");
|
||||
}
|
||||
@@ -82,13 +90,18 @@ public final class ClusterIntegrationTest {
|
||||
var executor = java.util.concurrent.Executors.newFixedThreadPool(2);
|
||||
try {
|
||||
var a = executor.submit(() -> {
|
||||
start.await(); put(store, bucket, key, first, false); return null;
|
||||
start.await();
|
||||
put(store, bucket, key, first, false);
|
||||
return null;
|
||||
});
|
||||
var b = executor.submit(() -> {
|
||||
start.await(); put(store, bucket, key, second, false); return null;
|
||||
start.await();
|
||||
put(store, bucket, key, second, false);
|
||||
return null;
|
||||
});
|
||||
start.countDown();
|
||||
a.get(); b.get();
|
||||
a.get();
|
||||
b.get();
|
||||
try (var opened = store.open(bucket, key)) {
|
||||
byte[] actual = opened.stream().readAllBytes();
|
||||
require(Arrays.equals(actual, first) || Arrays.equals(actual, second),
|
||||
|
||||
@@ -31,7 +31,9 @@ public final class ClusterMigrationTest {
|
||||
if (args[0].equals("create")) {
|
||||
UUID segment = UUID.randomUUID();
|
||||
byte[] hash = SigV4.hash(DATA);
|
||||
for (int i = 0; i < nodes.count(); i++) nodes.put(i, segment, DATA, hash);
|
||||
for (int i = 0; i < nodes.count(); i++) {
|
||||
nodes.put(i, segment, DATA, hash);
|
||||
}
|
||||
try (var connection = DriverManager.getConnection(env.get("POSTGRES_JDBC_URL"),
|
||||
env.get("POSTGRES_USER"), env.get("POSTGRES_PASSWORD"));
|
||||
var statement = connection.createStatement()) {
|
||||
@@ -40,18 +42,28 @@ public final class ClusterMigrationTest {
|
||||
statement.execute("CREATE TABLE cluster_segments (generation uuid NOT NULL, ordinal integer NOT NULL, segment_id uuid NOT NULL, length integer NOT NULL, sha256 bytea NOT NULL, replicas text NOT NULL, PRIMARY KEY (generation, ordinal))");
|
||||
statement.execute("CREATE TABLE cluster_tombstones (bucket text NOT NULL, object_key text COLLATE \"C\" NOT NULL, generation uuid NOT NULL, deleted_at bigint NOT NULL, PRIMARY KEY (bucket, object_key))");
|
||||
try (var insert = connection.prepareStatement("INSERT INTO cluster_usage VALUES (?, ?)")) {
|
||||
insert.setString(1, bucket); insert.setLong(2, DATA.length); insert.executeUpdate();
|
||||
insert.setString(1, bucket);
|
||||
insert.setLong(2, DATA.length);
|
||||
insert.executeUpdate();
|
||||
}
|
||||
UUID generation = UUID.randomUUID();
|
||||
try (var insert = connection.prepareStatement("INSERT INTO cluster_objects VALUES (?, ?, ?, ?, ?, ?, ?, ?)")) {
|
||||
insert.setString(1, bucket); insert.setString(2, KEY); insert.setObject(3, generation);
|
||||
insert.setLong(4, DATA.length); insert.setLong(5, System.currentTimeMillis());
|
||||
insert.setString(1, bucket);
|
||||
insert.setString(2, KEY);
|
||||
insert.setObject(3, generation);
|
||||
insert.setLong(4, DATA.length);
|
||||
insert.setLong(5, System.currentTimeMillis());
|
||||
insert.setString(6, HexFormat.of().formatHex(MessageDigest.getInstance("MD5").digest(DATA)));
|
||||
insert.setBytes(7, hash); insert.setString(8, "text/plain"); insert.executeUpdate();
|
||||
insert.setBytes(7, hash);
|
||||
insert.setString(8, "text/plain");
|
||||
insert.executeUpdate();
|
||||
}
|
||||
try (var insert = connection.prepareStatement("INSERT INTO cluster_segments VALUES (?, 0, ?, ?, ?, '0,1,2')")) {
|
||||
insert.setObject(1, generation); insert.setObject(2, segment);
|
||||
insert.setInt(3, DATA.length); insert.setBytes(4, hash); insert.executeUpdate();
|
||||
insert.setObject(1, generation);
|
||||
insert.setObject(2, segment);
|
||||
insert.setInt(3, DATA.length);
|
||||
insert.setBytes(4, hash);
|
||||
insert.executeUpdate();
|
||||
}
|
||||
}
|
||||
System.out.println("Legacy cluster fixture created");
|
||||
|
||||
@@ -142,7 +142,8 @@ public final class HttpTest {
|
||||
"?partNumber=1&uploadId=" + upload), "PUT", first, Map.of()), HttpResponse.BodyHandlers.ofByteArray());
|
||||
var partTwo = client.send(signedUri(URI.create(base + "/objects/" + movie +
|
||||
"?partNumber=2&uploadId=" + upload), "PUT", second, Map.of()), HttpResponse.BodyHandlers.ofByteArray());
|
||||
status(200, partOne); status(200, partTwo);
|
||||
status(200, partOne);
|
||||
status(200, partTwo);
|
||||
String completion = "<CompleteMultipartUpload><Part><PartNumber>1</PartNumber><ETag>" +
|
||||
partOne.headers().firstValue("etag").orElseThrow() +
|
||||
"</ETag></Part><Part><PartNumber>2</PartNumber><ETag>" +
|
||||
|
||||
@@ -9,25 +9,33 @@ import java.util.List;
|
||||
public final class StoreTest {
|
||||
interface Operation {void run() throws Exception;}
|
||||
static void fails(int status,Operation operation)throws Exception{
|
||||
try{operation.run();throw new AssertionError("Expected "+status);}catch(StoreException error){if(error.status!=status)throw error;}
|
||||
try {
|
||||
operation.run();
|
||||
throw new AssertionError("Expected " + status);
|
||||
} catch (StoreException error) {
|
||||
if (error.status != status) throw error;
|
||||
}
|
||||
}
|
||||
static ObjectStorage.Metadata put(DiskStore store,String key,byte[] body,boolean only)throws Exception{
|
||||
return store.put("test",key,new ByteArrayInputStream(body),body.length,SigV4.hex(SigV4.hash(body)),null,only,"application/octet-stream");
|
||||
}
|
||||
private static void testSignature() throws Exception {
|
||||
var headers=new com.sun.net.httpserver.Headers();
|
||||
headers.set("host","examplebucket.s3.amazonaws.com");headers.set("range","bytes=0-9");
|
||||
headers.set("host","examplebucket.s3.amazonaws.com");
|
||||
headers.set("range","bytes=0-9");
|
||||
headers.set("x-amz-date","20130524T000000Z");
|
||||
headers.set("x-amz-content-sha256","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
|
||||
headers.set("authorization","AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;range;x-amz-content-sha256;x-amz-date,Signature=f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41");
|
||||
var clock=java.time.Clock.fixed(java.time.Instant.parse("2013-05-24T00:00:00Z"),java.time.ZoneOffset.UTC);
|
||||
var auth=new SigV4("AKIAIOSFODNN7EXAMPLE","wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY","us-east-1",clock);
|
||||
var uri=java.net.URI.create("/test.txt");auth.verify("GET",uri,headers);
|
||||
var uri=java.net.URI.create("/test.txt");
|
||||
auth.verify("GET",uri,headers);
|
||||
fails(403,()->auth.verify("GET",java.net.URI.create("/other.txt"),headers));
|
||||
fails(403,()->auth.verify("DELETE",uri,headers));
|
||||
fails(403,()->new SigV4("AKIAIOSFODNN7EXAMPLE","wrong","us-east-1",clock).verify("GET",uri,headers));
|
||||
fails(403,()->new SigV4("AKIAIOSFODNN7EXAMPLE","wrong","us-east-1",java.time.Clock.systemUTC()).verify("GET",uri,headers));
|
||||
headers.add("host","duplicate");fails(403,()->auth.verify("GET",uri,headers));
|
||||
headers.add("host","duplicate");
|
||||
fails(403,()->auth.verify("GET",uri,headers));
|
||||
System.out.println("SigV4 official vector and tampering tests passed");
|
||||
}
|
||||
|
||||
@@ -59,7 +67,8 @@ public final class StoreTest {
|
||||
try(var restarted=new DiskStore(root,8,10)){
|
||||
try(var obj=restarted.open("test","../nested/☾")){if(obj.stream().read()!=9)throw new AssertionError("Persistence");}
|
||||
if(restarted.list("test","","",100,null).objects().size()!=2)throw new AssertionError("Index persistence");
|
||||
restarted.delete("test","../nested/☾");restarted.delete("test","../nested/☾");
|
||||
restarted.delete("test","../nested/☾");
|
||||
restarted.delete("test","../nested/☾");
|
||||
fails(404,()->restarted.open("test","../nested/☾"));
|
||||
var uploads=new MultipartStore(restarted);
|
||||
String upload=uploads.create("test","from-parts","text/plain");
|
||||
|
||||
Reference in new issue
Block a user