From 1f46966d614335ec4a7d7832662770a3a6b3f0ae Mon Sep 17 00:00:00 2001 From: juanf <juanf@ethz.ch> Date: Tue, 11 Jul 2023 19:23:02 +0200 Subject: [PATCH] SSDM-13251: Additioanl Transaction Flows Tests --- .../core/AbstractPublicAPIWrapper.java | 32 ++++--- .../impl/APIServerAdapterWrapper.java | 28 +++++- .../afsserver/impl/ApiServerAdapterTest.java | 85 ++++++++++++++++++- 3 files changed, 129 insertions(+), 16 deletions(-) diff --git a/server-data-store/src/test/java/ch/ethz/sis/afsserver/core/AbstractPublicAPIWrapper.java b/server-data-store/src/test/java/ch/ethz/sis/afsserver/core/AbstractPublicAPIWrapper.java index 6695bc3aeed..5051ebcf156 100644 --- a/server-data-store/src/test/java/ch/ethz/sis/afsserver/core/AbstractPublicAPIWrapper.java +++ b/server-data-store/src/test/java/ch/ethz/sis/afsserver/core/AbstractPublicAPIWrapper.java @@ -100,53 +100,59 @@ public abstract class AbstractPublicAPIWrapper implements PublicAPI @Override public void begin(UUID transactionId) throws Exception { - //TODO: Unused + Map<String, Object> args = Map.of( + "transactionId", transactionId); + process(null, "begin", args); } @Override public Boolean prepare() throws Exception { - //TODO: Unused - return true; + Map<String, Object> args = Map.of(); + return process(Boolean.class, "prepare", args); } @Override public void commit() throws Exception { - //TODO: Unused + Map<String, Object> args = Map.of(); + process(null, "commit", args); } @Override public void rollback() throws Exception { - //TODO: Unused + Map<String, Object> args = Map.of(); + process(null, "rollback", args); } @Override public List<UUID> recover() throws Exception { - //TODO: Unused - return null; + Map<String, Object> args = Map.of(); + return process(List.class, "recover", args); } @Override public String login(String userId, String password) throws Exception { - //TODO: Unused - return null; + Map<String, Object> args = Map.of( + "userId", userId, + "password", password); + return process(String.class, "login", args); } @Override public Boolean isSessionValid() throws Exception { - //TODO: Unused - return null; + Map<String, Object> args = Map.of(); + return process(Boolean.class, "isSessionValid", args); } @Override public Boolean logout() throws Exception { - //TODO: Unused - return null; + Map<String, Object> args = Map.of(); + return process(Boolean.class, "logout", args); } } diff --git a/server-data-store/src/test/java/ch/ethz/sis/afsserver/impl/APIServerAdapterWrapper.java b/server-data-store/src/test/java/ch/ethz/sis/afsserver/impl/APIServerAdapterWrapper.java index 91972ae7694..769ea80399f 100644 --- a/server-data-store/src/test/java/ch/ethz/sis/afsserver/impl/APIServerAdapterWrapper.java +++ b/server-data-store/src/test/java/ch/ethz/sis/afsserver/impl/APIServerAdapterWrapper.java @@ -36,12 +36,26 @@ public class APIServerAdapterWrapper extends AbstractPublicAPIWrapper private ApiServerAdapter apiServerAdapter; + private String interactiveSessionKey; + + private String transactionManagerKey; + + private String sessionToken; public APIServerAdapterWrapper(ApiServerAdapter apiServerAdapter) { this.apiServerAdapter = apiServerAdapter; } + public APIServerAdapterWrapper(ApiServerAdapter apiServerAdapter, String interactiveSessionKey, + String transactionManagerKey, String sessionToken) + { + this.apiServerAdapter = apiServerAdapter; + this.interactiveSessionKey = interactiveSessionKey; + this.transactionManagerKey = transactionManagerKey; + this.sessionToken = sessionToken; + } + public Map<String, List<String>> getURIParameters(Map<String, Object> args) { Map<String, List<String>> result = new HashMap<>(args.size()); @@ -64,7 +78,17 @@ public class APIServerAdapterWrapper extends AbstractPublicAPIWrapper { HttpMethod httpMethod = ApiServerAdapter.getHttpMethod(apiMethod); Map<String, List<String>> requestParameters = getURIParameters(params); - requestParameters.put("sessionToken", List.of(UUID.randomUUID().toString())); + if (interactiveSessionKey != null) + { + requestParameters.put("interactiveSessionKey", List.of(interactiveSessionKey)); + } + if (transactionManagerKey != null) { + requestParameters.put("transactionManagerKey", List.of(transactionManagerKey)); + } + if (sessionToken != null) + { + requestParameters.put("sessionToken", List.of(sessionToken)); + } requestParameters.put("method", List.of(apiMethod)); byte[] requestBody = null; @@ -82,7 +106,7 @@ public class APIServerAdapterWrapper extends AbstractPublicAPIWrapper - HttpResponse response = apiServerAdapter.process(httpMethod, requestParameters, null); + HttpResponse response = apiServerAdapter.process(httpMethod, requestParameters, requestBody); String contentType = response.getContentType(); byte[] body = response.getBody(); diff --git a/server-data-store/src/test/java/ch/ethz/sis/afsserver/impl/ApiServerAdapterTest.java b/server-data-store/src/test/java/ch/ethz/sis/afsserver/impl/ApiServerAdapterTest.java index 711a8bda445..a0bb758ce3c 100644 --- a/server-data-store/src/test/java/ch/ethz/sis/afsserver/impl/ApiServerAdapterTest.java +++ b/server-data-store/src/test/java/ch/ethz/sis/afsserver/impl/ApiServerAdapterTest.java @@ -22,15 +22,98 @@ import ch.ethz.sis.afsserver.server.impl.ApiServerAdapter; import ch.ethz.sis.afsserver.startup.AtomicFileSystemServerParameter; import ch.ethz.sis.afsjson.JsonObjectMapper; import ch.ethz.sis.shared.startup.Configuration; +import org.junit.Test; + +import java.util.UUID; public class ApiServerAdapterTest extends ApiServerTest { + + public UUID sessionToken = UUID.randomUUID(); + + public PublicAPI getPublicAPI(String interactiveSessionKey, String transactionManagerKey) throws Exception { + APIServer apiServer = getAPIServer(); + Configuration configuration = ServerClientEnvironmentFS.getInstance().getDefaultServerConfiguration(); + JsonObjectMapper jsonObjectMapper = configuration.getSharableInstance(AtomicFileSystemServerParameter.jsonObjectMapperClass); + ApiServerAdapter apiServerAdapter = new ApiServerAdapter(apiServer, jsonObjectMapper); + return new APIServerAdapterWrapper(apiServerAdapter, interactiveSessionKey, transactionManagerKey, this.sessionToken.toString()); + } + @Override public PublicAPI getPublicAPI() throws Exception { APIServer apiServer = getAPIServer(); Configuration configuration = ServerClientEnvironmentFS.getInstance().getDefaultServerConfiguration(); JsonObjectMapper jsonObjectMapper = configuration.getSharableInstance(AtomicFileSystemServerParameter.jsonObjectMapperClass); ApiServerAdapter apiServerAdapter = new ApiServerAdapter(apiServer, jsonObjectMapper); - return new APIServerAdapterWrapper(apiServerAdapter); + return new APIServerAdapterWrapper(apiServerAdapter, null, null, sessionToken.toString()); + } + + @Test + public void operation_state_begin_succeed() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + } + + @Test + public void operation_state_prepare_succeed() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + publicAPI.prepare(); + } + + @Test + public void operation_state_rollback_succeed() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + publicAPI.prepare(); + publicAPI.rollback(); + } + + @Test + public void operation_state_commit_succeed() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + publicAPI.commit(); + } + + @Test + public void operation_state_commitPrepared_succeed() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + publicAPI.prepare(); + publicAPI.commit(); + } + + @Test + public void operation_state_commit_reuse_succeed() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + publicAPI.prepare(); + publicAPI.commit(); + publicAPI.begin(sessionToken); + } + + @Test + public void operation_state_rollback_reuse_succeed() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + publicAPI.prepare(); + publicAPI.rollback(); + publicAPI.begin(sessionToken); + } + + @Test(expected = RuntimeException.class) + public void operation_state_begin_reuse_fails() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + publicAPI.begin(sessionToken); + } + + @Test + public void operation_state_prepare_reuse_succeed() throws Exception { + PublicAPI publicAPI = getPublicAPI("1234", "5678"); + publicAPI.begin(sessionToken); + publicAPI.prepare(); + publicAPI.begin(sessionToken); } } -- GitLab