1 package org.apache.archiva.remotedownload;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
22 import junit.framework.TestCase;
23 import org.apache.archiva.redback.integration.security.role.RedbackRoleConstants;
24 import org.apache.archiva.redback.rest.api.model.User;
25 import org.apache.archiva.redback.rest.api.services.RoleManagementService;
26 import org.apache.archiva.redback.rest.api.services.UserService;
27 import org.apache.archiva.redback.rest.services.FakeCreateAdminService;
28 import org.apache.archiva.rest.api.services.ManagedRepositoriesService;
29 import org.apache.archiva.rest.api.services.ProxyConnectorService;
30 import org.apache.archiva.rest.api.services.RemoteRepositoriesService;
31 import org.apache.archiva.rest.api.services.RepositoriesService;
32 import org.apache.archiva.rest.api.services.RepositoryGroupService;
33 import org.apache.archiva.rest.api.services.SearchService;
34 import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
35 import org.apache.archiva.webdav.RepositoryServlet;
36 import org.apache.catalina.Context;
37 import org.apache.catalina.deploy.ApplicationListener;
38 import org.apache.catalina.deploy.ApplicationParameter;
39 import org.apache.catalina.startup.Tomcat;
40 import org.apache.commons.lang.StringUtils;
41 import org.apache.cxf.common.util.Base64Utility;
42 import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
43 import org.apache.cxf.jaxrs.client.WebClient;
44 import org.apache.cxf.transport.servlet.CXFServlet;
45 import org.eclipse.jetty.server.Server;
46 import org.junit.After;
47 import org.junit.Before;
48 import org.junit.runner.RunWith;
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51 import org.springframework.web.context.ContextLoaderListener;
52
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
60
61
62
63 @RunWith( ArchivaBlockJUnit4ClassRunner.class )
64 public abstract class AbstractDownloadTest
65 extends TestCase
66 {
67
68 protected final Logger log = LoggerFactory.getLogger( getClass() );
69
70 protected static String previousAppServerBase;
71
72 public String authorizationHeader = getAdminAuthzHeader();
73
74 public Server server = null;
75
76 public Tomcat tomcat;
77
78 public int port;
79
80 public static String encode( String uid, String password )
81 {
82 return "Basic " + Base64Utility.encode( ( uid + ":" + password ).getBytes() );
83 }
84
85 public static String getAdminAuthzHeader()
86 {
87 String adminPwdSysProps = System.getProperty( "rest.admin.pwd" );
88 if ( StringUtils.isBlank( adminPwdSysProps ) )
89 {
90 return encode( RedbackRoleConstants.ADMINISTRATOR_ACCOUNT_NAME, FakeCreateAdminService.ADMIN_TEST_PWD );
91 }
92 return encode( RedbackRoleConstants.ADMINISTRATOR_ACCOUNT_NAME, adminPwdSysProps );
93 }
94
95
96 protected abstract String getSpringConfigLocation();
97
98
99 protected String getRestServicesPath()
100 {
101 return "restServices";
102 }
103
104
105 @Before
106 public void startServer()
107 throws Exception
108 {
109
110 System.setProperty( "redback.admin.creation.file", "target/auto-admin-creation.properties" );
111
112 tomcat = new Tomcat();
113 tomcat.setBaseDir( System.getProperty( "java.io.tmpdir" ) );
114 tomcat.setPort( 0 );
115
116 Context context = tomcat.addContext( "", System.getProperty( "java.io.tmpdir" ) );
117
118 ApplicationParameter applicationParameter = new ApplicationParameter();
119 applicationParameter.setName( "contextConfigLocation" );
120 applicationParameter.setValue( getSpringConfigLocation() );
121 context.addApplicationParameter( applicationParameter );
122
123 context.addApplicationListener( new ApplicationListener( ContextLoaderListener.class.getName(), false ) );
124
125 tomcat.addServlet( context, "cxf", new CXFServlet() );
126 context.addServletMapping( "/" + getRestServicesPath() + "/*" , "cxf" );
127
128 tomcat.addServlet( context, "archivarepo", new RepositoryServlet() );
129 context.addServletMapping( "/repository/*" , "archivarepo" );
130
131 tomcat.start();
132
133 port = tomcat.getConnector().getLocalPort();
134
135
136 log.info( "start server on port {}", this.port );
137
138 User user = new User();
139 user.setEmail( "toto@toto.fr" );
140 user.setFullName( "the root user" );
141 user.setUsername( RedbackRoleConstants.ADMINISTRATOR_ACCOUNT_NAME );
142 user.setPassword( FakeCreateAdminService.ADMIN_TEST_PWD );
143
144 getUserService( null ).createAdminUser( user );
145
146
147 }
148
149
150 @After
151 @Override
152 public void tearDown()
153 throws Exception
154 {
155 System.clearProperty( "redback.admin.creation.file" );
156 super.tearDown();
157 if ( this.server != null )
158 {
159 this.server.stop();
160 }
161 if (this.tomcat != null)
162 {
163 this.tomcat.stop();
164 }
165 }
166
167
168 protected ProxyConnectorService getProxyConnectorService()
169 {
170 ProxyConnectorService service =
171 JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
172 ProxyConnectorService.class,
173 Collections.singletonList( new JacksonJaxbJsonProvider() ) );
174
175 WebClient.client( service ).header( "Authorization", authorizationHeader );
176 WebClient.client(service).header("Referer","http://localhost:"+port);
177
178 WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
179 return service;
180 }
181
182 protected RemoteRepositoriesService getRemoteRepositoriesService()
183 {
184 RemoteRepositoriesService service =
185 JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
186 RemoteRepositoriesService.class,
187 Collections.singletonList( new JacksonJaxbJsonProvider() ) );
188
189 WebClient.client( service ).header( "Authorization", authorizationHeader );
190 WebClient.client(service).header("Referer","http://localhost:"+port);
191
192 WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
193 return service;
194 }
195
196 protected ManagedRepositoriesService getManagedRepositoriesService()
197 {
198 ManagedRepositoriesService service =
199 JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
200 ManagedRepositoriesService.class,
201 Collections.singletonList( new JacksonJaxbJsonProvider() ) );
202
203 WebClient.client( service ).header( "Authorization", authorizationHeader );
204 WebClient.client(service).header("Referer","http://localhost:"+port);
205
206 WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
207 return service;
208 }
209
210
211 protected RepositoryGroupService getRepositoryGroupService()
212 {
213 RepositoryGroupService service =
214 JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
215 RepositoryGroupService.class,
216 Collections.singletonList( new JacksonJaxbJsonProvider() ) );
217
218 WebClient.client( service ).header( "Authorization", authorizationHeader );
219 WebClient.client(service).header("Referer","http://localhost:"+port);
220
221 WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
222 return service;
223 }
224
225 protected RepositoriesService getRepositoriesService()
226 {
227 RepositoriesService service =
228 JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
229 RepositoriesService.class,
230 Collections.singletonList( new JacksonJaxbJsonProvider() ) );
231
232 WebClient.client( service ).header( "Authorization", authorizationHeader );
233 WebClient.client(service).header("Referer","http://localhost:"+port);
234
235 WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
236 return service;
237 }
238
239 protected SearchService getSearchService()
240 {
241 SearchService service =
242 JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/",
243 SearchService.class,
244 Collections.singletonList( new JacksonJaxbJsonProvider() ) );
245
246 WebClient.client( service ).header( "Authorization", authorizationHeader );
247 WebClient.client(service).header("Referer","http://localhost:"+port);
248
249 WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L );
250 return service;
251 }
252
253 protected String getBaseUrl()
254 {
255 String baseUrlSysProps = System.getProperty( "archiva.baseRestUrl" );
256 return StringUtils.isBlank( baseUrlSysProps ) ? "http://localhost:" + port : baseUrlSysProps;
257 }
258
259
260 protected RoleManagementService getRoleManagementService( String authzHeader )
261 {
262 RoleManagementService service =
263 JAXRSClientFactory.create( "http://localhost:" + port + "/" + getRestServicesPath() + "/redbackServices/",
264 RoleManagementService.class,
265 Collections.singletonList( new JacksonJaxbJsonProvider() ) );
266
267 WebClient.client(service).header("Referer","http://localhost:"+port);
268
269
270 WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 3000000L );
271
272 if ( authzHeader != null )
273 {
274 WebClient.client( service ).header( "Authorization", authzHeader );
275 }
276 return service;
277 }
278
279 protected UserService getUserService( String authzHeader )
280 {
281 UserService service =
282 JAXRSClientFactory.create( "http://localhost:" + port + "/" + getRestServicesPath() + "/redbackServices/",
283 UserService.class, Collections.singletonList( new JacksonJaxbJsonProvider() ) );
284
285 WebClient.client(service).header("Referer","http://localhost:"+port);
286
287
288 WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 3000000L );
289
290 if ( authzHeader != null )
291 {
292 WebClient.client( service ).header( "Authorization", authzHeader );
293 }
294 return service;
295 }
296
297 protected FakeCreateAdminService getFakeCreateAdminService()
298 {
299 return JAXRSClientFactory.create(
300 "http://localhost:" + port + "/" + getRestServicesPath() + "/fakeCreateAdminService/",
301 FakeCreateAdminService.class );
302 }
303
304
305 protected List<String> getZipEntriesNames( ZipFile zipFile )
306 {
307 try
308 {
309 List<String> entriesNames = new ArrayList<>();
310 Enumeration<? extends ZipEntry> entries = zipFile.entries();
311 while ( entries.hasMoreElements() )
312 {
313 entriesNames.add( entries.nextElement().getName() );
314 }
315 return entriesNames;
316 }
317 catch ( Throwable e )
318 {
319 log.info( "fail to get zipEntries {}", e.getMessage(), e );
320 }
321 return Collections.emptyList();
322 }
323 }