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.ArrayList;
22  import java.util.HashMap;
23  import java.util.List;
24  import java.util.Map;
25  
26  import org.apache.maven.execution.DefaultMavenExecutionRequest;
27  import org.apache.maven.execution.MavenExecutionRequest;
28  import org.apache.maven.execution.MavenSession;
29  import org.apache.maven.toolchain.model.ToolchainModel;
30  import org.junit.jupiter.api.BeforeEach;
31  import org.junit.jupiter.api.Test;
32  import org.mockito.InjectMocks;
33  import org.mockito.Mock;
34  import org.mockito.MockitoAnnotations;
35  import org.slf4j.Logger;
36  
37  import static org.junit.jupiter.api.Assertions.assertEquals;
38  import static org.mockito.ArgumentMatchers.anyString;
39  import static org.mockito.Mockito.mock;
40  import static org.mockito.Mockito.never;
41  import static org.mockito.Mockito.verify;
42  import static org.mockito.Mockito.when;
43  
44  class DefaultToolchainManagerPrivateTest {
45      // Mocks to inject into toolchainManager
46      @Mock
47      private Logger logger;
48  
49      @InjectMocks
50      private DefaultToolchainManagerPrivate toolchainManager;
51  
52      @Mock
53      private ToolchainFactory toolchainFactory_basicType;
54  
55      @Mock
56      private ToolchainFactory toolchainFactory_rareType;
57  
58      @BeforeEach
59      void setUp() {
60  
61          MockitoAnnotations.initMocks(this);
62  
63          Map<String, ToolchainFactory> factories = new HashMap<>();
64          factories.put("basic", toolchainFactory_basicType);
65          factories.put("rare", toolchainFactory_rareType);
66          toolchainManager = new DefaultToolchainManagerPrivate(factories, logger);
67      }
68  
69      @Test
70      void testToolchainsForAvailableType() throws Exception {
71          // prepare
72          MavenSession session = mock(MavenSession.class);
73          MavenExecutionRequest req = new DefaultMavenExecutionRequest();
74          when(session.getRequest()).thenReturn(req);
75  
76          ToolchainPrivate basicToolchain = mock(ToolchainPrivate.class);
77          when(toolchainFactory_basicType.createDefaultToolchain()).thenReturn(basicToolchain);
78          ToolchainPrivate rareToolchain = mock(ToolchainPrivate.class);
79          when(toolchainFactory_rareType.createDefaultToolchain()).thenReturn(rareToolchain);
80  
81          // execute
82          ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType("basic", session);
83  
84          // verify
85          verify(logger, never()).error(anyString());
86          assertEquals(1, toolchains.length);
87      }
88  
89      @Test
90      void testToolchainsForUnknownType() throws Exception {
91          // prepare
92          MavenSession session = mock(MavenSession.class);
93          MavenExecutionRequest req = new DefaultMavenExecutionRequest();
94          when(session.getRequest()).thenReturn(req);
95  
96          ToolchainPrivate basicToolchain = mock(ToolchainPrivate.class);
97          when(toolchainFactory_basicType.createDefaultToolchain()).thenReturn(basicToolchain);
98          ToolchainPrivate rareToolchain = mock(ToolchainPrivate.class);
99          when(toolchainFactory_rareType.createDefaultToolchain()).thenReturn(rareToolchain);
100 
101         // execute
102         ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType("unknown", session);
103 
104         // verify
105         verify(logger).error("Missing toolchain factory for type: unknown. Possibly caused by misconfigured project.");
106         assertEquals(0, toolchains.length);
107     }
108 
109     @Test
110     void testToolchainsForConfiguredType() throws Exception {
111         // prepare
112         MavenSession session = mock(MavenSession.class);
113         MavenExecutionRequest req = new DefaultMavenExecutionRequest();
114         when(session.getRequest()).thenReturn(req);
115         Map<String, List<ToolchainModel>> groupedToolchains = new HashMap<>();
116         req.setToolchains(groupedToolchains);
117 
118         List<ToolchainModel> basicToolchains = new ArrayList<>();
119         ToolchainModel basicToolchainModel = new ToolchainModel();
120         basicToolchainModel.setType("basic");
121         basicToolchains.add(basicToolchainModel);
122         basicToolchains.add(basicToolchainModel);
123         groupedToolchains.put("basic", basicToolchains);
124 
125         List<ToolchainModel> rareToolchains = new ArrayList<>();
126         ToolchainModel rareToolchainModel = new ToolchainModel();
127         rareToolchainModel.setType("rare");
128         rareToolchains.add(rareToolchainModel);
129         groupedToolchains.put("rare", rareToolchains);
130 
131         // execute
132         ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType("basic", session);
133 
134         // verify
135         verify(logger, never()).error(anyString());
136         assertEquals(2, toolchains.length);
137     }
138 
139     @Test
140     void testMisconfiguredToolchain() throws Exception {
141         // prepare
142         MavenSession session = mock(MavenSession.class);
143         MavenExecutionRequest req = new DefaultMavenExecutionRequest();
144         when(session.getRequest()).thenReturn(req);
145 
146         // execute
147         ToolchainPrivate[] basics = toolchainManager.getToolchainsForType("basic", session);
148 
149         // verify
150         assertEquals(0, basics.length);
151     }
152 }