1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.release.exec;
20
21 import javax.inject.Inject;
22
23 import java.io.File;
24 import java.io.Writer;
25
26 import org.apache.maven.settings.Proxy;
27 import org.apache.maven.settings.Server;
28 import org.apache.maven.settings.Settings;
29 import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
30 import org.apache.maven.shared.release.ReleaseResult;
31 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
32 import org.apache.maven.shared.release.util.MavenCrypto;
33 import org.codehaus.plexus.testing.PlexusTest;
34 import org.junit.jupiter.api.Test;
35 import org.mockito.ArgumentCaptor;
36 import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
37
38 import static org.codehaus.plexus.testing.PlexusExtension.getTestFile;
39 import static org.junit.jupiter.api.Assertions.assertEquals;
40 import static org.junit.jupiter.api.Assertions.assertNotEquals;
41 import static org.junit.jupiter.api.Assertions.assertNotSame;
42 import static org.mockito.ArgumentMatchers.isA;
43 import static org.mockito.Mockito.mock;
44 import static org.mockito.Mockito.spy;
45 import static org.mockito.Mockito.verify;
46 import static org.mockito.Mockito.when;
47
48 @PlexusTest
49 class InvokerMavenExecutorTest {
50
51 @Inject
52 private MavenCrypto mavenCrypto;
53
54 @Inject
55 private SecDispatcher secDispatcher;
56
57 @Test
58 void testEncryptSettings() throws Exception {
59 InvokerMavenExecutor executor = new InvokerMavenExecutor(mavenCrypto);
60
61
62 File workingDirectory = getTestFile("target/working-directory");
63 workingDirectory.mkdirs();
64
65 Settings settings = new Settings();
66 Server server = new Server();
67 server.setPassphrase("server_passphrase");
68 server.setPassword("server_password");
69 settings.addServer(server);
70 Proxy proxy = new Proxy();
71 proxy.setPassword("proxy_password");
72 settings.addProxy(proxy);
73
74 DefaultReleaseEnvironment releaseEnvironment = new DefaultReleaseEnvironment();
75 releaseEnvironment.setSettings(settings);
76 releaseEnvironment.setMavenHome(new File(System.getProperty("injectedMavenHome")));
77
78 InvokerMavenExecutor executorSpy = spy(executor);
79 SettingsXpp3Writer settingsWriter = mock(SettingsXpp3Writer.class);
80
81 ArgumentCaptor<Settings> encryptedSettings = ArgumentCaptor.forClass(Settings.class);
82
83 when(executorSpy.getSettingsWriter()).thenReturn(settingsWriter);
84
85 try {
86 executorSpy.executeGoals(
87 workingDirectory, "validate", releaseEnvironment, false, null, null, new ReleaseResult());
88 } catch (MavenExecutorException e) {
89 }
90
91 verify(settingsWriter).write(isA(Writer.class), encryptedSettings.capture());
92
93 assertNotSame(settings, encryptedSettings.getValue());
94
95 Server encryptedServer = encryptedSettings.getValue().getServers().get(0);
96 assertEquals("server_passphrase", secDispatcher.decrypt(encryptedServer.getPassphrase()));
97 assertEquals("server_password", secDispatcher.decrypt(encryptedServer.getPassword()));
98
99 Proxy encryptedProxy = encryptedSettings.getValue().getProxies().get(0);
100 assertEquals("proxy_password", secDispatcher.decrypt(encryptedProxy.getPassword()));
101
102 File settingsSecurity = new File(System.getProperty("user.home"), ".m2/settings-security.xml");
103 if (settingsSecurity.exists()) {
104 assertNotEquals("server_passphrase", encryptedServer.getPassphrase());
105 assertNotEquals("server_password", encryptedServer.getPassword());
106 assertNotEquals("proxy_password", encryptedProxy.getPassword());
107 }
108 }
109 }