Skip to content

Commit 66f3e11

Browse files
authored
Creating config dir when it is absent (mageddo#700)
1 parent 2481f39 commit 66f3e11

5 files changed

Lines changed: 87 additions & 4 deletions

File tree

RELEASE-NOTES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 5.9.1
2+
* Creating the config file dir when it not exists, #699.
3+
14
## 5.9.0
25
* Answer all docker service replicas IPs, see #434.
36

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=5.9.0-snapshot
1+
version=5.9.1-snapshot

src/main/java/com/mageddo/dnsproxyserver/config/dataformat/v3/file/ConfigFileDAOImpl.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,16 @@
1616

1717
import lombok.RequiredArgsConstructor;
1818

19+
import lombok.extern.slf4j.Slf4j;
20+
21+
import org.apache.commons.io.FileUtils;
22+
23+
import static com.mageddo.utils.Files.createDirectories;
24+
import static com.mageddo.utils.Files.createParentDirectories;
1925
import static com.mageddo.utils.Files.deleteQuietly;
2026
import static com.mageddo.utils.Files.findExtension;
2127

28+
@Slf4j
2229
@Singleton
2330
@RequiredArgsConstructor(onConstructor_ = @Inject)
2431
public class ConfigFileDAOImpl implements ConfigFileDAO {
@@ -64,11 +71,17 @@ public void delete() {
6471
deleteQuietly(this.configFilePathDAO.find());
6572
}
6673

67-
private Path findFilePath() {
68-
return this.configFilePathDAO.find();
74+
Path findFilePath() {
75+
final var path = this.configFilePathDAO.find();
76+
final var dir = path.getParent();
77+
if (!Files.exists(dir)) {
78+
createDirectories(dir);
79+
log.info("status=createdConfigPath, path={}", path);
80+
}
81+
return path;
6982
}
7083

71-
private Converter findConverter(Path path) {
84+
Converter findConverter(Path path) {
7285
final var extension = findExtension(path);
7386
return this.converterFactory.find(extension);
7487
}

src/main/java/com/mageddo/utils/Files.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,20 @@ public static String findExtension(Path path) {
7575
public static void deleteQuietly(Path path) {
7676
FileUtils.deleteQuietly(path.toFile());
7777
}
78+
79+
public static void createParentDirectories(Path path) {
80+
try {
81+
FileUtils.createParentDirectories(path.toFile());
82+
} catch (IOException e) {
83+
throw new UncheckedIOException(e);
84+
}
85+
}
86+
87+
public static void createDirectories(Path dir) {
88+
try {
89+
java.nio.file.Files.createDirectories(dir);
90+
} catch (IOException e) {
91+
throw new UncheckedIOException(e);
92+
}
93+
}
7894
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.mageddo.dnsproxyserver.config.dataformat.v3.file;
2+
3+
import dagger.sheath.InjectMock;
4+
5+
import org.assertj.core.api.Assertions;
6+
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.api.extension.ExtendWith;
8+
import org.junit.jupiter.api.io.TempDir;
9+
import org.mockito.InjectMocks;
10+
import org.mockito.Mock;
11+
import org.mockito.Mockito;
12+
import org.mockito.Spy;
13+
import org.mockito.junit.jupiter.MockitoExtension;
14+
15+
import java.io.IOException;
16+
import java.nio.file.Path;
17+
import java.util.UUID;
18+
19+
import static org.assertj.core.api.Assertions.assertThat;
20+
import static org.junit.jupiter.api.Assertions.*;
21+
import static org.mockito.Mockito.doReturn;
22+
23+
@ExtendWith(MockitoExtension.class)
24+
class ConfigFileDAOImplTest {
25+
26+
@Mock
27+
ConfigFilePathDAO configFilePathDAO;
28+
29+
@Spy
30+
@InjectMocks
31+
ConfigFileDAOImpl dao;
32+
33+
@Test
34+
void mustHaveSureThePathExistsBeforeReturnIt(@TempDir Path tempDir) {
35+
36+
37+
final var confDir = tempDir.resolve(String.valueOf(UUID.randomUUID()))
38+
.resolve("conf.json");
39+
40+
doReturn(confDir)
41+
.when(this.configFilePathDAO)
42+
.find()
43+
;
44+
45+
final var path = this.dao.findFilePath();
46+
47+
assertThat(path.getParent()).exists();
48+
49+
}
50+
51+
}

0 commit comments

Comments
 (0)