001package org.eclipse.aether.internal.impl; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import static org.junit.Assert.*; 023 024import java.io.File; 025import java.io.IOException; 026import java.net.URI; 027import java.util.Arrays; 028import java.util.Collection; 029import java.util.Collections; 030 031import org.eclipse.aether.DefaultRepositorySystemSession; 032import org.eclipse.aether.artifact.Artifact; 033import org.eclipse.aether.artifact.DefaultArtifact; 034import org.eclipse.aether.internal.test.util.TestFileUtils; 035import org.eclipse.aether.internal.test.util.TestUtils; 036import org.eclipse.aether.metadata.DefaultMetadata; 037import org.eclipse.aether.metadata.Metadata; 038import org.eclipse.aether.metadata.Metadata.Nature; 039import org.eclipse.aether.repository.LocalArtifactRegistration; 040import org.eclipse.aether.repository.LocalArtifactRequest; 041import org.eclipse.aether.repository.LocalArtifactResult; 042import org.eclipse.aether.repository.LocalMetadataRequest; 043import org.eclipse.aether.repository.LocalMetadataResult; 044import org.eclipse.aether.repository.RemoteRepository; 045import org.junit.After; 046import org.junit.Before; 047import org.junit.Test; 048 049public class EnhancedLocalRepositoryManagerTest 050{ 051 052 private Artifact artifact; 053 054 private Artifact snapshot; 055 056 protected File basedir; 057 058 protected EnhancedLocalRepositoryManager manager; 059 060 private File artifactFile; 061 062 private RemoteRepository repository; 063 064 private String testContext = "project/compile"; 065 066 protected TrackingFileManager trackingFileManager; 067 068 protected DefaultRepositorySystemSession session; 069 070 private Metadata metadata; 071 072 private Metadata noVerMetadata; 073 074 @Before 075 public void setup() 076 throws Exception 077 { 078 String url = TestFileUtils.createTempDir( "enhanced-remote-repo" ).toURI().toURL().toString(); 079 repository = 080 new RemoteRepository.Builder( "enhanced-remote-repo", "default", url ).setRepositoryManager( true ).build(); 081 082 artifact = 083 new DefaultArtifact( "gid", "aid", "", "jar", "1-test", Collections.<String, String> emptyMap(), 084 TestFileUtils.createTempFile( "artifact" ) ); 085 086 snapshot = 087 new DefaultArtifact( "gid", "aid", "", "jar", "1.0-20120710.231549-9", 088 Collections.<String, String> emptyMap(), TestFileUtils.createTempFile( "artifact" ) ); 089 090 metadata = 091 new DefaultMetadata( "gid", "aid", "1-test", "maven-metadata.xml", Nature.RELEASE, 092 TestFileUtils.createTempFile( "metadata" ) ); 093 094 noVerMetadata = 095 new DefaultMetadata( "gid", "aid", null, "maven-metadata.xml", Nature.RELEASE, 096 TestFileUtils.createTempFile( "metadata" ) ); 097 098 basedir = TestFileUtils.createTempDir( "enhanced-repo" ); 099 session = TestUtils.newSession(); 100 trackingFileManager = new DefaultTrackingFileManager(); 101 manager = getManager(); 102 103 artifactFile = new File( basedir, manager.getPathForLocalArtifact( artifact ) ); 104 } 105 106 protected EnhancedLocalRepositoryManager getManager() 107 { 108 return new EnhancedLocalRepositoryManager( 109 basedir, 110 new DefaultLocalPathComposer(), 111 "_remote.repositories", 112 trackingFileManager, 113 new DefaultLocalPathPrefixComposerFactory().createComposer( session ) 114 ); 115 } 116 117 @After 118 public void tearDown() 119 throws Exception 120 { 121 TestFileUtils.deleteFile( basedir ); 122 TestFileUtils.deleteFile( new File( new URI( repository.getUrl() ) ) ); 123 124 session = null; 125 manager = null; 126 repository = null; 127 artifact = null; 128 } 129 130 private long addLocalArtifact( Artifact artifact ) 131 throws IOException 132 { 133 manager.add( session, new LocalArtifactRegistration( artifact ) ); 134 String path = manager.getPathForLocalArtifact( artifact ); 135 136 return copy( artifact, path ); 137 } 138 139 private long addRemoteArtifact( Artifact artifact ) 140 throws IOException 141 { 142 Collection<String> contexts = Arrays.asList( testContext ); 143 manager.add( session, new LocalArtifactRegistration( artifact, repository, contexts ) ); 144 String path = manager.getPathForRemoteArtifact( artifact, repository, testContext ); 145 return copy( artifact, path ); 146 } 147 148 private long copy( Metadata metadata, String path ) 149 throws IOException 150 { 151 if ( metadata.getFile() == null ) 152 { 153 return -1L; 154 } 155 return TestFileUtils.copyFile( metadata.getFile(), new File( basedir, path ) ); 156 } 157 158 private long copy( Artifact artifact, String path ) 159 throws IOException 160 { 161 if ( artifact.getFile() == null ) 162 { 163 return -1L; 164 } 165 File artifactFile = new File( basedir, path ); 166 return TestFileUtils.copyFile( artifact.getFile(), artifactFile ); 167 } 168 169 @Test 170 public void testGetPathForLocalArtifact() 171 { 172 Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" ); 173 assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() ); 174 assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", manager.getPathForLocalArtifact( artifact ) ); 175 176 artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-20110329.221805-4" ); 177 assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() ); 178 assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", manager.getPathForLocalArtifact( artifact ) ); 179 } 180 181 @Test 182 public void testGetPathForRemoteArtifact() 183 { 184 RemoteRepository remoteRepo = new RemoteRepository.Builder( "repo", "default", "ram:/void" ).build(); 185 186 Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" ); 187 assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() ); 188 assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", 189 manager.getPathForRemoteArtifact( artifact, remoteRepo, "" ) ); 190 191 artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-20110329.221805-4" ); 192 assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() ); 193 assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-20110329.221805-4.jar", 194 manager.getPathForRemoteArtifact( artifact, remoteRepo, "" ) ); 195 } 196 197 @Test 198 public void testFindLocalArtifact() 199 throws Exception 200 { 201 addLocalArtifact( artifact ); 202 203 LocalArtifactRequest request = new LocalArtifactRequest( artifact, null, null ); 204 LocalArtifactResult result = manager.find( session, request ); 205 assertTrue( result.isAvailable() ); 206 assertNull( result.getRepository() ); 207 208 snapshot = snapshot.setVersion( snapshot.getBaseVersion() ); 209 addLocalArtifact( snapshot ); 210 211 request = new LocalArtifactRequest( snapshot, null, null ); 212 result = manager.find( session, request ); 213 assertTrue( result.isAvailable() ); 214 assertNull( result.getRepository() ); 215 } 216 217 @Test 218 public void testFindRemoteArtifact() 219 throws Exception 220 { 221 addRemoteArtifact( artifact ); 222 223 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); 224 LocalArtifactResult result = manager.find( session, request ); 225 assertTrue( result.isAvailable() ); 226 assertEquals( repository, result.getRepository() ); 227 228 addRemoteArtifact( snapshot ); 229 230 request = new LocalArtifactRequest( snapshot, Arrays.asList( repository ), testContext ); 231 result = manager.find( session, request ); 232 assertTrue( result.isAvailable() ); 233 assertEquals( repository, result.getRepository() ); 234 } 235 236 @Test 237 public void testDoNotFindDifferentContext() 238 throws Exception 239 { 240 addRemoteArtifact( artifact ); 241 242 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), "different" ); 243 LocalArtifactResult result = manager.find( session, request ); 244 assertFalse( result.isAvailable() ); 245 } 246 247 @Test 248 public void testDoNotFindNullFile() 249 throws Exception 250 { 251 artifact = artifact.setFile( null ); 252 addLocalArtifact( artifact ); 253 254 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); 255 LocalArtifactResult result = manager.find( session, request ); 256 assertFalse( result.isAvailable() ); 257 } 258 259 @Test 260 public void testDoNotFindDeletedFile() 261 throws Exception 262 { 263 addLocalArtifact( artifact ); 264 assertTrue( "could not delete artifact file", artifactFile.delete() ); 265 266 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); 267 LocalArtifactResult result = manager.find( session, request ); 268 assertFalse( result.isAvailable() ); 269 } 270 271 @Test 272 public void testFindUntrackedFile() 273 throws Exception 274 { 275 copy( artifact, manager.getPathForLocalArtifact( artifact ) ); 276 277 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); 278 LocalArtifactResult result = manager.find( session, request ); 279 assertTrue( result.isAvailable() ); 280 } 281 282 private long addMetadata( Metadata metadata, RemoteRepository repo ) 283 throws IOException 284 { 285 String path; 286 if ( repo == null ) 287 { 288 path = manager.getPathForLocalMetadata( metadata ); 289 } 290 else 291 { 292 path = manager.getPathForRemoteMetadata( metadata, repo, testContext ); 293 } 294 System.err.println( path ); 295 296 return copy( metadata, path ); 297 } 298 299 @Test 300 public void testFindLocalMetadata() 301 throws Exception 302 { 303 addMetadata( metadata, null ); 304 305 LocalMetadataRequest request = new LocalMetadataRequest( metadata, null, testContext ); 306 LocalMetadataResult result = manager.find( session, request ); 307 308 assertNotNull( result.getFile() ); 309 } 310 311 @Test 312 public void testFindLocalMetadataNoVersion() 313 throws Exception 314 { 315 addMetadata( noVerMetadata, null ); 316 317 LocalMetadataRequest request = new LocalMetadataRequest( noVerMetadata, null, testContext ); 318 LocalMetadataResult result = manager.find( session, request ); 319 320 assertNotNull( result.getFile() ); 321 } 322 323 @Test 324 public void testDoNotFindRemoteMetadataDifferentContext() 325 throws Exception 326 { 327 addMetadata( noVerMetadata, repository ); 328 addMetadata( metadata, repository ); 329 330 LocalMetadataRequest request = new LocalMetadataRequest( noVerMetadata, repository, "different" ); 331 LocalMetadataResult result = manager.find( session, request ); 332 assertNull( result.getFile() ); 333 334 request = new LocalMetadataRequest( metadata, repository, "different" ); 335 result = manager.find( session, request ); 336 assertNull( result.getFile() ); 337 } 338 339 @Test 340 public void testFindArtifactUsesTimestampedVersion() 341 throws Exception 342 { 343 Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" ); 344 File file = new File( basedir, manager.getPathForLocalArtifact( artifact ) ); 345 TestFileUtils.writeString( file, "test" ); 346 addLocalArtifact( artifact ); 347 348 artifact = artifact.setVersion( "1.0-20110329.221805-4" ); 349 LocalArtifactRequest request = new LocalArtifactRequest(); 350 request.setArtifact( artifact ); 351 LocalArtifactResult result = manager.find( session, request ); 352 assertNull( result.toString(), result.getFile() ); 353 assertFalse( result.toString(), result.isAvailable() ); 354 } 355 356}