[java-identity-provider] 02/02: IDP-1595 Change format of Plugin status into to a single property file
Rod Widdowson
rdw at steadingsoftware.com
Thu Jul 23 07:08:48 UTC 2020
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch master
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=c2950e7a8a905170869540485932867a92bd84fe
commit c2950e7a8a905170869540485932867a92bd84fe
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Wed Jul 22 15:20:48 2020 +0100
IDP-1595 Change format of Plugin status into to a single property file
https://issues.shibboleth.net/jira/browse/IDP-1595
---
.../shibboleth/idp/plugin/PluginDescription.java | 4 +-
.../net/shibboleth/idp/plugin/PluginSupport.java | 62 +++----
.../shibboleth/idp/plugin/impl/PluginState.java | 178 ++++++++++++---------
.../net/shibboleth/idp/plugin/PluginStateTest.java | 3 +-
.../java/net/shibboleth/idp/plugin/TestPlugin.java | 2 +-
idp-admin-impl/src/test/resources/logback-test.xml | 2 +
.../1.2.3/version.details.properties | 3 -
.../1.2.4/version.details.properties | 3 -
.../2.0.0/version.details.properties | 3 -
.../net.shibboleth.plugin.test/versions.properties | 1 -
.../net/shibboleth/idp/plugin/plugins.props | 27 ++++
11 files changed, 169 insertions(+), 119 deletions(-)
diff --git a/idp-admin-api/src/main/java/net/shibboleth/idp/plugin/PluginDescription.java b/idp-admin-api/src/main/java/net/shibboleth/idp/plugin/PluginDescription.java
index 34848b2a4..68f5de8de 100644
--- a/idp-admin-api/src/main/java/net/shibboleth/idp/plugin/PluginDescription.java
+++ b/idp-admin-api/src/main/java/net/shibboleth/idp/plugin/PluginDescription.java
@@ -83,8 +83,8 @@ public interface PluginDescription {
*/
@Nonnull public List<Pair<URL, Path>> getExternalFilePathsToCopy() throws IOException;
- /** Return the places to look for updates for this plugin package.
- * The format of the paths below this point is fixed.
+ /** Return the places to look for information for this plugin package.
+ * The format of the (property) file at this location is fixed.
*
* @return Zero or more URLs
* @throws IOException if the resource construction failed.
diff --git a/idp-admin-api/src/main/java/net/shibboleth/idp/plugin/PluginSupport.java b/idp-admin-api/src/main/java/net/shibboleth/idp/plugin/PluginSupport.java
index 19566d1e8..672596669 100644
--- a/idp-admin-api/src/main/java/net/shibboleth/idp/plugin/PluginSupport.java
+++ b/idp-admin-api/src/main/java/net/shibboleth/idp/plugin/PluginSupport.java
@@ -29,39 +29,39 @@ import net.shibboleth.idp.Version;
*/
public final class PluginSupport {
- /** Where (relatively) to find available versions. */
- @Nonnull public static final String AVAILABLE_VERSIONS_PATH = "versions.properties";
-
- /** Where (relatively) to find available versions. */
- @Nonnull public static final String VERSION_INFO_PATH = "version.details.properties";
-
- /** Property Name for available versions inside {@link #AVAILABLE_VERSIONS_PATH}. */
+ /** Property Name suffix for available versions inside {@link PluginDescription#getUpdateURLs()}. */
@Nonnull public static final String AVAILABLE_VERSIONS_PROPERTY_SUFFIX = ".versions";
- /** Property Name for max supported IdP version inside {@link #VERSION_INFO_PATH}. */
- @Nonnull public static final String MAX_IDP_VERSION = "idp.version.max";
-
- /** Property Name for minimum supported IdP version inside {@link #VERSION_INFO_PATH}. */
- @Nonnull public static final String MIN_IDP_VERSION = "idp.version.min";
-
- /** Property Name for support level inside {@link #VERSION_INFO_PATH}. */
- @Nonnull public static final String SUPPORT_LEVEL = "support.level";
-
- /** Value for support level inside {@link #VERSION_INFO_PATH}. */
- public static final int SUPPORT_LEVEL_CURRENT = 0;
-
- /** Value for support level inside {@link #VERSION_INFO_PATH}. */
- public static final int SUPPORT_LEVEL_OUT_OF_DATE = 1;
-
- /** Value for support level inside {@link #VERSION_INFO_PATH}. */
- public static final int SUPPORT_LEVEL_UNSUPPORTED = 2;
-
- /** Value for support level inside {@link #VERSION_INFO_PATH}. */
- public static final int SUPPORT_LEVEL_SECADV = 3;
-
- /** Value for support level inside {@link #VERSION_INFO_PATH}. */
- public static final int SUPPORT_LEVEL_WITHDRAWN = 4;
-
+ /** Property Name for Download directory {@link PluginDescription#getUpdateURLs()}. */
+ @Nonnull public static final String DOWNLOAD_URL_INTERFIX = ".downloadURL.";
+
+ /** Property Name for download name {@link PluginDescription#getUpdateURLs()}. */
+ @Nonnull public static final String BASE_NAME_INTERFIX = ".baseName.";
+
+ /** Property Name for max supported IdP version inside inside {@link PluginDescription#getUpdateURLs()}. */
+ @Nonnull public static final String MAX_IDP_VERSION_INTERFIX = ".idpVersionMax.";
+
+ /** Property Name for minimum supported IdP version inside inside {@link PluginDescription#getUpdateURLs()}. */
+ @Nonnull public static final String MIN_IDP_VERSION_INTERFIX = ".idpVersionMin.";
+
+ /** Property Name for support level inside inside {@link PluginDescription#getUpdateURLs()}. */
+ @Nonnull public static final String SUPPORT_LEVEL_INTERFIX = ".supportLevel.";
+
+ /** Value for support level pointed to by {@link #SUPPORT_LEVEL_INTERFIX}.*/
+ public static enum SupportLevel {
+ /** The current release. */
+ Current,
+ /** Still working but a new version is available. */
+ OutOfDate,
+ /** Out of Support. */
+ Unsupported,
+ /** Security alerts against this plugin. */
+ Secadv,
+ /** Withdrawn. */
+ Withdrawn,
+ /** Nothing published. */
+ Unknown
+ }
/** Class logger. */
@Nonnull private static Logger log = LoggerFactory.getLogger(PluginSupport.class);
diff --git a/idp-admin-impl/src/main/java/net/shibboleth/idp/plugin/impl/PluginState.java b/idp-admin-impl/src/main/java/net/shibboleth/idp/plugin/impl/PluginState.java
index b619f3739..a9448ac50 100644
--- a/idp-admin-impl/src/main/java/net/shibboleth/idp/plugin/impl/PluginState.java
+++ b/idp-admin-impl/src/main/java/net/shibboleth/idp/plugin/impl/PluginState.java
@@ -18,6 +18,7 @@
package net.shibboleth.idp.plugin.impl;
import java.io.IOException;
+import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;
import java.util.HashMap;
@@ -26,6 +27,7 @@ import java.util.Properties;
import java.util.regex.Pattern;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.apache.http.client.HttpClient;
import org.slf4j.Logger;
@@ -36,9 +38,11 @@ import org.springframework.core.io.Resource;
import net.shibboleth.ext.spring.resource.HTTPResource;
import net.shibboleth.idp.plugin.PluginDescription;
import net.shibboleth.idp.plugin.PluginSupport;
+import net.shibboleth.idp.plugin.PluginSupport.SupportLevel;
import net.shibboleth.idp.plugin.PluginVersion;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.collection.Pair;
import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -63,6 +67,9 @@ public class PluginState extends AbstractInitializableComponent {
/** The support information. */
@Nonnull private final Map<PluginVersion, VersionInfo> versionInfo = new HashMap<>();
+
+ /** The Download information. */
+ @Nonnull private final Map<PluginVersion, Pair<URL,String>> downloadInfo = new HashMap<>();
/** My support information. */
@NonnullAfterInit private VersionInfo myVersionInfo;
@@ -84,7 +91,30 @@ public class PluginState extends AbstractInitializableComponent {
plugin.getMinorVersion(), plugin.getPatchVersion());
}
-
+ /** Get the base URL for this version.
+ * @param version which version
+ * @return the base URL
+ */
+ @Nullable public URL getUpdateURL(final PluginVersion version) {
+ final Pair<URL, String> p = downloadInfo.get(version);
+ if (p == null) {
+ return null;
+ }
+ return p.getFirst();
+ }
+
+ /** Get the base Name for this version.
+ * @param version which version
+ * @return the base name
+ */
+ @Nullable public String getUpdateBaseName(final PluginVersion version) {
+ final Pair<URL, String> p = downloadInfo.get(version);
+ if (p == null) {
+ return null;
+ }
+ return p.getSecond();
+ }
+
/** Set the client.
* @param what what to set.
*/
@@ -94,13 +124,12 @@ public class PluginState extends AbstractInitializableComponent {
}
/** Given a version find out more.
- * @param parentResource the root we are looking at
+ * @param props the property files for this plugin we are looking at
* @param version the version in question.
* @return true if we processed everything OK.
*/
// Checkstyle: CyclomaticComplexity OFF
- private boolean handleAvailableVersion(final Resource parentResource, final String version) {
- final Properties detailsProps = new Properties(3);
+ private boolean handleAvailableVersion(final Properties props, final String version) {
final PluginVersion theVersion = new PluginVersion(version);
if (theVersion.getMajor() == 0 && theVersion.getMinor() == 0 && theVersion.getPatch() == 0) {
log.warn("Plugin {}: improbable version {}", plugin.getPluginId(), version);
@@ -108,64 +137,78 @@ public class PluginState extends AbstractInitializableComponent {
if (versionInfo.containsKey(theVersion)) {
log.warn("Plugin {}: Duplicate version {}", plugin.getPluginId(), version);
}
-
- try {
- final Resource details = parentResource.createRelative(version + "/")
- .createRelative(PluginSupport.VERSION_INFO_PATH);
- detailsProps.load(details.getInputStream());
- } catch (final IOException e) {
- log.warn("Could not find details description {}, version {} ", plugin.getPluginId(), version, e);
- return false;
- }
- log.debug("Plugin {}: Version details : {}", plugin.getPluginId(), detailsProps);
- final String maxVersionInfo = StringSupport.trimOrNull(detailsProps.getProperty(PluginSupport.MAX_IDP_VERSION));
+
+ final String maxVersionInfo = StringSupport.trimOrNull(
+ props.getProperty(plugin.getPluginId() + PluginSupport.MAX_IDP_VERSION_INTERFIX + version));
if (maxVersionInfo == null) {
- log.warn("Plugin {}: Could not find max idp version for version {} ", plugin.getPluginId(), version);
+ log.warn("Plugin {}, Version {} : Could not find max idp version.", plugin.getPluginId(), version);
return false;
}
- final String minVersionInfo = StringSupport.trimOrNull(detailsProps.getProperty(PluginSupport.MIN_IDP_VERSION));
+
+ final String minVersionInfo = StringSupport.trimOrNull(
+ props.getProperty(plugin.getPluginId() + PluginSupport.MIN_IDP_VERSION_INTERFIX + version));
if (minVersionInfo == null) {
- log.warn("Plugin {}: Could not find min idp version for version {} ", plugin.getPluginId(), version);
+ log.warn("Plugin {}, Version {} : Could not find min idp version.", plugin.getPluginId(), version);
return false;
}
- final String supportLevel = StringSupport.trimOrNull(detailsProps.getProperty(PluginSupport.SUPPORT_LEVEL));
- if (supportLevel == null) {
- log.warn("Plugin {}: Could not find support level for {}, version {} ", plugin.getPluginId(), version);
- return false;
+
+ final String supportLevelString = StringSupport.trimOrNull(
+ props.getProperty(plugin.getPluginId()+ PluginSupport.SUPPORT_LEVEL_INTERFIX + version));
+ PluginSupport.SupportLevel supportLevel;
+ if (supportLevelString == null) {
+ log.debug("Plugin {}, Version {} : Could not find support level for {}.", plugin.getPluginId(), version);
+ supportLevel = SupportLevel.Unknown;
+ } else {
+ try {
+ supportLevel = Enum.valueOf(SupportLevel.class, supportLevelString);
+ } catch (final IllegalArgumentException e) {
+ log.warn("Plugin {}, Version {} : Invalid support level {}.",
+ plugin.getPluginId(), version, supportLevelString);
+ supportLevel = SupportLevel.Unknown;
+ }
}
+
log.debug("Plugin {}: MaxIdP {}, MinIdP {}, Support Level {}",
plugin.getPluginId(), maxVersionInfo, minVersionInfo, supportLevel);
final VersionInfo info;
- try {
- info = new VersionInfo(
- new PluginVersion(maxVersionInfo),
- new PluginVersion(minVersionInfo),
- Integer.parseInt(supportLevel));
- } catch (final NumberFormatException e) {
- log.warn("Plugin {}: version {}: Could not parse version info",
- plugin.getPluginId(), version, e);
- return false;
- }
+ info = new VersionInfo(new PluginVersion(maxVersionInfo), new PluginVersion(minVersionInfo), supportLevel);
versionInfo.put(theVersion, info);
if (myPluginVersion.equals(theVersion)) {
myVersionInfo = info;
}
+ final String downloadURL = StringSupport.trimOrNull(
+ props.getProperty(plugin.getPluginId() + PluginSupport.DOWNLOAD_URL_INTERFIX + version));
+ final String baseName = StringSupport.trimOrNull(
+ props.getProperty(plugin.getPluginId() + PluginSupport.BASE_NAME_INTERFIX + version));
+ if (baseName != null && downloadURL != null) {
+ try {
+ final URL url = new URL(downloadURL);
+ downloadInfo.put(theVersion, new Pair<>(url, baseName));
+ log.trace("Plugin {}, version {} : Added download URL {} baseName {} for {}",
+ plugin.getPluginId(), theVersion, url, baseName);
+ } catch (final MalformedURLException e) {
+ log.warn("Plugin {}, version {} : download URL '{}' could not be constructed",
+ plugin.getPluginId(), theVersion, downloadURL, e);
+ }
+ } else {
+ log.info("Plugin {}, version {} : no download information present", plugin.getPluginId(), theVersion);
+ }
return true;
}
// Checkstyle: CyclomaticComplexity ON
/** Given a list of versions find out more.
- * @param parentResource the root we are looking at
+ * @param props the property files for this plugin we are looking at
* @param availableVersions a space delimited array of versions
* @return true if we processed everything OK.
*/
- private boolean handleAvailableVersions(final Resource parentResource, final String availableVersions) {
+ private boolean handleAvailableVersions(final Properties props, final String availableVersions) {
final String[] versions = SPACE_CONTAINING.split(availableVersions, 0);
log.debug("Plugin {}: available versions : {} ", plugin.getPluginId(), availableVersions);
for (final String version:versions) {
log.debug("Plugin {} : considering {}", plugin.getPluginId(), version);
- if (!handleAvailableVersion(parentResource, version)) {
+ if (!handleAvailableVersion(props, version)) {
return false;
}
}
@@ -173,42 +216,27 @@ public class PluginState extends AbstractInitializableComponent {
}
/** (try to) populate the information about this plugin.
- * @param parentResource where to start looking
+ * @param propertyResource where to start looking
* @return whether it worked
*/
- protected boolean populate(@Nonnull final Resource parentResource) {
+ protected boolean populate(@Nonnull final Resource propertyResource) {
- final Resource pluginIdResource;
- try {
- pluginIdResource =
- parentResource.createRelative(plugin.getPluginId() + "/");
- if (!pluginIdResource.exists()) {
- log.debug("Plugin {}: directory at {} could not be found",
- plugin.getPluginId(), parentResource.getDescription());
- return false;
- }
- } catch (final IOException e) {
- log.info("Plugin{}: problems open directory at {}",
- plugin.getPluginId(), parentResource.getDescription(), e);
- return false;
- }
try {
- final Resource versionsResource =
- pluginIdResource.createRelative(PluginSupport.AVAILABLE_VERSIONS_PATH);
- final Properties versionsProps = new Properties(1);
- versionsProps.load(versionsResource.getInputStream());
+ final Properties props = new Properties();
+ log.info("Loading properties from {}", propertyResource.getDescription());
+ props.load(propertyResource.getInputStream());
final String name = plugin.getPluginId() + PluginSupport.AVAILABLE_VERSIONS_PROPERTY_SUFFIX;
- final String availableVersions = StringSupport.trim(versionsProps.getProperty(name));
- if (availableVersions.length() == 0) {
+ final String availableVersions = StringSupport.trim(props.getProperty(name));
+ if (availableVersions == null) {
log.warn("Plugin {}: Could not find {} property in {}",
- plugin.getPluginId(), name, parentResource.getDescription());
+ plugin.getPluginId(), name, propertyResource.getDescription());
return false;
}
- return handleAvailableVersions(pluginIdResource, availableVersions);
+ return handleAvailableVersions(props, availableVersions);
} catch (final IOException e) {
// INFO - not being there is not a failure
log.info("Plugin {}: Could not find description {}",
- plugin.getPluginId(), parentResource.getDescription(), e);
+ plugin.getPluginId(), propertyResource.getDescription(), e);
return false;
}
}
@@ -221,38 +249,40 @@ public class PluginState extends AbstractInitializableComponent {
httpClient = new HttpClientBuilder().buildClient();
}
for (final URL url: plugin.getUpdateURLs()) {
- final Resource parentResource;
+ final Resource propertyResource;
if ("file".equals(url.getProtocol())) {
// Kludge to allow classpath backed files
- parentResource = new FileSystemResource(url.getPath());
+ propertyResource = new FileSystemResource(url.getPath());
} else {
- parentResource = new HTTPResource(httpClient, url);
+ propertyResource = new HTTPResource(httpClient, url);
}
log.debug("Plugin {}: Looking for update at {}", plugin.getPluginId(),
- parentResource.getDescription());
- if (!parentResource.exists()) {
+ propertyResource.getDescription());
+ if (!propertyResource.exists()) {
log.info("Plugin {}: {} could not be located", plugin.getPluginId(),
- parentResource.getDescription());
+ propertyResource.getDescription());
continue;
}
- if (populate(parentResource)) {
+ if (populate(propertyResource)) {
log.debug("Plugin {}: PluginState populated from {}",
- plugin.getPluginId(), parentResource.getDescription());
+ plugin.getPluginId(), propertyResource.getDescription());
if (myVersionInfo == null) {
log.error("Plugin {} : Could not find version {} in descriptions at {}",
- plugin.getPluginId(), myPluginVersion, parentResource.getDescription());
+ plugin.getPluginId(), myPluginVersion, propertyResource.getDescription());
}
return;
}
}
- log.error("Plugin {}: No available servers found.");
+ log.error("Plugin {}: No available servers found.", plugin.getPluginId());
throw new ComponentInitializationException("Could not locate information for " + plugin.getPluginId());
} catch (final IOException e) {
throw new ComponentInitializationException("Could not locate Update Resource for "
+ plugin.getPluginId(), e);
+ } catch (final ComponentInitializationException e) {
+ throw e;
} catch (final Exception e) {
throw new ComponentInitializationException("Could not initialize http client for "
+ plugin.getPluginId(), e);
@@ -264,7 +294,7 @@ public class PluginState extends AbstractInitializableComponent {
/** Get the current support level for this version.
* @return the level
*/
- public int getSupportLevel() {
+ public SupportLevel getSupportLevel() {
ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
return myVersionInfo.getSupportLevel();
}
@@ -360,7 +390,7 @@ public class PluginState extends AbstractInitializableComponent {
private final PluginVersion minSupported;
/** support level. */
- private final int supportLevel;
+ private final SupportLevel supportLevel;
/**
* Constructor.
@@ -369,7 +399,7 @@ public class PluginState extends AbstractInitializableComponent {
* @param min support level
* @param support support level
*/
- VersionInfo(final PluginVersion max, final PluginVersion min, final int support) {
+ VersionInfo(final PluginVersion max, final PluginVersion min, final SupportLevel support) {
maxSupported = max;
minSupported = min;
supportLevel = support;
@@ -392,7 +422,7 @@ public class PluginState extends AbstractInitializableComponent {
/** get support level.
* @return Returns the supportLevel.
*/
- public int getSupportLevel() {
+ public SupportLevel getSupportLevel() {
return supportLevel;
}
}
diff --git a/idp-admin-impl/src/test/java/net/shibboleth/idp/plugin/PluginStateTest.java b/idp-admin-impl/src/test/java/net/shibboleth/idp/plugin/PluginStateTest.java
index e4a0a5c1d..4e3c6086d 100644
--- a/idp-admin-impl/src/test/java/net/shibboleth/idp/plugin/PluginStateTest.java
+++ b/idp-admin-impl/src/test/java/net/shibboleth/idp/plugin/PluginStateTest.java
@@ -29,6 +29,7 @@ import java.util.List;
import org.testng.annotations.Test;
+import net.shibboleth.idp.plugin.PluginSupport.SupportLevel;
import net.shibboleth.idp.plugin.impl.PluginState;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
@@ -95,6 +96,6 @@ public class PluginStateTest {
state.initialize();
assertEquals(state.getAvailableVersions().size(), 3);
- assertEquals(state.getSupportLevel(),1);
+ assertEquals(state.getSupportLevel(), SupportLevel.OutOfDate);
}
}
diff --git a/idp-admin-impl/src/test/java/net/shibboleth/idp/plugin/TestPlugin.java b/idp-admin-impl/src/test/java/net/shibboleth/idp/plugin/TestPlugin.java
index f90779f9c..92a83724e 100644
--- a/idp-admin-impl/src/test/java/net/shibboleth/idp/plugin/TestPlugin.java
+++ b/idp-admin-impl/src/test/java/net/shibboleth/idp/plugin/TestPlugin.java
@@ -39,7 +39,7 @@ public class TestPlugin extends AbstractPluginDescription {
/** {@inheritDoc} */
@Override
public List<URL> getUpdateURLs() {
- ClassPathResource resource = new ClassPathResource("/net/shibboleth/idp/plugin/");
+ ClassPathResource resource = new ClassPathResource("/net/shibboleth/idp/plugin/plugins.props");
try {
return Collections.singletonList(resource.getURL());
} catch (IOException e) {
diff --git a/idp-admin-impl/src/test/resources/logback-test.xml b/idp-admin-impl/src/test/resources/logback-test.xml
index f3280e56b..e0ddb5a5e 100644
--- a/idp-admin-impl/src/test/resources/logback-test.xml
+++ b/idp-admin-impl/src/test/resources/logback-test.xml
@@ -2,6 +2,8 @@
<configuration>
+ <logger name="net.shibboleth.idp.plugin.impl" level="TRACE"/>
+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%level [%logger:%line] - %msg%n</pattern>
diff --git a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/1.2.3/version.details.properties b/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/1.2.3/version.details.properties
deleted file mode 100644
index ccce079b9..000000000
--- a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/1.2.3/version.details.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-idp.version.max=5.0.0
-idp.version.min=4.1.0
-support.level = 2
diff --git a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/1.2.4/version.details.properties b/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/1.2.4/version.details.properties
deleted file mode 100644
index 79f7b8621..000000000
--- a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/1.2.4/version.details.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-idp.version.max=5.0.0
-idp.version.min=4.2.0
-support.level = 1
diff --git a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/2.0.0/version.details.properties b/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/2.0.0/version.details.properties
deleted file mode 100644
index 1eab454b5..000000000
--- a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/2.0.0/version.details.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-idp.version.max=8.0.0
-idp.version.min=4.99.1
-support.level = 2
diff --git a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/versions.properties b/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/versions.properties
deleted file mode 100644
index 8577686cf..000000000
--- a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/net.shibboleth.plugin.test/versions.properties
+++ /dev/null
@@ -1 +0,0 @@
-net.shibboleth.plugin.test.versions=1.2.3 1.2.4 2.0.0
\ No newline at end of file
diff --git a/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/plugins.props b/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/plugins.props
new file mode 100644
index 000000000..6bf766e86
--- /dev/null
+++ b/idp-admin-impl/src/test/resources/net/shibboleth/idp/plugin/plugins.props
@@ -0,0 +1,27 @@
+net.shibboleth.plugin.test.versions=1.2.3 1.2.4 2.0.0
+#
+# 1.2.3
+#
+net.shibboleth.plugin.test.downloadURL.1.2.3=https://example.org/plugins
+net.shibboleth.plugin.test.baseName.1.2.3=base-1-2-3
+net.shibboleth.plugin.test.idpVersionMax.1.2.3=5.0.0
+net.shibboleth.plugin.test.idpVersionMin.1.2.3=4.1.0
+net.shibboleth.plugin.test.supportLevel.1.2.3 = Current
+#
+# 1.2.4
+#
+net.shibboleth.plugin.test.downloadURL.1.2.4=https://example.org/plugins
+net.shibboleth.plugin.test.baseName.1.2.4=base-1-2-4
+net.shibboleth.plugin.test.idpVersionMax.1.2.4=5.0.0
+net.shibboleth.plugin.test.idpVersionMin.1.2.4=4.2.0
+net.shibboleth.plugin.test.supportLevel.1.2.4 = OutOfDate
+#
+# 2.0.0.
+#
+net.shibboleth.plugin.test.downloadURL.2.0.0=https://example.org/plugins
+net.shibboleth.plugin.test.baseName.2.0.0=base-1-2-4
+net.shibboleth.plugin.test.idpVersionMax.2.0.0=8.0.0
+net.shibboleth.plugin.test.idpVersionMin.2.0.0=4.99.1
+net.shibboleth.plugin.test.supportLevel.2.0.0 = Unsupported
+
+
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list