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.RepositorySystemSession; 032import org.eclipse.aether.artifact.Artifact; 033import org.eclipse.aether.artifact.DefaultArtifact; 034import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManager; 035import org.eclipse.aether.internal.test.util.TestFileUtils; 036import org.eclipse.aether.internal.test.util.TestUtils; 037import org.eclipse.aether.metadata.DefaultMetadata; 038import org.eclipse.aether.metadata.Metadata; 039import org.eclipse.aether.metadata.Metadata.Nature; 040import org.eclipse.aether.repository.LocalArtifactRegistration; 041import org.eclipse.aether.repository.LocalArtifactRequest; 042import org.eclipse.aether.repository.LocalArtifactResult; 043import org.eclipse.aether.repository.LocalMetadataRequest; 044import org.eclipse.aether.repository.LocalMetadataResult; 045import org.eclipse.aether.repository.RemoteRepository; 046import org.junit.After; 047import org.junit.Before; 048import org.junit.Test; 049 050public class EnhancedLocalRepositoryManagerTest 051{ 052 053 private Artifact artifact; 054 055 private Artifact snapshot; 056 057 private File basedir; 058 059 private EnhancedLocalRepositoryManager manager; 060 061 private File artifactFile; 062 063 private RemoteRepository repository; 064 065 private String testContext = "project/compile"; 066 067 private TrackingFileManager trackingFileManager; 068 069 private RepositorySystemSession session; 070 071 private Metadata metadata; 072 073 private Metadata noVerMetadata; 074 075 @Before 076 public void setup() 077 throws Exception 078 { 079 String url = TestFileUtils.createTempDir( "enhanced-remote-repo" ).toURI().toURL().toString(); 080 repository = 081 new RemoteRepository.Builder( "enhanced-remote-repo", "default", url ).setRepositoryManager( true ).build(); 082 083 artifact = 084 new DefaultArtifact( "gid", "aid", "", "jar", "1-test", Collections.<String, String> emptyMap(), 085 TestFileUtils.createTempFile( "artifact" ) ); 086 087 snapshot = 088 new DefaultArtifact( "gid", "aid", "", "jar", "1.0-20120710.231549-9", 089 Collections.<String, String> emptyMap(), TestFileUtils.createTempFile( "artifact" ) ); 090 091 metadata = 092 new DefaultMetadata( "gid", "aid", "1-test", "maven-metadata.xml", Nature.RELEASE, 093 TestFileUtils.createTempFile( "metadata" ) ); 094 095 noVerMetadata = 096 new DefaultMetadata( "gid", "aid", null, "maven-metadata.xml", Nature.RELEASE, 097 TestFileUtils.createTempFile( "metadata" ) ); 098 099 basedir = TestFileUtils.createTempDir( "enhanced-repo" ); 100 session = TestUtils.newSession(); 101 trackingFileManager = new DefaultTrackingFileManager(); 102 manager = new EnhancedLocalRepositoryManager( basedir, session, trackingFileManager ); 103 104 artifactFile = new File( basedir, manager.getPathForLocalArtifact( artifact ) ); 105 } 106 107 @After 108 public void tearDown() 109 throws Exception 110 { 111 TestFileUtils.deleteFile( basedir ); 112 TestFileUtils.deleteFile( new File( new URI( repository.getUrl() ) ) ); 113 114 session = null; 115 manager = null; 116 repository = null; 117 artifact = null; 118 } 119 120 private long addLocalArtifact( Artifact artifact ) 121 throws IOException 122 { 123 manager.add( session, new LocalArtifactRegistration( artifact ) ); 124 String path = manager.getPathForLocalArtifact( artifact ); 125 126 return copy( artifact, path ); 127 } 128 129 private long addRemoteArtifact( Artifact artifact ) 130 throws IOException 131 { 132 Collection<String> contexts = Arrays.asList( testContext ); 133 manager.add( session, new LocalArtifactRegistration( artifact, repository, contexts ) ); 134 String path = manager.getPathForRemoteArtifact( artifact, repository, testContext ); 135 return copy( artifact, path ); 136 } 137 138 private long copy( Metadata metadata, String path ) 139 throws IOException 140 { 141 if ( metadata.getFile() == null ) 142 { 143 return -1L; 144 } 145 return TestFileUtils.copyFile( metadata.getFile(), new File( basedir, path ) ); 146 } 147 148 private long copy( Artifact artifact, String path ) 149 throws IOException 150 { 151 if ( artifact.getFile() == null ) 152 { 153 return -1L; 154 } 155 File artifactFile = new File( basedir, path ); 156 return TestFileUtils.copyFile( artifact.getFile(), artifactFile ); 157 } 158 159 @Test 160 public void testGetPathForLocalArtifact() 161 { 162 Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" ); 163 assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() ); 164 assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", manager.getPathForLocalArtifact( artifact ) ); 165 166 artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-20110329.221805-4" ); 167 assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() ); 168 assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-SNAPSHOT.jar", manager.getPathForLocalArtifact( artifact ) ); 169 } 170 171 @Test 172 public void testGetPathForRemoteArtifact() 173 { 174 RemoteRepository remoteRepo = new RemoteRepository.Builder( "repo", "default", "ram:/void" ).build(); 175 176 Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" ); 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", 179 manager.getPathForRemoteArtifact( artifact, remoteRepo, "" ) ); 180 181 artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-20110329.221805-4" ); 182 assertEquals( "1.0-SNAPSHOT", artifact.getBaseVersion() ); 183 assertEquals( "g/i/d/a.i.d/1.0-SNAPSHOT/a.i.d-1.0-20110329.221805-4.jar", 184 manager.getPathForRemoteArtifact( artifact, remoteRepo, "" ) ); 185 } 186 187 @Test 188 public void testFindLocalArtifact() 189 throws Exception 190 { 191 addLocalArtifact( artifact ); 192 193 LocalArtifactRequest request = new LocalArtifactRequest( artifact, null, null ); 194 LocalArtifactResult result = manager.find( session, request ); 195 assertTrue( result.isAvailable() ); 196 assertNull( result.getRepository() ); 197 198 snapshot = snapshot.setVersion( snapshot.getBaseVersion() ); 199 addLocalArtifact( snapshot ); 200 201 request = new LocalArtifactRequest( snapshot, null, null ); 202 result = manager.find( session, request ); 203 assertTrue( result.isAvailable() ); 204 assertNull( result.getRepository() ); 205 } 206 207 @Test 208 public void testFindRemoteArtifact() 209 throws Exception 210 { 211 addRemoteArtifact( artifact ); 212 213 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); 214 LocalArtifactResult result = manager.find( session, request ); 215 assertTrue( result.isAvailable() ); 216 assertEquals( repository, result.getRepository() ); 217 218 addRemoteArtifact( snapshot ); 219 220 request = new LocalArtifactRequest( snapshot, Arrays.asList( repository ), testContext ); 221 result = manager.find( session, request ); 222 assertTrue( result.isAvailable() ); 223 assertEquals( repository, result.getRepository() ); 224 } 225 226 @Test 227 public void testDoNotFindDifferentContext() 228 throws Exception 229 { 230 addRemoteArtifact( artifact ); 231 232 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), "different" ); 233 LocalArtifactResult result = manager.find( session, request ); 234 assertFalse( result.isAvailable() ); 235 } 236 237 @Test 238 public void testDoNotFindNullFile() 239 throws Exception 240 { 241 artifact = artifact.setFile( null ); 242 addLocalArtifact( artifact ); 243 244 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); 245 LocalArtifactResult result = manager.find( session, request ); 246 assertFalse( result.isAvailable() ); 247 } 248 249 @Test 250 public void testDoNotFindDeletedFile() 251 throws Exception 252 { 253 addLocalArtifact( artifact ); 254 assertTrue( "could not delete artifact file", artifactFile.delete() ); 255 256 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); 257 LocalArtifactResult result = manager.find( session, request ); 258 assertFalse( result.isAvailable() ); 259 } 260 261 @Test 262 public void testFindUntrackedFile() 263 throws Exception 264 { 265 copy( artifact, manager.getPathForLocalArtifact( artifact ) ); 266 267 LocalArtifactRequest request = new LocalArtifactRequest( artifact, Arrays.asList( repository ), testContext ); 268 LocalArtifactResult result = manager.find( session, request ); 269 assertTrue( result.isAvailable() ); 270 } 271 272 private long addMetadata( Metadata metadata, RemoteRepository repo ) 273 throws IOException 274 { 275 String path; 276 if ( repo == null ) 277 { 278 path = manager.getPathForLocalMetadata( metadata ); 279 } 280 else 281 { 282 path = manager.getPathForRemoteMetadata( metadata, repo, testContext ); 283 } 284 System.err.println( path ); 285 286 return copy( metadata, path ); 287 } 288 289 @Test 290 public void testFindLocalMetadata() 291 throws Exception 292 { 293 addMetadata( metadata, null ); 294 295 LocalMetadataRequest request = new LocalMetadataRequest( metadata, null, testContext ); 296 LocalMetadataResult result = manager.find( session, request ); 297 298 assertNotNull( result.getFile() ); 299 } 300 301 @Test 302 public void testFindLocalMetadataNoVersion() 303 throws Exception 304 { 305 addMetadata( noVerMetadata, null ); 306 307 LocalMetadataRequest request = new LocalMetadataRequest( noVerMetadata, null, testContext ); 308 LocalMetadataResult result = manager.find( session, request ); 309 310 assertNotNull( result.getFile() ); 311 } 312 313 @Test 314 public void testDoNotFindRemoteMetadataDifferentContext() 315 throws Exception 316 { 317 addMetadata( noVerMetadata, repository ); 318 addMetadata( metadata, repository ); 319 320 LocalMetadataRequest request = new LocalMetadataRequest( noVerMetadata, repository, "different" ); 321 LocalMetadataResult result = manager.find( session, request ); 322 assertNull( result.getFile() ); 323 324 request = new LocalMetadataRequest( metadata, repository, "different" ); 325 result = manager.find( session, request ); 326 assertNull( result.getFile() ); 327 } 328 329 @Test 330 public void testFindArtifactUsesTimestampedVersion() 331 throws Exception 332 { 333 Artifact artifact = new DefaultArtifact( "g.i.d:a.i.d:1.0-SNAPSHOT" ); 334 File file = new File( basedir, manager.getPathForLocalArtifact( artifact ) ); 335 TestFileUtils.writeString( file, "test" ); 336 addLocalArtifact( artifact ); 337 338 artifact = artifact.setVersion( "1.0-20110329.221805-4" ); 339 LocalArtifactRequest request = new LocalArtifactRequest(); 340 request.setArtifact( artifact ); 341 LocalArtifactResult result = manager.find( session, request ); 342 assertNull( result.toString(), result.getFile() ); 343 assertFalse( result.toString(), result.isAvailable() ); 344 } 345 346}