From 63130701309ef0b150063aca5da4bf2b8735c149 Mon Sep 17 00:00:00 2001 From: Sameeksha Vaity Date: Wed, 14 Aug 2024 22:58:18 -0700 Subject: [PATCH] Fix tests and Readme for Document Intelligence (#41524) --- .../azure-ai-documentintelligence/README.md | 15 ++++--- .../azure-ai-documentintelligence/assets.json | 2 +- .../DocumentIntelligenceAsyncClientTest.java | 39 +++++++++++++++-- .../DocumentIntelligenceClientTest.java | 40 +++++++++++++++--- .../DocumentIntelligenceClientTestBase.java | 4 ++ .../ai/documentintelligence/TestUtils.java | 16 ++++++- .../resources/sample_files/Test/Acord_27.pdf | Bin 0 -> 53348 bytes sdk/documentintelligence/test-resources.json | 17 ++++++++ 8 files changed, 116 insertions(+), 17 deletions(-) create mode 100644 sdk/documentintelligence/azure-ai-documentintelligence/src/test/resources/sample_files/Test/Acord_27.pdf diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/README.md b/sdk/documentintelligence/azure-ai-documentintelligence/README.md index f66f9d3bd993b..f41466c4f9505 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/README.md +++ b/sdk/documentintelligence/azure-ai-documentintelligence/README.md @@ -28,12 +28,12 @@ It includes the following main features: com.azure azure-ai-documentintelligence - 1.0.0-beta.3 + 1.0.0-beta.4 ``` [//]: # ({x-version-update-end}) -> Note: This version of the client library defaults to the `"2024-02-29-preview"` version of the service. +> Note: This version of the client library defaults to the `"2024-07-31-preview"` version of the service. This table shows the relationship between SDK versions and supported API versions of the service: @@ -42,15 +42,16 @@ This table shows the relationship between SDK versions and supported API version | 1.0.0-beta.1 | 2023-10-31-preview | | 1.0.0-beta.2 | 2024-02-29-preview | | 1.0.0-beta.3 | 2024-02-29-preview | +| 1.0.0-beta.4 | 2024-07-31-preview | > Note: Please rely on the older `azure-ai-formrecognizer` library through the older service API versions for retired > models, such as `"prebuilt-businessCard"` and `"prebuilt-document"`. For more information, see [Changelog][changelog]. > The below table describes the relationship of each client and its supported API version(s): -| API version | Supported clients | -|----------------------------------------|-----------------------------------------------------------------------------------------------| -| 2023-10-31-preview, 2024-02-29-preview | DocumentIntelligenceClient and DocumentIntelligenceAsyncClient | -| 2023-07-31 | DocumentAnalysisClient and DocumentModelAdministrationClient in `azure-ai-formrecognizer` SDK | +| API version | Supported clients | +|------------------------------------------------------------|-----------------------------------------------------------------------------------------------| +| 2023-10-31-preview, 2024-02-29-preview, 2024-07-31-preview | DocumentIntelligenceClient and DocumentIntelligenceAsyncClient | +| 2023-07-31 | DocumentAnalysisClient and DocumentModelAdministrationClient in `azure-ai-formrecognizer` SDK | Please see the [Migration Guide][migration_guide] for more information about migrating from `azure-ai-formrecognizer` to `azure-ai-documentintelligence`. @@ -92,7 +93,7 @@ Authentication with AAD requires some initial setup: com.azure azure-identity - 1.13.1 + 1.13.2 ``` [//]: # ({x-version-update-end}) diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/assets.json b/sdk/documentintelligence/azure-ai-documentintelligence/assets.json index 0344cfa6b97e9..039b7e35f6741 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/assets.json +++ b/sdk/documentintelligence/azure-ai-documentintelligence/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/documentintelligence/azure-ai-documentintelligence", - "Tag": "java/documentintelligence/azure-ai-documentintelligence_0e670a71d8" + "Tag": "java/documentintelligence/azure-ai-documentintelligence_32bf8db3b0" } diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceAsyncClientTest.java b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceAsyncClientTest.java index f724523cbeb54..27e36c7d9e639 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceAsyncClientTest.java +++ b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceAsyncClientTest.java @@ -3,16 +3,23 @@ package com.azure.ai.documentintelligence; +import com.azure.ai.documentintelligence.models.AnalyzeBatchDocumentsRequest; +import com.azure.ai.documentintelligence.models.AnalyzeBatchResult; +import com.azure.ai.documentintelligence.models.AnalyzeBatchResultOperation; import com.azure.ai.documentintelligence.models.AnalyzeDocumentRequest; import com.azure.ai.documentintelligence.models.AnalyzeOutputOption; import com.azure.ai.documentintelligence.models.AnalyzeResult; import com.azure.ai.documentintelligence.models.AnalyzeResultOperation; import com.azure.ai.documentintelligence.models.AzureBlobContentSource; import com.azure.ai.documentintelligence.models.BuildDocumentClassifierRequest; +import com.azure.ai.documentintelligence.models.BuildDocumentModelRequest; import com.azure.ai.documentintelligence.models.ClassifierDocumentTypeDetails; import com.azure.ai.documentintelligence.models.ClassifyDocumentRequest; +import com.azure.ai.documentintelligence.models.DocumentBuildMode; import com.azure.ai.documentintelligence.models.DocumentClassifierBuildOperationDetails; import com.azure.ai.documentintelligence.models.DocumentClassifierDetails; +import com.azure.ai.documentintelligence.models.DocumentModelBuildOperationDetails; +import com.azure.ai.documentintelligence.models.DocumentModelDetails; import com.azure.core.http.HttpClient; import com.azure.core.test.annotation.RecordWithoutRequestBody; import com.azure.core.test.http.AssertingHttpClientBuilder; @@ -30,6 +37,7 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; +import static com.azure.ai.documentintelligence.TestUtils.BATCH_SAMPLE_PDF; import static com.azure.ai.documentintelligence.TestUtils.CONTENT_FORM_JPG; import static com.azure.ai.documentintelligence.TestUtils.CONTENT_GERMAN_PDF; import static com.azure.ai.documentintelligence.TestUtils.DEFAULT_TIMEOUT; @@ -42,6 +50,7 @@ import static com.azure.ai.documentintelligence.TestUtils.RECEIPT_CONTOSO_JPG; import static com.azure.ai.documentintelligence.TestUtils.W2_JPG; import static com.azure.ai.documentintelligence.TestUtils.urlRunner; +import static com.azure.ai.documentintelligence.models.AnalyzeOutputOption.PDF; public class DocumentIntelligenceAsyncClientTest extends DocumentIntelligenceClientTestBase { @@ -366,11 +375,10 @@ public void getAnalyzePdf(HttpClient httpClient, @RecordWithoutRequestBody @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) @MethodSource("com.azure.ai.documentintelligence.TestUtils#getTestParameters") - @Disabled("The parameter Output is invalid: parameter not supported.") public void getAnalyzeFigures(HttpClient httpClient, DocumentIntelligenceServiceVersion serviceVersion) { client = getDocumentAnalysisAsyncClient(httpClient, serviceVersion); - String modelID = "prebuilt-read"; + String modelID = "prebuilt-layout"; dataRunner((data, dataLength) -> { PollerFlux resultPollerFlux @@ -388,12 +396,37 @@ public void getAnalyzeFigures(HttpClient httpClient, byte[] figuresHeader = { figuresBytes[0], figuresBytes[1], figuresBytes[2], figuresBytes[3], figuresBytes[4] }; // A PNG's header is expected to start with: ‰PNG - Assertions.assertArrayEquals(new byte[] { (byte) 0x89, 0x50, 0x4E, 0x47 }, figuresHeader); + Assertions.assertArrayEquals(new byte[] { (byte) -119, 80, 78, 71, 13 }, figuresHeader); }) .expectComplete() .verify(DEFAULT_TIMEOUT); }, LAYOUT_SAMPLE); } + @RecordWithoutRequestBody + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.documentintelligence.TestUtils#getTestParameters") + @Disabled("Disabled until file available on main") + public void analyzeBatchDocuments(HttpClient httpClient, + DocumentIntelligenceServiceVersion serviceVersion) { + client = getDocumentAnalysisAsyncClient(httpClient, serviceVersion); + DocumentIntelligenceAdministrationAsyncClient adminClient = getDocumentAdminAsyncClient(httpClient, serviceVersion); + buildBatchModelRunner((trainingFilesUrl) -> { + SyncPoller buildModelPoller = + adminClient + .beginBuildDocumentModel(new BuildDocumentModelRequest("modelID" + UUID.randomUUID(), DocumentBuildMode.GENERATIVE).setAzureBlobSource(new AzureBlobContentSource(trainingFilesUrl))) + .setPollInterval(durationTestMode) + .getSyncPoller(); + + String modelId = buildModelPoller.getFinalResult().getModelId(); + urlRunner((sourceUrl) -> { + SyncPoller + syncPoller + = client.beginAnalyzeBatchDocuments(modelId, null, null, null, null, null, null, Collections.singletonList(PDF), new AnalyzeBatchDocumentsRequest(trainingFilesUrl).setResultPrefix("trainingDocsResult/").setAzureBlobSource(new AzureBlobContentSource(sourceUrl))) + .setPollInterval(durationTestMode) + .getSyncPoller(); + }, BATCH_SAMPLE_PDF); + }); + } } diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceClientTest.java b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceClientTest.java index db4712283abc5..baeeee4673a7f 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceClientTest.java +++ b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceClientTest.java @@ -3,6 +3,9 @@ package com.azure.ai.documentintelligence; +import com.azure.ai.documentintelligence.models.AnalyzeBatchDocumentsRequest; +import com.azure.ai.documentintelligence.models.AnalyzeBatchResult; +import com.azure.ai.documentintelligence.models.AnalyzeBatchResultOperation; import com.azure.ai.documentintelligence.models.AnalyzeDocumentRequest; import com.azure.ai.documentintelligence.models.AnalyzeOutputOption; import com.azure.ai.documentintelligence.models.AnalyzeResult; @@ -33,6 +36,7 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; +import static com.azure.ai.documentintelligence.TestUtils.BATCH_SAMPLE_PDF; import static com.azure.ai.documentintelligence.TestUtils.CONTENT_FORM_JPG; import static com.azure.ai.documentintelligence.TestUtils.CONTENT_GERMAN_PDF; import static com.azure.ai.documentintelligence.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS; @@ -43,6 +47,7 @@ import static com.azure.ai.documentintelligence.TestUtils.MULTIPAGE_INVOICE_PDF; import static com.azure.ai.documentintelligence.TestUtils.RECEIPT_CONTOSO_JPG; import static com.azure.ai.documentintelligence.TestUtils.urlRunner; +import static com.azure.ai.documentintelligence.models.AnalyzeOutputOption.PDF; public class DocumentIntelligenceClientTest extends DocumentIntelligenceClientTestBase { private DocumentIntelligenceClient client; @@ -216,7 +221,6 @@ null, null, null, null, null, null, null, new AnalyzeDocumentRequest().setBase64 */ @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) @MethodSource("com.azure.ai.documentintelligence.TestUtils#getTestParameters") - @Disabled("https://github.com/Azure/azure-sdk-for-java/issues/41027") public void analyzeCustomDocumentUrl(HttpClient httpClient, DocumentIntelligenceServiceVersion serviceVersion) { client = getDocumentAnalysisClient(httpClient, serviceVersion); @@ -444,7 +448,7 @@ public void getAnalyzePdf(HttpClient httpClient, dataRunner((data, dataLength) -> { SyncPoller syncPoller - = client.beginAnalyzeDocument(modelID, null, null, null, null, null, null, Collections.singletonList(AnalyzeOutputOption.PDF), new AnalyzeDocumentRequest().setBase64Source(data)) + = client.beginAnalyzeDocument(modelID, null, null, null, null, null, null, Collections.singletonList(PDF), new AnalyzeDocumentRequest().setBase64Source(data)) .setPollInterval(durationTestMode); String resultId = syncPoller.poll().getValue().getOperationId(); syncPoller.waitForCompletion(); @@ -461,11 +465,10 @@ public void getAnalyzePdf(HttpClient httpClient, @RecordWithoutRequestBody @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) @MethodSource("com.azure.ai.documentintelligence.TestUtils#getTestParameters") - @Disabled("The parameter Output is invalid: parameter not supported.") public void getAnalyzeFigures(HttpClient httpClient, DocumentIntelligenceServiceVersion serviceVersion) { client = getDocumentAnalysisClient(httpClient, serviceVersion); - String modelID = "prebuilt-read"; + String modelID = "prebuilt-layout"; dataRunner((data, dataLength) -> { SyncPoller syncPoller @@ -482,8 +485,35 @@ public void getAnalyzeFigures(HttpClient httpClient, byte[] figuresHeader = { figuresBytes[0], figuresBytes[1], figuresBytes[2], figuresBytes[3], figuresBytes[4] }; // A PNG's header is expected to start with: ‰PNG - Assertions.assertArrayEquals(new byte[] { (byte) 0x89, 0x50, 0x4E, 0x47 }, figuresHeader); + Assertions.assertArrayEquals(new byte[] { (byte) -119, 80, 78, 71, 13 }, figuresHeader); }, LAYOUT_SAMPLE); } + + @RecordWithoutRequestBody + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.documentintelligence.TestUtils#getTestParameters") + @Disabled("Disabled until file available on main") + public void analyzeBatchDocuments(HttpClient httpClient, + DocumentIntelligenceServiceVersion serviceVersion) { + client = getDocumentAnalysisClient(httpClient, serviceVersion); + DocumentIntelligenceAdministrationClient adminClient = getDocumentModelAdminClient(httpClient, serviceVersion); + buildBatchModelRunner((trainingFilesUrl) -> { + SyncPoller buildModelPoller = + adminClient + .beginBuildDocumentModel(new BuildDocumentModelRequest("modelID" + UUID.randomUUID(), DocumentBuildMode.GENERATIVE).setAzureBlobSource(new AzureBlobContentSource(trainingFilesUrl))) + .setPollInterval(durationTestMode); + buildModelPoller.waitForCompletion(); + + String modelId = buildModelPoller.getFinalResult().getModelId(); + + urlRunner((sourceUrl) -> { + SyncPoller + syncPoller + = client.beginAnalyzeBatchDocuments(modelId, null, null, null, null, null, null, Collections.singletonList(PDF), new AnalyzeBatchDocumentsRequest(trainingFilesUrl).setResultPrefix("trainingDocsResult/").setAzureBlobSource(new AzureBlobContentSource(sourceUrl))) + .setPollInterval(durationTestMode); + syncPoller.waitForCompletion(); + }, BATCH_SAMPLE_PDF); + }); + } } diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceClientTestBase.java b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceClientTestBase.java index c409db3cd5c76..d1d347d95612e 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceClientTestBase.java +++ b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentIntelligenceClientTestBase.java @@ -114,6 +114,10 @@ void buildModelRunner(Consumer testRunner) { TestUtils.getTrainingDataContainerHelper(testRunner, interceptorManager.isPlaybackMode()); } + void buildBatchModelRunner(Consumer testRunner) { + TestUtils.getBatchTrainingDataContainerHelper(testRunner, interceptorManager.isPlaybackMode()); + } + void beginClassifierRunner(Consumer testRunner) { TestUtils.getClassifierTrainingDataContainerHelper(testRunner, interceptorManager.isPlaybackMode()); } diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/TestUtils.java b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/TestUtils.java index c32ffba8d03a4..b191ea4a8cef0 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/TestUtils.java +++ b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/TestUtils.java @@ -50,6 +50,7 @@ public final class TestUtils { static final String W2_JPG = "w2-single.png"; static final String IRS_1040 = "IRS-1040_3.pdf"; static final String LAYOUT_SAMPLE = "layout-pageobject.pdf"; + static final String BATCH_SAMPLE_PDF = "Acord_27.pdf"; static final String EXPECTED_MERCHANT_NAME = "Contoso"; static final String URL_TEST_FILE_FORMAT = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/" @@ -72,6 +73,8 @@ public final class TestUtils { GLOBAL_CONFIGURATION.get("DOCUMENTINTELLIGENCE_SELECTION_MARK_DATA_CONTAINER_SAS_URL"); public static final String DOCUMENTINTELLIGENCE_CLASSIFIER_TRAINING_DATA_CONTAINER_SAS_URL_CONFIGURATION = GLOBAL_CONFIGURATION.get("DOCUMENTINTELLIGENCE_CLASSIFIER_TRAINING_DATA_CONTAINER_SAS_URL"); + public static final String DOCUMENTINTELLIGENCE_BATCH_TRAINING_DATA_CONTAINER_SAS_URL_CONFIGURATION = + GLOBAL_CONFIGURATION.get("DOCUMENTINTELLIGENCE_BATCH_TRAINING_DATA_CONTAINER_SAS_URL"); public static final Duration DEFAULT_POLL_INTERVAL = Duration.ofSeconds(5); public static final Duration DEFAULT_TIMEOUT = Duration.ofSeconds(30); private TestUtils() { @@ -104,7 +107,9 @@ public static void getSelectionMarkTrainingContainerHelper(Consumer test public static void getClassifierTrainingDataContainerHelper(Consumer testRunner, boolean isPlaybackMode) { testRunner.accept(getClassifierTrainingFilesContainerUrl(isPlaybackMode)); } - + public static void getBatchTrainingDataContainerHelper(Consumer testRunner, boolean isPlaybackMode) { + testRunner.accept(getBatchTrainingFilesContainerUrl(isPlaybackMode)); + } /** * Get the testing data set SAS Url value based on the test running mode. * @@ -153,6 +158,15 @@ private static String getClassifierTrainingFilesContainerUrl(boolean isPlaybackM return isPlaybackMode ? "https://isPlaybackmode" : DOCUMENTINTELLIGENCE_CLASSIFIER_TRAINING_DATA_CONTAINER_SAS_URL_CONFIGURATION; } + /** + * Get the training data set SAS Url value based on the test running mode. + * + * @return the training data set Url + */ + private static String getBatchTrainingFilesContainerUrl(boolean isPlaybackMode) { + return isPlaybackMode ? "https://isPlaybackmode" : DOCUMENTINTELLIGENCE_BATCH_TRAINING_DATA_CONTAINER_SAS_URL_CONFIGURATION; + } + /** * Returns a stream of arguments that includes all combinations of eligible {@link HttpClient HttpClients} and * service versions that should be tested. diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/resources/sample_files/Test/Acord_27.pdf b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/resources/sample_files/Test/Acord_27.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4e0b5b42d8844d3933c5fa4829f53fc9a6c6d6c9 GIT binary patch literal 53348 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 BDEj~a literal 0 HcmV?d00001 diff --git a/sdk/documentintelligence/test-resources.json b/sdk/documentintelligence/test-resources.json index 713a941e88124..f0b4a46d58955 100644 --- a/sdk/documentintelligence/test-resources.json +++ b/sdk/documentintelligence/test-resources.json @@ -30,6 +30,10 @@ "type": "string", "defaultValue": "trainingdata-v3" }, + "batchTrainingDataContainer": { + "type": "string", + "defaultValue": "trainingdata-batch" + }, "selectionMarkTrainingDataContainer": { "type": "string", "defaultValue": "selectionmark-v3" @@ -47,6 +51,15 @@ "signedResource": "c" } }, + "batchTrainingSasProperties": { + "type": "object", + "defaultValue": { + "canonicalizedResource": "[concat('/blob/', parameters('blobStorageAccount'), '/', parameters('batchTrainingDataContainer'))]", + "signedExpiry": "[dateTimeAdd(utcNow('u'), 'P2M')]", + "signedPermission": "rwl", + "signedResource": "c" + } + }, "selectionMarkTrainingDataSasProperties": { "type": "object", "defaultValue": { @@ -122,6 +135,10 @@ "type": "string", "value": "[concat(reference(parameters('blobResourceId'), '2019-06-01').primaryEndpoints.blob, parameters('classifierTrainingDataContainer'), '?', listServiceSas(parameters('blobResourceId'), '2019-06-01', parameters('classifierTrainingSasProperties')).serviceSasToken)]" }, + "DOCUMENTINTELLIGENCE_BATCH_TRAINING_DATA_CONTAINER_SAS_URL": { + "type": "string", + "value": "[concat(reference(parameters('blobResourceId'), '2019-06-01').primaryEndpoints.blob, parameters('batchTrainingDataContainer'), '?', listServiceSas(parameters('blobResourceId'), '2019-06-01', parameters('batchTrainingSasProperties')).serviceSasToken)]" + }, "DOCUMENTINTELLIGENCE_MULTIPAGE_TRAINING_DATA_CONTAINER_SAS_URL": { "type": "string", "value": "[concat(reference(parameters('blobResourceId'), '2019-06-01').primaryEndpoints.blob, parameters('multiPageTestingDataContainer'), '?', listServiceSas(parameters('blobResourceId'), '2019-06-01', parameters('multiPageTestingDataSasProperties')).serviceSasToken)]"