1 package org.eclipse.aether.internal.impl;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.junit.Assert.*;
23
24 import java.io.File;
25 import java.io.IOException;
26 import java.net.URI;
27 import java.util.Arrays;
28 import java.util.Collection;
29 import java.util.List;
30 import java.util.Set;
31
32 import org.eclipse.aether.DefaultRepositorySystemSession;
33 import org.eclipse.aether.internal.impl.DefaultMetadataResolver;
34 import org.eclipse.aether.internal.test.util.TestFileUtils;
35 import org.eclipse.aether.internal.test.util.TestLocalRepositoryManager;
36 import org.eclipse.aether.internal.test.util.TestUtils;
37 import org.eclipse.aether.metadata.DefaultMetadata;
38 import org.eclipse.aether.metadata.Metadata;
39 import org.eclipse.aether.repository.LocalMetadataRegistration;
40 import org.eclipse.aether.repository.RemoteRepository;
41 import org.eclipse.aether.resolution.MetadataRequest;
42 import org.eclipse.aether.resolution.MetadataResult;
43 import org.eclipse.aether.spi.connector.ArtifactDownload;
44 import org.eclipse.aether.spi.connector.MetadataDownload;
45 import org.eclipse.aether.transfer.MetadataNotFoundException;
46 import org.junit.After;
47 import org.junit.Before;
48 import org.junit.Test;
49
50
51
52 public class DefaultMetadataResolverTest
53 {
54
55 private DefaultMetadataResolver resolver;
56
57 private StubRepositoryConnectorProvider connectorProvider;
58
59 private RemoteRepository repository;
60
61 private DefaultRepositorySystemSession session;
62
63 private Metadata metadata;
64
65 private RecordingRepositoryConnector connector;
66
67 private TestLocalRepositoryManager lrm;
68
69 @Before
70 public void setup()
71 throws Exception
72 {
73 session = TestUtils.newSession();
74 lrm = (TestLocalRepositoryManager) session.getLocalRepositoryManager();
75 connectorProvider = new StubRepositoryConnectorProvider();
76 resolver = new DefaultMetadataResolver();
77 resolver.setUpdateCheckManager( new StaticUpdateCheckManager( true ) );
78 resolver.setRepositoryEventDispatcher( new StubRepositoryEventDispatcher() );
79 resolver.setRepositoryConnectorProvider( connectorProvider );
80 resolver.setRemoteRepositoryManager( new StubRemoteRepositoryManager() );
81 resolver.setSyncContextFactory( new StubSyncContextFactory() );
82 resolver.setOfflineController( new DefaultOfflineController() );
83 repository =
84 new RemoteRepository.Builder( "test-DMRT", "default",
85 TestFileUtils.createTempDir().toURI().toURL().toString() ).build();
86 metadata = new DefaultMetadata( "gid", "aid", "ver", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT );
87 connector = new RecordingRepositoryConnector();
88 connectorProvider.setConnector( connector );
89 }
90
91 @After
92 public void teardown()
93 throws Exception
94 {
95 TestFileUtils.deleteFile( new File( new URI( repository.getUrl() ) ) );
96 TestFileUtils.deleteFile( session.getLocalRepository().getBasedir() );
97 }
98
99 @Test
100 public void testNoRepositoryFailing()
101 {
102 MetadataRequest request = new MetadataRequest( metadata, null, "" );
103 List<MetadataResult> results = resolver.resolveMetadata( session, Arrays.asList( request ) );
104
105 assertEquals( 1, results.size() );
106
107 MetadataResult result = results.get( 0 );
108 assertSame( request, result.getRequest() );
109 assertNotNull( "" + ( result.getMetadata() != null ? result.getMetadata().getFile() : result.getMetadata() ),
110 result.getException() );
111 assertEquals( MetadataNotFoundException.class, result.getException().getClass() );
112
113 assertNull( result.getMetadata() );
114 }
115
116 @Test
117 public void testResolve()
118 throws IOException
119 {
120 connector.setExpectGet( metadata );
121
122
123 File file =
124 new File( session.getLocalRepository().getBasedir(),
125 session.getLocalRepositoryManager().getPathForRemoteMetadata( metadata, repository, "" ) );
126
127 TestFileUtils.writeString( file, file.getAbsolutePath() );
128
129 MetadataRequest request = new MetadataRequest( metadata, repository, "" );
130 List<MetadataResult> results = resolver.resolveMetadata( session, Arrays.asList( request ) );
131
132 assertEquals( 1, results.size() );
133
134 MetadataResult result = results.get( 0 );
135 assertSame( request, result.getRequest() );
136 assertNull( result.getException() );
137 assertNotNull( result.getMetadata() );
138 assertNotNull( result.getMetadata().getFile() );
139
140 assertEquals( file, result.getMetadata().getFile() );
141 assertEquals( metadata, result.getMetadata().setFile( null ) );
142
143 connector.assertSeenExpected();
144 Set<Metadata> metadataRegistration =
145 ( (TestLocalRepositoryManager) session.getLocalRepositoryManager() ).getMetadataRegistration();
146 assertTrue( metadataRegistration.contains( metadata ) );
147 assertEquals( 1, metadataRegistration.size() );
148 }
149
150 @Test
151 public void testRemoveMetadataIfMissing()
152 throws IOException
153 {
154 connector = new RecordingRepositoryConnector()
155 {
156
157 @Override
158 public void get( Collection<? extends ArtifactDownload> artifactDownloads,
159 Collection<? extends MetadataDownload> metadataDownloads )
160 {
161 super.get( artifactDownloads, metadataDownloads );
162 for ( MetadataDownload d : metadataDownloads )
163 {
164 d.setException( new MetadataNotFoundException( metadata, repository ) );
165 }
166 }
167
168 };
169 connectorProvider.setConnector( connector );
170
171 File file =
172 new File( session.getLocalRepository().getBasedir(),
173 session.getLocalRepositoryManager().getPathForRemoteMetadata( metadata, repository, "" ) );
174 TestFileUtils.writeString( file, file.getAbsolutePath() );
175 metadata.setFile( file );
176
177 MetadataRequest request = new MetadataRequest( metadata, repository, "" );
178 request.setDeleteLocalCopyIfMissing( true );
179
180 List<MetadataResult> results = resolver.resolveMetadata( session, Arrays.asList( request ) );
181 assertEquals( 1, results.size() );
182 MetadataResult result = results.get( 0 );
183
184 assertNotNull( result.getException() );
185 assertFalse( file.exists() );
186 }
187
188 @Test
189 public void testOfflineSessionResolveMetadataMissing()
190 {
191 session.setOffline( true );
192 MetadataRequest request = new MetadataRequest( metadata, repository, "" );
193 List<MetadataResult> results = resolver.resolveMetadata( session, Arrays.asList( request ) );
194
195 assertEquals( 1, results.size() );
196
197 MetadataResult result = results.get( 0 );
198 assertSame( request, result.getRequest() );
199 assertNotNull( result.getException() );
200 assertNull( result.getMetadata() );
201
202 connector.assertSeenExpected();
203 }
204
205 @Test
206 public void testOfflineSessionResolveMetadata()
207 throws IOException
208 {
209 session.setOffline( true );
210
211 String path = session.getLocalRepositoryManager().getPathForRemoteMetadata( metadata, repository, "" );
212 File file = new File( session.getLocalRepository().getBasedir(), path );
213 TestFileUtils.writeString( file, file.getAbsolutePath() );
214
215
216 metadata = metadata.setFile( file );
217
218 MetadataRequest request = new MetadataRequest( metadata, repository, "" );
219 List<MetadataResult> results = resolver.resolveMetadata( session, Arrays.asList( request ) );
220
221 assertEquals( 1, results.size() );
222 MetadataResult result = results.get( 0 );
223 assertSame( request, result.getRequest() );
224 assertNull( String.valueOf( result.getException() ), result.getException() );
225 assertNotNull( result.getMetadata() );
226 assertNotNull( result.getMetadata().getFile() );
227
228 assertEquals( file, result.getMetadata().getFile() );
229 assertEquals( metadata.setFile( null ), result.getMetadata().setFile( null ) );
230
231 connector.assertSeenExpected();
232 }
233
234 @Test
235 public void testFavorLocal()
236 throws IOException
237 {
238 lrm.add( session, new LocalMetadataRegistration( metadata ) );
239 String path = session.getLocalRepositoryManager().getPathForLocalMetadata( metadata );
240 File file = new File( session.getLocalRepository().getBasedir(), path );
241 TestFileUtils.writeString( file, file.getAbsolutePath() );
242
243 MetadataRequest request = new MetadataRequest( metadata, repository, "" );
244 request.setFavorLocalRepository( true );
245 resolver.setUpdateCheckManager( new StaticUpdateCheckManager( true, true ) );
246
247 List<MetadataResult> results = resolver.resolveMetadata( session, Arrays.asList( request ) );
248
249 assertEquals( 1, results.size() );
250 MetadataResult result = results.get( 0 );
251 assertSame( request, result.getRequest() );
252 assertNull( String.valueOf( result.getException() ), result.getException() );
253
254 connector.assertSeenExpected();
255 }
256 }