Skip to content

Commit b8f0434

Browse files
committed
fix: rework Service and Listener Manager to not be static in HetznerCloud
1 parent fbf56b3 commit b8f0434

File tree

9 files changed

+213
-32
lines changed

9 files changed

+213
-32
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,5 @@ bin/
3838
### Mac OS ###
3939
.DS_Store
4040

41-
.idea
41+
.idea
42+
/src/test/java/dev/tomr/hcloud/component/TestApp.java

src/main/java/dev/tomr/hcloud/HetznerCloud.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
public class HetznerCloud {
1616
protected static final Logger logger = LogManager.getLogger();
1717

18-
private static final ListenerManager listenerManager = ListenerManager.getInstance();
19-
private static final ServiceManager serviceManager = ServiceManager.getInstance();
2018
private static final ObjectMapper objectMapper = new ObjectMapper();
2119
private static final String HETZNER_CLOUD_HOST = "https://api.hetzner.cloud/v1/";
2220

2321
private static HetznerCloud instance;
2422

23+
private final ListenerManager listenerManager = ListenerManager.getInstance();
24+
private final ServiceManager serviceManager = ServiceManager.getInstance();
25+
2526
private String apiKey;
2627
private final String host;
2728

@@ -78,15 +79,15 @@ public static ObjectMapper getObjectMapper() {
7879
* Get the internal {@code ListenerManager}. End users do not need to interact with the {@code ListenerManager}
7980
* @return The {@code ListenerManager} Instance
8081
*/
81-
public static ListenerManager getListenerManager() {
82+
public ListenerManager getListenerManager() {
8283
return listenerManager;
8384
}
8485

8586
/**
8687
* Get the internal {@code ServiceManager}. End users do not need to interact with the {@code ServiceManager}
8788
* @return The {@code ServiceManager} Instance
8889
*/
89-
public static ServiceManager getServiceManager() {
90+
public ServiceManager getServiceManager() {
9091
return serviceManager;
9192
}
9293

src/main/java/dev/tomr/hcloud/listener/ServerChangeListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ public void propertyChange(PropertyChangeEvent evt) {
2121
Server server = (Server) evt.getSource();
2222
logger.info("Server changed: " + evt.getPropertyName());
2323
logger.info("Server: " + evt.getOldValue() + " -> " + evt.getNewValue());
24-
HetznerCloud.getServiceManager().getServerService().serverNameOrLabelUpdate(evt.getPropertyName(), evt.getNewValue(), server);
24+
HetznerCloud.getInstance().getServiceManager().getServerService().serverNameOrLabelUpdate(evt.getPropertyName(), evt.getNewValue(), server);
2525
}
2626
}

src/main/java/dev/tomr/hcloud/resources/server/Server.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public Server(Integer id, String backupWindow, String created, Datacenter datace
9494
}
9595

9696
private void setupPropertyChangeListener() {
97-
propertyChangeSupport.addPropertyChangeListener(HetznerCloud.getListenerManager().getServerChangeListener());
97+
propertyChangeSupport.addPropertyChangeListener(HetznerCloud.getInstance().getListenerManager().getServerChangeListener());
9898
}
9999

100100

src/main/java/dev/tomr/hcloud/service/server/ServerService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class ServerService {
4242
* Creates a new {@code ServerService} instance
4343
*/
4444
public ServerService() {
45-
this.serviceManager = HetznerCloud.getServiceManager();
45+
this.serviceManager = HetznerCloud.getInstance().getServiceManager();
4646
}
4747

4848
public ServerService(ServiceManager serviceManager) {
@@ -113,7 +113,7 @@ private void updateAllRemoteServers() {
113113
newServerMap.put(Date.from(Instant.now()), ServerConverterUtil.transformServerDTOToServer(serverDTO));
114114
});
115115
remoteServers = newServerMap;
116-
lastFullRefresh = new Date();
116+
lastFullRefresh = Date.from(Instant.now());
117117
}
118118

119119
public Server getServer(Integer id) {

src/test/java/dev/tomr/hcloud/HetznerCloudTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,14 @@ void callingSetApiKeyUpdatesTheAPIKey() throws IllegalAccessException, NoSuchFie
6464
@DisplayName("Calling getListenerManager returns the listener manager")
6565
void callingGetListenerManagerReturnsTheListenerManager() {
6666
ListenerManager listenerManager = ListenerManager.getInstance();
67-
assertEquals(listenerManager, HetznerCloud.getListenerManager());
67+
assertEquals(listenerManager, HetznerCloud.getInstance().getListenerManager());
6868
}
6969

7070
@Test
7171
@DisplayName("Calling getServiceManager returns the service manager")
7272
void callingGetServiceManagerReturnsTheServiceManager() {
7373
ServiceManager serviceManager = ServiceManager.getInstance();
74-
assertEquals(serviceManager, HetznerCloud.getServiceManager());
74+
assertEquals(serviceManager, HetznerCloud.getInstance().getServiceManager());
7575
}
7676

7777
@Test

src/test/java/dev/tomr/hcloud/listener/ServerChangeListenerTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,19 @@ public class ServerChangeListenerTest {
2121
@Test
2222
void verifyServerChangeListenerCalledWhenSetterIsSet() {
2323
try (MockedStatic<HetznerCloud> hetznerCloud = mockStatic(HetznerCloud.class)) {
24+
HetznerCloud hetznerCloudMock = mock(HetznerCloud.class);
2425
ServerChangeListener scl = new ServerChangeListener();
2526
ServerChangeListener serverChangeListener = spy(scl);
2627
ListenerManager listenerManager = mock(ListenerManager.class);
2728
ServiceManager serviceManager = mock(ServiceManager.class);
2829
ServerService serverService = mock(ServerService.class);
2930
ArgumentCaptor<PropertyChangeEvent> captor = ArgumentCaptor.forClass(PropertyChangeEvent.class);
3031

31-
hetznerCloud.when(HetznerCloud::getServiceManager).thenReturn(serviceManager);
32-
hetznerCloud.when(HetznerCloud::getListenerManager).thenReturn(listenerManager);
32+
hetznerCloud.when(HetznerCloud::getInstance).thenReturn(hetznerCloudMock);
3333
when(listenerManager.getServerChangeListener()).thenReturn(serverChangeListener);
3434
when(serviceManager.getServerService()).thenReturn(serverService);
35+
when(hetznerCloudMock.getListenerManager()).thenReturn(listenerManager);
36+
when(hetznerCloudMock.getServiceManager()).thenReturn(serviceManager);
3537

3638
Server server = new Server();
3739
server.setName("test");

src/test/java/dev/tomr/hcloud/resources/server/ServerTest.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ void serverCanBeInstantiatedAndValuesSetCorrectly() {
114114
void callingSetLabelsUpdatesLabels() {
115115
try (MockedStatic<HetznerCloud> hetznerCloudMockedStatic = mockStatic(HetznerCloud.class);
116116
MockedStatic<ListenerManager> listenerManagerMockedStatic = mockStatic(ListenerManager.class)) {
117+
HetznerCloud hetznerCloud = mock(HetznerCloud.class);
117118
ListenerManager listenerManager = mock(ListenerManager.class);
118-
hetznerCloudMockedStatic.when(HetznerCloud::getListenerManager).thenReturn(listenerManager);
119+
hetznerCloudMockedStatic.when(HetznerCloud::getInstance).thenReturn(hetznerCloud);
120+
when(hetznerCloud.getListenerManager()).thenReturn(listenerManager);
119121

120122
Server server = new Server();
121123
server.setLabels(Map.of("label", "value"));
@@ -130,13 +132,15 @@ void callingSetLabelsSendsAnEventToTheServerChangeListener() {
130132
try (MockedStatic<HetznerCloud> hetznerCloud = mockStatic(HetznerCloud.class)) {
131133
ServerChangeListener scl = new ServerChangeListener();
132134
ServerChangeListener serverChangeListener = spy(scl);
135+
HetznerCloud hetznerCloudMock = mock(HetznerCloud.class);
133136
ListenerManager listenerManager = mock(ListenerManager.class);
134137
ServiceManager serviceManager = mock(ServiceManager.class);
135138
ServerService serverService = mock(ServerService.class);
136139
ArgumentCaptor<PropertyChangeEvent> captor = ArgumentCaptor.forClass(PropertyChangeEvent.class);
137140

138-
hetznerCloud.when(HetznerCloud::getServiceManager).thenReturn(serviceManager);
139-
hetznerCloud.when(HetznerCloud::getListenerManager).thenReturn(listenerManager);
141+
hetznerCloud.when(HetznerCloud::getInstance).thenReturn(hetznerCloudMock);
142+
when(hetznerCloudMock.getListenerManager()).thenReturn(listenerManager);
143+
when(hetznerCloudMock.getServiceManager()).thenReturn(serviceManager);
140144
when(listenerManager.getServerChangeListener()).thenReturn(serverChangeListener);
141145
when(serviceManager.getServerService()).thenReturn(serverService);
142146

@@ -153,10 +157,11 @@ void callingSetLabelsSendsAnEventToTheServerChangeListener() {
153157
@Test
154158
@DisplayName("calling setName updates the name")
155159
void callingSetNameUpdatesTheName() {
156-
try (MockedStatic<HetznerCloud> hetznerCloudMockedStatic = mockStatic(HetznerCloud.class);
157-
MockedStatic<ListenerManager> listenerManagerMockedStatic = mockStatic(ListenerManager.class)) {
160+
try (MockedStatic<HetznerCloud> hetznerCloudMockedStatic = mockStatic(HetznerCloud.class)) {
161+
HetznerCloud hetznerCloud = mock(HetznerCloud.class);
158162
ListenerManager listenerManager = mock(ListenerManager.class);
159-
hetznerCloudMockedStatic.when(HetznerCloud::getListenerManager).thenReturn(listenerManager);
163+
hetznerCloudMockedStatic.when(HetznerCloud::getInstance).thenReturn(hetznerCloud);
164+
when(hetznerCloud.getListenerManager()).thenReturn(listenerManager);
160165
Server server = new Server();
161166
server.setName("name");
162167
assertEquals("name", server.getName());
@@ -167,15 +172,17 @@ void callingSetNameUpdatesTheName() {
167172
@DisplayName("calling setName sends an event to the ServerChangeListener")
168173
void callingSetNameSendsAnEventToTheServerChangeListener() {
169174
try (MockedStatic<HetznerCloud> hetznerCloud = mockStatic(HetznerCloud.class)) {
175+
HetznerCloud hetznerCloudMock = mock(HetznerCloud.class);
170176
ServerChangeListener scl = new ServerChangeListener();
171177
ServerChangeListener serverChangeListener = spy(scl);
172178
ListenerManager listenerManager = mock(ListenerManager.class);
173179
ServiceManager serviceManager = mock(ServiceManager.class);
174180
ServerService serverService = mock(ServerService.class);
175181
ArgumentCaptor<PropertyChangeEvent> captor = ArgumentCaptor.forClass(PropertyChangeEvent.class);
176182

177-
hetznerCloud.when(HetznerCloud::getServiceManager).thenReturn(serviceManager);
178-
hetznerCloud.when(HetznerCloud::getListenerManager).thenReturn(listenerManager);
183+
hetznerCloud.when(HetznerCloud::getInstance).thenReturn(hetznerCloudMock);
184+
when(hetznerCloudMock.getListenerManager()).thenReturn(listenerManager);
185+
when(hetznerCloudMock.getServiceManager()).thenReturn(serviceManager);
179186
when(listenerManager.getServerChangeListener()).thenReturn(serverChangeListener);
180187
when(serviceManager.getServerService()).thenReturn(serverService);
181188

0 commit comments

Comments
 (0)