From 25eda99e2e42bc7ef706029f28c5b2ae9b0735d0 Mon Sep 17 00:00:00 2001 From: Stefan Seeland <168659+stesee@users.noreply.github.com> Date: Wed, 1 Jul 2020 23:12:16 +0200 Subject: [PATCH] Linux support in ci (#16) * extended output on failed verapdf execution * fixed error message creation code * fixed linux testsetup * nonfunctional changes * dropped things that didnt do anything * dropped unused variable * Added notes about dependencies * Moved forward to async implementation, Fixed some compile warnings * Updated ubuntu 20.04 cook book * Major version increased * Added integrative test * Enabled dependency injection in webapp * upgraded nuget references --- PdfAValidator/PdfAValidator.csproj | 4 +- PdfAValidatorTest/PdfAValidatorTest.csproj | 4 +- .../Controllers/PdfAValidatorController.cs | 14 +++- .../PdfAValidatorWebApi.csproj | 6 +- PdfAValidatorWebApi/Startup.cs | 6 +- PdfAValidatorWebApiTest/FromLibreOffice.pdf | Bin 0 -> 29698 bytes PdfAValidatorWebApiTest/IntegrativeTests.cs | 77 ++++++++++++++++++ .../PdfAValidatorWebApiTest.csproj | 11 ++- .../ShouldStartSuccessfull.cs | 35 -------- nugetUpgrade.sh | 17 ++++ 10 files changed, 123 insertions(+), 51 deletions(-) create mode 100644 PdfAValidatorWebApiTest/FromLibreOffice.pdf create mode 100644 PdfAValidatorWebApiTest/IntegrativeTests.cs delete mode 100644 PdfAValidatorWebApiTest/ShouldStartSuccessfull.cs create mode 100755 nugetUpgrade.sh diff --git a/PdfAValidator/PdfAValidator.csproj b/PdfAValidator/PdfAValidator.csproj index 913a540..3200ed5 100644 --- a/PdfAValidator/PdfAValidator.csproj +++ b/PdfAValidator/PdfAValidator.csproj @@ -50,7 +50,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -58,7 +58,7 @@ - + diff --git a/PdfAValidatorTest/PdfAValidatorTest.csproj b/PdfAValidatorTest/PdfAValidatorTest.csproj index 4550dd1..ab0446c 100644 --- a/PdfAValidatorTest/PdfAValidatorTest.csproj +++ b/PdfAValidatorTest/PdfAValidatorTest.csproj @@ -48,12 +48,12 @@ all - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/PdfAValidatorWebApi/Controllers/PdfAValidatorController.cs b/PdfAValidatorWebApi/Controllers/PdfAValidatorController.cs index 31abe41..f17004b 100644 --- a/PdfAValidatorWebApi/Controllers/PdfAValidatorController.cs +++ b/PdfAValidatorWebApi/Controllers/PdfAValidatorController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Http; +using Codeuctivity; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.IO; @@ -15,6 +16,15 @@ namespace CodeuctivityWebApi.Controllers [ApiController] public class PdfAValidatorController : ControllerBase { + private IPdfAValidator pdfAValidator { get; } + /// + /// Inject the validator. + /// + public PdfAValidatorController(IPdfAValidator PdfAValidator) + { + pdfAValidator = PdfAValidator; + } + /// /// Validates the compliance of a PdfA. /// @@ -42,7 +52,6 @@ private async Task InternalValidate() try { using var fs = new FileStream(tempPdfFilePath, FileMode.CreateNew, FileAccess.Write); - using var pdfAValidator = new Codeuctivity.PdfAValidator(); await uploadedFile.CopyToAsync(fs).ConfigureAwait(false); var result = await pdfAValidator.ValidateAsync(tempPdfFilePath).ConfigureAwait(false); @@ -75,7 +84,6 @@ public async Task ValidateWithDetailedReport(IFormFile pdfFile) try { using var fs = new FileStream(tempPdfFilePath, FileMode.CreateNew, FileAccess.Write); - using var pdfAValidator = new Codeuctivity.PdfAValidator(); await uploadedFile.CopyToAsync(fs).ConfigureAwait(false); var result = pdfAValidator.ValidateWithDetailedReportAsync(tempPdfFilePath); diff --git a/PdfAValidatorWebApi/PdfAValidatorWebApi.csproj b/PdfAValidatorWebApi/PdfAValidatorWebApi.csproj index e6a58ba..93894ea 100644 --- a/PdfAValidatorWebApi/PdfAValidatorWebApi.csproj +++ b/PdfAValidatorWebApi/PdfAValidatorWebApi.csproj @@ -17,12 +17,12 @@ all - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/PdfAValidatorWebApi/Startup.cs b/PdfAValidatorWebApi/Startup.cs index c9537bd..de11b4c 100644 --- a/PdfAValidatorWebApi/Startup.cs +++ b/PdfAValidatorWebApi/Startup.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Builder; +using Codeuctivity; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; @@ -24,13 +25,14 @@ public class Startup /// public void ConfigureServices(IServiceCollection services) { + services.AddSingleton(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest); // Register the Swagger generator, defining 1 or more Swagger documents services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { - Version = "v1", + Version = "v2", Title = "PdfAValidator", Description = "A simple ASP.NET Core Web API wrapping access to VeraPdf", TermsOfService = new Uri(GithubProjectAdress), diff --git a/PdfAValidatorWebApiTest/FromLibreOffice.pdf b/PdfAValidatorWebApiTest/FromLibreOffice.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4ad16e24c94f07827fcb3eaccca880efb589c9b5 GIT binary patch literal 29698 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 CQtFKW literal 0 HcmV?d00001 diff --git a/PdfAValidatorWebApiTest/IntegrativeTests.cs b/PdfAValidatorWebApiTest/IntegrativeTests.cs new file mode 100644 index 0000000..92ed2b0 --- /dev/null +++ b/PdfAValidatorWebApiTest/IntegrativeTests.cs @@ -0,0 +1,77 @@ +using Microsoft.AspNetCore.Mvc.Testing; +using System; +using System.IO; +using System.Net.Http; +using System.Threading.Tasks; +using Xunit; + +namespace CodeuctivityWebApiTest +{ + public class IntegrativeTests : IClassFixture> + { + private readonly WebApplicationFactory _factory; + + public IntegrativeTests(WebApplicationFactory factory) + { + _factory = factory; + } + + [Theory] + [InlineData("/", "text/html; charset=utf-8")] + [InlineData("/swagger/v1/swagger.json", "application/json; charset=utf-8")] + public async Task ShouldAccessEndpointSuccessfull(string route, string contentType) + { + // Arrange + var client = _factory.CreateClient(); + var expectedUrl = new Uri($"https://localhost{route}"); + + // Act + var response = await client.GetAsync(expectedUrl).ConfigureAwait(false); + + // Assert + response.EnsureSuccessStatusCode(); + Assert.Equal(contentType, response.Content.Headers.ContentType.ToString()); + } + + [Fact] + public async Task ShouldValidatePdf() + { + // Arrange + var client = _factory.CreateClient(); + using var request = new HttpRequestMessage(new HttpMethod("POST"), "http://localhost/api/PdfAValidator"); + using var file = new ByteArrayContent(File.ReadAllBytes("../../../FromLibreOffice.pdf")); + file.Headers.Add("Content-Type", "application/pdf"); + var multipartContent = new MultipartFormDataContent(); + multipartContent.Add(file, "pdfFile", Path.GetFileName("FromLibreOffice.pdf")); + request.Content = multipartContent; + + // Act + var response = await client.SendAsync(request).ConfigureAwait(false); + + // Assert + response.EnsureSuccessStatusCode(); + Assert.Equal("true", await response.Content.ReadAsStringAsync().ConfigureAwait(false)); + } + + [Fact] + public async Task ShouldValidatePdfDetailedReport() + { + // Arrange + var client = _factory.CreateClient(); + using var request = new HttpRequestMessage(new HttpMethod("POST"), "http://localhost/api/PdfAValidator/DetailedReport"); + using var file = new ByteArrayContent(File.ReadAllBytes("../../../FromLibreOffice.pdf")); + file.Headers.Add("Content-Type", "application/pdf"); + var multipartContent = new MultipartFormDataContent(); + multipartContent.Add(file, "pdfFile", Path.GetFileName("FromLibreOffice.pdf")); + request.Content = multipartContent; + + // Act + var response = await client.SendAsync(request).ConfigureAwait(false); + // Assert + response.EnsureSuccessStatusCode(); + + string actual = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + Assert.Contains("isCompliant\":true", actual); + } + } +} diff --git a/PdfAValidatorWebApiTest/PdfAValidatorWebApiTest.csproj b/PdfAValidatorWebApiTest/PdfAValidatorWebApiTest.csproj index 35f43d8..b08f32f 100644 --- a/PdfAValidatorWebApiTest/PdfAValidatorWebApiTest.csproj +++ b/PdfAValidatorWebApiTest/PdfAValidatorWebApiTest.csproj @@ -14,14 +14,17 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/PdfAValidatorWebApiTest/ShouldStartSuccessfull.cs b/PdfAValidatorWebApiTest/ShouldStartSuccessfull.cs deleted file mode 100644 index b77ce53..0000000 --- a/PdfAValidatorWebApiTest/ShouldStartSuccessfull.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Microsoft.AspNetCore.Mvc.Testing; -using System; -using System.Threading.Tasks; -using Xunit; - -namespace CodeuctivityWebApiTest -{ - public class ShouldStartSuccessfull : IClassFixture> - { - private readonly WebApplicationFactory _factory; - - public ShouldStartSuccessfull(WebApplicationFactory factory) - { - _factory = factory; - } - - [Theory] - [InlineData("/", "text/html; charset=utf-8")] - [InlineData("/swagger/v1/swagger.json", "application/json; charset=utf-8")] - public async Task ShouldAccessEndpointSuccessfull(string route, string contentType) - { - // Arrange - var client = _factory.CreateClient(); - var expectedUrl = new Uri($"https://localhost{route}"); - - // Act - var response = await client.GetAsync(expectedUrl).ConfigureAwait(false); - - // Assert - response.EnsureSuccessStatusCode(); - Assert.Equal(contentType, - response.Content.Headers.ContentType.ToString()); - } - } -} \ No newline at end of file diff --git a/nugetUpgrade.sh b/nugetUpgrade.sh new file mode 100755 index 0000000..59a9747 --- /dev/null +++ b/nugetUpgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash +regex='PackageReference Include="([^"]*)" Version="([^"]*)"' +find . -name "*.*proj" | while read proj +do + while read line + do + if [[ $line =~ $regex ]] + then + name="${BASH_REMATCH[1]}" + version="${BASH_REMATCH[2]}" + if [[ $version != *-* ]] + then + dotnet add $proj package $name + fi + fi + done < $proj +done \ No newline at end of file