Skip to content

Commit c99366c

Browse files
authored
#471 - Fixing Help/Version Command Not Working Properly (#472)
* testing app exit * testing and fixing bug * fixing and testing mapper * testing and fixing bug * refactoring * one more test * fixing test * release notes * [Gradle Release Plugin] - new version commit: '3.19.3-snapshot'. * refactoring and testing * fixing tests * fixing test
1 parent 68a4758 commit c99366c

File tree

16 files changed

+157
-56
lines changed

16 files changed

+157
-56
lines changed

RELEASE-NOTES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 3.19.3
2+
* #471: Fixing Help/Version Command Not Working Properly
3+
14
## 3.19.2
25
* Config module domain refactoring, see #470
36

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=3.19.2-snapshot
1+
version=3.19.3-snapshot
Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,63 @@
11
package com.mageddo.dnsproxyserver;
22

3-
import com.mageddo.dnsproxyserver.application.AppSettings;
3+
import com.mageddo.dnsproxyserver.application.LogSettings;
44
import com.mageddo.dnsproxyserver.config.Config;
55
import com.mageddo.dnsproxyserver.config.application.Configs;
66
import com.mageddo.dnsproxyserver.config.dataprovider.ConfigDAOCmdArgs;
7+
import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigFlag;
78
import com.mageddo.dnsproxyserver.di.Context;
8-
import org.apache.commons.lang3.BooleanUtils;
99

