From c774a0f280be917c331c452ece13b74908d30c24 Mon Sep 17 00:00:00 2001 From: Liudmila Molkova Date: Wed, 18 Aug 2021 14:59:40 -0700 Subject: [PATCH] Add docs and tests --- sdk/core/azure-core-jackson-tests/pom.xml | 126 +++++++++++++++--- .../UnsupportedJacksonVersionsTests.java | 34 +++++ sdk/core/azure-core/pom.xml | 2 +- .../jackson/JacksonVersion.java | 20 ++- .../azure-core/src/main/java/module-info.java | 2 +- .../implementation/SemanticVersionTests.java | 13 +- ...rix.json => supported-version-matrix.json} | 0 sdk/core/tests.yml | 21 ++- sdk/core/unsupported-version-matrix.json | 17 +++ 9 files changed, 208 insertions(+), 27 deletions(-) create mode 100644 sdk/core/azure-core-jackson-tests/src/test/java/com/azure/core/implementation/jackson/UnsupportedJacksonVersionsTests.java rename sdk/core/{version-matrix.json => supported-version-matrix.json} (100%) create mode 100644 sdk/core/unsupported-version-matrix.json diff --git a/sdk/core/azure-core-jackson-tests/pom.xml b/sdk/core/azure-core-jackson-tests/pom.xml index 2c24acc7fb88f..98a14ced7eb34 100644 --- a/sdk/core/azure-core-jackson-tests/pom.xml +++ b/sdk/core/azure-core-jackson-tests/pom.xml @@ -54,13 +54,13 @@ com.azure azure-core - 1.19.0-beta.2 + 1.20.0-beta.1 com.azure azure-core - 1.19.0-beta.2 + 1.20.0-beta.1 tests test-jar test @@ -163,36 +163,49 @@ org.apache.maven.plugins - maven-surefire-plugin - 3.0.0-M3 - - - com.azure:azure-core - - - - **/RestProxyXMLTests.java - - + maven-jar-plugin + 3.1.2 + + + test-jar + test-compile + + test-jar + + + - java-lts + default - [11,) + true + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M3 + + true + + + + + - jackson-version-test-matrix + jackson-supported-version-test-matrix - env.AZURE_CORE_TEST_JACKSON_VERSION + env.AZURE_CORE_TEST_SUPPORTED_JACKSON_VERSION - ${env.AZURE_CORE_TEST_JACKSON_VERSION} + ${env.AZURE_CORE_TEST_SUPPORTED_JACKSON_VERSION} @@ -226,8 +239,85 @@ ${jackson.version} test + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M3 + + + com.azure:azure-core + + + + **/RestProxyXMLTests.java + **/UnsupportedJacksonVersionsTests.java + + + + + + + + jackson-unsupported-version-test + + env.AZURE_CORE_TEST_UNSUPPORTED_JACKSON_VERSION + + + ${env.AZURE_CORE_TEST_UNSUPPORTED_JACKSON_VERSION} + + + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + test + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + test + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + test + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + test + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${jackson.version} + test + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M3 + + + **/UnsupportedJacksonVersionsTests.java + + + + + + diff --git a/sdk/core/azure-core-jackson-tests/src/test/java/com/azure/core/implementation/jackson/UnsupportedJacksonVersionsTests.java b/sdk/core/azure-core-jackson-tests/src/test/java/com/azure/core/implementation/jackson/UnsupportedJacksonVersionsTests.java new file mode 100644 index 0000000000000..b34d315d194a3 --- /dev/null +++ b/sdk/core/azure-core-jackson-tests/src/test/java/com/azure/core/implementation/jackson/UnsupportedJacksonVersionsTests.java @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.core.implementation.jackson; + +import com.azure.core.util.CoreUtils; +import com.azure.core.util.serializer.JacksonAdapter; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class UnsupportedJacksonVersionsTests { + @Test + public void testme() { + String jacksonVersionString = ObjectMapper.class.getPackage().getImplementationVersion(); + String azureCoreVersion = CoreUtils + .getProperties("azure-core.properties") + .getOrDefault("version", null); + + JacksonVersion version = JacksonVersion.getInstance(); + String helpInfo = version.getHelpInfo(); + assertTrue(helpInfo.contains("jackson-annotations=" + jacksonVersionString)); + assertTrue(helpInfo.contains("jackson-core=" + jacksonVersionString)); + assertTrue(helpInfo.contains("jackson-databind=" + jacksonVersionString)); + assertTrue(helpInfo.contains("jackson-dataformat-xml=" + jacksonVersionString)); + assertTrue(helpInfo.contains("jackson-datatype-jsr310=" + jacksonVersionString)); + assertTrue(helpInfo.contains("azure-core=" + azureCoreVersion)); + + Error error = assertThrows(Error.class, () -> new JacksonAdapter()); + assertTrue(error.getMessage().contains(helpInfo)); + } +} diff --git a/sdk/core/azure-core/pom.xml b/sdk/core/azure-core/pom.xml index 020a3363dc565..c75f5e2c575fb 100644 --- a/sdk/core/azure-core/pom.xml +++ b/sdk/core/azure-core/pom.xml @@ -268,8 +268,8 @@ --add-opens com.azure.core/com.azure.core.implementation.http=ALL-UNNAMED --add-opens com.azure.core/com.azure.core.implementation.models.jsonflatten=com.fasterxml.jackson.databind --add-opens com.azure.core/com.azure.core.implementation.models.jsonflatten=ALL-UNNAMED - --add-opens com.azure.core/com.azure.core.implementation.jackson=ALL-UNNAMED --add-opens com.azure.core/com.azure.core.implementation.serializer=ALL-UNNAMED + --add-opens com.azure.core/com.azure.core.implementation.jackson=ALL-UNNAMED --add-opens com.azure.core/com.azure.core.models=ALL-UNNAMED --add-opens com.azure.core/com.azure.core.util=ALL-UNNAMED --add-opens com.azure.core/com.azure.core.util.logging=ALL-UNNAMED diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/implementation/jackson/JacksonVersion.java b/sdk/core/azure-core/src/main/java/com/azure/core/implementation/jackson/JacksonVersion.java index 6537ddc2b9499..0c79af2352c10 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/implementation/jackson/JacksonVersion.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/implementation/jackson/JacksonVersion.java @@ -8,7 +8,7 @@ import com.azure.core.util.logging.ClientLogger; /** - * Provides information about Jackson package versions used and detects potential issues. + * Provides information about Jackson package versions used, detects and logs errors. */ final class JacksonVersion { private SemanticVersion annotationsVersion; @@ -51,10 +51,18 @@ private JacksonVersion() { logger.info(helpString); } + /** + * Returns help info containing actual detected package versions. + * + * @return diagnostics information with detected versions. + */ public String getHelpInfo() { return helpString; } + /** + * Gets {@code SemanticVersion} for given class name + */ private SemanticVersion getVersion(String className) { try { return SemanticVersion.getPackageVersionForClass(className); @@ -65,6 +73,10 @@ private SemanticVersion getVersion(String className) { } private static JacksonVersion instance = null; + + /** + * Gets {@code JacksonVersion} instance singleton. + */ public static synchronized JacksonVersion getInstance() { if (instance == null) { instance = new JacksonVersion(); @@ -73,6 +85,9 @@ public static synchronized JacksonVersion getInstance() { return instance; } + /** + * Checks package version and logs if any issues detected. + */ private void checkVersion(SemanticVersion version, String packageName) { if (!version.isValid()) { logger.warning("Could not find version of '{}'.", packageName); @@ -90,6 +105,9 @@ private void checkVersion(SemanticVersion version, String packageName) { } } + /** + * Generates help information with versions detected in runtime. + */ private String formatHelpString() { // TODO(limolkova): add link to troubleshooting docs return new StringBuilder() diff --git a/sdk/core/azure-core/src/main/java/module-info.java b/sdk/core/azure-core/src/main/java/module-info.java index 6ce0dd998cab7..1c07b3dae87df 100644 --- a/sdk/core/azure-core/src/main/java/module-info.java +++ b/sdk/core/azure-core/src/main/java/module-info.java @@ -37,8 +37,8 @@ opens com.azure.core.util.serializer to com.fasterxml.jackson.databind; opens com.azure.core.implementation to com.fasterxml.jackson.databind; opens com.azure.core.implementation.logging to com.fasterxml.jackson.databind; - opens com.azure.core.implementation.jackson to com.fasterxml.jackson.databind; opens com.azure.core.implementation.serializer to com.fasterxml.jackson.databind; + opens com.azure.core.implementation.jackson to com.fasterxml.jackson.databind; opens com.azure.core.http.rest to com.fasterxml.jackson.databind; // Service Provider Interfaces diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/implementation/SemanticVersionTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/implementation/SemanticVersionTests.java index ea36b9cb9bd2c..658625c3a555d 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/implementation/SemanticVersionTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/implementation/SemanticVersionTests.java @@ -75,10 +75,17 @@ public void malformedVersion(String versionStr) { @Test public void classVersion() { - // TODO (limolkova) for some reason (investigating) package versions are available only for junit - // in tests in azure-core project, it does not affect - SemanticVersion version = SemanticVersion.getPackageVersionForClass("com.fasterxml.jackson.databind.ObjectMapper"); // org.junit.jupiter.api.Test"); + // TODO (limolkova) for some reason (investigating) package versions are not available + // in tests for azure-core project, it does not affect real applications + SemanticVersion version = SemanticVersion.getPackageVersionForClass("org.junit.jupiter.api.Test"); assertTrue(version.isValid()); } + + @ParameterizedTest + @ValueSource(strings = {"nonsense", ""}) + public void malformedClassVersion(String className) { + SemanticVersion malformed = SemanticVersion.getPackageVersionForClass(className); + assertFalse(malformed.isValid()); + } } diff --git a/sdk/core/version-matrix.json b/sdk/core/supported-version-matrix.json similarity index 100% rename from sdk/core/version-matrix.json rename to sdk/core/supported-version-matrix.json diff --git a/sdk/core/tests.yml b/sdk/core/tests.yml index 15c067662559b..d137a54227baa 100644 --- a/sdk/core/tests.yml +++ b/sdk/core/tests.yml @@ -47,15 +47,30 @@ stages: - template: /eng/pipelines/templates/stages/archetype-sdk-tests.yml parameters: ServiceDirectory: core - TestName: 'jackson_versions' + TestName: 'jackson_supported_versions' MatrixConfigs: - Name: jackson_version_tests - Path: sdk/core/version-matrix.json + Path: sdk/core/supported-version-matrix.json Selection: sparse NonSparseParameters: - - AZURE_CORE_TEST_JACKSON_VERSION + - AZURE_CORE_TEST_SUPPORTED_JACKSON_VERSION GenerateVMJobs: true Artifacts: - name: azure-core-jackson-tests groupId: com.azure safeName: azurecorejacksontests + - template: /eng/pipelines/templates/stages/archetype-sdk-tests.yml + parameters: + ServiceDirectory: core + TestName: 'jackson_unsupported_versions' + MatrixConfigs: + - Name: jackson_version_tests + Path: sdk/core/unsupported-version-matrix.json + Selection: sparse + NonSparseParameters: + - AZURE_CORE_TEST_UNSUPPORTED_JACKSON_VERSION + GenerateVMJobs: true + Artifacts: + - name: azure-core-jackson-tests + groupId: com.azure + safeName: azurecorejacksontests diff --git a/sdk/core/unsupported-version-matrix.json b/sdk/core/unsupported-version-matrix.json new file mode 100644 index 0000000000000..408e2aa3ae9e1 --- /dev/null +++ b/sdk/core/unsupported-version-matrix.json @@ -0,0 +1,17 @@ +{ + "displayNames": { + "2.9.10": "jackson2_9", + }, + "matrix": { + "Agent": { + "ubuntu-20.04": { "OSVmImage": "MMSUbuntu20.04", "Pool": "azsdk-pool-mms-ubuntu-2004-general" } + }, + "JavaTestVersion": "1.11", + "AZURE_TEST_HTTP_CLIENTS": "netty", + "TestGoals": "surefire:test", + "AZURE_CORE_TEST_JACKSON_VERSION": [ + "2.9.10", + ], + "TestFromSource": true + } +} \ No newline at end of file