diff options
author | 2019-08-25 13:02:27 +0300 | |
---|---|---|
committer | 2019-08-25 13:59:16 +0300 | |
commit | 9c4a3a6d1ff8f6d91f32209bfdb59539bc20b743 (patch) | |
tree | 01da9e6134416c9979c17d854a053ae14ee1f9c2 | |
parent | 87f850a6f3012aed165190bb861dcd0db8249dc6 (diff) |
Allow plugging-in any provided LoginStrategy
Support dynamic loading of provided implementations of PORTAL SDK's
`org.onap.portalsdk.core.auth.LoginStrategy` interface.
VID will load the class defined by `login.strategy.classname`
configuration parameter. Default will keep current ONAP's dev login.
Change-Id: I956a1f3376455211398769f3193703129b779871
Issue-ID: VID-594
Signed-off-by: Ittay Stern <ittay.stern@att.com>
-rw-r--r-- | epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java | 14 | ||||
-rw-r--r-- | epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java | 56 |
2 files changed, 56 insertions, 14 deletions
diff --git a/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java index b4dcd346a..d9b0f092e 100644 --- a/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java +++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java @@ -37,6 +37,8 @@ */ package org.onap.portalapp.conf; +import static org.apache.commons.lang3.StringUtils.isNotEmpty; + import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; @@ -50,6 +52,7 @@ import org.onap.portalsdk.core.objectcache.AbstractCacheManager; import org.onap.portalsdk.core.service.DataAccessService; import org.onap.portalsdk.core.util.CacheManager; import org.onap.portalsdk.core.util.SystemProperties; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -164,8 +167,15 @@ public class ExternalAppConfig extends AppConfig implements Configurable { } @Bean - public LoginStrategy loginStrategy() { - return new LoginStrategyImpl(); + public LoginStrategy loginStrategy(@Value("${login.strategy.classname:}") String classname) throws ReflectiveOperationException { + return isNotEmpty(classname) ? + newLoginStrategyInstance(classname) : new LoginStrategyImpl(); + } + + private LoginStrategy newLoginStrategyInstance(String loginStrategyClassname) throws ReflectiveOperationException { + return (LoginStrategy) Class.forName(loginStrategyClassname) + .getConstructor() + .newInstance(); } @Bean diff --git a/epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java b/epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java index 1bdf46325..f06526860 100644 --- a/epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java +++ b/epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java @@ -37,18 +37,23 @@ */ package org.onap.portalapp.conf; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.junit.Assert; import org.junit.Test; +import org.onap.portalapp.login.LoginStrategyImpl; import org.onap.portalapp.scheduler.RegistryAdapter; import org.onap.portalsdk.core.auth.LoginStrategy; +import org.onap.portalsdk.core.onboarding.exception.PortalAPIException; import org.onap.portalsdk.core.service.DataAccessService; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; -import org.springframework.jdbc.datasource.init.DatabasePopulator; -import org.springframework.scheduling.quartz.SchedulerFactoryBean; +import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ViewResolver; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; public class ExternalAppConfigTest { @@ -112,12 +117,39 @@ public class ExternalAppConfigTest { } @Test - public void testLoginStrategy() throws Exception { - ExternalAppConfig testSubject; - LoginStrategy result; + public void loginStrategy_givenEmptyString_yieldDefault() throws Exception { + assertThat(new ExternalAppConfig().loginStrategy(""), + is(instanceOf(LoginStrategyImpl.class))); + } - // default test - testSubject = createTestSubject(); - result = testSubject.loginStrategy(); + @Test + public void loginStrategy_givenNullString_yieldDefault() throws Exception { + assertThat(new ExternalAppConfig().loginStrategy(null), + is(instanceOf(LoginStrategyImpl.class))); + } + + public static class DummyLoginStrategy extends LoginStrategy { + @Override + public ModelAndView doLogin(HttpServletRequest request, HttpServletResponse response) { + return null; + } + + @Override + public String getUserId(HttpServletRequest request) { + return null; + } + } + + @Test + public void loginStrategy_givenClassname_yieldClassInstance() throws Exception { + assertThat( + new ExternalAppConfig().loginStrategy("org.onap.portalapp.conf.ExternalAppConfigTest$DummyLoginStrategy"), + is(instanceOf(DummyLoginStrategy.class))); + } + + @Test(expected = ClassNotFoundException.class) + public void loginStrategy_givenMissingClassname_throwsException() throws Exception { + new ExternalAppConfig().loginStrategy("no.real.classname"); + Assert.fail("should throw"); } -}
\ No newline at end of file +} |