You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AbstractDownloadTest.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package org.apache.archiva.remotedownload;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing,
  14. * software distributed under the License is distributed on an
  15. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16. * KIND, either express or implied. See the License for the
  17. * specific language governing permissions and limitations
  18. * under the License.
  19. */
  20. import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
  21. import junit.framework.TestCase;
  22. import org.apache.archiva.rest.api.services.ManagedRepositoriesService;
  23. import org.apache.archiva.rest.api.services.ProxyConnectorService;
  24. import org.apache.archiva.rest.api.services.RemoteRepositoriesService;
  25. import org.apache.archiva.rest.api.services.RepositoriesService;
  26. import org.apache.archiva.rest.api.services.RepositoryGroupService;
  27. import org.apache.archiva.rest.api.services.SearchService;
  28. import org.apache.archiva.webdav.RepositoryServlet;
  29. import org.apache.catalina.Context;
  30. import org.apache.catalina.deploy.ApplicationListener;
  31. import org.apache.catalina.deploy.ApplicationParameter;
  32. import org.apache.catalina.startup.Tomcat;
  33. import org.apache.commons.lang.StringUtils;
  34. import org.apache.cxf.common.util.Base64Utility;
  35. import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
  36. import org.apache.cxf.jaxrs.client.WebClient;
  37. import org.apache.cxf.transport.servlet.CXFServlet;
  38. import org.apache.archiva.redback.integration.security.role.RedbackRoleConstants;
  39. import org.apache.archiva.redback.rest.api.model.User;
  40. import org.apache.archiva.redback.rest.api.services.RoleManagementService;
  41. import org.apache.archiva.redback.rest.api.services.UserService;
  42. import org.apache.archiva.redback.rest.services.FakeCreateAdminService;
  43. import org.eclipse.jetty.server.Connector;
  44. import org.eclipse.jetty.server.Server;
  45. import org.eclipse.jetty.server.session.SessionHandler;
  46. import org.eclipse.jetty.servlet.ServletContextHandler;
  47. import org.eclipse.jetty.servlet.ServletHolder;
  48. import org.junit.After;
  49. import org.junit.Before;
  50. import org.slf4j.Logger;
  51. import org.slf4j.LoggerFactory;
  52. import org.springframework.web.context.ContextLoaderListener;
  53. import java.util.ArrayList;
  54. import java.util.Collections;
  55. import java.util.Enumeration;
  56. import java.util.List;
  57. import java.util.zip.ZipEntry;
  58. import java.util.zip.ZipFile;
  59. import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
  60. import org.junit.runner.RunWith;
  61. /**
  62. * @author Olivier Lamy
  63. */
  64. @RunWith( ArchivaBlockJUnit4ClassRunner.class )
  65. public abstract class AbstractDownloadTest
  66. extends TestCase
  67. {
  68. protected Logger log = LoggerFactory.getLogger( getClass() );
  69. protected static String previousAppServerBase;
  70. public String authorizationHeader = getAdminAuthzHeader();
  71. public Server server = null;
  72. public Tomcat tomcat;
  73. public int port;
  74. public static String encode( String uid, String password )
  75. {
  76. return "Basic " + Base64Utility.encode( ( uid + ":" + password ).getBytes() );
  77. }
  78. public static String getAdminAuthzHeader()
  79. {
  80. String adminPwdSysProps = System.getProperty( "rest.admin.pwd" );
  81. if ( StringUtils.isBlank( adminPwdSysProps ) )
  82. {
  83. return encode( RedbackRoleConstants.ADMINISTRATOR_ACCOUNT_NAME, FakeCreateAdminService.ADMIN_TEST_PWD );
  84. }
  85. return encode( RedbackRoleConstants.ADMINISTRATOR_ACCOUNT_NAME, adminPwdSysProps );
  86. }
  87. protected abstract String getSpringConfigLocation();
  88. protected String getRestServicesPath()
  89. {
  90. return "restServices";
  91. }
  92. @Before
  93. public void startServer()
  94. throws Exception
  95. {
  96. System.setProperty( "redback.admin.creation.file", "target/auto-admin-creation.properties" );
  97. tomcat = new Tomcat();
  98. tomcat.setBaseDir( System.getProperty( "java.io.tmpdir" ) );
  99. tomcat.setPort( 0 );
  100. Context context = tomcat.addContext( "", System.getProperty( "java.io.tmpdir" ) );
  101. ApplicationParameter applicationParameter = new ApplicationParameter();
  102. applicationParameter.setName( "contextConfigLocation" );
  103. applicationParameter.setValue( getSpringConfigLocation() );
  104. context.addApplicationParameter( applicationParameter );
  105. context.addApplicationListener( new ApplicationListener( ContextLoaderListener.class.getName(), false ) );
  106. tomcat.addServlet( context, "cxf", new CXFServlet() );
  107. context.addServletMapping( "/" + getRestServicesPath() + "/*" , "cxf" );
  108. tomcat.addServlet( context, "archivarepo", new RepositoryServlet() );
  109. context.addServletMapping( "/repository/*" , "archivarepo" );
  110. tomcat.start();
  111. port = tomcat.getConnector().getLocalPort();
  112. log.info( "start server on port {}", this.port );
  113. User user = new User();
  114. user.setEmail( "toto@toto.fr" );
  115. user.setFullName( "the root user" );
  116. user.setUsername( RedbackRoleConstants.ADMINISTRATOR_ACCOUNT_NAME );
  117. user.setPassword( FakeCreateAdminService.ADMIN_TEST_PWD );
  118. getUserService( null ).createAdminUser( user );
  119. }
  120. @After
  121. public void tearDown()
  122. throws Exception
  123. {
  124. System.clearProperty( "redback.admin.creation.file" );
  125. super.tearDown();
  126. if ( this.server != null )
  127. {
  128. this.server.stop();
  129. }
  130. if (this.tomcat != null)
  131. {
  132. this.tomcat.stop();
  133. }
  134. }
  135. protected ProxyConnectorService getProxyConnectorService()
  136. {
  137. ProxyConnectorService service =
  138. JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
  139. ProxyConnectorService.class,
  140. Collections.singletonList( new JacksonJaxbJsonProvider() ) );
  141. WebClient.client( service ).header( "Authorization", authorizationHeader );
  142. WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
  143. return service;
  144. }
  145. protected RemoteRepositoriesService getRemoteRepositoriesService()
  146. {
  147. RemoteRepositoriesService service =
  148. JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
  149. RemoteRepositoriesService.class,
  150. Collections.singletonList( new JacksonJaxbJsonProvider() ) );
  151. WebClient.client( service ).header( "Authorization", authorizationHeader );
  152. WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
  153. return service;
  154. }
  155. protected ManagedRepositoriesService getManagedRepositoriesService()
  156. {
  157. ManagedRepositoriesService service =
  158. JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
  159. ManagedRepositoriesService.class,
  160. Collections.singletonList( new JacksonJaxbJsonProvider() ) );
  161. WebClient.client( service ).header( "Authorization", authorizationHeader );
  162. WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
  163. return service;
  164. }
  165. protected RepositoryGroupService getRepositoryGroupService()
  166. {
  167. RepositoryGroupService service =
  168. JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
  169. RepositoryGroupService.class,
  170. Collections.singletonList( new JacksonJaxbJsonProvider() ) );
  171. WebClient.client( service ).header( "Authorization", authorizationHeader );
  172. WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
  173. return service;
  174. }
  175. protected RepositoriesService getRepositoriesService()
  176. {
  177. RepositoriesService service =
  178. JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
  179. RepositoriesService.class,
  180. Collections.singletonList( new JacksonJaxbJsonProvider() ) );
  181. WebClient.client( service ).header( "Authorization", authorizationHeader );
  182. WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
  183. return service;
  184. }
  185. protected SearchService getSearchService()
  186. {
  187. SearchService service =
  188. JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
  189. SearchService.class,
  190. Collections.singletonList( new JacksonJaxbJsonProvider() ) );
  191. WebClient.client( service ).header( "Authorization", authorizationHeader );
  192. WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
  193. return service;
  194. }
  195. protected String getBaseUrl()
  196. {
  197. String baseUrlSysProps = System.getProperty( "archiva.baseRestUrl" );
  198. return StringUtils.isBlank( baseUrlSysProps ) ? "http://localhost:" + port : baseUrlSysProps;
  199. }
  200. protected RoleManagementService getRoleManagementService( String authzHeader )
  201. {
  202. RoleManagementService service =
  203. JAXRSClientFactory.create( "http://localhost:" + port + "/" + getRestServicesPath() + "/redbackServices/",
  204. RoleManagementService.class,
  205. Collections.singletonList( new JacksonJaxbJsonProvider() ) );
  206. // for debuging purpose
  207. WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 3000000L );
  208. if ( authzHeader != null )
  209. {
  210. WebClient.client( service ).header( "Authorization", authzHeader );
  211. }
  212. return service;
  213. }
  214. protected UserService getUserService( String authzHeader )
  215. {
  216. UserService service =
  217. JAXRSClientFactory.create( "http://localhost:" + port + "/" + getRestServicesPath() + "/redbackServices/",
  218. UserService.class, Collections.singletonList( new JacksonJaxbJsonProvider() ) );
  219. // for debuging purpose
  220. WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 3000000L );
  221. if ( authzHeader != null )
  222. {
  223. WebClient.client( service ).header( "Authorization", authzHeader );
  224. }
  225. return service;
  226. }
  227. protected FakeCreateAdminService getFakeCreateAdminService()
  228. {
  229. return JAXRSClientFactory.create(
  230. "http://localhost:" + port + "/" + getRestServicesPath() + "/fakeCreateAdminService/",
  231. FakeCreateAdminService.class );
  232. }
  233. protected List<String> getZipEntriesNames( ZipFile zipFile )
  234. {
  235. try
  236. {
  237. List<String> entriesNames = new ArrayList<>();
  238. Enumeration<? extends ZipEntry> entries = zipFile.entries();
  239. while ( entries.hasMoreElements() )
  240. {
  241. entriesNames.add( entries.nextElement().getName() );
  242. }
  243. return entriesNames;
  244. }
  245. catch ( Throwable e )
  246. {
  247. log.info( "fail to get zipEntries {}", e.getMessage(), e );
  248. }
  249. return Collections.emptyList();
  250. }
  251. }