package net.unicon.cas.addons.config;
import static org.junit.Assert.*;
import com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager;
import net.unicon.cas.addons.authentication.internal.DefaultAuthenticationSupport;
import net.unicon.cas.addons.authentication.strong.yubikey.YubiKeyAccountRegistry;
import net.unicon.cas.addons.authentication.strong.yubikey.YubiKeyAuthenticationHandler;
import net.unicon.cas.addons.info.events.CentralAuthenticationServiceEventsPublishingAspect;
import net.unicon.cas.addons.persondir.JsonBackedComplexStubPersonAttributeDao;
import net.unicon.cas.addons.serviceregistry.JsonServiceRegistryDao;
import net.unicon.cas.addons.serviceregistry.RegisteredServicesReloadDisablingBeanFactoryPostProcessor;
import net.unicon.cas.addons.serviceregistry.services.authorization.ServiceAuthorizationAction;
import net.unicon.cas.addons.serviceregistry.services.internal.DefaultRegisteredServicesPolicies;
import net.unicon.cas.addons.support.ResourceChangeDetectingEventNotifier;
import net.unicon.cas.addons.support.TimingAspectRemovingBeanFactoryPostProcessor;
import net.unicon.cas.addons.ticket.registry.HazelcastTicketRegistry;
import net.unicon.cas.addons.web.flow.ServiceRedirectionAction;
import net.unicon.cas.addons.web.view.RequestParameterCasLoginViewSelector;
import org.jasig.cas.adaptors.generic.AcceptUsersAuthenticationHandler;
import org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler;
import org.jasig.cas.authentication.AuthenticationManager;
import org.jasig.cas.monitor.HealthCheckMonitor;
import org.jasig.services.persondir.support.StubPersonAttributeDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.ldap.core.support.LdapContextSource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Dmitriy Kopylenko
* @author Unicon, inc.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class CasNamespaceParsersTests {
@Autowired
ApplicationContext applicationContext;
private static final String AUDIT_TRAIL_MANAGER_BEAN_NAME = "auditTrailManager";
private static final String SERVICE_REGISTRY_DAO_BEAN_NAME = "serviceRegistryDao";
private static final String RESOURCE_CHANGE_DETECTOR_BEAN_NAME = "testChangeDetector";
private static final String AUTHENTICATION_SUPPORT_BEAN_NAME = "authenticationSupport";
private static final String REGISTERED_SERVICES_POLICIES_BEAN_NAME = "registeredServicesPolicies";
private static final String HEALTH_CHECK_MONITOR_BEAN_NAME = "healthCheckMonitor";
private static final String AUTHENTICATION_MANAGER_BEAN_NAME = "authenticationManager";
private static final String ATTRIBUTE_REPOSITORY_BEAN_NAME = "attributeRepository";
private static final String SERVICE_AUTHORIZATION_ACTION_BEAN_NAME = "serviceAuthorizationAction";
private static final String YUBIKEY_AUTHENTICATION_HANDLER_BEAN_NAME = "yubikeyAuthenticationHandler";
private static final String ACCEPT_USERS_AUTH_HANDLER_BEAN_NAME = "acceptUsersAuthnHandler";
private static final String BIND_LDAP_AUTH_HANDLER_BEAN_NAME = "ldapAuthnHandler";
private static final String CONTEXT_SOURCE_BEAN_NAME = "contextSource";
private static final String SERVICE_REDIRECTION_ACTION_BEAN_NAME = "serviceRedirectionCheck";
private static final String LOGIN_VIEW_SELECTOR_BEAN_NAME = "casLoginViewSelector";
@Test
public void slf4jAuditTrailManagerBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(AUDIT_TRAIL_MANAGER_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(Slf4jLoggingAuditTrailManager.class).size() == 1);
}
@Test
public void jsonServiceRegistryDaoBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(SERVICE_REGISTRY_DAO_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(JsonServiceRegistryDao.class).size() == 1);
}
@Test
public void jsonAttributeRepositoryBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(ATTRIBUTE_REPOSITORY_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(JsonBackedComplexStubPersonAttributeDao.class).size() == 1);
}
@Test
public void resourceChangeDetectingEventNotifierBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(RESOURCE_CHANGE_DETECTOR_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(ResourceChangeDetectingEventNotifier.class).size() == 1);
}
@Test
public void defaultAuthenticationSupportBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(AUTHENTICATION_SUPPORT_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(DefaultAuthenticationSupport.class).size() == 1);
}
@Test
public void defaultEventsPublisherBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.getBeansOfType(CentralAuthenticationServiceEventsPublishingAspect.class).size() == 1);
}
@Test
public void defaultRegisteredServicesPoliciesBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(REGISTERED_SERVICES_POLICIES_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(DefaultRegisteredServicesPolicies.class).size() == 1);
}
@Test
public void defaultHealthCheckMonitorBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(HEALTH_CHECK_MONITOR_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(HealthCheckMonitor.class).size() == 1);
}
@Test
public void defaultTestAuthenticationManagerBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(AUTHENTICATION_MANAGER_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(AuthenticationManager.class).size() == 1);
}
@Test
public void serviceAuthorizationActionBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(SERVICE_AUTHORIZATION_ACTION_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(ServiceAuthorizationAction.class).size() == 1);
}
@Test
public void yubikeyAuthenticationHandlerBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(YUBIKEY_AUTHENTICATION_HANDLER_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(YubiKeyAuthenticationHandler.class).size() == 1);
}
@Test
public void acceptUsersAuthenticationHandlerBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(ACCEPT_USERS_AUTH_HANDLER_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(AcceptUsersAuthenticationHandler.class).size() == 1);
}
@Test
public void bindLdapAuthenticationHandlerBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(BIND_LDAP_AUTH_HANDLER_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(BindLdapAuthenticationHandler.class).size() == 1);
assertTrue(applicationContext.containsBean(CONTEXT_SOURCE_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(LdapContextSource.class).size() == 1);
}
@Test
public void registeredServicesReloadDisablingBFPPBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.getBeansOfType(RegisteredServicesReloadDisablingBeanFactoryPostProcessor.class).size() == 1);
}
@Test
public void timingAspectRemovingBFPPBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.getBeansOfType(TimingAspectRemovingBeanFactoryPostProcessor.class).size() == 1);
}
/**
* Used in unit tests - wiring via Spring XML context
*/
public static final class DummyYubiKeyAccountRegistry implements YubiKeyAccountRegistry {
@Override
public boolean isYubiKeyRegisteredFor(String uid, String yubikeyPublicId) {
return true;
}
}
@Test
public void serviceRedirectionActionBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(SERVICE_REDIRECTION_ACTION_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(ServiceRedirectionAction.class).size() == 1);
}
@Test
public void requestParameterLoginViewSelectorBeanDefinitionCorrectlyParsed() {
assertTrue(applicationContext.containsBean(LOGIN_VIEW_SELECTOR_BEAN_NAME));
assertTrue(applicationContext.getBeansOfType(RequestParameterCasLoginViewSelector.class).size() == 1);
}
}