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.toolchain;
20  
21  import java.util.Arrays;
22  import java.util.Collections;
23  import java.util.HashMap;
24  import java.util.List;
25  import java.util.Map;
26  
27  import org.apache.maven.execution.DefaultMavenExecutionRequest;
28  import org.apache.maven.execution.MavenExecutionRequest;
29  import org.apache.maven.execution.MavenSession;
30  import org.apache.maven.toolchain.model.ToolchainModel;
31  import org.codehaus.plexus.logging.Logger;
32  import org.junit.Before;
33  import org.junit.Test;
34  import org.mockito.ArgumentMatchers;
35  import org.mockito.InjectMocks;
36  import org.mockito.Mock;
37  import org.mockito.MockitoAnnotations;
38  
39  import static org.junit.Assert.assertEquals;
40  import static org.mockito.ArgumentMatchers.isA;
41  import static org.mockito.Mockito.mock;
42  import static org.mockito.Mockito.verify;
43  import static org.mockito.Mockito.when;
44  
45  public class DefaultToolchainManagerTest {
46      // Mocks to inject into toolchainManager
47      @Mock
48      private Logger logger;
49  
50      @InjectMocks
51      private DefaultToolchainManager toolchainManager;
52  
53      @Mock
54      private ToolchainFactory toolchainFactory_basicType;
55  
56      @Mock
57      private ToolchainFactory toolchainFactory_rareType;
58  
59      @Before
60      public void onSetup() throws Exception {
61          toolchainManager = new DefaultToolchainManager();
62  
63          MockitoAnnotations.initMocks(this);
64  
65          toolchainManager.factories = new HashMap<>();
66          toolchainManager.factories.put("basic", toolchainFactory_basicType);
67          toolchainManager.factories.put("rare", toolchainFactory_rareType);
68      }
69  
70      @Test
71      public void testNoModels() {
72          MavenSession session = mock(MavenSession.class);
73          MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
74          when(session.getRequest()).thenReturn(executionRequest);
75  
76          List<Toolchain> toolchains = toolchainManager.getToolchains(session, "unknown", null);
77  
78          assertEquals(0, toolchains.size());
79      }
80  
81      @Test
82      public void testModelNoFactory() {
83          MavenSession session = mock(MavenSession.class);
84          MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
85          Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
86          toolchainModels.put("unknown", Collections.singletonList(new ToolchainModel()));
87          executionRequest.setToolchains(toolchainModels);
88          when(session.getRequest()).thenReturn(executionRequest);
89  
90          List<Toolchain> toolchains = toolchainManager.getToolchains(session, "unknown", null);
91  
92          assertEquals(0, toolchains.size());
93          verify(logger).error("Missing toolchain factory for type: unknown. Possibly caused by misconfigured project.");
94      }
95  
96      @Test
97      public void testModelAndFactory() {
98          MavenSession session = mock(MavenSession.class);
99          MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
100         Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
101         toolchainModels.put("basic", Arrays.asList(new ToolchainModel(), new ToolchainModel()));
102         toolchainModels.put("rare", Collections.singletonList(new ToolchainModel()));
103         executionRequest.setToolchains(toolchainModels);
104         when(session.getRequest()).thenReturn(executionRequest);
105 
106         List<Toolchain> toolchains = toolchainManager.getToolchains(session, "rare", null);
107 
108         assertEquals(1, toolchains.size());
109     }
110 
111     @Test
112     public void testModelsAndFactory() {
113         MavenSession session = mock(MavenSession.class);
114         MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
115         Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
116         toolchainModels.put("basic", Arrays.asList(new ToolchainModel(), new ToolchainModel()));
117         toolchainModels.put("rare", Collections.singletonList(new ToolchainModel()));
118         executionRequest.setToolchains(toolchainModels);
119         when(session.getRequest()).thenReturn(executionRequest);
120 
121         List<Toolchain> toolchains = toolchainManager.getToolchains(session, "basic", null);
122 
123         assertEquals(2, toolchains.size());
124     }
125 
126     @Test
127     public void testRequirements() throws Exception {
128         MavenSession session = mock(MavenSession.class);
129         MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
130         Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
131         toolchainModels.put("basic", Arrays.asList(new ToolchainModel(), new ToolchainModel()));
132         toolchainModels.put("rare", Collections.singletonList(new ToolchainModel()));
133         executionRequest.setToolchains(toolchainModels);
134         when(session.getRequest()).thenReturn(executionRequest);
135         ToolchainPrivate basicPrivate = mock(ToolchainPrivate.class);
136         when(basicPrivate.matchesRequirements(ArgumentMatchers.<String, String>anyMap()))
137                 .thenReturn(false)
138                 .thenReturn(true);
139         when(toolchainFactory_basicType.createToolchain(isA(ToolchainModel.class)))
140                 .thenReturn(basicPrivate);
141 
142         List<Toolchain> toolchains =
143                 toolchainManager.getToolchains(session, "basic", Collections.singletonMap("key", "value"));
144 
145         assertEquals(1, toolchains.size());
146     }
147 }