[java-opensaml] branch master updated: OSJ-193: Provide a mechanism to detect ResolverExceptions in ...
Brent Putman
putmanb at georgetown.edu
Wed Mar 4 22:11:55 EST 2020
This is an automated email from the git hooks/post-receive script.
putmanb pushed a commit to branch master
in repository java-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=765228260758afc3172adf0a16848d74671db883
The following commit(s) were added to refs/heads/master by this push:
new 7652282 OSJ-193: Provide a mechanism to detect ResolverExceptions in ...
7652282 is described below
commit 765228260758afc3172adf0a16848d74671db883
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Tue Mar 3 21:42:40 2020 -0500
OSJ-193: Provide a mechanism to detect ResolverExceptions in ...
Provide a mechanism to detect ResolverExceptions in
AbstractReloadingMetadataResolver.
---
.../resolver/ChainingMetadataResolver.java | 14 ++
.../resolver/RefreshableMetadataResolver.java | 7 +
.../impl/AbstractReloadingMetadataResolver.java | 15 +++
.../resolver/impl/CompositeMetadataResolver.java | 14 ++
.../impl/FileBackedHTTPMetadataResolverTest.java | 147 +++++++++++++++++----
.../impl/FilesystemMetadataResolverTest.java | 83 ++++++++++--
.../resolver/impl/HTTPMetadataResolverTest.java | 129 ++++++++++++------
7 files changed, 331 insertions(+), 78 deletions(-)
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
index 0c2e75e..a43949b 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
@@ -235,6 +235,20 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
}
/** {@inheritDoc} */
+ public Throwable getLastFailureCause() {
+ for (final MetadataResolver resolver : resolvers) {
+ if (resolver instanceof RefreshableMetadataResolver) {
+ final RefreshableMetadataResolver refreshable = (RefreshableMetadataResolver) resolver;
+ if (refreshable.getLastFailureCause() != null) {
+ return refreshable.getLastFailureCause();
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /** {@inheritDoc} */
@Override protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
if (resolvers == null) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/RefreshableMetadataResolver.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/RefreshableMetadataResolver.java
index b0fac11..d6f0491 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/RefreshableMetadataResolver.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/RefreshableMetadataResolver.java
@@ -70,4 +70,11 @@ public interface RefreshableMetadataResolver extends MetadataResolver {
*/
@Nullable public Boolean wasLastRefreshSuccess();
+ /**
+ * Gets the reason the last refresh failed.
+ *
+ * @return reason the last refresh failed or null if the last refresh was successful
+ */
+ @Nullable public Throwable getLastFailureCause();
+
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
index 2608251..83c6f71 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/AbstractReloadingMetadataResolver.java
@@ -111,6 +111,8 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
/** Internal flag for tracking success during the refresh operation. */
private boolean trackRefreshSuccess;
+ /** Reason for the failure of the last refresh. Will be null if last refresh was success. */
+ @Nullable private Throwable lastFailureCause;
/** Constructor. */
@@ -183,6 +185,11 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
return wasLastRefreshSuccess;
}
+ /** {@inheritDoc} */
+ @Nullable public Throwable getLastFailureCause() {
+ return lastFailureCause;
+ }
+
/**
* Gets the time when the next refresh cycle will occur.
*
@@ -302,6 +309,9 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
lastRefresh = null;
lastUpdate = null;
nextRefresh = null;
+ wasLastRefreshSuccess = null;
+ lastSuccessfulRefresh = null;
+ lastFailureCause = null;
super.doDestroy();
}
@@ -361,6 +371,7 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
}
} catch (final Throwable t) {
trackRefreshSuccess = false;
+ lastFailureCause = t;
nextRefresh = Instant.now().plus(computeNextRefreshDelay(null));
if (t instanceof Exception) {
log.error("{} Error occurred while attempting to refresh metadata from '{}'", getLogPrefix(), mdId);
@@ -375,6 +386,7 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
if (trackRefreshSuccess) {
wasLastRefreshSuccess = true;
lastSuccessfulRefresh = now;
+ lastFailureCause = null;
} else {
wasLastRefreshSuccess = false;
}
@@ -511,6 +523,9 @@ public abstract class AbstractReloadingMetadataResolver extends AbstractBatchMet
nextRefresh = Instant.now().plus(computeNextRefreshDelay(null));
trackRefreshSuccess = false;
+ // Note: We don't throw this b/c it would change behavior wrt to init and failFast,
+ // but we still want to expose the failure cause to clients.
+ lastFailureCause = new ResolverException("Entire metadata document was already expired at time of loading");
}
/**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
index dc9628e..8131da7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/impl/CompositeMetadataResolver.java
@@ -235,6 +235,20 @@ public class CompositeMetadataResolver extends AbstractIdentifiedInitializableCo
return true;
}
+ /** {@inheritDoc} */
+ public Throwable getLastFailureCause() {
+ for (final MetadataResolver resolver : resolvers) {
+ if (resolver instanceof RefreshableMetadataResolver) {
+ final RefreshableMetadataResolver refreshable = (RefreshableMetadataResolver) resolver;
+ if (refreshable.getLastFailureCause() != null) {
+ return refreshable.getLastFailureCause();
+ }
+ }
+ }
+
+ return null;
+ }
+
/**
* {@link Iterable} implementation that provides an {@link Iterator} that lazily iterates over each composed
* resolver.
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolverTest.java
index e87938b..9569f5c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FileBackedHTTPMetadataResolverTest.java
@@ -104,6 +104,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setId("test");
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
Assert.assertFalse(metadataProvider.isInitializedFromBackupFile());
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
@@ -122,12 +126,16 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setFailFastInitialization(true);
metadataProvider.setParserPool(parserPool);
+ metadataProvider.setId("test");
try {
metadataProvider.initialize();
Assert.fail("metadata provider claims to have parsed known invalid data");
} catch (ComponentInitializationException e) {
- //expected, do nothing
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
}
}
@@ -146,6 +154,11 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
try {
metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
} catch (ComponentInitializationException e) {
Assert.fail("Provider failed init with fail-fast=false");
}
@@ -163,19 +176,21 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
public void testFailFastBadBackupFile() throws Exception {
try {
// Use a known existing directory as backup file path, which is an invalid argument.
- metadataProvider = new FileBackedHTTPMetadataResolver(httpClientBuilder.buildClient(), metadataURLHttps, System.getProperty("java.io.tmpdir"));
+ metadataProvider = new FileBackedHTTPMetadataResolver(httpClientBuilder.buildClient(), metadataURLHttp, System.getProperty("java.io.tmpdir"));
} catch (ResolverException e) {
Assert.fail("Provider failed bad backup file in constructor");
}
metadataProvider.setFailFastInitialization(true);
metadataProvider.setParserPool(parserPool);
+ metadataProvider.setId("test");
try {
metadataProvider.initialize();
Assert.fail("Provider passed init with bad backup file, fail-fast=true");
} catch (ComponentInitializationException e) {
- // expected do nothing
+ Assert.assertNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
}
}
@@ -200,6 +215,11 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
try {
metadataProvider.initialize();
Assert.assertFalse(metadataProvider.isInitializedFromBackupFile());
+
+ // This is success because if backup file is bad, then resolver immediately does the HTTP fetch
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
} catch (ComponentInitializationException e) {
Assert.fail("Provider failed init with bad backup file, fail-fast=false");
}
@@ -231,6 +251,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setBackupFileInitNextRefreshDelay(Duration.ofSeconds(1));
metadataProvider.setMetadataFilter(mockFilter);
metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
Assert.assertTrue(metadataProvider.isInitializedFromBackupFile());
@@ -246,6 +270,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
Assert.assertTrue(initRefresh.isBefore(metadataProvider.getLastRefresh()));
Assert.assertTrue(initUpdate.isBefore(metadataProvider.getLastUpdate()));
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
Assert.assertFalse(mockFilter.lastFilterContext.get(MetadataSource.class).isTrusted());
@@ -274,8 +302,14 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setFailFastInitialization(true);
metadataProvider.setId("test");
metadataProvider.setBackupFileInitNextRefreshDelay(Duration.ofSeconds(1));
+
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+
Assert.assertTrue(metadataProvider.isInitializedFromBackupFile());
Instant postInit = Instant.now();
@@ -294,6 +328,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
Assert.assertNotNull(refreshUpdate);
Assert.assertTrue(refreshUpdate.isAfter(postInit));
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
Assert.assertNotNull(metadataProvider.resolveSingle(criteriaSet), "Metadata retrieved from HTTP refreshed metadata was null");
}
@@ -321,6 +359,11 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setBackupFileInitNextRefreshDelay(Duration.ofSeconds(1));
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+
Assert.assertTrue(metadataProvider.isInitializedFromBackupFile());
Instant postInit = Instant.now();
@@ -339,6 +382,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
Assert.assertNotNull(refreshUpdate);
Assert.assertTrue(refreshUpdate.isAfter(postInit));
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
Assert.assertNotNull(metadataProvider.resolveSingle(criteriaSet), "Metadata retrieved from HTTP refreshed metadata was null");
}
@@ -363,6 +410,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setId("test");
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
Assert.assertTrue(metadataProvider.isInitializedFromBackupFile());
Instant initRefresh = metadataProvider.getLastRefresh();
@@ -379,6 +430,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
Assert.assertTrue(initRefresh.isBefore(metadataProvider.getLastRefresh()));
Assert.assertEquals(initUpdate, metadataProvider.getLastUpdate());
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
Assert.assertNotNull(metadataProvider.resolveSingle(criteriaSet), "Metadata retrieved from cached metadata was null");
}
@@ -392,6 +447,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setId("test");
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -410,6 +469,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setHttpClientSecurityParameters(params);
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -427,6 +490,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setParserPool(parserPool);
metadataProvider.setId("test");
metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
@@ -450,13 +517,17 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setHttpClientSecurityParameters(params);
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
}
- @Test(expectedExceptions=ComponentInitializationException.class)
+ @Test
public void testHTTPSTrustEngineInvalidKey() throws Exception {
httpClientBuilder.setTLSSocketFactory(HTTPMetadataResolverTest.buildSocketFactory());
@@ -466,11 +537,16 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
final HttpClientSecurityParameters params = new HttpClientSecurityParameters();
params.setTLSTrustEngine(HTTPMetadataResolverTest.buildExplicitKeyTrustEngine("badKey.crt"));
metadataProvider.setHttpClientSecurityParameters(params);
- metadataProvider.initialize();
- EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
- Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
- Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
+ try {
+ metadataProvider.initialize();
+ Assert.fail("Invalid metadata TLS should have failed init");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
@Test
@@ -487,6 +563,10 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -505,12 +585,16 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
}
- @Test(expectedExceptions=ComponentInitializationException.class)
+ @Test
public void testHTTPSTrustEngineInvalidPKIX() throws Exception {
httpClientBuilder.setTLSSocketFactory(HTTPMetadataResolverTest.buildSocketFactory());
@@ -521,14 +605,18 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
params.setTLSTrustEngine(HTTPMetadataResolverTest.buildPKIXTrustEngine("badCA.crt", null, false));
metadataProvider.setHttpClientSecurityParameters(params);
- metadataProvider.initialize();
-
- EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
- Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
- Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
+ try {
+ metadataProvider.initialize();
+ Assert.fail("Invalid metadata TLS should have failed init");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
- @Test(expectedExceptions=ComponentInitializationException.class)
+ @Test
public void testHTTPSTrustEngineValidPKIXInvalidName() throws Exception {
httpClientBuilder.setTLSSocketFactory(HTTPMetadataResolverTest.buildSocketFactory());
@@ -539,14 +627,19 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
final HttpClientSecurityParameters params = new HttpClientSecurityParameters();
params.setTLSTrustEngine(HTTPMetadataResolverTest.buildPKIXTrustEngine("repo-rootCA.crt", "foobar.shibboleth.net", true));
metadataProvider.setHttpClientSecurityParameters(params);
- metadataProvider.initialize();
- EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
- Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
- Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
+ try {
+ metadataProvider.initialize();
+ Assert.fail("Invalid metadata TLS should have failed init");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
- @Test(expectedExceptions=ComponentInitializationException.class)
+ @Test
public void testHTTPSTrustEngineWrongSocketFactory() throws Exception {
// Trust engine set, but appropriate socket factory not set
metadataProvider = new FileBackedHTTPMetadataResolver(httpClientBuilder.buildClient(), metadataURLHttps, backupFilePath);
@@ -556,11 +649,15 @@ public class FileBackedHTTPMetadataResolverTest extends XMLObjectBaseTestCase {
params.setTLSTrustEngine(HTTPMetadataResolverTest.buildExplicitKeyTrustEngine("repo-entity.crt"));
metadataProvider.setHttpClientSecurityParameters(params);
- metadataProvider.initialize();
-
- EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
- Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
- Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
+ try {
+ metadataProvider.initialize();
+ Assert.fail("Invalid metadata TLS should have failed init");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
// Test helpers
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FilesystemMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FilesystemMetadataResolverTest.java
index 3158b9f..e2938a5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FilesystemMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/FilesystemMetadataResolverTest.java
@@ -53,11 +53,6 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
.getResource("/org/opensaml/saml/saml2/metadata/InCommon-metadata.xml");
mdFile = new File(mdURL.toURI());
- metadataProvider = new FilesystemMetadataResolver(mdFile);
- metadataProvider.setParserPool(parserPool);
- metadataProvider.setId("test");
- metadataProvider.initialize();
-
criteriaSet = new CriteriaSet(new EntityIdCriterion(entityID));
}
@@ -68,6 +63,19 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
*/
@Test
public void testGetEntityDescriptor() throws ResolverException {
+ try {
+ metadataProvider = new FilesystemMetadataResolver(mdFile);
+ metadataProvider.setParserPool(parserPool);
+ metadataProvider.setId("test");
+ metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+ } catch (ComponentInitializationException e) {
+ Assert.fail("Valid metdata failed init");
+ }
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -79,11 +87,20 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
* @throws ResolverException ...
* @throws ComponentInitializationException ...
*/
- @Test(expectedExceptions = {ComponentInitializationException.class})
+ @Test
public void testNonexistentMetadataFile() throws ResolverException, ComponentInitializationException {
- metadataProvider = new FilesystemMetadataResolver(new File("I-Dont-Exist.xml"));
- metadataProvider.setParserPool(parserPool);
- metadataProvider.initialize();
+ try {
+ metadataProvider = new FilesystemMetadataResolver(new File("I-Dont-Exist.xml"));
+ metadataProvider.setParserPool(parserPool);
+ metadataProvider.setId("test");
+ metadataProvider.initialize();
+ Assert.fail("Init should have thrown");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
/**
@@ -93,7 +110,7 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
* @throws ResolverException ...
* @throws ComponentInitializationException ...
*/
- @Test(expectedExceptions = {ComponentInitializationException.class})
+ @Test
public void testInvalidMetadataFile() throws IOException, ResolverException, ComponentInitializationException {
File targetFile = new File(System.getProperty("java.io.tmpdir"), "filesystem-md-provider-test");
if (targetFile.exists()) {
@@ -106,7 +123,14 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
try {
metadataProvider = new FilesystemMetadataResolver(targetFile);
metadataProvider.setParserPool(parserPool);
+ metadataProvider.setId("test");
metadataProvider.initialize();
+ Assert.fail("Init should have thrown");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
} finally {
targetFile.delete();
}
@@ -119,7 +143,7 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
* @throws ResolverException ...
* @throws ComponentInitializationException ...
*/
- @Test(expectedExceptions = {ComponentInitializationException.class})
+ @Test
public void testUnreadableMetadataFile() throws IOException, ResolverException, ComponentInitializationException {
File targetFile = File.createTempFile("filesystem-md-provider-test", "xml");
Assert.assertTrue(targetFile.exists());
@@ -130,7 +154,13 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
try {
metadataProvider = new FilesystemMetadataResolver(targetFile);
metadataProvider.setParserPool(parserPool);
+ metadataProvider.setId("test");
metadataProvider.initialize();
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
} finally {
targetFile.delete();
}
@@ -142,7 +172,7 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
* @throws IOException ...
* @throws ResolverException ...
*/
- @Test(expectedExceptions = {ResolverException.class})
+ @Test
public void testDisappearingMetadataFile() throws IOException, ResolverException {
File targetFile = new File(System.getProperty("java.io.tmpdir"), "filesystem-md-provider-disappearing.xml");
if (targetFile.exists()) {
@@ -157,13 +187,25 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setParserPool(parserPool);
metadataProvider.setId("test");
metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
} catch (ComponentInitializationException e) {
Assert.fail("Filesystem metadata provider init failed with file: " + targetFile.getAbsolutePath());
}
Assert.assertTrue(targetFile.delete());
- metadataProvider.refresh();
+ try {
+ metadataProvider.refresh();
+ Assert.fail("Refresh should have thrown");
+ } catch (ResolverException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
/**
@@ -185,6 +227,11 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setParserPool(parserPool);
metadataProvider.setId("test");
metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
} catch (ComponentInitializationException | ResolverException e) {
Assert.fail("Filesystem metadata provider init failed with non-existent file and fail fast = false");
}
@@ -208,6 +255,11 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
try {
metadataProvider.refresh();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
} catch (ResolverException e) {
@@ -228,6 +280,11 @@ public class FilesystemMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setId("test");
metadataProvider.setParserPool(parserPool);
metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
} catch (ComponentInitializationException | ResolverException e) {
Assert.fail("Filesystem metadata provider init failed with expired file and fail fast = false");
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolverTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolverTest.java
index d105217..34fdf8e 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolverTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/impl/HTTPMetadataResolverTest.java
@@ -26,14 +26,12 @@ import java.util.Collections;
import java.util.Set;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.opensaml.core.criterion.EntityIdCriterion;
import org.opensaml.core.xml.XMLObjectBaseTestCase;
import org.opensaml.saml.saml2.metadata.EntityDescriptor;
import org.opensaml.security.credential.impl.StaticCredentialResolver;
import org.opensaml.security.httpclient.HttpClientSecurityParameters;
import org.opensaml.security.httpclient.impl.SecurityEnhancedHttpClientSupport;
-import org.opensaml.security.httpclient.impl.SecurityEnhancedTLSSocketFactory;
import org.opensaml.security.trust.TrustEngine;
import org.opensaml.security.trust.impl.ExplicitKeyTrustEngine;
import org.opensaml.security.x509.BasicX509Credential;
@@ -46,7 +44,6 @@ import org.opensaml.security.x509.impl.CertPathPKIXTrustEvaluator;
import org.opensaml.security.x509.impl.PKIXX509CredentialTrustEngine;
import org.opensaml.security.x509.impl.StaticPKIXValidationInformationResolver;
import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -55,9 +52,6 @@ import com.google.common.io.ByteStreams;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.httpclient.HttpClientBuilder;
-import net.shibboleth.utilities.java.support.httpclient.HttpClientSupport;
-import net.shibboleth.utilities.java.support.httpclient.TLSSocketFactory;
-import net.shibboleth.utilities.java.support.httpclient.TLSSocketFactoryBuilder;
import net.shibboleth.utilities.java.support.repository.RepositorySupport;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
@@ -91,22 +85,28 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
badMDURL = "http://www.google.com/";
entityID = "https://www.example.org/sp";
- metadataProvider = new HTTPMetadataResolver(httpClientBuilder.buildClient(), metadataURLHttp);
- metadataProvider.setParserPool(parserPool);
- metadataProvider.setId("test");
- metadataProvider.initialize();
-
-
criteriaSet = new CriteriaSet(new EntityIdCriterion(entityID));
}
/**
* Tests the {@link HTTPMetadataResolver#lookupEntityID(String)} method.
- *
- * @throws ResolverException ...
+ * @throws Exception
*/
@Test
- public void testGetEntityDescriptor() throws ResolverException {
+ public void testGetEntityDescriptor() throws Exception {
+ try {
+ metadataProvider = new HTTPMetadataResolver(httpClientBuilder.buildClient(), metadataURLHttp);
+ metadataProvider.setParserPool(parserPool);
+ metadataProvider.setId("test");
+ metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+ } catch (ComponentInitializationException e) {
+ Assert.fail("Valid metadata failed init");
+ }
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -129,7 +129,10 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.initialize();
Assert.fail("metadata provider claims to have parsed known invalid data");
} catch (ComponentInitializationException e) {
- //expected, do nothing
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
}
}
@@ -148,6 +151,11 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
try {
metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
} catch (ComponentInitializationException e) {
Assert.fail("Provider failed init with fail-fast=false");
}
@@ -166,6 +174,10 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setId("test");
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -185,6 +197,10 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setHttpClientSecurityParameters(params);
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -202,6 +218,10 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.setParserPool(parserPool);
metadataProvider.setId("test");
metadataProvider.initialize();
+
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
@@ -226,13 +246,17 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
}
- @Test(expectedExceptions=ComponentInitializationException.class)
+ @Test
public void testHTTPSTrustEngineInvalidKey() throws Exception {
httpClientBuilder.setTLSSocketFactory(buildSocketFactory());
@@ -244,11 +268,15 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
params.setTLSTrustEngine(HTTPMetadataResolverTest.buildExplicitKeyTrustEngine("badKey.crt"));
metadataProvider.setHttpClientSecurityParameters(params);
- metadataProvider.initialize();
-
- EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
- Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
- Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
+ try {
+ metadataProvider.initialize();
+ Assert.fail("Invalid metadata TLS should have failed init");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
@Test
@@ -265,6 +293,10 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
@@ -284,12 +316,16 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
metadataProvider.initialize();
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertTrue(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNull(metadataProvider.getLastFailureCause());
+
EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
}
- @Test(expectedExceptions=ComponentInitializationException.class)
+ @Test
public void testHTTPSTrustEngineInvalidPKIX() throws Exception {
httpClientBuilder.setTLSSocketFactory(buildSocketFactory());
@@ -301,14 +337,18 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
params.setTLSTrustEngine(HTTPMetadataResolverTest.buildPKIXTrustEngine("badCA.crt", null, false));
metadataProvider.setHttpClientSecurityParameters(params);
- metadataProvider.initialize();
-
- EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
- Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
- Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
+ try {
+ metadataProvider.initialize();
+ Assert.fail("Invalid metadata TLS should have failed init");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
- @Test(expectedExceptions=ComponentInitializationException.class)
+ @Test
public void testHTTPSTrustEngineValidPKIXInvalidName() throws Exception {
httpClientBuilder.setTLSSocketFactory(buildSocketFactory());
@@ -320,14 +360,18 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
params.setTLSTrustEngine(HTTPMetadataResolverTest.buildPKIXTrustEngine("repo-rootCA.crt", "foobar.shibboleth.net", true));
metadataProvider.setHttpClientSecurityParameters(params);
- metadataProvider.initialize();
-
- EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
- Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
- Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
+ try {
+ metadataProvider.initialize();
+ Assert.fail("Invalid metadata TLS should have failed init");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
- @Test(expectedExceptions=ComponentInitializationException.class)
+ @Test
public void testHTTPSTrustEngineWrongSocketFactory() throws Exception {
// Trust engine set, but appropriate socket factory not set
metadataProvider = new HTTPMetadataResolver(httpClientBuilder.buildClient(), metadataURLHttps);
@@ -338,12 +382,17 @@ public class HTTPMetadataResolverTest extends XMLObjectBaseTestCase {
params.setTLSTrustEngine(HTTPMetadataResolverTest.buildExplicitKeyTrustEngine("repo-entity.crt"));
metadataProvider.setHttpClientSecurityParameters(params);
- metadataProvider.initialize();
-
- EntityDescriptor descriptor = metadataProvider.resolveSingle(criteriaSet);
- Assert.assertNotNull(descriptor, "Retrieved entity descriptor was null");
- Assert.assertEquals(descriptor.getEntityID(), entityID, "Entity's ID does not match requested ID");
+ try {
+ metadataProvider.initialize();
+ Assert.fail("Invalid metadata TLS should have failed init");
+ } catch (ComponentInitializationException e) {
+ Assert.assertNotNull(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertFalse(metadataProvider.wasLastRefreshSuccess());
+ Assert.assertNotNull(metadataProvider.getLastFailureCause());
+ Assert.assertTrue(ResolverException.class.isInstance(metadataProvider.getLastFailureCause()));
+ }
}
+
// Helpers
public static TrustEngine<? super X509Credential> buildPKIXTrustEngine(String cert, String name, boolean nameCheckEnabled) throws URISyntaxException, CertificateException, IOException {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list