public void testStackedModules() throws Exception {
// Make the validateToken() method return true.
when(stsClient.validateToken(any(Element.class))).thenReturn(true);
final STSValidatingLoginModule loginModule = new FakeSTSValidatingLoginModule(stsClient);
final Element token = Util.createSamlToken();
final Subject subject = new Subject();
final Map<String, Object> sharedState = new HashMap<String, Object>();
loginModule.initialize(subject, null, sharedState, getAllOptions());
// Simlulate that a previous LM stored a security token in the shared state.
loginModule.setSharedToken(token);
// Simulate Phase 1
assertTrue(loginModule.login());
// Simulate Phase 2
assertTrue(loginModule.commit());
final Set<SamlCredential> samlCredentials = subject.<SamlCredential> getPublicCredentials(SamlCredential.class);
assertEquals(1, samlCredentials.size());
}