Skip to content

Commit 2a8c3f3

Browse files
authored
Refactoring (mageddo#604)
* revert * refactoring * refactoring test * breaking tests
1 parent 4e99395 commit 2a8c3f3

File tree

7 files changed

+114
-59
lines changed

7 files changed

+114
-59
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ dependencies {
6868
implementation('dev.failsafe:failsafe:3.3.1')
6969
implementation("io.github.resilience4j:resilience4j-circuitbreaker:2.2.0")
7070

71-
implementation('com.github.docker-java:docker-java-core:3.4.0')
72-
implementation('com.github.docker-java:docker-java-transport-httpclient5:3.4.0')
71+
implementation('com.github.docker-java:docker-java-core:3.3.4')
72+
implementation('com.github.docker-java:docker-java-transport-httpclient5:3.3.4')
7373

7474
implementation('info.picocli:picocli:4.7.6')
7575
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1')

src/main/java/com/mageddo/dnsproxyserver/docker/dataprovider/ContainerFacade.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@
44
import com.github.dockerjava.api.model.Container;
55

66
import java.util.List;
7-
import java.util.Optional;
7+
import java.util.stream.Stream;
88

99
public interface ContainerFacade {
1010

1111
Container findById(String containerId);
1212

1313
List<Container> findActiveContainers();
1414

15-
Optional<InspectContainerResponse> inspect(String id);
15+
InspectContainerResponse inspect(String id);
16+
17+
InspectContainerResponse safeInspect(String id);
18+
19+
Stream<InspectContainerResponse> inspectFilteringValidContainers(List<Container> containers);
1620
}

src/main/java/com/mageddo/dnsproxyserver/docker/dataprovider/ContainerFacadeDefault.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
import javax.inject.Singleton;
1414
import java.util.Collections;
1515
import java.util.List;
16-
import java.util.Optional;
16+
import java.util.Objects;
17+
import java.util.stream.Stream;
1718

1819
@Slf4j
1920
@Default
@@ -46,15 +47,29 @@ public List<Container> findActiveContainers() {
4647
}
4748

4849
@Override
49-
public Optional<InspectContainerResponse> inspect(String id) {
50+
public InspectContainerResponse inspect(String id) {
51+
return this.dockerClient.inspectContainerCmd(id).exec();
52+
}
53+
54+
@Override
55+
public InspectContainerResponse safeInspect(String id) {
5056
try {
51-
return Optional.of(this.dockerClient.inspectContainerCmd(id).exec());
57+
return this.inspect(id);
5258
} catch (NotFoundException e) {
5359
log.warn("status=container-not-found, action=inspect-container, containerId={}", id);
5460
} catch (Exception e) {
5561
log.warn("status=unexpected-exception, action=inspect-container, containerId={}, msg={}", id, e.getMessage(), e);
5662
}
63+
return null;
64+
}
5765

58-
return Optional.empty();
66+
@Override
67+
public Stream<InspectContainerResponse> inspectFilteringValidContainers(List<Container> containers) {
68+
return containers
69+
.stream()
70+
.map(com.github.dockerjava.api.model.Container::getId)
71+
.map(this::safeInspect)
72+
.filter(Objects::nonNull)
73+
;
5974
}
6075
}

src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/ContainerDAODefault.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ public class ContainerDAODefault implements ContainerDAO {
2626

2727
@Override
2828
public List<Container> findActiveContainersMatching(HostnameQuery query) {
29-
return this.containerFacade.findActiveContainers()
30-
.stream()
31-
.flatMap(it -> this.containerFacade.inspect(it.getId()).stream())
29+
final var containersToFilter = this.containerFacade.findActiveContainers();
30+
return this.containerFacade.inspectFilteringValidContainers(containersToFilter)
3231
.filter(ContainerHostnameMatcher.buildPredicate(query))
3332
.map(ContainerMapper::of)
3433
.toList();

src/main/java/com/mageddo/dnsproxyserver/solver/docker/dataprovider/DpsContainerDAODefault.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ public Container findDPSContainer() {
5252
} else {
5353
log.debug("dpsContainersFound={}", containers.size());
5454
}
55-
return containers
56-
.stream()
55+
return this.containerFacade.inspectFilteringValidContainers(containers)
5756
.findFirst()
58-
.flatMap(it -> this.containerFacade.inspect(it.getId()))
5957
.map(ContainerMapper::of)
6058
.orElse(null);
6159
}

src/test/java/com/mageddo/dnsproxyserver/docker/ContainerFacadeDefaultTest.java renamed to src/test/java/com/mageddo/dnsproxyserver/docker/dataprovider/ContainerFacadeDefaultCompTest.java

Lines changed: 7 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
1-
package com.mageddo.dnsproxyserver.docker;
1+
package com.mageddo.dnsproxyserver.docker.dataprovider;
22

33
import com.github.dockerjava.api.DockerClient;
4-
import com.github.dockerjava.api.exception.NotFoundException;
54
import com.github.dockerjava.api.model.Container;
6-
import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacadeDefault;
7-
import testing.templates.docker.ContainerTemplates;
8-
import testing.templates.docker.DockerClientTemplates;
9-
105
import org.junit.jupiter.api.BeforeEach;
116
import org.junit.jupiter.api.Test;
127
import org.junit.jupiter.api.extension.ExtendWith;
138
import org.mockito.junit.jupiter.MockitoExtension;
9+
import testing.templates.docker.ContainerTemplates;
10+
import testing.templates.docker.DockerClientTemplates;
1411
import testing.templates.docker.InspectContainerResponseTemplates;
1512

1613
import java.util.ArrayList;
17-
import java.util.Optional;
1814

1915
import static org.junit.jupiter.api.Assertions.assertEquals;
2016
import static org.junit.jupiter.api.Assertions.assertNull;
2117
import static org.mockito.Mockito.doReturn;
22-
import static org.mockito.Mockito.doThrow;
18+
import static org.mockito.Mockito.spy;
2319

2420
@ExtendWith(MockitoExtension.class)
25-
class ContainerFacadeDefaultTest {
21+
class ContainerFacadeDefaultCompTest {
2622

2723
ContainerFacadeDefault dao;
2824

@@ -31,7 +27,7 @@ class ContainerFacadeDefaultTest {
3127
@BeforeEach
3228
void before(){
3329
this.dockerClient = DockerClientTemplates.buildSpy();
34-
this.dao = new ContainerFacadeDefault(this.dockerClient);
30+
this.dao = spy(new ContainerFacadeDefault(this.dockerClient));
3531
}
3632

3733
@Test
@@ -108,45 +104,11 @@ void mustInspectContainerById(){
108104
;
109105

110106
// act
111-
final var inspectResponse = this.dao.inspect(containerId).orElseThrow();
107+
final var inspectResponse = this.dao.inspect(containerId);
112108

113109
// assert
114110
assertEquals(expected, inspectResponse);
115111
}
116112

117-
@Test
118-
void mustNotThrowErrorWhenInspectContainerNotFound(){
119-
// arrange
120-
final var containerId = "a39bba9a8bab2899";
121113

122-
final var inspectContainerCmd = this.dockerClient.inspectContainerCmd(containerId);
123-
doThrow(new NotFoundException("Container not found"))
124-
.when(inspectContainerCmd)
125-
.exec()
126-
;
127-
128-
// act
129-
final var container = this.dao.inspect(containerId);
130-
131-
// assert
132-
assertEquals(Optional.empty(), container);
133-
}
134-
135-
@Test
136-
void mustNotThrowErrorWhenInspectContainerFails(){
137-
// arrange
138-
final var containerId = "a39bba9a8bab28aa";
139-
140-
final var inspectContainerCmd = this.dockerClient.inspectContainerCmd(containerId);
141-
doThrow(new NullPointerException("Unexpected failure"))
142-
.when(inspectContainerCmd)
143-
.exec()
144-
;
145-
146-
// act
147-
final var container = this.dao.inspect(containerId);
148-
149-
// assert
150-
assertEquals(Optional.empty(), container);
151-
}
152114
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.mageddo.dnsproxyserver.docker.dataprovider;
2+
3+
import com.github.dockerjava.api.exception.NotFoundException;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
import org.mockito.InjectMocks;
7+
import org.mockito.Spy;
8+
import org.mockito.junit.jupiter.MockitoExtension;
9+
import testing.templates.docker.ContainerTemplates;
10+
import testing.templates.docker.InspectContainerResponseTemplates;
11+
12+
import java.util.List;
13+
14+
import static org.junit.jupiter.api.Assertions.assertEquals;
15+
import static org.junit.jupiter.api.Assertions.assertNull;
16+
import static org.mockito.Mockito.doReturn;
17+
import static org.mockito.Mockito.doThrow;
18+
19+
@ExtendWith(MockitoExtension.class)
20+
class ContainerFacadeDefaultTest {
21+
22+
@Spy
23+
@InjectMocks
24+
ContainerFacadeDefault facade;
25+
26+
@Test
27+
void mustNotThrowErrorWhenInspectContainerGetNotFound() {
28+
// arrange
29+
final var containerId = "a39bba9a8bab2899";
30+
31+
doThrow(new NotFoundException("Container not found"))
32+
.when(this.facade).inspect(containerId)
33+
;
34+
35+
// act
36+
final var container = this.facade.safeInspect(containerId);
37+
38+
// assert
39+
assertNull(container);
40+
}
41+
42+
@Test
43+
void mustNotThrowErrorWhenInspectContainerFails() {
44+
// arrange
45+
final var containerId = "a39bba9a8bab28aa";
46+
47+
doThrow(new NullPointerException("Unexpected failure"))
48+
.when(this.facade).inspect(containerId)
49+
;
50+
51+
// act
52+
final var container = this.facade.safeInspect(containerId);
53+
54+
// assert
55+
assertNull(container);
56+
}
57+
58+
@Test
59+
void mustFilterNullContainerInspections() {
60+
final var c1 = ContainerTemplates.buildRegularContainerCoffeeMakerCheckout();
61+
final var c2 = ContainerTemplates.buildDpsContainer();
62+
final var containers = List.of(c1, c2);
63+
64+
doReturn(InspectContainerResponseTemplates.withDpsLabel())
65+
.when(this.facade).safeInspect(c1.getId())
66+
;
67+
68+
doReturn(null)
69+
.when(this.facade).safeInspect(c2.getId())
70+
;
71+
72+
final var filtered = this.facade.inspectFilteringValidContainers(containers)
73+
.toList();
74+
75+
assertEquals(1, filtered.size());
76+
}
77+
}

0 commit comments

Comments
 (0)