From cc93696110a88f0573bf45e419f92ef052e6e629 Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Sat, 27 Jun 2020 11:47:11 +0300 Subject: [PATCH 1/2] Bug 564420 conditions | move HC condition miner to new interfaces - move licensing server coordinates detection close to proper settings declaration - append tests for it Signed-off-by: elena.parovyshnaya --- .../passage/lic/equinox/io/EquinoxPaths.java | 8 ++-- ...alationPath.java => InstallationPath.java} | 2 +- .../lic/internal/hc/i18n/HcMessages.java | 3 -- .../internal/hc/i18n/HcMessages.properties | 1 - .../net}/LicensingServerCoordinates.java | 40 ++++++++++++++----- .../lic/internal/net/LicensingServerHost.java | 9 +++++ .../lic/internal/net/LicensingServerPort.java | 9 +++++ .../lic/internal/net/i18n/NetMessages.java | 16 ++++++++ .../internal/net/i18n/NetMessages.properties | 2 + 9 files changed, 71 insertions(+), 19 deletions(-) rename bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/{InstalationPath.java => InstallationPath.java} (95%) rename bundles/{org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/remote => org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net}/LicensingServerCoordinates.java (72%) create mode 100644 bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.java create mode 100644 bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.properties diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/equinox/io/EquinoxPaths.java b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/equinox/io/EquinoxPaths.java index 8859bd94a..12c963c32 100644 --- a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/equinox/io/EquinoxPaths.java +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/equinox/io/EquinoxPaths.java @@ -28,11 +28,11 @@ import org.eclipse.passage.lic.internal.base.io.PathFromLicensedProduct; import org.eclipse.passage.lic.internal.equinox.i18n.EquinoxMessages; import org.eclipse.passage.lic.internal.equinox.io.ConfigurationPath; -import org.eclipse.passage.lic.internal.equinox.io.InstalationPath; +import org.eclipse.passage.lic.internal.equinox.io.InstallationPath; /** * @deprecated in the favor of {@code lic.interal.base.io} Path suppliers - * accompanied with {@linkplain InstalationPath} and + * accompanied with {@linkplain InstallationPath} and * {@linkplain ConfigurationPath} */ @Deprecated @@ -40,7 +40,7 @@ public class EquinoxPaths { /** - * @deprecated use {@link InstalationPath} in decoration with + * @deprecated use {@link InstallationPath} in decoration with * {@link PathFromLicensedProduct} */ @Deprecated @@ -50,7 +50,7 @@ public static Path resolveInstallConfigurationPath(LicensingConfiguration config } /** - * @deprecated use {@link InstalationPath} in decoration with + * @deprecated use {@link InstallationPath} in decoration with */ @Deprecated public static Path resolveInstallBasePath() { diff --git a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/InstalationPath.java b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/InstallationPath.java similarity index 95% rename from bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/InstalationPath.java rename to bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/InstallationPath.java index 2283f571a..c958d5ab2 100644 --- a/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/InstalationPath.java +++ b/bundles/org.eclipse.passage.lic.equinox/src/org/eclipse/passage/lic/internal/equinox/io/InstallationPath.java @@ -32,7 +32,7 @@ *

*/ @SuppressWarnings("restriction") -public final class InstalationPath implements Supplier { +public final class InstallationPath implements Supplier { @Override public Path get() { diff --git a/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/i18n/HcMessages.java b/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/i18n/HcMessages.java index 41a99b1af..dde21e857 100644 --- a/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/i18n/HcMessages.java +++ b/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/i18n/HcMessages.java @@ -18,14 +18,11 @@ public class HcMessages extends NLS { private static final String BUNDLE_NAME = "org.eclipse.passage.lic.internal.hc.i18n.HcMessages"; //$NON-NLS-1$ public static String DecryptedConditions_no_transport_for_content_type; - public static String DecryptedConditions_reading_error; public static String HttpClient_final_error_message; public static String HttpClient_not_ok_response; - public static String LicensingServerCoordinates_settings_not_found; - static { NLS.initializeMessages(BUNDLE_NAME, HcMessages.class); } diff --git a/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/i18n/HcMessages.properties b/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/i18n/HcMessages.properties index 61fb1dbcc..71c4b4700 100644 --- a/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/i18n/HcMessages.properties +++ b/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/i18n/HcMessages.properties @@ -15,4 +15,3 @@ DecryptedConditions_no_transport_for_content_type=Unknown content type: no regis DecryptedConditions_reading_error=Error reading remote condition data HttpClient_final_error_message=Error mining conditions HttpClient_not_ok_response=Mining connection responded not OK: %d ($s) -LicensingServerCoordinates_settings_not_found=%s is not found diff --git a/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/remote/LicensingServerCoordinates.java b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerCoordinates.java similarity index 72% rename from bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/remote/LicensingServerCoordinates.java rename to bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerCoordinates.java index c31dad06a..7bc32e1e3 100644 --- a/bundles/org.eclipse.passage.lic.hc/src/org/eclipse/passage/lic/internal/hc/remote/LicensingServerCoordinates.java +++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerCoordinates.java @@ -10,7 +10,7 @@ * Contributors: * ArSysOp - initial API and implementation *******************************************************************************/ -package org.eclipse.passage.lic.internal.hc.remote; +package org.eclipse.passage.lic.internal.net; import java.nio.file.Path; import java.util.Map; @@ -20,9 +20,7 @@ import org.eclipse.passage.lic.internal.api.LicensingException; import org.eclipse.passage.lic.internal.base.StringNamedData; import org.eclipse.passage.lic.internal.base.io.Settings; -import org.eclipse.passage.lic.internal.hc.i18n.HcMessages; -import org.eclipse.passage.lic.internal.net.LicensingServerHost; -import org.eclipse.passage.lic.internal.net.LicensingServerPort; +import org.eclipse.passage.lic.internal.net.i18n.NetMessages; /** *

@@ -51,19 +49,23 @@ public LicensingServerCoordinates(Supplier residence) { * @throws LicensingException in case of errors during file reading or setting * analysis */ - public String get() throws LicensingException { + public HostPort get() throws LicensingException { Map properties = new Settings(settings, this::necessaryPropertiesExist).get(); - return String.format(// - "%s:%s", //$NON-NLS-1$ + return new HostPort(// value(new LicensingServerHost(properties)), // value(new LicensingServerPort(properties))); } private String value(StringNamedData data) throws LicensingException { Optional value = data.get(); - if (value.isPresent()) { - throw new LicensingException( - String.format(HcMessages.LicensingServerCoordinates_settings_not_found, data.key())); + if (!value.isPresent()) { + throw new LicensingException(// + String.format(NetMessages.LicensingServerCoordinates_settings_not_found, data.key())); + } + if (value.get().trim().isEmpty()) { + throw new LicensingException(// + String.format(NetMessages.LicensingServerCoordinates_settings_are_blank, data.key())); + } return value.get(); } @@ -73,4 +75,22 @@ private boolean necessaryPropertiesExist(Map properties) { new LicensingServerPort(properties).get().isPresent(); } + public static final class HostPort { + private final String host; + private final String port; + + public HostPort(String host, String port) { + this.host = host; + this.port = port; + } + + public String host() { + return host; + } + + public String port() { + return port; + } + + } } diff --git a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerHost.java b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerHost.java index 5cdee6e22..85c12abe5 100644 --- a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerHost.java +++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerHost.java @@ -23,6 +23,15 @@ public LicensingServerHost(Map container) { super(container); } + public LicensingServerHost(String value) { + super(value); + } + + @Override + public String entrySeparator() { + return "\n"; //$NON-NLS-1$ + } + @Override public String key() { return "licensing.server.host"; //$NON-NLS-1$ diff --git a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerPort.java b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerPort.java index 45e3fb605..1db47758a 100644 --- a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerPort.java +++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/LicensingServerPort.java @@ -23,6 +23,15 @@ public LicensingServerPort(Map container) { super(container); } + public LicensingServerPort(String value) { + super(value); + } + + @Override + public String entrySeparator() { + return "\n"; //$NON-NLS-1$ + } + @Override public String key() { return "licensing.server.port"; //$NON-NLS-1$ diff --git a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.java b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.java new file mode 100644 index 000000000..d8db6be5a --- /dev/null +++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.java @@ -0,0 +1,16 @@ +package org.eclipse.passage.lic.internal.net.i18n; + +import org.eclipse.osgi.util.NLS; + +public class NetMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.passage.lic.internal.net.i18n.NetMessages"; //$NON-NLS-1$ + public static String LicensingServerCoordinates_settings_are_blank; + public static String LicensingServerCoordinates_settings_not_found; + static { + // initialize resource bundle + NLS.initializeMessages(BUNDLE_NAME, NetMessages.class); + } + + private NetMessages() { + } +} diff --git a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.properties b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.properties new file mode 100644 index 000000000..a0d3ad977 --- /dev/null +++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.properties @@ -0,0 +1,2 @@ +LicensingServerCoordinates_settings_are_blank=%s cannot be blank +LicensingServerCoordinates_settings_not_found=%s is not found From 90408965f3c73d4097929264832b22ff87abc3dc Mon Sep 17 00:00:00 2001 From: "elena.parovyshnaya" Date: Sat, 27 Jun 2020 11:53:33 +0300 Subject: [PATCH 2/2] Bug 564420 conditions | move HC condition miner to new interfaces - add missed license headers - append tests for licensing server coordinates detection util Signed-off-by: elena.parovyshnaya --- .../lic/internal/net/i18n/NetMessages.java | 12 ++ .../internal/net/i18n/NetMessages.properties | 13 +++ .../tests/LicensingServerCoordinatesTest.java | 105 ++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 tests/org.eclipse.passage.lic.net.tests/src/org/eclipse/passage/lic/net/tests/LicensingServerCoordinatesTest.java diff --git a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.java b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.java index d8db6be5a..bce221836 100644 --- a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.java +++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.java @@ -1,3 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ package org.eclipse.passage.lic.internal.net.i18n; import org.eclipse.osgi.util.NLS; diff --git a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.properties b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.properties index a0d3ad977..aada4ccb4 100644 --- a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.properties +++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/i18n/NetMessages.properties @@ -1,2 +1,15 @@ +############################################################################### +# Copyright (c) 2020 ArSysOp and others +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# https://www.eclipse.org/legal/epl-2.0/. +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# ArSysOp - initial API and implementation +############################################################################### + LicensingServerCoordinates_settings_are_blank=%s cannot be blank LicensingServerCoordinates_settings_not_found=%s is not found diff --git a/tests/org.eclipse.passage.lic.net.tests/src/org/eclipse/passage/lic/net/tests/LicensingServerCoordinatesTest.java b/tests/org.eclipse.passage.lic.net.tests/src/org/eclipse/passage/lic/net/tests/LicensingServerCoordinatesTest.java new file mode 100644 index 000000000..e97e1bb06 --- /dev/null +++ b/tests/org.eclipse.passage.lic.net.tests/src/org/eclipse/passage/lic/net/tests/LicensingServerCoordinatesTest.java @@ -0,0 +1,105 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0/. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * ArSysOp - initial API and implementation + *******************************************************************************/ +package org.eclipse.passage.lic.net.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; + +import org.eclipse.passage.lic.internal.api.LicensingException; +import org.eclipse.passage.lic.internal.base.NamedData; +import org.eclipse.passage.lic.internal.base.io.PassageFileExtension; +import org.eclipse.passage.lic.internal.net.LicensingServerCoordinates; +import org.eclipse.passage.lic.internal.net.LicensingServerCoordinates.HostPort; +import org.eclipse.passage.lic.internal.net.LicensingServerHost; +import org.eclipse.passage.lic.internal.net.LicensingServerPort; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +@SuppressWarnings("restriction") +public final class LicensingServerCoordinatesTest { + + @Rule + public TemporaryFolder folder = new TemporaryFolder(); + + @Test + public void existingSettingsAreFound() throws IOException, LicensingException { + writeSettingsFile("some.server.ho", "1234"); //$NON-NLS-1$//$NON-NLS-2$ + assertEquals("some.server.ho:1234", coordinates()); //$NON-NLS-1$ + } + + @Test + public void canDefineHostAndPortInDifferentFiles() throws IOException, LicensingException { + writeSettingsFile("some.server", null); //$NON-NLS-1$ + writeSettingsFile(null, "56789"); //$NON-NLS-1$ + assertEquals("some.server:56789", coordinates()); //$NON-NLS-1$ + } + + @Test(expected = LicensingException.class) + public void absentHostCausesFailure() throws IOException, LicensingException { + writeSettingsFile(null, "8080"); //$NON-NLS-1$ + coordinates(); + } + + @Test(expected = LicensingException.class) + public void absentPortCausesFailure() throws IOException, LicensingException { + writeSettingsFile("192.168.0.1", null); //$NON-NLS-1$ + coordinates(); + } + + @Test(expected = LicensingException.class) + public void emptyHostCausesFailure() throws IOException, LicensingException { + writeSettingsFile("", "2212"); //$NON-NLS-1$ //$NON-NLS-2$ + coordinates(); + } + + @Test(expected = LicensingException.class) + public void emptyPortCausesFailure() throws IOException, LicensingException { + writeSettingsFile("server.address", ""); //$NON-NLS-1$ //$NON-NLS-2$ + coordinates(); + } + + @Test + public void valuesAreNotVerified() throws IOException { + writeSettingsFile("(absolutely)$invald+server&*%.address", "not-a-port-value"); //$NON-NLS-1$ //$NON-NLS-2$ + try { + coordinates(); + } catch (LicensingException e) { + fail("Values verification is not the part of settings retrieval"); //$NON-NLS-1$ + } + } + + private String coordinates() throws LicensingException { + HostPort coords = new LicensingServerCoordinates(folder.getRoot()::toPath).get(); + return String.format("%s:%s", coords.host(), coords.port()); //$NON-NLS-1$ + } + + private void writeSettingsFile(String host, String port) throws IOException { + File file = folder.newFile(Long.toHexString(System.nanoTime()) + new PassageFileExtension.Settings().get()); + StringBuilder out = new StringBuilder(); + if (host != null) { + new NamedData.Writable(new LicensingServerHost(host)).write(out); + } + if (port != null) { + new NamedData.Writable(new LicensingServerPort(port)).write(out); + } + try (PrintWriter writer = new PrintWriter(file)) { + writer.print(out.toString()); + } + } + +}