View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.repository.metadata;
20  
21  import org.apache.maven.artifact.ArtifactScopeEnum;
22  import org.codehaus.plexus.PlexusTestCase;
23  import org.codehaus.plexus.logging.Logger;
24  
25  /**
26   *
27   * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
28   *
29   */
30  public class DefaultGraphConflictResolverTest extends PlexusTestCase {
31      Logger log;
32  
33      GraphConflictResolver resolver;
34  
35      MetadataGraph graph;
36  
37      MetadataGraphVertex v1;
38      MetadataGraphVertex v2;
39      MetadataGraphVertex v3;
40      MetadataGraphVertex v4;
41      // ------------------------------------------------------------------------------------------
42      @Override
43      protected void setUp() throws Exception {
44          super.setUp();
45          resolver = (GraphConflictResolver) lookup(GraphConflictResolver.ROLE, "default");
46  
47          /*
48           *       v2
49           *   v1<
50           *      v3-v4
51           *
52           */
53          graph = new MetadataGraph(4, 3);
54          v1 = graph.addVertex(new ArtifactMetadata("g", "a1", "1.0"));
55          graph.setEntry(v1);
56          v2 = graph.addVertex(new ArtifactMetadata("g", "a2", "1.0"));
57          v3 = graph.addVertex(new ArtifactMetadata("g", "a3", "1.0"));
58          v4 = graph.addVertex(new ArtifactMetadata("g", "a4", "1.0"));
59  
60          // v1-->v2
61          graph.addEdge(v1, v2, new MetadataGraphEdge("1.1", true, null, null, 2, 1));
62          graph.addEdge(v1, v2, new MetadataGraphEdge("1.2", true, null, null, 2, 2));
63  
64          // v1-->v3
65          graph.addEdge(v1, v3, new MetadataGraphEdge("1.1", true, null, null, 2, 1));
66          graph.addEdge(v1, v3, new MetadataGraphEdge("1.2", true, null, null, 4, 2));
67  
68          // v3-->v4
69          graph.addEdge(v3, v4, new MetadataGraphEdge("1.1", true, ArtifactScopeEnum.runtime, null, 2, 1));
70          graph.addEdge(v3, v4, new MetadataGraphEdge("1.2", true, ArtifactScopeEnum.provided, null, 2, 2));
71      }
72      // ------------------------------------------------------------------------------------------
73      public void testCompileResolution() throws Exception {
74          MetadataGraph res;
75  
76          res = resolver.resolveConflicts(graph, ArtifactScopeEnum.compile);
77  
78          assertNotNull("null graph after resolver", res);
79          assertNotNull("no vertices in the resulting graph after resolver", res.getVertices());
80  
81          assertNotNull("no edges in the resulting graph after resolver", res.getExcidentEdges(v1));
82  
83          assertEquals(
84                  "wrong # of vertices in the resulting graph after resolver",
85                  4,
86                  res.getVertices().size());
87          assertEquals(
88                  "wrong # of excident edges in the resulting graph entry after resolver",
89                  2,
90                  res.getExcidentEdges(v1).size());
91  
92          assertEquals(
93                  "wrong # of v2 incident edges in the resulting graph after resolver",
94                  1,
95                  res.getIncidentEdges(v2).size());
96          assertEquals(
97                  "wrong edge v1-v2 in the resulting graph after resolver",
98                  "1.2",
99                  res.getIncidentEdges(v2).get(0).getVersion());
100 
101         assertEquals(
102                 "wrong # of edges v1-v3 in the resulting graph after resolver",
103                 1,
104                 res.getIncidentEdges(v3).size());
105         assertEquals(
106                 "wrong edge v1-v3 in the resulting graph after resolver",
107                 "1.1",
108                 res.getIncidentEdges(v3).get(0).getVersion());
109 
110         assertEquals(
111                 "wrong # of edges v3-v4 in the resulting graph after resolver",
112                 1,
113                 res.getIncidentEdges(v4).size());
114         assertEquals(
115                 "wrong edge v3-v4 in the resulting graph after resolver",
116                 "1.2",
117                 res.getIncidentEdges(v4).get(0).getVersion());
118     }
119     // ------------------------------------------------------------------------------------------
120     public void testRuntimeResolution() throws Exception {
121         MetadataGraph res;
122 
123         res = resolver.resolveConflicts(graph, ArtifactScopeEnum.runtime);
124 
125         assertNotNull("null graph after resolver", res);
126         assertNotNull("no vertices in the resulting graph after resolver", res.getVertices());
127         assertNotNull("no edges in the resulting graph after resolver", res.getExcidentEdges(v1));
128 
129         assertEquals(
130                 "wrong # of vertices in the resulting graph after resolver",
131                 4,
132                 res.getVertices().size());
133         assertEquals(
134                 "wrong # of excident edges in the resulting graph entry after resolver",
135                 2,
136                 res.getExcidentEdges(v1).size());
137 
138         assertEquals(
139                 "wrong # of v2 incident edges in the resulting graph after resolver",
140                 1,
141                 res.getIncidentEdges(v2).size());
142         assertEquals(
143                 "wrong edge v1-v2 in the resulting graph after resolver",
144                 "1.2",
145                 res.getIncidentEdges(v2).get(0).getVersion());
146 
147         assertEquals(
148                 "wrong # of edges v1-v3 in the resulting graph after resolver",
149                 1,
150                 res.getIncidentEdges(v3).size());
151         assertEquals(
152                 "wrong edge v1-v3 in the resulting graph after resolver",
153                 "1.1",
154                 res.getIncidentEdges(v3).get(0).getVersion());
155 
156         assertEquals(
157                 "wrong # of edges v3-v4 in the resulting graph after resolver",
158                 1,
159                 res.getIncidentEdges(v4).size());
160         assertEquals(
161                 "wrong edge v3-v4 in the resulting graph after resolver",
162                 "1.1",
163                 res.getIncidentEdges(v4).get(0).getVersion());
164     }
165     // ------------------------------------------------------------------------------------------
166     public void testTestResolution() throws Exception {
167         MetadataGraph res;
168 
169         res = resolver.resolveConflicts(graph, ArtifactScopeEnum.test);
170 
171         assertNotNull("null graph after resolver", res);
172         assertNotNull("no vertices in the resulting graph after resolver", res.getVertices());
173         assertNotNull("no edges in the resulting graph after resolver", res.getExcidentEdges(v1));
174 
175         assertEquals(
176                 "wrong # of vertices in the resulting graph after resolver",
177                 4,
178                 res.getVertices().size());
179         assertEquals(
180                 "wrong # of excident edges in the resulting graph entry after resolver",
181                 2,
182                 res.getExcidentEdges(v1).size());
183 
184         assertEquals(
185                 "wrong # of v2 incident edges in the resulting graph after resolver",
186                 1,
187                 res.getIncidentEdges(v2).size());
188         assertEquals(
189                 "wrong edge v1-v2 in the resulting graph after resolver",
190                 "1.2",
191                 res.getIncidentEdges(v2).get(0).getVersion());
192 
193         assertEquals(
194                 "wrong # of edges v1-v3 in the resulting graph after resolver",
195                 1,
196                 res.getIncidentEdges(v3).size());
197         assertEquals(
198                 "wrong edge v1-v3 in the resulting graph after resolver",
199                 "1.1",
200                 res.getIncidentEdges(v3).get(0).getVersion());
201 
202         assertEquals(
203                 "wrong # of edges v3-v4 in the resulting graph after resolver",
204                 1,
205                 res.getIncidentEdges(v4).size());
206         assertEquals(
207                 "wrong edge v3-v4 in the resulting graph after resolver",
208                 "1.2",
209                 res.getIncidentEdges(v4).get(0).getVersion());
210     }
211     // ------------------------------------------------------------------------------------------
212     // ------------------------------------------------------------------------------------------
213 }