Skip to content

Commit bfd0e2f

Browse files
tg-msftmaririos
andauthored
Add basic multi-version support to FR (Azure#20693)
* Add basic multi-version support to FR * enable multi-api testing with mostly 2.1p3 Co-authored-by: Mariana Rios Flores <mariari@microsoft.com>
1 parent 8f1df50 commit bfd0e2f

File tree

8 files changed

+192
-43
lines changed

8 files changed

+192
-43
lines changed

sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormRecognizerClient.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public FormRecognizerClient(Uri endpoint, AzureKeyCredential credential, FormRec
5858

5959
Diagnostics = new ClientDiagnostics(options);
6060
var pipeline = HttpPipelineBuilder.Build(options, new AzureKeyCredentialPolicy(credential, Constants.AuthorizationHeader));
61-
ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri);
61+
ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri, FormRecognizerClientOptions.GetVersionString(options.Version));
6262
}
6363

6464
/// <summary>
@@ -93,7 +93,7 @@ public FormRecognizerClient(Uri endpoint, TokenCredential credential, FormRecogn
9393

9494
Diagnostics = new ClientDiagnostics(options);
9595
var pipeline = HttpPipelineBuilder.Build(options, new BearerTokenAuthenticationPolicy(credential, Constants.DefaultCognitiveScope));
96-
ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri);
96+
ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri, FormRecognizerClientOptions.GetVersionString(options.Version));
9797
}
9898

9999
/// <summary>

sdk/formrecognizer/Azure.AI.FormRecognizer/src/FormTrainingClient.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public FormTrainingClient(Uri endpoint, AzureKeyCredential credential, FormRecog
6666

6767
Diagnostics = new ClientDiagnostics(options);
6868
HttpPipeline pipeline = HttpPipelineBuilder.Build(options, new AzureKeyCredentialPolicy(credential, Constants.AuthorizationHeader));
69-
ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri);
69+
ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri, FormRecognizerClientOptions.GetVersionString(options.Version));
7070
}
7171

7272
/// <summary>
@@ -101,7 +101,7 @@ public FormTrainingClient(Uri endpoint, TokenCredential credential, FormRecogniz
101101

102102
Diagnostics = new ClientDiagnostics(options);
103103
var pipeline = HttpPipelineBuilder.Build(options, new BearerTokenAuthenticationPolicy(credential, Constants.DefaultCognitiveScope));
104-
ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri);
104+
ServiceClient = new FormRecognizerRestClient(Diagnostics, pipeline, endpoint.AbsoluteUri, FormRecognizerClientOptions.GetVersionString(options.Version));
105105
}
106106

107107
#region Training

sdk/formrecognizer/Azure.AI.FormRecognizer/src/Generated/FormRecognizerRestClient.cs

