branch feature/7463 updated (c579af1 -> dd37e61)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7463 in repository observe. See http://git.codelutin.com/observe.git from c579af1 controleur pour seine pour le serveur web (refs #7463) new 24036b0 Ajout de configuration de sources de données différentes si on est ou pas authentifié au serveur (See #7463) new 7fcd439 Revue un peu du paquetage http (See #7463) new 42de064 Introduction de constants pour les choses mises dans les headers de la requete (See #7463) new dd37e61 Début de tests sur le client rest (See #7563) The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit dd37e614f4edbe50745d824d62e3608fe24c0041 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 07:35:26 2015 +0200 Début de tests sur le client rest (See #7563) commit 42de064264a3a4b33c5423c3fe28579a102a534e Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 07:34:49 2015 +0200 Introduction de constants pour les choses mises dans les headers de la requete (See #7463) commit 7fcd43926d4593cc6710ee24b6b98212d1693594 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 07:22:36 2015 +0200 Revue un peu du paquetage http (See #7463) commit 24036b0a246555e6be2c3d9bd908847780f64433 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 07:21:16 2015 +0200 Ajout de configuration de sources de données différentes si on est ou pas authentifié au serveur (See #7463) Summary of changes: .../application/web/ObserveWebMotionFilter.java | 27 ++-- ...eDataSourceConfigurationRestAuthenticated.java} | 38 ++---- ...bserveDataSourceConfigurationRestConstants.java | 23 ++++ ...ataSourceConfigurationRestNotAuthenticated.java | 69 +++++++++++ ...ObserveDataSourceConfigurationRestSupport.java} | 16 +-- observe-services-rest/pom.xml | 6 + .../services/ObserveServiceFactoryRest.java | 104 ++++++++++------ .../ird/observe/services/http/RequestBuilder.java | 8 +- .../ird/observe/services/http/RequestResult.java | 52 ++------ .../fr/ird/observe/services/TestClassResource.java | 136 +++++++++++++++++++++ .../ird/observe/services/TestMethodResource.java | 97 +++++++++++++++ .../service/DataSourceServiceRestTest.java | 72 +++++++++++ .../ObserveDataSourceConfigurationMainFactory.java | 26 +++- 13 files changed, 539 insertions(+), 135 deletions(-) copy observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/{ObserveDataSourceConfigurationRest.java => ObserveDataSourceConfigurationRestAuthenticated.java} (52%) create mode 100644 observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestConstants.java create mode 100644 observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestNotAuthenticated.java rename observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/{ObserveDataSourceConfigurationRest.java => ObserveDataSourceConfigurationRestSupport.java} (65%) create mode 100644 observe-services-rest/src/test/java/fr/ird/observe/services/TestClassResource.java create mode 100644 observe-services-rest/src/test/java/fr/ird/observe/services/TestMethodResource.java create mode 100644 observe-services-rest/src/test/java/fr/ird/observe/services/service/DataSourceServiceRestTest.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7463 in repository observe. See http://git.codelutin.com/observe.git commit 24036b0a246555e6be2c3d9bd908847780f64433 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 07:21:16 2015 +0200 Ajout de configuration de sources de données différentes si on est ou pas authentifié au serveur (See #7463) --- ...eDataSourceConfigurationRestAuthenticated.java} | 38 +++--------- ...ataSourceConfigurationRestNotAuthenticated.java | 69 ++++++++++++++++++++++ ...ObserveDataSourceConfigurationRestSupport.java} | 16 +---- .../ObserveDataSourceConfigurationMainFactory.java | 26 ++++++-- 4 files changed, 100 insertions(+), 49 deletions(-) diff --git a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestAuthenticated.java similarity index 52% copy from observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java copy to observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestAuthenticated.java index c9625bd..3d0d14d 100644 --- a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java +++ b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestAuthenticated.java @@ -1,48 +1,21 @@ package fr.ird.observe.services.configuration; -import java.net.URL; - /** + * La configuration d'une source de données connectée. + * * Created on 19/08/15. * * @author Tony Chemit - chemit@codelutin.com */ -public class ObserveDataSourceConfigurationRest implements ObserveDataSourceConfiguration { +public class ObserveDataSourceConfigurationRestAuthenticated extends ObserveDataSourceConfigurationRestSupport { private static final long serialVersionUID = 1L; /** - * Le libellé de la data source. - */ - protected String label; - - /** - * L'url du serveur à utiliser. - */ - protected URL serverUrl; - - /** * Le jeton d'authentification. */ protected String authenticationToken; - @Override - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - public URL getServerUrl() { - return serverUrl; - } - - public void setServerUrl(URL serverUrl) { - this.serverUrl = serverUrl; - } - public String getAuthenticationToken() { return authenticationToken; } @@ -52,6 +25,11 @@ public class ObserveDataSourceConfigurationRest implements ObserveDataSourceConf } @Override + public boolean isAuthenticated() { + return true; + } + + @Override public boolean datasourceExists() { //TODO return false; diff --git a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestNotAuthenticated.java b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestNotAuthenticated.java new file mode 100644 index 0000000..489773f --- /dev/null +++ b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestNotAuthenticated.java @@ -0,0 +1,69 @@ +package fr.ird.observe.services.configuration; + +import com.google.common.base.Optional; + +/** + * Configuration d'une source de données Rest non connectée. + * + * Created on 19/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveDataSourceConfigurationRestNotAuthenticated extends ObserveDataSourceConfigurationRestSupport { + + private static final long serialVersionUID = 1L; + + /** + * Le login de l'utilisateur. + */ + protected String login; + + /** + * Le mot de passe de l'utilisateur. + */ + protected char[] password; + + /** + * Un nom optionel de base à utiliser, si rien n'est préciser, on utilisera la base par défaut du serveur. + */ + protected Optional<String> optionalDatabaseName; + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public char[] getPassword() { + return password; + } + + public void setPassword(char... password) { + this.password = password; + } + + public boolean withDatabaseName() { + return optionalDatabaseName.isPresent(); + } + public Optional<String> getOptionalDatabaseName() { + return optionalDatabaseName; + } + + public void setOptionalDatabaseName(Optional<String> optionalDatabaseName) { + this.optionalDatabaseName = optionalDatabaseName; + } + + @Override + public boolean isAuthenticated() { + return false; + } + + @Override + public boolean datasourceExists() { + //TODO + return false; + } + +} diff --git a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestSupport.java similarity index 65% rename from observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java rename to observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestSupport.java index c9625bd..199b821 100644 --- a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java +++ b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestSupport.java @@ -7,7 +7,7 @@ import java.net.URL; * * @author Tony Chemit - chemit@codelutin.com */ -public class ObserveDataSourceConfigurationRest implements ObserveDataSourceConfiguration { +public abstract class ObserveDataSourceConfigurationRestSupport implements ObserveDataSourceConfiguration { private static final long serialVersionUID = 1L; @@ -21,11 +21,7 @@ public class ObserveDataSourceConfigurationRest implements ObserveDataSourceConf */ protected URL serverUrl; - /** - * Le jeton d'authentification. - */ - protected String authenticationToken; - + public abstract boolean isAuthenticated(); @Override public String getLabel() { return label; @@ -43,14 +39,6 @@ public class ObserveDataSourceConfigurationRest implements ObserveDataSourceConf this.serverUrl = serverUrl; } - public String getAuthenticationToken() { - return authenticationToken; - } - - public void setAuthenticationToken(String authenticationToken) { - this.authenticationToken = authenticationToken; - } - @Override public boolean datasourceExists() { //TODO diff --git a/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java b/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java index e9e18cb..d7e7453 100644 --- a/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java +++ b/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java @@ -1,7 +1,8 @@ package fr.ird.observe.services; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestAuthenticated; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestNotAuthenticated; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; @@ -57,11 +58,26 @@ public class ObserveDataSourceConfigurationMainFactory { } - public ObserveDataSourceConfiguration createObserveDataSourceConfigurationRest(String label, - URL serverUrl, - String authenticationToken) { + public ObserveDataSourceConfiguration createObserveDataSourceConfigurationRestNotAuthenticated(String label, + URL serverUrl, + String login, + char... password) { - ObserveDataSourceConfigurationRest result = new ObserveDataSourceConfigurationRest(); + ObserveDataSourceConfigurationRestNotAuthenticated result = new ObserveDataSourceConfigurationRestNotAuthenticated(); + result.setLabel(label); + result.setServerUrl(serverUrl); + result.setLogin(login); + result.setPassword(password); + + return result; + + } + + public ObserveDataSourceConfiguration createObserveDataSourceConfigurationRestAuthenticated(String label, + URL serverUrl, + String authenticationToken) { + + ObserveDataSourceConfigurationRestAuthenticated result = new ObserveDataSourceConfigurationRestAuthenticated(); result.setLabel(label); result.setServerUrl(serverUrl); result.setAuthenticationToken(authenticationToken); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7463 in repository observe. See http://git.codelutin.com/observe.git commit 42de064264a3a4b33c5423c3fe28579a102a534e Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 07:34:49 2015 +0200 Introduction de constants pour les choses mises dans les headers de la requete (See #7463) --- .../application/web/ObserveWebMotionFilter.java | 27 ++++-- ...bserveDataSourceConfigurationRestConstants.java | 23 +++++ .../services/ObserveServiceFactoryRest.java | 104 ++++++++++++++------- 3 files changed, 111 insertions(+), 43 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java index e34a42d..e823654 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java @@ -10,6 +10,7 @@ import fr.ird.observe.application.web.security.ObserveWebSecurityApplicationCont import fr.ird.observe.application.web.security.UnknownObserveWebUserException; import fr.ird.observe.application.web.security.UnknownObserveWebUserForDatabaseException; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestConstants; import fr.ird.observe.services.dto.constants.ReferentialLocale; import org.apache.commons.lang3.StringUtils; import org.debux.webmotion.server.WebMotionFilter; @@ -22,7 +23,7 @@ import java.util.Locale; /** * @author Tony Chemit - chemit@codelutin.com */ -public class ObserveWebMotionFilter extends WebMotionFilter { +public class ObserveWebMotionFilter extends WebMotionFilter implements ObserveDataSourceConfigurationRestConstants { public void inject(HttpContext context) throws InvalidAuthenticationTokenException, UnknownObserveWebUserException, BadObserveWebUserPasswordException, DataSourceConfigurationAlreadyRegistredException, UnknownObserveWebUserForDatabaseException, InvalidAdminKeyApiException { @@ -35,7 +36,7 @@ public class ObserveWebMotionFilter extends WebMotionFilter { Locale applicationLocale = getApplicationLocale(request); ReferentialLocale referentialLocale = getReferentialLocale(request); - String adminApiKey = getRequestHeaderOrParameterValueOrNull(request, "adminApiKey"); + String adminApiKey = getRequestHeaderOrParameterValueOrNull(request, REQUEST_ADMIN_API_KEY); if (adminApiKey != null) { String configurationAdminKey = applicationContext.getApplicationConfiguration().getAdminApiKey(); @@ -43,8 +44,8 @@ public class ObserveWebMotionFilter extends WebMotionFilter { throw new InvalidAdminKeyApiException(adminApiKey); } } - ObserveWebRequestContext requestContext = new ObserveWebRequestContext(applicationContext, securityContext, applicationLocale, referentialLocale, adminApiKey); + ObserveWebRequestContext requestContext = new ObserveWebRequestContext(applicationContext, securityContext, applicationLocale, referentialLocale, adminApiKey); ObserveWebRequestContext.setRequestContext(context, requestContext); doProcess(); @@ -52,28 +53,32 @@ public class ObserveWebMotionFilter extends WebMotionFilter { } protected ReferentialLocale getReferentialLocale(HttpServletRequest request) { + ReferentialLocale referentialLocale = null; - String referentialLocaleStr = getRequestHeaderOrParameterValueOrNull(request, "referentialLocale"); + String referentialLocaleStr = getRequestHeaderOrParameterValueOrNull(request, REQUEST_REFERENTIAL_LOCALE); if (referentialLocaleStr != null) { Locale referentialLoca = ConverterUtil.convert(Locale.class, referentialLocaleStr); referentialLocale = ReferentialLocale.valueOf(referentialLoca); } return referentialLocale; + } protected Locale getApplicationLocale(HttpServletRequest request) { + Locale applicationLocale = null; - String applicationLocaleStr = getRequestHeaderOrParameterValueOrNull(request, "applicationLocale"); + String applicationLocaleStr = getRequestHeaderOrParameterValueOrNull(request, REQUEST_APPLICATION_LOCALE); if (applicationLocaleStr != null) { applicationLocale = ConverterUtil.convert(Locale.class, applicationLocaleStr); } return applicationLocale; + } protected ObserveWebRequestSecurityContext createSecurityContext(ObserveWebApplicationContext applicationContext, HttpServletRequest request) throws InvalidAuthenticationTokenException, UnknownObserveWebUserForDatabaseException, BadObserveWebUserPasswordException, DataSourceConfigurationAlreadyRegistredException, UnknownObserveWebUserException { ObserveWebRequestSecurityContext securityContext = null; - String authenticationToken = getRequestHeaderOrParameterValueOrNull(request, "authenticationToken"); + String authenticationToken = getRequestHeaderOrParameterValueOrNull(request, REQUEST_AUTHENTICATION_TOKEN); if (StringUtils.isNotBlank(authenticationToken)) { // Recherche de la configuration à la source de donnée @@ -85,9 +90,9 @@ public class ObserveWebMotionFilter extends WebMotionFilter { // Cas où on l'utilisateur n'est pas connecté - String userLogin = getRequestParameterValueOrNull(request, "userLogin"); - String userPassword = getRequestParameterValueOrNull(request, "userPassword"); - String userDatabaseName = getRequestParameterValueOrNull(request, "userDatabaseName"); + String userLogin = getRequestParameterValueOrNull(request, REQUEST_USER_LOGIN); + String userPassword = getRequestParameterValueOrNull(request, REQUEST_USER_PASSWORD); + String userDatabaseName = getRequestParameterValueOrNull(request, REQUEST_USER_DATABASE_NAME); if (!(userLogin == null && userPassword == null)) { @@ -105,19 +110,23 @@ public class ObserveWebMotionFilter extends WebMotionFilter { } protected String getRequestHeaderOrParameterValueOrNull(HttpServletRequest request, String parameterName) { + String result = request.getHeader(parameterName); if (StringUtils.isBlank(result)) { result = getRequestParameterValueOrNull(request, parameterName); } return result; + } protected String getRequestParameterValueOrNull(HttpServletRequest request, String parameterName) { + String parameterValue = request.getParameter(parameterName); if (StringUtils.isBlank(parameterValue)) { parameterValue = null; } return parameterValue; + } } diff --git a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestConstants.java b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestConstants.java new file mode 100644 index 0000000..f093639 --- /dev/null +++ b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestConstants.java @@ -0,0 +1,23 @@ +package fr.ird.observe.services.configuration; + +/** + * Created on 04/09/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public interface ObserveDataSourceConfigurationRestConstants { + + String REQUEST_APPLICATION_LOCALE = "applicationLocale"; + + String REQUEST_REFERENTIAL_LOCALE = "referentialLocale"; + + String REQUEST_AUTHENTICATION_TOKEN = "authenticationToken"; + + String REQUEST_USER_LOGIN = "userLogin"; + + String REQUEST_USER_PASSWORD = "userPassword"; + + String REQUEST_USER_DATABASE_NAME = "userDatabaseName"; + + String REQUEST_ADMIN_API_KEY = "adminApiKey"; +} diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java index e324069..be71661 100644 --- a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java @@ -8,15 +8,20 @@ import com.google.gson.Gson; import com.thoughtworks.paranamer.CachingParanamer; import com.thoughtworks.paranamer.Paranamer; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestAuthenticated; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestConstants; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestNotAuthenticated; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestSupport; import fr.ird.observe.services.dto.gson.ObserveDtoGsonSupplier; import fr.ird.observe.services.http.RequestBuilder; import fr.ird.observe.services.spi.Write; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Type; import java.util.Collection; /** @@ -24,26 +29,22 @@ import java.util.Collection; * * @author Tony Chemit - chemit@codelutin.com */ -public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { +public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport implements ObserveDataSourceConfigurationRestConstants { /** Logger. */ private static final Log log = LogFactory.getLog(ObserveServiceFactoryRest.class); - public static final String AUTHENTICATION_TOKEN = "authenticationToken"; - - public static final String APPLICATION_LOCALE = "applicationLocale"; - - public static final String REFERENTIAL_LOCALE = "referentialLocale"; - protected final CachingParanamer paranamer = new CachingParanamer(); protected final Supplier<Gson> gsonSupplier = new ObserveDtoGsonSupplier(); @Override public <S extends ObserveService> boolean accept(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { + Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); Preconditions.checkNotNull(serviceType, "serviceType can't be null."); - return dataSourceConfiguration instanceof ObserveDataSourceConfigurationRest; + return dataSourceConfiguration instanceof ObserveDataSourceConfigurationRestSupport; + } @Override @@ -56,7 +57,7 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { Preconditions.checkNotNull(observeServiceInitializer.getTemporaryDirectoryRoot(), "temporaryDirectoryRoot can't be null."); ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializer.getDataSourceConfiguration(); Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); - Preconditions.checkArgument(dataSourceConfiguration instanceof ObserveDataSourceConfigurationRest, "dataSourceConfiguration must be of type ObserveRestClientDataSourceConfiguration"); + Preconditions.checkArgument(dataSourceConfiguration instanceof ObserveDataSourceConfigurationRestSupport, "dataSourceConfiguration must be of type ObserveDataSourceConfigurationRestSupport"); S service = newRemoteProxyServiceInstance(serviceType, observeServiceInitializer); return service; @@ -78,7 +79,7 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { protected static class RemoteInvocationHandler<E extends ObserveService> implements InvocationHandler { - protected final String authenticationToken; + protected final ObserveDataSourceConfigurationRestSupport dataSourceConfiguration; protected final Supplier<Gson> gsonSupplier; @@ -96,8 +97,7 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { this.paranamer = paranamer; this.serviceClass = serviceClass; - ObserveDataSourceConfigurationRest dataSourceConfiguration = (ObserveDataSourceConfigurationRest) observeServiceInitializer.getDataSourceConfiguration(); - this.authenticationToken = dataSourceConfiguration.getAuthenticationToken(); + this.dataSourceConfiguration = (ObserveDataSourceConfigurationRestSupport) observeServiceInitializer.getDataSourceConfiguration(); this.serviceUrl = dataSourceConfiguration.getServerUrl() + "/" + serviceClass.getSimpleName(); this.gsonSupplier = gsonSupplier; this.applicationLocale = observeServiceInitializer.getApplicationLocale().toString(); @@ -129,7 +129,42 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { if (log.isDebugEnabled()) { log.debug("Invoke remote service on endpoint: " + url); } + RequestBuilder requestBuilder = new RequestBuilder(url, gsonSupplier); + addParameters(requestBuilder, method, args); + addHeaders(requestBuilder); + Object result = getResult(method, requestBuilder); + + return result; + + } + + protected Object getResult(Method method, RequestBuilder requestBuilder) throws IOException { + + Object result; + try { + + boolean writeData = method.isAnnotationPresent(Write.class); + + Type genericReturnType = method.getGenericReturnType(); + if (writeData) { + result = requestBuilder.postAndGetJsonAndCloseConnection(genericReturnType); + } else { + result = requestBuilder.getJsonAndCloseConnection(genericReturnType); + } + + } catch (RuntimeException re) { + if (log.isWarnEnabled()) { + log.warn("An error occurred during remote service call", re); + } + throw re; + } + return result; + + } + + protected void addParameters(RequestBuilder requestBuilder, Method method, Object... args) throws IOException { + String[] strings = paranamer.lookupParameterNames(method); int index = 0; for (String name : strings) { @@ -145,32 +180,33 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { } index++; } - if (!Strings.isNullOrEmpty(authenticationToken)) { - requestBuilder.addHeader(AUTHENTICATION_TOKEN, authenticationToken); + + } + + protected void addHeaders(RequestBuilder requestBuilder) { + + if (dataSourceConfiguration instanceof ObserveDataSourceConfigurationRestNotAuthenticated) { + + ObserveDataSourceConfigurationRestNotAuthenticated sourceConfiguration = (ObserveDataSourceConfigurationRestNotAuthenticated) dataSourceConfiguration; + requestBuilder.addHeader(REQUEST_USER_LOGIN, sourceConfiguration.getLogin()); + requestBuilder.addHeader(REQUEST_USER_PASSWORD, new String(sourceConfiguration.getPassword())); + if (sourceConfiguration.withDatabaseName()) { + + requestBuilder.addHeader(REQUEST_USER_DATABASE_NAME, sourceConfiguration.getOptionalDatabaseName().get()); + } + + } else if (dataSourceConfiguration instanceof ObserveDataSourceConfigurationRestAuthenticated) { + + ObserveDataSourceConfigurationRestAuthenticated sourceConfiguration = (ObserveDataSourceConfigurationRestAuthenticated) dataSourceConfiguration; + requestBuilder.addHeader(REQUEST_AUTHENTICATION_TOKEN, sourceConfiguration.getAuthenticationToken()); + } if (!Strings.isNullOrEmpty(applicationLocale)) { - requestBuilder.addHeader(APPLICATION_LOCALE, applicationLocale); + requestBuilder.addHeader(REQUEST_APPLICATION_LOCALE, applicationLocale); } if (!Strings.isNullOrEmpty(referentialLocale)) { - requestBuilder.addHeader(REFERENTIAL_LOCALE, referentialLocale); - } - Object result; - try { - - boolean writeData = method.isAnnotationPresent(Write.class); - - if (writeData) { - result = requestBuilder.postAndGetJsonAndCloseConnection(method.getGenericReturnType()); - } else { - result = requestBuilder.getJsonAndCloseConnection(method.getGenericReturnType()); - } - } catch (RuntimeException re) { - if (log.isWarnEnabled()) { - log.warn("An error occurred during remote service call", re); - } - throw re; + requestBuilder.addHeader(REQUEST_REFERENTIAL_LOCALE, referentialLocale); } - return result; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7463 in repository observe. See http://git.codelutin.com/observe.git commit dd37e614f4edbe50745d824d62e3608fe24c0041 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 07:35:26 2015 +0200 Début de tests sur le client rest (See #7563) --- observe-services-rest/pom.xml | 6 + .../fr/ird/observe/services/TestClassResource.java | 136 +++++++++++++++++++++ .../ird/observe/services/TestMethodResource.java | 97 +++++++++++++++ .../service/DataSourceServiceRestTest.java | 72 +++++++++++ 4 files changed, 311 insertions(+) diff --git a/observe-services-rest/pom.xml b/observe-services-rest/pom.xml index d294413..20ea2ab 100644 --- a/observe-services-rest/pom.xml +++ b/observe-services-rest/pom.xml @@ -38,6 +38,12 @@ <artifactId>observe-services-configuration-rest</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>observe-test-data</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> <!-- commons dependencies --> diff --git a/observe-services-rest/src/test/java/fr/ird/observe/services/TestClassResource.java b/observe-services-rest/src/test/java/fr/ird/observe/services/TestClassResource.java new file mode 100644 index 0000000..8639cf2 --- /dev/null +++ b/observe-services-rest/src/test/java/fr/ird/observe/services/TestClassResource.java @@ -0,0 +1,136 @@ +package fr.ird.observe.services; + +import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestNotAuthenticated; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestSupport; +import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.test.TestHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.file.Path; +import java.util.Locale; + +/** + * Created on 03/09/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class TestClassResource implements TestRule { + + /** Logger. */ + private static final Log log = LogFactory.getLog(TestClassResource.class); + + protected final ObserveServiceFactoryRest serviceFactory; + + private File testDirectory; + + private Path temporaryDirectoryRoot; + + protected final URL serverUrl; + + public TestClassResource() { + this("http://localhost:8080/observeweb/v1/api"); + } + + public TestClassResource(String serverUrl) { + try { + this.serverUrl = new URL(serverUrl); + } catch (MalformedURLException e) { + throw new IllegalStateException("Could not convert serverUrl: " + serverUrl, e); + } + this.serviceFactory = new ObserveServiceFactoryRest() { + +// @Override +// protected ObserveServiceContextTopia createServiceContext(ObserveServiceInitializer observeServiceInitializer) { +// ObserveServiceContextTopiaTaiste serviceContext = new ObserveServiceContextTopiaTaiste(observeServiceInitializer, mainServiceFactory, this); +// return serviceContext; +// } + }; + serviceFactory.setMainServiceFactory(serviceFactory); + } + + public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { + ObserveServiceInitializer observeServiceInitializer = ObserveServiceInitializer.create( + Locale.FRANCE, + ReferentialLocale.FR, + temporaryDirectoryRoot.toFile(), + dataSourceConfiguration + ); + return serviceFactory.newService(observeServiceInitializer, serviceType); + } + + public void closeServiceFactory() { + serviceFactory.close(); + } + + public void setTemporaryDirectoryRoot(Path temporaryDirectoryRoot) { + this.temporaryDirectoryRoot = temporaryDirectoryRoot; + } + + @Override + public Statement apply(final Statement base, final Description description) { + return new Statement() { + + @Override + public void evaluate() throws Throwable { + before(description); + try { + base.evaluate(); + } finally { + after(description); + } + } + }; + } + + protected void before(Description description) { + + Class<?> testClass = description.getTestClass(); + if (log.isDebugEnabled()) { + log.debug("Starts " + testClass.getName()); + } + + TestHelper.initTest(testClass); + + } + + protected void after(Description description) { + + Class<?> testClass = description.getTestClass(); + if (log.isDebugEnabled()) { + log.debug("Ends " + testClass.getName()); + } + + closeServiceFactory(); + setTemporaryDirectoryRoot(null); + + } + + public File getTestDirectory() { + return testDirectory; + } + + public void setTestDirectory(File testDirectory) { + this.testDirectory = testDirectory; + } + + public ObserveDataSourceConfigurationRestSupport createDataSourceConfigurationRest(Class<?> testClass, String login, char... password) { + + ObserveDataSourceConfigurationRestNotAuthenticated configurationRest = new ObserveDataSourceConfigurationRestNotAuthenticated(); + configurationRest.setLabel(testClass.getSimpleName() + "#" + serverUrl); + configurationRest.setServerUrl(serverUrl); + configurationRest.setLogin(login); + configurationRest.setPassword(password); + + return configurationRest; + + } + +} diff --git a/observe-services-rest/src/test/java/fr/ird/observe/services/TestMethodResource.java b/observe-services-rest/src/test/java/fr/ird/observe/services/TestMethodResource.java new file mode 100644 index 0000000..9e2627e --- /dev/null +++ b/observe-services-rest/src/test/java/fr/ird/observe/services/TestMethodResource.java @@ -0,0 +1,97 @@ +package fr.ird.observe.services; + +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestSupport; +import fr.ird.observe.test.TestHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; + +/** + * Created on 03/09/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class TestMethodResource implements TestRule { + + /** Logger. */ + private static final Log log = LogFactory.getLog(TestMethodResource.class); + + protected final TestClassResource testClassResource; + + protected final String login; + + protected final char[] password; + + protected ObserveDataSourceConfigurationRestSupport dataSourceConfiguration; + + public TestMethodResource(TestClassResource testClassResource) { + this(testClassResource, "admin", 'a'); + } + + public TestMethodResource(TestClassResource testClassResource, String login, char... password) { + this.testClassResource = testClassResource; + this.login = login; + this.password = password; + } + + @Override + public Statement apply(final Statement base, final Description description) { + return new Statement() { + + @Override + public void evaluate() throws Throwable { + before(description); + try { + base.evaluate(); + } finally { + after(description); + } + } + }; + } + + public ObserveDataSourceConfigurationRestSupport getDataSourceConfiguration() { + return dataSourceConfiguration; + } + + protected void before(Description description) throws Throwable { + + Class<?> testClass = description.getTestClass(); + String methodName = description.getMethodName(); + if (log.isDebugEnabled()) { + log.debug("Starts " + testClass.getName() + "::" + methodName); + } + + File testDirectory = TestHelper.newFile(methodName); + + testClassResource.setTestDirectory(testDirectory); + + Path temporaryDirectoryRoot = new File(testDirectory, "tmp").toPath(); + + Files.createDirectories(temporaryDirectoryRoot); + + testClassResource.setTemporaryDirectoryRoot(temporaryDirectoryRoot); + + dataSourceConfiguration = testClassResource.createDataSourceConfigurationRest(testClass, "admin", 'a'); + + } + + protected void after(Description description) { + + Class<?> testClass = description.getTestClass(); + String methodName = description.getMethodName(); + if (log.isDebugEnabled()) { + log.debug("Ends " + testClass.getName() + "::" + methodName); + } + + testClassResource.closeServiceFactory(); + testClassResource.setTemporaryDirectoryRoot(null); + + } +} diff --git a/observe-services-rest/src/test/java/fr/ird/observe/services/service/DataSourceServiceRestTest.java b/observe-services-rest/src/test/java/fr/ird/observe/services/service/DataSourceServiceRestTest.java new file mode 100644 index 0000000..e9a1b83 --- /dev/null +++ b/observe-services-rest/src/test/java/fr/ird/observe/services/service/DataSourceServiceRestTest.java @@ -0,0 +1,72 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.TestClassResource; +import fr.ird.observe.services.TestMethodResource; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestSupport; +import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; +import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; +import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; +import org.junit.Assume; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import java.io.IOException; + +/** + * Created on 03/09/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DataSourceServiceRestTest { + + @ClassRule + public static final TestClassResource testClassResource = new TestClassResource(); + + @Rule + public final TestMethodResource testMethodResource = new TestMethodResource(testClassResource); + + protected DataSourceService service; + + @Before + public void setUp() throws Exception { + + ObserveDataSourceConfigurationRestSupport dataSourceConfiguration = testMethodResource.getDataSourceConfiguration(); + service = testClassResource.newService(dataSourceConfiguration, DataSourceService.class); + + //TODO Tester si le serveur est accessible si non + boolean serverExist = false; + Assume.assumeTrue("Serveur " + dataSourceConfiguration.getServerUrl() + " no found", serverExist); + + } + + @Test(expected = DatabaseNotFoundException.class) + public void testOpenNotExistingDatabase() throws IOException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { + + service.open(); + + } + + @Test + public void testOpen() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { + + DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); + dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true); + service.create(dataSourceCreateConfiguration); + + service.open(); + + } + + @Test + public void testCreateEmptyDataSource() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException { + + DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); + dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true); + + service.create(dataSourceCreateConfiguration); + + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm