diff --git a/src/main/java/com/skyflow/errors/SkyflowException.java b/src/main/java/com/skyflow/errors/SkyflowException.java index 32c71f39..a971dc7e 100644 --- a/src/main/java/com/skyflow/errors/SkyflowException.java +++ b/src/main/java/com/skyflow/errors/SkyflowException.java @@ -32,6 +32,11 @@ public SkyflowException(String message, Throwable cause) { super(message, cause); this.message = message; } + public SkyflowException(String message, Throwable cause, int httpCode) { + super(message, cause); + this.message = message; + this.httpCode = httpCode; + } public SkyflowException(int code, String message) { super(message); diff --git a/src/main/java/com/skyflow/vault/controller/DetectController.java b/src/main/java/com/skyflow/vault/controller/DetectController.java index 5801d688..67ebf65e 100644 --- a/src/main/java/com/skyflow/vault/controller/DetectController.java +++ b/src/main/java/com/skyflow/vault/controller/DetectController.java @@ -9,6 +9,7 @@ import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.core.ApiClientApiException; +import com.skyflow.generated.rest.core.ApiClientException; import com.skyflow.generated.rest.core.RequestOptions; import com.skyflow.generated.rest.resources.files.requests.*; import com.skyflow.generated.rest.resources.strings.requests.DeidentifyStringRequest; @@ -66,6 +67,9 @@ public DeidentifyTextResponse deidentifyText(DeidentifyTextRequest deidentifyTex String bodyString = extractBodyAsString(ex); LogUtil.printErrorLog(ErrorLogs.DEIDENTIFY_TEXT_REQUEST_REJECTED.getLog()); throw new SkyflowException(ex.statusCode(), ex, ex.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.DEIDENTIFY_TEXT_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } LogUtil.printInfoLog(InfoLogs.DEIDENTIFY_TEXT_SUCCESS.getLog()); return deidentifyTextResponse; @@ -94,6 +98,9 @@ public ReidentifyTextResponse reidentifyText(ReidentifyTextRequest reidentifyTex String bodyString = extractBodyAsString(ex); LogUtil.printErrorLog(ErrorLogs.REIDENTIFY_TEXT_REQUEST_REJECTED.getLog()); throw new SkyflowException(ex.statusCode(), ex, ex.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.REIDENTIFY_TEXT_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } LogUtil.printInfoLog(InfoLogs.REIDENTIFY_TEXT_SUCCESS.getLog()); return reidentifyTextResponse; @@ -180,6 +187,9 @@ public DeidentifyFileResponse deidentifyFile(DeidentifyFileRequest request) thro String bodyString = extractBodyAsString(e); LogUtil.printErrorLog(ErrorLogs.DEIDENTIFY_FILE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.DEIDENTIFY_FILE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } return response; } @@ -431,6 +441,9 @@ public DeidentifyFileResponse getDetectRun(GetDetectRunRequest request) throws S String bodyString = extractBodyAsString(e); LogUtil.printErrorLog(ErrorLogs.GET_DETECT_RUN_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.GET_DETECT_RUN_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } } } diff --git a/src/main/java/com/skyflow/vault/controller/VaultController.java b/src/main/java/com/skyflow/vault/controller/VaultController.java index acac9608..cbf0a70f 100644 --- a/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -22,6 +22,7 @@ import com.skyflow.errors.ErrorCode; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.core.ApiClientApiException; +import com.skyflow.generated.rest.core.ApiClientException; import com.skyflow.generated.rest.core.ApiClientHttpResponse; import com.skyflow.generated.rest.core.RequestOptions; import com.skyflow.generated.rest.resources.query.requests.QueryServiceExecuteQueryBody; @@ -202,6 +203,9 @@ public InsertResponse insert(InsertRequest insertRequest) throws SkyflowExceptio String bodyString = GSON.toJson(e.body()); LogUtil.printErrorLog(ErrorLogs.INSERT_RECORDS_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.INSERT_RECORDS_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } LogUtil.printInfoLog(InfoLogs.INSERT_SUCCESS.getLog()); if (insertedFields.isEmpty()) { @@ -247,6 +251,9 @@ public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws String bodyString = GSON.toJson(e.body()); LogUtil.printErrorLog(ErrorLogs.DETOKENIZE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.DETOKENIZE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } if (!errorRecords.isEmpty()) { @@ -304,6 +311,9 @@ public GetResponse get(GetRequest getRequest) throws SkyflowException { String bodyString = GSON.toJson(e.body()); LogUtil.printErrorLog(ErrorLogs.GET_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.GET_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } LogUtil.printInfoLog(InfoLogs.GET_SUCCESS.getLog()); return new GetResponse(data, null); @@ -334,6 +344,9 @@ public UpdateResponse update(UpdateRequest updateRequest) throws SkyflowExceptio String bodyString = GSON.toJson(e.body()); LogUtil.printErrorLog(ErrorLogs.UPDATE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.UPDATE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } LogUtil.printInfoLog(InfoLogs.UPDATE_SUCCESS.getLog()); return new UpdateResponse(skyflowId, tokensMap); @@ -357,6 +370,9 @@ public DeleteResponse delete(DeleteRequest deleteRequest) throws SkyflowExceptio String bodyString = GSON.toJson(e.body()); LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } LogUtil.printInfoLog(InfoLogs.DELETE_SUCCESS.getLog()); return new DeleteResponse(result.getRecordIdResponse().get()); @@ -387,6 +403,9 @@ public QueryResponse query(QueryRequest queryRequest) throws SkyflowException { String bodyString = GSON.toJson(e.body()); LogUtil.printErrorLog(ErrorLogs.QUERY_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.QUERY_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } LogUtil.printInfoLog(InfoLogs.QUERY_SUCCESS.getLog()); return new QueryResponse(fields); @@ -415,6 +434,9 @@ public TokenizeResponse tokenize(TokenizeRequest tokenizeRequest) throws Skyflow String bodyString = GSON.toJson(e.body()); LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } LogUtil.printInfoLog(InfoLogs.TOKENIZE_SUCCESS.getLog()); return new TokenizeResponse(list); @@ -454,6 +476,9 @@ public FileUploadResponse uploadFile(FileUploadRequest fileUploadRequest) throws String bodyString = GSON.toJson(e.body()); LogUtil.printErrorLog(ErrorLogs.UPLOAD_FILE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ApiClientException e) { + LogUtil.printErrorLog(ErrorLogs.UPLOAD_FILE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e.getCause(), ErrorCode.INVALID_INPUT.getCode()); } catch (IOException e) { LogUtil.printErrorLog(ErrorLogs.UPLOAD_FILE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.getMessage(), e); diff --git a/src/test/java/com/skyflow/vault/controller/DetectControllerFileTests.java b/src/test/java/com/skyflow/vault/controller/DetectControllerFileTests.java index da8494e1..3540c160 100644 --- a/src/test/java/com/skyflow/vault/controller/DetectControllerFileTests.java +++ b/src/test/java/com/skyflow/vault/controller/DetectControllerFileTests.java @@ -406,4 +406,36 @@ public void testOutputDirectoryNotWritable() throws Exception { dir.delete(); } } + + @Test + public void testApiClientExceptionInDeidentifyFileMethod() throws Exception { + try { + File file = File.createTempFile("test", ".txt"); + FileInput fileInput = FileInput.builder().file(file).build(); + DeidentifyFileRequest request = DeidentifyFileRequest.builder().file(fileInput).waitTime(1).build(); + detectController.deidentifyFile(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + + @Test + public void testApiClientExceptionInGetDetectRunMethod() { + try { + GetDetectRunRequest request = GetDetectRunRequest.builder().runId("dummy-run-id").build(); + detectController.getDetectRun(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } } \ No newline at end of file diff --git a/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java b/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java index aae713b1..c8ee7a65 100644 --- a/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java +++ b/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java @@ -117,5 +117,36 @@ public void testEmptyTextInRequestInReidentifyStringMethod() { } } -} + @Test + public void testApiClientExceptionInDeidentifyTextMethod() { + try { + DeidentifyTextRequest request = DeidentifyTextRequest.builder().text("Sensitive text").build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.detect(vaultID).deidentifyText(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(com.skyflow.errors.ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + @Test + public void testApiClientExceptionInReidentifyTextMethod() { + try { + ReidentifyTextRequest request = ReidentifyTextRequest.builder().text("Deidentified text").build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.detect(vaultID).reidentifyText(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(com.skyflow.errors.ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + +} diff --git a/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java b/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java index 4115bc2c..e822c179 100644 --- a/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java +++ b/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java @@ -13,11 +13,15 @@ import com.skyflow.utils.Constants; import com.skyflow.utils.Utils; import com.skyflow.vault.data.*; +import com.skyflow.vault.tokens.DetokenizeData; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; public class VaultControllerTests { private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; @@ -185,4 +189,148 @@ public void testInvalidRequestInFileUploadMethod() { } } -} + @Test + public void testApiClientExceptionInInsertMethod() { + try { + ArrayList> values1 = new ArrayList<>(); + HashMap value1 = new HashMap<>(); + value1.put("", ""); + values1.add(value1); + InsertRequest request = InsertRequest.builder().table("table1").values(values1).build(); + + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().insert(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + + @Test + public void testApiClientExceptionInDetokenizeMethod() { + try { + DetokenizeData data = new DetokenizeData("token"); + ArrayList detokenizeData = new ArrayList<>(); + detokenizeData.add(data); + DetokenizeRequest request = DetokenizeRequest.builder().detokenizeData(detokenizeData).build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().detokenize(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + + @Test + public void testApiClientExceptionInGetMethod() { + try { + ArrayList skyflowIds = new ArrayList<>(); + skyflowIds.add(""); // Replace with the Skyflow + GetRequest request = GetRequest.builder().ids(skyflowIds).table("table1").build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().get(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + + @Test + public void testApiClientExceptionInUpdateMethod() { + try { + HashMap data1 = new HashMap<>(); + data1.put("skyflow_id", ""); // Replace with the Skyflow ID of the record + + UpdateRequest request = UpdateRequest.builder().data(data1).table("table1").build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().update(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + + @Test + public void testApiClientExceptionInDeleteMethod() { + try { + ArrayList skyflowIds = new ArrayList<>(); + skyflowIds.add(""); // Replace with the Skyflow + DeleteRequest request = DeleteRequest.builder().ids(skyflowIds).table("table1").build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().delete(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + + @Test + public void testApiClientExceptionInQueryMethod() { + try { + QueryRequest request = QueryRequest.builder().query("SELECT * FROM table1").build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().query(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + + @Test + public void testApiClientExceptionInTokenizeMethod() { + try { + List columnValues = new ArrayList<>(); + columnValues.add(com.skyflow.vault.tokens.ColumnValue.builder().value("val").columnGroup("grp").build()); + TokenizeRequest request = TokenizeRequest.builder().values(columnValues).build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().tokenize(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } + + @Test + public void testApiClientExceptionInFileUploadMethod() { + try { + FileUploadRequest request = FileUploadRequest.builder().columnName("column").table("table1").filePath("./src/test/resources/noPrivateKeyCredentials.json").build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().uploadFile(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals("Network error executing HTTP request", e.getMessage()); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getDetails()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + } + } +} \ No newline at end of file