View Javadoc
1   package org.apache.maven.toolchain;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.junit.Assert.assertEquals;
23  import static org.mockito.Matchers.isA;
24  import static org.mockito.Mockito.mock;
25  import static org.mockito.Mockito.verify;
26  import static org.mockito.Mockito.when;
27  
28  import java.util.Arrays;
29  import java.util.Collections;
30  import java.util.HashMap;
31  import java.util.List;
32  import java.util.Map;
33  
34  import org.apache.maven.execution.DefaultMavenExecutionRequest;
35  import org.apache.maven.execution.MavenExecutionRequest;
36  import org.apache.maven.execution.MavenSession;
37  import org.apache.maven.toolchain.model.ToolchainModel;
38  import org.codehaus.plexus.logging.Logger;
39  import org.junit.Before;
40  import org.junit.Test;
41  import org.mockito.ArgumentMatchers;
42  import org.mockito.InjectMocks;
43  import org.mockito.Mock;
44  import org.mockito.MockitoAnnotations;
45  
46  public class DefaultToolchainManagerTest
47  {
48       // Mocks to inject into toolchainManager
49      @Mock
50      private Logger logger;
51  
52      @InjectMocks
53      private DefaultToolchainManager toolchainManager;
54  
55      @Mock
56      private ToolchainFactory toolchainFactory_basicType;
57  
58      @Mock
59      private ToolchainFactory toolchainFactory_rareType;
60  
61      @Before
62      public void onSetup() throws Exception
63      {
64          toolchainManager = new DefaultToolchainManager();
65  
66          MockitoAnnotations.initMocks( this );
67  
68          toolchainManager.factories = new HashMap<>();
69          toolchainManager.factories.put( "basic", toolchainFactory_basicType );
70          toolchainManager.factories.put( "rare", toolchainFactory_rareType );
71      }
72  
73      @Test
74      public void testNoModels()
75      {
76          MavenSession session = mock( MavenSession.class );
77          MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
78          when( session.getRequest() ).thenReturn( executionRequest );
79  
80          List<Toolchain> toolchains = toolchainManager.getToolchains( session, "unknown", null );
81  
82          assertEquals( 0, toolchains.size() );
83      }
84  
85      @Test
86      public void testModelNoFactory()
87      {
88          MavenSession session = mock( MavenSession.class );
89          MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
90          Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
91          toolchainModels.put( "unknown", Collections.singletonList( new ToolchainModel() ) );
92          executionRequest.setToolchains( toolchainModels );
93          when( session.getRequest() ).thenReturn( executionRequest );
94  
95          List<Toolchain> toolchains = toolchainManager.getToolchains( session, "unknown", null );
96  
97          assertEquals( 0, toolchains.size() );
98          verify( logger ).error( "Missing toolchain factory for type: unknown. Possibly caused by misconfigured project." );
99      }
100 
101     @Test
102     public void testModelAndFactory()
103     {
104         MavenSession session = mock( MavenSession.class );
105         MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
106         Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
107         toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
108         toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
109         executionRequest.setToolchains( toolchainModels );
110         when( session.getRequest() ).thenReturn( executionRequest );
111 
112         List<Toolchain> toolchains = toolchainManager.getToolchains( session, "rare", null );
113 
114         assertEquals( 1, toolchains.size() );
115     }
116 
117     @Test
118     public void testModelsAndFactory()
119     {
120         MavenSession session = mock( MavenSession.class );
121         MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
122         Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
123         toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
124         toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
125         executionRequest.setToolchains( toolchainModels );
126         when( session.getRequest() ).thenReturn( executionRequest );
127 
128         List<Toolchain> toolchains = toolchainManager.getToolchains( session, "basic", null );
129 
130         assertEquals( 2, toolchains.size() );
131     }
132 
133     @Test
134     public void testRequirements()
135         throws Exception
136     {
137         MavenSession session = mock( MavenSession.class );
138         MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
139         Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
140         toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
141         toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
142         executionRequest.setToolchains( toolchainModels );
143         when( session.getRequest() ).thenReturn( executionRequest );
144         ToolchainPrivate basicPrivate = mock( ToolchainPrivate.class );
145         when( basicPrivate.matchesRequirements( ArgumentMatchers.<String, String>anyMap() ) ).thenReturn( false ).thenReturn( true );
146         when( toolchainFactory_basicType.createToolchain( isA( ToolchainModel.class ) ) ).thenReturn( basicPrivate );
147 
148         List<Toolchain> toolchains =
149             toolchainManager.getToolchains( session, "basic", Collections.singletonMap( "key", "value" ) );
150 
151         assertEquals( 1, toolchains.size() );
152     }
153 }