1010
public class App {
11+
12+
private final String[] args;
13+
private Config config;
14+
15+
public App(String[] args) {
16+
this.args = args;
17+
}
18+
1119
public static void main(String[] args) {
20+
new App(args).start();
21+
}
1222

13-
ConfigDAOCmdArgs.setArgs(args);
23+
void start() {
24+
25+
this.checkExitCommands();
26+
27+
this.config = this.findConfig(args);
1428

15-
final var config = Configs.getInstance();
29+
this.setupLogs();
1630

17-
checkExitCommands(config);
31+
this.startContext();
1832

19-
new AppSettings().setupLogs(config);
33+
// todo install as service
34+
}
2035

36+
Config findConfig(String[] args) {
37+
ConfigDAOCmdArgs.setArgs(args);
38+
return Configs.getInstance();
39+
}
40+
41+
void setupLogs() {
42+
new LogSettings().setupLogs(this.config);
43+
}
44+
45+
void startContext() {
2146
final var context = Context.create();
2247

2348
// start webserver
2449
// start dns server
2550
context.start();
26-
27-
// todo install as service
2851
}
2952

30-
static void checkExitCommands(Config config) {
31-
if (BooleanUtils.isTrue(config.isHelpCmd()) || config.isVersionCmd()) {
32-
System.exit(0);
53+
void checkExitCommands() {
54+
final var flags = ConfigFlag.parse(this.args);
55+
if (flags.isHelp() || flags.isVersion()) {
56+
exitGracefully();
3357
}
3458
}
59+
60+
void exitGracefully() {
61+
System.exit(0);
62+
}
3563
}

src/main/java/com/mageddo/dnsproxyserver/application/AppSettings.java renamed to src/main/java/com/mageddo/dnsproxyserver/application/LogSettings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
@Slf4j
1212
@RequiredArgsConstructor
1313
@Singleton
14-
public class AppSettings {
14+
public class LogSettings {
1515

1616
/**
1717
* Injetando na mão, pois precisa ser feito antes de iniciar o contexto.

src/main/java/com/mageddo/dnsproxyserver/config/Config.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,6 @@ public class Config {
7171

7272
private Boolean dockerSolverHostMachineFallbackActive;
7373

74-
private boolean helpCmd;
75-
76-
private boolean versionCmd;
77-
7874
private SolverRemote solverRemote;
7975

8076
@JsonIgnore

src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/ConfigDAOCmdArgs.java

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package com.mageddo.dnsproxyserver.config.dataprovider;
22

33
import com.mageddo.dnsproxyserver.config.Config;
4-
import com.mageddo.dnsproxyserver.config.SolverRemote;
5-
import com.mageddo.dnsproxyserver.config.dataprovider.mapper.ConfigFieldsValuesMapper;
4+
import com.mageddo.dnsproxyserver.config.dataprovider.mapper.ConfigFlagMapper;
65
import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigFlag;
7-
import com.mageddo.dnsproxyserver.utils.Booleans;
8-
import com.mageddo.utils.Files;
96
import lombok.RequiredArgsConstructor;
107

118
import javax.inject.Inject;
@@ -19,7 +16,7 @@ public class ConfigDAOCmdArgs implements ConfigDAO {
1916

2017
@Override
2118
public Config find() {
22-
return toConfig(this.findRaw());
19+
return ConfigFlagMapper.toConfig(this.findRaw());
2320
}
2421

2522
public ConfigFlag findRaw() {
@@ -35,31 +32,6 @@ public static void setArgs(String[] args) {
3532
ConfigDAOCmdArgs.args = args;
3633
}
3734

38-
static Config toConfig(ConfigFlag config) {
39-
return Config.builder()
40-
.configPath(Files.pathOf(config.getConfigPath()))
41-
.registerContainerNames(config.getRegisterContainerNames())
42-
.domain(config.getDomain())
43-
.logFile(config.getLogToFile())
44-
.logLevel(ConfigFieldsValuesMapper.mapLogLevelFrom(config.getLogLevel()))
45-
.dockerHost(config.getDockerHost())
46-
.hostMachineHostname(config.getHostMachineHostname())
47-
.dpsNetworkAutoConnect(config.getDpsNetworkAutoConnect())
48-
.noEntriesResponseCode(config.getNoEntriesResponseCode())
49-
.dockerSolverHostMachineFallbackActive(config.getDockerSolverHostMachineFallbackActive())
50-
.resolvConfOverrideNameServers(config.getResolvConfOverrideNameServers())
51-
.mustConfigureDpsNetwork(config.getDpsNetwork())
52-
.webServerPort(config.getWebServerPort())
53-
.dnsServerPort(config.getDnsServerPort())
54-
.defaultDns(config.getDefaultDns())
55-
.solverRemote(SolverRemote
56-
.builder()
57-
.active(Booleans.reverseWhenNotNull(config.getNoRemoteServers()))
58-
.build()
59-
)
60-
.build();
61-
}
62-
6335
static String[] getArgs() {
6436
return args;
6537
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.mageddo.dnsproxyserver.config.dataprovider.mapper;
2+
3+
import com.mageddo.dnsproxyserver.config.Config;
4+
import com.mageddo.dnsproxyserver.config.SolverRemote;
5+
import com.mageddo.dnsproxyserver.config.dataprovider.vo.ConfigFlag;
6+
import com.mageddo.dnsproxyserver.utils.Booleans;
7+
import com.mageddo.utils.Files;
8+
9+
public class ConfigFlagMapper {
10+
public static Config toConfig(ConfigFlag config) {
11+
return Config.builder()
12+
.configPath(Files.pathOf(config.getConfigPath()))
13+
.registerContainerNames(config.getRegisterContainerNames())
14+
.domain(config.getDomain())
15+
.logFile(config.getLogToFile())
16+
.logLevel(ConfigFieldsValuesMapper.mapLogLevelFrom(config.getLogLevel()))
17+
.dockerHost(config.getDockerHost())
18+
.hostMachineHostname(config.getHostMachineHostname())
19+
.dpsNetworkAutoConnect(config.getDpsNetworkAutoConnect())
20+
.noEntriesResponseCode(config.getNoEntriesResponseCode())
21+
.dockerSolverHostMachineFallbackActive(config.getDockerSolverHostMachineFallbackActive())
22+
.resolvConfOverrideNameServers(config.getResolvConfOverrideNameServers())
23+
.mustConfigureDpsNetwork(config.getDpsNetwork())
24+
.webServerPort(config.getWebServerPort())
25+
.dnsServerPort(config.getDnsServerPort())
26+
.defaultDns(config.getDefaultDns())
27+
.solverRemote(SolverRemote
28+
.builder()
29+
.active(Booleans.reverseWhenNotNull(config.getNoRemoteServers()))
30+
.build()
31+
)
32+
.build();
33+
}
34+
}

src/main/java/com/mageddo/dnsproxyserver/config/dataprovider/vo/ConfigFlag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ this way you will probably not have resolution issues by acl (implies dps-networ
172172
description = "This message (default false)",
173173
usageHelp = true
174174
)
175-
private Boolean help;
175+
private boolean help;
176176

177177
@Option(
178178
names = {"-docker-solver-host-machine-fallback", "--docker-solver-host-machine-fallback"},
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.mageddo.dnsproxyserver;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.ExtendWith;
5+
import org.mockito.junit.jupiter.MockitoExtension;
6+
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
import static org.junit.jupiter.api.Assertions.assertThrows;
9+
import static org.mockito.ArgumentMatchers.any;
10+
import static org.mockito.Mockito.doThrow;
11+
import static org.mockito.Mockito.never;
12+
import static org.mockito.Mockito.spy;
13+
import static org.mockito.Mockito.verify;
14+
15+
@ExtendWith(MockitoExtension.class)
16+
class AppCompTest {
17+
18+
App app;
19+
20+
@Test
21+
void mustExitWhenHelpCmd() {
22+
// arrange
23+
final var args = new String[]{"--help"};
24+
this.app = spy(new App(args));
25+
26+
final var expectedException = this.mockExitMethod();
27+
28+
// act
29+
final var exception = assertThrows(RuntimeException.class, () -> this.app.start());
30+
31+
// assert
32+
assertEquals(expectedException.getMessage(), exception.getMessage());
33+
verify(this.app, never()).setupLogs();
34+
verify(this.app, never()).findConfig(any());
35+
}
36+
37+
38+
@Test
39+
void mustExitWhenVerrsionCmd() {
40+
// arrange
41+
final var args = new String[]{"--version"};
42+
this.app = spy(new App(args));
43+
44+
final var expectedException = this.mockExitMethod();
45+
46+
// act
47+
final var exception = assertThrows(RuntimeException.class, () -> this.app.start());
48+
49+
// assert
50+
assertEquals(expectedException.getMessage(), exception.getMessage());
51+
verify(this.app, never()).setupLogs();
52+
}
53+
54+
RuntimeException mockExitMethod() {
55+
final var expectedException = new RuntimeException("must exit");
56+
doThrow(expectedException)
57+
.when(this.app)
58+
.exitGracefully()
59+
;
60+
return expectedException;
61+
}
62+
63+
}

src/test/java/com/mageddo/dnsproxyserver/AppSettingsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.mageddo.dnsproxyserver;
22

3-
import com.mageddo.dnsproxyserver.application.AppSettings;
3+
import com.mageddo.dnsproxyserver.application.LogSettings;
44
import testing.templates.ConfigTemplates;
55
import com.mageddo.logback.LogbackUtils;
66
import org.junit.jupiter.api.Test;
@@ -14,7 +14,7 @@ void mustLogLevelInSl4jConvetion(){
1414
final var config = ConfigTemplates.defaultWithoutId();
1515

1616
// act
17-
new AppSettings().setupLogs(config);
17+
new LogSettings().setupLogs(config);
1818

1919
// assert
2020
assertEquals("WARN", LogbackUtils.getLogLevel("com.mageddo").levelStr);

0 commit comments

Comments
 (0)