diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml
index a354c5cc..6aea0e52 100644
--- a/.github/workflows/internal-release.yml
+++ b/.github/workflows/internal-release.yml
@@ -21,5 +21,6 @@ jobs:
server-password: ${{ secrets.ARTIFACTORY_PASSWORD }}
gpg-key: ${{ secrets.JFROG_GPG_KEY }}
gpg-passphrase: ${{ secrets.JFROG_GPG_PASSPHRASE }}
-
-
+ skyflow-credentials: ${{ secrets.SKYFLOW_CREDENTIALS }} >> .env
+ test-expired-token: ${{ secrets.TEST_EXPIRED_TOKEN }} >> .env
+ test-reusable-token: ${{ secrets.TEST_REUSABLE_TOKEN }} >> .env
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index ff48495f..5554efe3 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -11,11 +11,11 @@ jobs:
uses: gsactions/commit-message-checker@v1
with:
pattern: '(\[?[A-Z]{1,5}-[1-9][0-9]*)|(\[AUTOMATED\])|(Merge)|(Release).+$'
- flags: 'gm'
- excludeDescription: 'true'
- checkAllCommitMessages: 'true'
+ flags: "gm"
+ excludeDescription: "true"
+ checkAllCommitMessages: "true"
accessToken: ${{ secrets.PAT_ACTIONS }}
- error: 'One of your your commit messages is not matching the format with JIRA ID Ex: ( SDK-123 commit message )'
+ error: "One of your your commit messages is not matching the format with JIRA ID Ex: ( SDK-123 commit message )"
Test:
runs-on: ubuntu-latest
steps:
@@ -40,7 +40,7 @@ jobs:
echo TEST_REUSABLE_TOKEN=${{ secrets.TEST_REUSABLE_TOKEN }} >> .env
- name: Build & Run tests with Maven
- run: mvn -B package -DTEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} -DTEST_DATA_CREDENTIALS_FILE=${{ secrets.TEST_DATA_CREDENTIALS_FILE }} -f pom.xml
+ run: mvn -B package -f pom.xml
- name: Codecov
uses: codecov/codecov-action@v2.1.0
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7b6c57de..a4c7bfd9 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -15,4 +15,6 @@ jobs:
server-password: ${{ secrets.OSSRH_PASSWORD }}
gpg-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
gpg-passphrase: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
-
\ No newline at end of file
+ skyflow-credentials: ${{ secrets.SKYFLOW_CREDENTIALS }} >> .env
+ test-expired-token: ${{ secrets.TEST_EXPIRED_TOKEN }} >> .env
+ test-reusable-token: ${{ secrets.TEST_REUSABLE_TOKEN }} >> .env
diff --git a/.github/workflows/shared-build-and-deploy.yml b/.github/workflows/shared-build-and-deploy.yml
index e235a83d..4bd80367 100644
--- a/.github/workflows/shared-build-and-deploy.yml
+++ b/.github/workflows/shared-build-and-deploy.yml
@@ -3,22 +3,22 @@ on:
workflow_call:
inputs:
ref:
- description: 'Git reference to use (e.g., main or branch name)'
+ description: "Git reference to use (e.g., main or branch name)"
required: true
type: string
is-internal:
- description: 'Flag for internal release'
+ description: "Flag for internal release"
required: true
type: boolean
server-id:
- description: 'Id of the repository'
+ description: "Id of the repository"
required: true
type: string
-
+
profile:
- description: 'Profile to pick from pom.xml'
+ description: "Profile to pick from pom.xml"
required: true
type: string
secrets:
@@ -34,6 +34,15 @@ on:
gpg-passphrase:
required: true
+ skyflow-credentials:
+ required: true
+
+ test-expired-token:
+ required: true
+
+ test-reusable-token:
+ required: true
+
jobs:
publish:
runs-on: ubuntu-latest
@@ -46,8 +55,8 @@ jobs:
- name: Set up maven or jfrog repository
uses: actions/setup-java@v1
with:
- java-version: '1.8'
- distribution: 'adopt'
+ java-version: "1.8"
+ distribution: "adopt"
server-id: ${{ inputs.server-id }}
server-username: SERVER_USERNAME
server-password: SERVER_PASSWORD
@@ -87,9 +96,9 @@ jobs:
id: create-env
run: |
touch .env
- echo SKYFLOW_CREDENTIALS=${{ secrets.SKYFLOW_CREDENTIALS }} >> .env
- echo TEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} >> .env
- echo TEST_REUSABLE_TOKEN=${{ secrets.TEST_REUSABLE_TOKEN }} >> .env
+ echo SKYFLOW_CREDENTIALS=${{ secrets.skyflow-credentials }} >> .env
+ echo TEST_EXPIRED_TOKEN=${{ secrets.test-expired-token }} >> .env
+ echo TEST_REUSABLE_TOKEN=${{ secrets.test-reusable-token }} >> .env
- name: Create credentials json
id: create-json
diff --git a/pom.xml b/pom.xml
index 2801b615..63dfe263 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.skyflow
skyflow-java
- 1.15.0-dev.4ea53e6
+ 1.15.0-dev.a0537e8
jar
${project.groupId}:${project.artifactId}
diff --git a/src/main/java/com/skyflow/Skyflow.java b/src/main/java/com/skyflow/Skyflow.java
index 2a2e42cc..6866bd43 100644
--- a/src/main/java/com/skyflow/Skyflow.java
+++ b/src/main/java/com/skyflow/Skyflow.java
@@ -82,13 +82,23 @@ public LogLevel getLogLevel() {
return this.builder.logLevel;
}
- public VaultController vault() {
- String vaultId = (String) this.builder.vaultClientsMap.keySet().toArray()[0];
+ public VaultController vault() throws SkyflowException {
+ Object[] array = this.builder.vaultClientsMap.keySet().toArray();
+ if (array.length < 1) {
+ LogUtil.printErrorLog(ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST.getLog());
+ throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.VaultIdNotInConfigList.getMessage());
+ }
+ String vaultId = (String) array[0];
return this.vault(vaultId);
}
- public VaultController vault(String vaultId) {
- return this.builder.vaultClientsMap.get(vaultId);
+ public VaultController vault(String vaultId) throws SkyflowException {
+ VaultController controller = this.builder.vaultClientsMap.get(vaultId);
+ if (controller == null) {
+ LogUtil.printErrorLog(ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST.getLog());
+ throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.VaultIdNotInConfigList.getMessage());
+ }
+ return controller;
}
public ConnectionController connection() {
diff --git a/src/main/java/com/skyflow/errors/ErrorMessage.java b/src/main/java/com/skyflow/errors/ErrorMessage.java
index e1034976..d6af06aa 100644
--- a/src/main/java/com/skyflow/errors/ErrorMessage.java
+++ b/src/main/java/com/skyflow/errors/ErrorMessage.java
@@ -28,7 +28,7 @@ public enum ErrorMessage {
NoTokenGenerationMeansPassed("%s0 Initialization failed. Invalid credentials. Specify any one from 'path', 'credentialsString', 'token' or 'apiKey'."),
EmptyCredentialFilePath("%s0 Initialization failed. Invalid credentials. Credentials file path must not be empty."),
EmptyCredentialsString("%s0 Initialization failed. Invalid credentials. Credentials string must not be empty."),
- EmptyToken("%s0 Initialization failed. Invalid credentials. Token mut not be empty."),
+ EmptyToken("%s0 Initialization failed. Invalid credentials. Token must not be empty."),
EmptyApikey("%s0 Initialization failed. Invalid credentials. Api key must not be empty."),
InvalidApikey("%s0 Initialization failed. Invalid credentials. Specify valid api key."),
EmptyRoles("%s0 Initialization failed. Invalid roles. Specify at least one role."),
diff --git a/src/main/java/com/skyflow/utils/HttpUtility.java b/src/main/java/com/skyflow/utils/HttpUtility.java
index 93cbdd31..664cc9da 100644
--- a/src/main/java/com/skyflow/utils/HttpUtility.java
+++ b/src/main/java/com/skyflow/utils/HttpUtility.java
@@ -13,14 +13,13 @@
public final class HttpUtility {
+ private static final String LINE_FEED = "\r\n";
private static String requestID;
public static String getRequestID() {
return requestID;
}
- private static final String LINE_FEED = "\r\n";
-
public static String sendRequest(String method, URL url, JsonObject params, Map headers) throws IOException, SkyflowException {
HttpURLConnection connection = null;
@@ -55,7 +54,7 @@ public static String sendRequest(String method, URL url, JsonObject params, Map<
input = formatJsonToFormEncodedString(params).getBytes(StandardCharsets.UTF_8);
} else if (requestContentType.contains("multipart/form-data")) {
input = formatJsonToMultiPartFormDataString(params, boundary).getBytes(StandardCharsets.UTF_8);
- }else {
+ } else {
input = params.toString().getBytes(StandardCharsets.UTF_8);
}
@@ -66,7 +65,7 @@ public static String sendRequest(String method, URL url, JsonObject params, Map<
int status = connection.getResponseCode();
String requestID = connection.getHeaderField("x-request-id");
- HttpUtility.requestID = requestID;
+ HttpUtility.requestID = requestID.split(",")[0];
Reader streamReader;
if (status > 299) {
diff --git a/src/main/java/com/skyflow/utils/validations/Validations.java b/src/main/java/com/skyflow/utils/validations/Validations.java
index 67853bab..2876c15d 100644
--- a/src/main/java/com/skyflow/utils/validations/Validations.java
+++ b/src/main/java/com/skyflow/utils/validations/Validations.java
@@ -1,5 +1,7 @@
package com.skyflow.utils.validations;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
import com.skyflow.config.ConnectionConfig;
import com.skyflow.config.Credentials;
import com.skyflow.config.VaultConfig;
@@ -132,8 +134,9 @@ public static void validateInvokeConnectionRequest(InvokeConnectionRequest invok
}
if (requestBody != null) {
- Map requestBodyMap = (Map) requestBody;
- if (requestBodyMap.isEmpty()) {
+ Gson gson = new Gson();
+ JsonObject bodyObject = gson.toJsonTree(requestBody).getAsJsonObject();
+ if (bodyObject.isEmpty()) {
LogUtil.printErrorLog(Utils.parameterizedString(
ErrorLogs.EMPTY_REQUEST_BODY.getLog(), InterfaceName.INVOKE_CONNECTION.getName()));
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyRequestBody.getMessage());
diff --git a/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java b/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java
index 76f8823f..a30a44c9 100644
--- a/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java
+++ b/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java
@@ -1,25 +1,29 @@
package com.skyflow.vault.connection;
import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
public class InvokeConnectionResponse {
- private JsonObject response;
+ private final JsonObject data;
+ private final JsonObject metadata;
- public InvokeConnectionResponse(JsonObject response) {
- this.response = response;
+ public InvokeConnectionResponse(JsonObject data, JsonObject metadata) {
+ this.data = data;
+ this.metadata = metadata;
}
- public JsonObject getResponse() {
- return response;
+ public JsonObject getData() {
+ return data;
+ }
+
+ public JsonObject getMetadata() {
+ return metadata;
}
@Override
public String toString() {
- Gson gson = new Gson();
- JsonObject responseObject = JsonParser.parseString(gson.toJson(this)).getAsJsonObject();
- responseObject = responseObject.remove("response").getAsJsonObject();
- return responseObject.toString();
+ Gson gson = new GsonBuilder().serializeNulls().create();
+ return gson.toJson(this);
}
}
diff --git a/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/src/main/java/com/skyflow/vault/controller/ConnectionController.java
index 66720521..0bb2251e 100644
--- a/src/main/java/com/skyflow/vault/controller/ConnectionController.java
+++ b/src/main/java/com/skyflow/vault/controller/ConnectionController.java
@@ -64,7 +64,10 @@ public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionR
}
String response = HttpUtility.sendRequest(requestMethod.name(), new URL(filledURL), requestBody, headers);
- connectionResponse = new InvokeConnectionResponse((JsonObject) JsonParser.parseString(response));
+ JsonObject data = JsonParser.parseString(response).getAsJsonObject();
+ JsonObject metadata = new JsonObject();
+ metadata.addProperty("requestId", HttpUtility.getRequestID());
+ connectionResponse = new InvokeConnectionResponse(data, metadata);
LogUtil.printInfoLog(InfoLogs.INVOKE_CONNECTION_REQUEST_RESOLVED.getLog());
} catch (IOException e) {
LogUtil.printErrorLog(ErrorLogs.INVOKE_CONNECTION_REQUEST_REJECTED.getLog());
diff --git a/src/test/java/com/skyflow/SkyflowTests.java b/src/test/java/com/skyflow/SkyflowTests.java
index f7385af1..8ccff81d 100644
--- a/src/test/java/com/skyflow/SkyflowTests.java
+++ b/src/test/java/com/skyflow/SkyflowTests.java
@@ -198,6 +198,40 @@ public void testGettingNonExistentVaultConfigInSkyflowClient() {
}
}
+ @Test
+ public void testGettingAlreadyRemovedVaultFromEmptyConfigs() {
+ try {
+ Skyflow skyflowClient = Skyflow.builder().build();
+ skyflowClient.vault();
+ Assert.fail(EXCEPTION_NOT_THROWN);
+ } catch (SkyflowException e) {
+ Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode());
+ Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage());
+ }
+ }
+
+ @Test
+ public void testGettingAlreadyRemovedVaultFromNonEmptyConfigs() {
+ try {
+ VaultConfig primaryConfig = new VaultConfig();
+ primaryConfig.setVaultId(vaultID);
+ primaryConfig.setClusterId(clusterID);
+ primaryConfig.setEnv(Env.SANDBOX);
+
+ VaultConfig secondaryConfig = new VaultConfig();
+ secondaryConfig.setVaultId(vaultID + "123");
+ secondaryConfig.setClusterId(clusterID);
+ secondaryConfig.setEnv(Env.SANDBOX);
+ Skyflow skyflowClient = Skyflow.builder().addVaultConfig(primaryConfig).addVaultConfig(secondaryConfig).build();
+ skyflowClient.removeVaultConfig(vaultID);
+ skyflowClient.vault(vaultID);
+ Assert.fail(EXCEPTION_NOT_THROWN);
+ } catch (SkyflowException e) {
+ Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode());
+ Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage());
+ }
+ }
+
@Test
public void testAddingInvalidConnectionConfigInSkyflowBuilder() {
diff --git a/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java b/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java
index 6ac020e1..90bc4c1e 100644
--- a/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java
+++ b/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java
@@ -420,12 +420,17 @@ public void testEmptyRequestBodyInInvokeConnectionRequestValidations() {
@Test
public void testInvokeConnectionResponse() {
try {
- JsonObject responseObject = new JsonObject();
- responseObject.addProperty("test_key_1", "test_value_1");
- responseObject.addProperty("test_key_2", "test_value_2");
- InvokeConnectionResponse connectionResponse = new InvokeConnectionResponse(responseObject);
- Assert.assertEquals(2, connectionResponse.getResponse().size());
- Assert.assertEquals(responseObject.toString(), connectionResponse.toString());
+ JsonObject data = new JsonObject();
+ data.addProperty("test_key_1", "test_value_1");
+ data.addProperty("test_key_2", "test_value_2");
+ JsonObject metadata = new JsonObject();
+ metadata.addProperty("requestId", "12345");
+ InvokeConnectionResponse connectionResponse = new InvokeConnectionResponse(data, metadata);
+ String responseString = "{\"data\":{\"test_key_1\":\"test_value_1\",\"test_key_2\":\"test_value_2\"}," +
+ "\"metadata\":{\"requestId\":\"12345\"}}";
+ Assert.assertEquals(2, connectionResponse.getData().size());
+ Assert.assertEquals(responseString, connectionResponse.toString());
+ Assert.assertEquals(1, connectionResponse.getMetadata().size());
} catch (Exception e) {
Assert.fail(INVALID_EXCEPTION_THROWN);
}
diff --git a/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java b/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java
index 102eb9d7..b121280a 100644
--- a/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java
+++ b/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java
@@ -39,7 +39,7 @@ public static void setup() {
@Test
public void testInvalidRequestInInvokeConnectionMethod() {
try {
- HashMap requestBody = new HashMap<>();
+ HashMap requestBody = new HashMap<>();
InvokeConnectionRequest connectionRequest = InvokeConnectionRequest.builder().requestBody(requestBody).build();
Skyflow skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addConnectionConfig(connectionConfig).build();
skyflowClient.connection().invoke(connectionRequest);