From 79ff30cd7e30dc4d7e53b01f489395ccb88c23a9 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 9 Aug 2024 10:53:47 +0300 Subject: [PATCH 1/4] Add null check --- src/Microsoft.OpenApi/Models/OpenApiMediaType.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs index 3816fb14f..1ee1ce176 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs @@ -77,7 +77,10 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, e) => w.WriteAny(e)); // examples - SerializeExamples(writer, Examples); + if (Examples != null && Examples.Any()) + { + SerializeExamples(writer, Examples); + } // encoding writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, (w, e) => e.SerializeAsV3(w)); From c3d6161898c96aecf1944294b0fedebde7614d77 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 9 Aug 2024 10:54:08 +0300 Subject: [PATCH 2/4] Add test to validate; remove commented out code --- .../Models/OpenApiDocumentTests.cs | 57 ++++++++++++------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index 168ec3ade..c9807f5a2 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -1670,27 +1671,6 @@ private static OpenApiDocument ParseInputFile(string filePath) return openApiDoc; } - //[Fact] - //public void CopyConstructorForAdvancedDocumentWorks() - //{ - // // Arrange & Act - // var doc = new OpenApiDocument(AdvancedDocument); - - // var docOpId = doc.Paths["/pets"].Operations[OperationType.Get].OperationId = "findAllMyPets"; - // var advancedDocOpId = AdvancedDocument.Paths["/pets"].Operations[OperationType.Get].OperationId; - // var responseSchemaTypeCopy = doc.Paths["/pets"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema.Type = "object"; - // var advancedDocResponseSchemaType = AdvancedDocument.Paths["/pets"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema.Type; - - // // Assert - // Assert.NotNull(doc.Info); - // Assert.NotNull(doc.Servers); - // Assert.NotNull(doc.Paths); - // Assert.Equal(2, doc.Paths.Count); - // Assert.NotNull(doc.Components); - // Assert.NotEqual(docOpId, advancedDocOpId); - // Assert.NotEqual(responseSchemaTypeCopy, advancedDocResponseSchemaType); - //} - [Fact] public void SerializeV2DocumentWithNonArraySchemaTypeDoesNotWriteOutCollectionFormat() { @@ -1858,5 +1838,38 @@ public void OpenApiDocumentCopyConstructorWithAnnotationsSucceeds() Assert.NotEqual(baseDocument.Annotations["key1"], actualDocument.Annotations["key1"]); } - } + + [Fact] + public void SerializeExamplesDoesNotThrowNullReferenceException() + { + OpenApiDocument doc = new OpenApiDocument + { + Paths = new OpenApiPaths + { + ["test"] = new OpenApiPathItem() + { + Operations = new Dictionary() + { + [OperationType.Post] = new OpenApiOperation + { + RequestBody = new OpenApiRequestBody() + { + Content = + { + ["application/json"] = new OpenApiMediaType() + { + Examples = null, + }, + } + } + }, + } + }, + } + }; + + OpenApiJsonWriter apiWriter = new OpenApiJsonWriter(new StringWriter()); + doc.Invoking(d => d.SerializeAsV3(apiWriter)).Should().NotThrow(); + } + } } From a8a40ab9dc94db782c04d4d47ce639c2cb96bf0f Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 9 Aug 2024 11:02:24 +0300 Subject: [PATCH 3/4] Bump lib versions --- src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj | 2 +- src/Microsoft.OpenApi/Microsoft.OpenApi.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj index c8af22cb3..b75e7009c 100644 --- a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj +++ b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj @@ -3,7 +3,7 @@ netstandard2.0 latest true - 1.6.17 + 1.6.18 OpenAPI.NET Readers for JSON and YAML documents true diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj index b2f09236f..2a674f542 100644 --- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj +++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj @@ -3,7 +3,7 @@ netstandard2.0 Latest true - 1.6.17 + 1.6.18 .NET models with JSON and YAML writers for OpenAPI specification true From fd4f7521ae519a69ac3409714ebe4387e00f278a Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 9 Aug 2024 11:23:39 +0300 Subject: [PATCH 4/4] Upgrade ESRPCodeSigning tasks --- .azure-pipelines/ci-build.yml | 71 ++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/.azure-pipelines/ci-build.yml b/.azure-pipelines/ci-build.yml index 50407cd50..8a2e7ef18 100644 --- a/.azure-pipelines/ci-build.yml +++ b/.azure-pipelines/ci-build.yml @@ -78,16 +78,18 @@ extends: projects: '$(Build.SourcesDirectory)\Microsoft.OpenApi.sln' arguments: '--configuration $(BuildConfiguration) --no-build' - - task: EsrpCodeSigning@2 - displayName: 'ESRP CodeSigning' + - task: EsrpCodeSigning@5 inputs: - ConnectedServiceName: 'microsoftgraph ESRP CodeSign DLL and NuGet (AKV)' - FolderPath: src - signConfigType: inlineSignParams + ConnectedServiceName: 'Federated DevX ESRP Managed Identity Connection' + AppRegistrationClientId: '65035b7f-7357-4f29-bf25-c5ee5c3949f8' + AppRegistrationTenantId: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' + AuthAKVName: 'akv-prod-eastus' + AuthCertName: 'ReferenceLibraryPrivateCert' + AuthSignCertName: 'ReferencePackagePublisherCertificate' + FolderPath: '$(Build.SourcesDirectory)\src' + Pattern: '*.dll' UseMinimatch: true - Pattern: | - **\*.exe - **\*.dll + signConfigType: 'inlineSignParams' inlineOperation: | [ { @@ -126,7 +128,10 @@ extends: "toolVersion": "1.0" } ] - SessionTimeout: 20 + SessionTimeout: '20' + MaxConcurrency: '50' + MaxRetryAttempts: '5' + PendingAnalysisWaitTimeoutMinutes: '5' # Pack core lib - pwsh: dotnet pack $(Build.SourcesDirectory)/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj -o $(Build.ArtifactStagingDirectory) --configuration $(BuildConfiguration) --no-build --include-symbols --include-source /p:SymbolPackageFormat=snupkg @@ -140,32 +145,38 @@ extends: - pwsh: dotnet pack $(Build.SourcesDirectory)/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj -o $(Build.ArtifactStagingDirectory) --configuration $(BuildConfiguration) --no-build --include-symbols --include-source /p:SymbolPackageFormat=snupkg displayName: 'pack Hidi' - - task: EsrpCodeSigning@2 - displayName: 'ESRP CodeSigning Nuget Packages' + - task: EsrpCodeSigning@5 inputs: - ConnectedServiceName: 'microsoftgraph ESRP CodeSign DLL and NuGet (AKV)' + ConnectedServiceName: 'Federated DevX ESRP Managed Identity Connection' + AppRegistrationClientId: '65035b7f-7357-4f29-bf25-c5ee5c3949f8' + AppRegistrationTenantId: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' + AuthAKVName: 'akv-prod-eastus' + AuthCertName: 'ReferenceLibraryPrivateCert' + AuthSignCertName: 'ReferencePackagePublisherCertificate' FolderPath: '$(Build.ArtifactStagingDirectory)' Pattern: '*.nupkg' - signConfigType: inlineSignParams - UseMinimatch: true + signConfigType: 'inlineSignParams' inlineOperation: | [ - { - "keyCode": "CP-401405", - "operationSetCode": "NuGetSign", - "parameters": [ ], - "toolName": "sign", - "toolVersion": "1.0" - }, - { - "keyCode": "CP-401405", - "operationSetCode": "NuGetVerify", - "parameters": [ ], - "toolName": "sign", - "toolVersion": "1.0" - } - ] - SessionTimeout: 20 + { + "keyCode": "CP-401405", + "operationSetCode": "NuGetSign", + "parameters": [ ], + "toolName": "sign", + "toolVersion": "1.0" + }, + { + "keyCode": "CP-401405", + "operationSetCode": "NuGetVerify", + "parameters": [ ], + "toolName": "sign", + "toolVersion": "1.0" + } + ] + SessionTimeout: '60' + MaxConcurrency: '50' + MaxRetryAttempts: '5' + PendingAnalysisWaitTimeoutMinutes: '5' - task: PowerShell@2 displayName: "Get Hidi's version-number from .csproj"