Lines changed: 65 additions & 30 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/formrecognizer/Azure.AI.FormRecognizer/src/autorest.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,25 @@ require:
1111
- https://github.com/Azure/azure-rest-api-specs/blob/5a260d47021d8278c26dd6f946f4e6b97e0cd023/specification/cognitiveservices/data-plane/FormRecognizer/readme.md
1212
```
1313
14+
### Make the API version parameterized so we generate a multi-versioned API
15+
16+
This should be fixed in the swagger, but we're working around it locally for now.
17+
``` yaml
18+
directive:
19+
- from: swagger-document
20+
where: $["x-ms-parameterized-host"]
21+
transform: >
22+
$.hostTemplate = "{endpoint}/formrecognizer/{apiVersion}";
23+
$.parameters.push({
24+
"name": "apiVersion",
25+
"description": "Form Recognizer API version (for example: v2.0).",
26+
"x-ms-parameter-location": "client",
27+
"required": true,
28+
"type": "string",
29+
"in": "path",
30+
"x-ms-skip-url-encoding": true
31+
});
32+
```
1433
1534
### Make AnalyzeResult.readResult optional
1635
This is a temporary work-around

sdk/formrecognizer/Azure.AI.FormRecognizer/tests/FormRecognizerClient/FormRecognizerClientLiveTests.cs

Lines changed: 75 additions & 2 deletions
Large diffs are not rendered by default.

sdk/formrecognizer/Azure.AI.FormRecognizer/tests/FormTrainingClient/FormTrainingClientLiveTests.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ public class FormTrainingClientLiveTests : FormRecognizerLiveTestBase
2525
/// Initializes a new instance of the <see cref="FormTrainingClientLiveTests"/> class.
2626
/// </summary>
2727
/// <param name="isAsync">A flag used by the Azure Core Test Framework to differentiate between tests for asynchronous and synchronous methods.</param>
28-
public FormTrainingClientLiveTests(bool isAsync)
29-
: base(isAsync)
28+
public FormTrainingClientLiveTests(bool isAsync, FormRecognizerClientOptions.ServiceVersion serviceVersion)
29+
: base(isAsync, serviceVersion)
3030
{
3131
}
3232

@@ -72,6 +72,7 @@ public async Task StartTraining(bool singlePage, bool labeled)
7272
CustomFormModel model = operation.Value;
7373

7474
Assert.IsNotNull(model.ModelId);
75+
Assert.IsNull(model.ModelName);
7576
Assert.IsNotNull(model.Properties);
7677
Assert.IsFalse(model.Properties.IsComposedModel);
7778
Assert.IsNotNull(model.TrainingStartedOn);
@@ -108,6 +109,7 @@ public async Task StartTraining(bool singlePage, bool labeled)
108109
[RecordedTest]
109110
[TestCase(true)]
110111
[TestCase(false)]
112+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
111113
public async Task CheckFormTypeinSubmodelAndRecognizedForm(bool labeled)
112114
{
113115
var client = CreateFormTrainingClient();
@@ -135,6 +137,7 @@ public async Task CheckFormTypeinSubmodelAndRecognizedForm(bool labeled)
135137
[RecordedTest]
136138
[TestCase(false)]
137139
[TestCase(true)]
140+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
138141
public async Task StartCreateComposedModel(bool useTokenCredential)
139142
{
140143
var client = CreateFormTrainingClient(useTokenCredential);
@@ -203,6 +206,7 @@ public async Task StartCreateComposedModel(bool useTokenCredential)
203206
}
204207

205208
[RecordedTest]
209+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
206210
public async Task StartCreateComposedModelFailsWithInvalidId()
207211
{
208212
var client = CreateFormTrainingClient();
@@ -245,6 +249,7 @@ public async Task StartTrainingFailsWithInvalidPrefix()
245249
}
246250

247251
[RecordedTest]
252+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
248253
public async Task StartTrainingWithLabelsModelName()
249254
{
250255
var client = CreateFormTrainingClient();
@@ -260,6 +265,7 @@ public async Task StartTrainingWithLabelsModelName()
260265
}
261266

262267
[RecordedTest]
268+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
263269
public async Task StartTrainingWithNoLabelsModelName()
264270
{
265271
var client = CreateFormTrainingClient();
@@ -401,6 +407,7 @@ public async Task CopyModel(bool useTokenCredential)
401407
}
402408

403409
[RecordedTest]
410+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
404411
public async Task CopyModelWithLabelsAndModelName()
405412
{
406413
var sourceClient = CreateFormTrainingClient();
@@ -431,6 +438,7 @@ public async Task CopyModelWithLabelsAndModelName()
431438
[RecordedTest]
432439
[TestCase(true)]
433440
[TestCase(false)]
441+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
434442
public async Task CopyComposedModel(bool useTokenCredential)
435443
{
436444
var sourceClient = CreateFormTrainingClient(useTokenCredential);
@@ -468,6 +476,7 @@ public async Task CopyComposedModel(bool useTokenCredential)
468476
}
469477

470478
[RecordedTest]
479+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
471480
public async Task CopyModelWithoutLabelsAndModelName()
472481
{
473482
var sourceClient = CreateFormTrainingClient();

sdk/formrecognizer/Azure.AI.FormRecognizer/tests/Infrastructure/FormRecognizerLiveTestBase.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,21 @@
99

1010
namespace Azure.AI.FormRecognizer.Tests
1111
{
12+
[ClientTestFixture(
13+
FormRecognizerClientOptions.ServiceVersion.V2_0,
14+
FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
1215
public class FormRecognizerLiveTestBase : RecordedTestBase<FormRecognizerTestEnvironment>
1316
{
14-
public FormRecognizerLiveTestBase(bool isAsync)
17+
/// <summary>
18+
/// The version of the REST API to test against. This will be passed
19+
/// to the .ctor via ClientTestFixture's values.
20+
/// </summary>
21+
private readonly FormRecognizerClientOptions.ServiceVersion _serviceVersion;
22+
23+
public FormRecognizerLiveTestBase(bool isAsync, FormRecognizerClientOptions.ServiceVersion serviceVersion)
1524
: base(isAsync)
1625
{
26+
_serviceVersion = serviceVersion;
1727
Sanitizer = new FormRecognizerRecordedTestSanitizer();
1828
}
1929

@@ -39,7 +49,7 @@ public FormRecognizerLiveTestBase(bool isAsync)
3949
protected FormRecognizerClient CreateFormRecognizerClient(out FormRecognizerClient nonInstrumentedClient, bool useTokenCredential = false, string apiKey = default)
4050
{
4151
var endpoint = new Uri(TestEnvironment.Endpoint);
42-
var options = InstrumentClientOptions(new FormRecognizerClientOptions());
52+
var options = InstrumentClientOptions(new FormRecognizerClientOptions(_serviceVersion));
4353

4454
if (useTokenCredential)
4555
{
@@ -77,7 +87,7 @@ protected FormRecognizerClient CreateFormRecognizerClient(out FormRecognizerClie
7787
protected FormTrainingClient CreateFormTrainingClient(out FormTrainingClient nonInstrumentedClient, bool useTokenCredential = false, string apiKey = default)
7888
{
7989
var endpoint = new Uri(TestEnvironment.Endpoint);
80-
var options = InstrumentClientOptions(new FormRecognizerClientOptions());
90+
var options = InstrumentClientOptions(new FormRecognizerClientOptions(_serviceVersion));
8191

8292
if (useTokenCredential)
8393
{

sdk/formrecognizer/Azure.AI.FormRecognizer/tests/Models/OperationsLiveTests.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public class OperationsLiveTests : FormRecognizerLiveTestBase
2424
/// Initializes a new instance of the <see cref="OperationsLiveTests"/> class.
2525
/// </summary>
2626
/// <param name="isAsync">A flag used by the Azure Core Test Framework to differentiate between tests for asynchronous and synchronous methods.</param>
27-
public OperationsLiveTests(bool isAsync)
28-
: base(isAsync)
27+
public OperationsLiveTests(bool isAsync, FormRecognizerClientOptions.ServiceVersion serviceVersion)
28+
: base(isAsync, serviceVersion)
2929
{
3030
}
3131

@@ -60,6 +60,7 @@ public async Task RecognizeReceiptsOperationCanPollFromNewObject()
6060
}
6161

6262
[RecordedTest]
63+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
6364
public async Task RecognizeInvoicesOperationCanPollFromNewObject()
6465
{
6566
var client = CreateFormRecognizerClient(out var nonInstrumentedClient);
@@ -75,6 +76,7 @@ public async Task RecognizeInvoicesOperationCanPollFromNewObject()
7576
}
7677

7778
[RecordedTest]
79+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
7880
public async Task RecognizeIdDocumentsOperationCanPollFromNewObject()
7981
{
8082
var client = CreateFormRecognizerClient(out var nonInstrumentedClient);
@@ -126,6 +128,7 @@ public async Task TrainingOperationCanPollFromNewObject()
126128
}
127129

128130
[RecordedTest]
131+
[ServiceVersion(Min = FormRecognizerClientOptions.ServiceVersion.V2_1_Preview_3)]
129132
public async Task CreateComposedModelOperationCanPollFromNewObject()
130133
{
131134
var client = CreateFormTrainingClient(out var nonInstrumentedClient);

0 commit comments

Comments
 (0)