Skip to content

Commit 4bd47ce

Browse files
DATAGO-116001 code complete
1 parent 0a337d0 commit 4bd47ce

File tree

7 files changed

+86
-38
lines changed

7 files changed

+86
-38
lines changed

service/application/src/main/java/com/solace/maas/ep/event/management/agent/command/CommandManager.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.solace.maas.ep.event.management.agent.plugin.command.model.CommandRequest;
1010
import com.solace.maas.ep.event.management.agent.plugin.command.model.CommandResult;
1111
import com.solace.maas.ep.event.management.agent.plugin.command.model.JobStatus;
12+
import com.solace.maas.ep.event.management.agent.plugin.common.util.EnvironmentUtil;
1213
import com.solace.maas.ep.event.management.agent.plugin.service.MessagingServiceDelegateService;
1314
import com.solace.maas.ep.event.management.agent.plugin.solace.processor.semp.SempClient;
1415
import com.solace.maas.ep.event.management.agent.plugin.solace.processor.semp.SolaceHttpSemp;
@@ -53,6 +54,7 @@
5354
@Slf4j
5455
@Service
5556
@ConditionalOnProperty(name = "event-portal.gateway.messaging.standalone", havingValue = "false")
57+
@SuppressWarnings({"PMD.GodClass"})
5658
public class CommandManager {
5759
public static final String ERROR_EXECUTING_COMMAND = "Error executing command";
5860
private final TerraformManager terraformManager;
@@ -66,6 +68,7 @@ public class CommandManager {
6668
private final SempPatchCommandManager sempPatchCommandManager;
6769
private final SempGetCommandManager sempGetCommandManager;
6870
private final TerraformLogProcessingService terraformLoggingService;
71+
private final EnvironmentUtil environmentUtil;
6972

7073
public CommandManager(TerraformManager terraformManager,
7174
CommandMapper commandMapper,
@@ -77,7 +80,8 @@ public CommandManager(TerraformManager terraformManager,
7780
final SempDeleteCommandManager sempDeleteCommandManager,
7881
TerraformLogProcessingService terraformLoggingService,
7982
SempPatchCommandManager sempPatchCommandManager,
80-
SempGetCommandManager sempGetCommandManager) {
83+
SempGetCommandManager sempGetCommandManager,
84+
EnvironmentUtil environmentUtil) {
8185
this.terraformManager = terraformManager;
8286
this.commandMapper = commandMapper;
8387
this.commandPublisher = commandPublisher;
@@ -90,6 +94,7 @@ public CommandManager(TerraformManager terraformManager,
9094
this.terraformLoggingService = terraformLoggingService;
9195
this.sempPatchCommandManager = sempPatchCommandManager;
9296
this.sempGetCommandManager = sempGetCommandManager;
97+
this.environmentUtil = environmentUtil;
9398
}
9499

95100
public void execute(CommandMessage request) {
@@ -116,6 +121,10 @@ public void handleError(Exception e, CommandMessage message) {
116121

117122
@SuppressWarnings("PMD")
118123
private void configPush(CommandRequest request) {
124+
125+
if (environmentUtil.isCustomCACertPresent()) {
126+
log.info("Custom CA certificates present. Using combined truststore with default and custom CA certificates for configPush operation.");
127+
}
119128
List<Path> executionLogFilesToClean = new ArrayList<>();
120129
boolean attachErrorToTerraformCommand = false;
121130
try {
@@ -136,6 +145,7 @@ private void configPush(CommandRequest request) {
136145
log.info("Skipping TLS verification for config push to serviceId {}.", request.getServiceId());
137146
}
138147

148+
139149
for (CommandBundle bundle : request.getCommandBundles()) {
140150
boolean exitEarlyOnFailedCommand = bundle.getExitOnFailure();
141151

service/application/src/main/java/com/solace/maas/ep/event/management/agent/scanManager/ScanManager.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.solace.maas.ep.common.messages.ScanStatusMessage;
55
import com.solace.maas.ep.common.model.ScanType;
66
import com.solace.maas.ep.event.management.agent.config.eventPortal.EventPortalProperties;
7+
import com.solace.maas.ep.event.management.agent.plugin.common.util.EnvironmentUtil;
78
import com.solace.maas.ep.event.management.agent.plugin.constants.RouteConstants;
89
import com.solace.maas.ep.event.management.agent.plugin.constants.ScanStatus;
910
import com.solace.maas.ep.event.management.agent.plugin.manager.loader.PluginLoader;
@@ -46,19 +47,25 @@ public class ScanManager {
4647
// This is an optional dependency since it is not available in standalone mode.
4748
// If the bean is not present, the publisher will not be used.
4849
private final Optional<ScanStatusPublisher> scanStatusPublisherOpt;
50+
private final EnvironmentUtil environmentUtil;
4951

5052
@Autowired
5153
public ScanManager(MessagingServiceDelegateServiceImpl messagingServiceDelegateService,
5254
ScanService scanService,
5355
EventPortalProperties eventPortalProperties,
54-
Optional<ScanStatusPublisher> scanStatusPublisher) {
56+
Optional<ScanStatusPublisher> scanStatusPublisher,
57+
EnvironmentUtil environmentUtil) {
5558
this.messagingServiceDelegateService = messagingServiceDelegateService;
5659
this.scanService = scanService;
5760
this.scanStatusPublisherOpt = scanStatusPublisher;
5861
runtimeAgentId = eventPortalProperties.getRuntimeAgentId();
62+
this.environmentUtil = environmentUtil;
5963
}
6064

6165
public String scan(ScanRequestBO scanRequestBO) {
66+
if (environmentUtil.isCustomCACertPresent()) {
67+
log.info("Custom CA certificates present. Using combined truststore with default and custom CA certificates for scan operation.");
68+
}
6269
Validate.notBlank(scanRequestBO.getOrgId(), " Organization ID cannot be null or empty");
6370
String messagingServiceId = scanRequestBO.getMessagingServiceId();
6471
String scanId = scanRequestBO.getScanId();

service/application/src/test/java/com/solace/maas/ep/event/management/agent/TestConfig.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.solace.maas.ep.event.management.agent.plugin.service.MessagingServiceDelegateService;
2020
import com.solace.maas.ep.event.management.agent.plugin.terraform.manager.TerraformLogProcessingService;
2121
import com.solace.maas.ep.event.management.agent.plugin.terraform.manager.TerraformManager;
22+
import com.solace.maas.ep.event.management.agent.plugin.common.util.EnvironmentUtil;
2223
import com.solace.maas.ep.event.management.agent.plugin.vmr.VmrProcessor;
2324
import com.solace.maas.ep.event.management.agent.processor.CommandLogStreamingProcessor;
2425
import com.solace.maas.ep.event.management.agent.publisher.CommandLogsPublisher;
@@ -70,8 +71,15 @@ public SolaceConfiguration solaceConfiguration() {
7071

7172
@Bean
7273
@Primary
73-
public VMRProperties vmrProperties(EventPortalPluginProperties eventPortalPluginProperties) {
74-
return new VMRProperties(eventPortalPluginProperties);
74+
public EnvironmentUtil environmentUtil() {
75+
return mock(EnvironmentUtil.class);
76+
}
77+
78+
@Bean
79+
@Primary
80+
public VMRProperties vmrProperties(EventPortalPluginProperties eventPortalPluginProperties,
81+
EnvironmentUtil environmentUtil) {
82+
return new VMRProperties(eventPortalPluginProperties, environmentUtil);
7583
}
7684

7785
@Bean
@@ -177,7 +185,8 @@ public CommandManager getCommandManager(TerraformManager terraformManager,
177185
SempDeleteCommandManager sempDeleteCommandManager,
178186
TerraformLogProcessingService terraformLogProcessingService,
179187
SempPatchCommandManager sempPatchCommandManager,
180-
SempGetCommandManager sempGetCommandManager) {
188+
SempGetCommandManager sempGetCommandManager,
189+
EnvironmentUtil environmentUtil) {
181190
return new CommandManager(
182191
terraformManager,
183192
commandMapper,
@@ -189,7 +198,8 @@ public CommandManager getCommandManager(TerraformManager terraformManager,
189198
sempDeleteCommandManager,
190199
terraformLogProcessingService,
191200
sempPatchCommandManager,
192-
sempGetCommandManager
201+
sempGetCommandManager,
202+
environmentUtil
193203
);
194204
}
195205

service/application/src/test/java/com/solace/maas/ep/event/management/agent/plugin/config/VMRPropertiesTests.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.solace.maas.ep.event.management.agent.plugin.config.eventPortal.GatewayProperties;
66
import com.solace.maas.ep.event.management.agent.plugin.messagingService.MessagingServiceConnectionProperties;
77
import com.solace.maas.ep.event.management.agent.plugin.messagingService.MessagingServiceUsersProperties;
8+
import com.solace.maas.ep.event.management.agent.plugin.common.util.EnvironmentUtil;
9+
import com.solace.messaging.config.SolaceProperties;
810
import lombok.SneakyThrows;
911
import org.junit.jupiter.api.AfterEach;
1012
import org.junit.jupiter.api.BeforeEach;
@@ -21,11 +23,6 @@
2123

2224
import static org.assertj.core.api.Assertions.assertThat;
2325
import static org.assertj.core.api.Assertions.assertThatThrownBy;
24-
import static org.mockito.ArgumentMatchers.any;
25-
import static org.mockito.Mockito.doNothing;
26-
import static org.mockito.Mockito.never;
27-
import static org.mockito.Mockito.spy;
28-
import static org.mockito.Mockito.verify;
2926
import static org.mockito.Mockito.when;
3027

3128
@ActiveProfiles("TEST")
@@ -41,6 +38,9 @@ class VMRPropertiesTests {
4138
@Mock
4239
private GatewayMessagingProperties gatewayMessagingProperties;
4340

41+
@Mock
42+
private EnvironmentUtil environmentUtil;
43+
4444
// Class under test
4545
private VMRProperties vmrProperties;
4646

@@ -51,7 +51,8 @@ void setUp() {
5151
// MockitoExtension handles mock initialization
5252
when(eventPortalPluginProperties.getGateway()).thenReturn(gatewayProperties);
5353
when(gatewayProperties.getMessaging()).thenReturn(gatewayMessagingProperties);
54-
vmrProperties = new VMRProperties(eventPortalPluginProperties);
54+
55+
vmrProperties = new VMRProperties(eventPortalPluginProperties, environmentUtil);
5556

5657
// Backup system properties
5758
systemPropertiesBackup = new Properties();
@@ -263,35 +264,35 @@ void testNoGatewayConnectionProperties() {
263264

264265
@Test
265266
@SneakyThrows
266-
void testSetDefaultTrustStoreCalledWhenCustomCaCertsPresent() {
267-
// Spy on vmrProperties to mock getCustomCaCertsPresentEnv and verify setDefaultTrustStore is called
268-
VMRProperties spyVmrProperties = spy(vmrProperties);
269-
when(spyVmrProperties.isCustomCACertConfigured()).thenReturn(true);
270-
doNothing().when(spyVmrProperties).setDefaultTrustStore(any(Properties.class));
267+
void testConfigureDefaultTrustStoreWhenCustomCaCertsPresent() {
268+
// Mock environmentUtil to return true (custom CA certs are configured)
269+
when(environmentUtil.isCustomCACertPresent()).thenReturn(true);
271270

272271
MessagingServiceConnectionProperties connectionProps = createConnectionProperties(false, null, null, null, null, null);
273272
when(gatewayMessagingProperties.getConnections()).thenReturn(Collections.singletonList(connectionProps));
274273

275-
spyVmrProperties.getVmrProperties();
274+
Properties properties = vmrProperties.getVmrProperties();
276275

277-
// Verify setDefaultTrustStore was called
278-
verify(spyVmrProperties).setDefaultTrustStore(any(Properties.class));
276+
// Verify that truststore path is set when custom CA certs are present
277+
assertThat(properties.getProperty(SolaceProperties.TransportLayerSecurityProperties.TRUST_STORE_PATH))
278+
.isNotNull()
279+
.endsWith("cacerts");
279280
}
280281

281282
@Test
282283
@SneakyThrows
283-
void testSetDefaultTrustStoreNotCalledWhenCustomCaCertsNotPresent() {
284-
// Spy on vmrProperties to mock getCustomCaCertsPresentEnv and verify setDefaultTrustStore is NOT called
285-
VMRProperties spyVmrProperties = spy(vmrProperties);
286-
when(spyVmrProperties.isCustomCACertConfigured()).thenReturn(false);
284+
void testConfigureDefaultTrustStoreWhenCustomCaCertsNotPresent() {
285+
// Mock environmentUtil to return false (custom CA certs NOT configured)
286+
when(environmentUtil.isCustomCACertPresent()).thenReturn(false);
287287

288288
MessagingServiceConnectionProperties connectionProps = createConnectionProperties(false, null, null, null, null, null);
289289
when(gatewayMessagingProperties.getConnections()).thenReturn(Collections.singletonList(connectionProps));
290290

291-
spyVmrProperties.getVmrProperties();
291+
Properties properties = vmrProperties.getVmrProperties();
292292

293-
// Verify setDefaultTrustStore was NOT called
294-
verify(spyVmrProperties, never()).setDefaultTrustStore(any(Properties.class));
293+
// Verify that truststore path is NOT set when custom CA certs are not present
294+
assertThat(properties.getProperty(SolaceProperties.TransportLayerSecurityProperties.TRUST_STORE_PATH))
295+
.isNull();
295296
}
296297

297298
}

service/application/src/test/java/com/solace/maas/ep/event/management/agent/scanManager/ScanManagerHandleErrorTest.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.solace.maas.ep.common.model.ScanType;
66
import com.solace.maas.ep.event.management.agent.TestConfig;
77
import com.solace.maas.ep.event.management.agent.config.eventPortal.EventPortalProperties;
8+
import com.solace.maas.ep.event.management.agent.plugin.common.util.EnvironmentUtil;
89
import com.solace.maas.ep.event.management.agent.publisher.ScanStatusPublisher;
910
import com.solace.maas.ep.event.management.agent.service.MessagingServiceDelegateServiceImpl;
1011
import com.solace.maas.ep.event.management.agent.service.ScanService;
@@ -38,6 +39,9 @@ class ScanManagerHandleErrorTest {
3839
@Mock
3940
private ScanStatusPublisher scanStatusPublisher;
4041

42+
@Mock
43+
private EnvironmentUtil environmentUtil;
44+
4145
@Test
4246
void testScanManagerConnectedHandleError(){
4347
when(eventPortalProperties.getOrganizationId()).thenReturn("orgId");
@@ -49,7 +53,8 @@ void testScanManagerConnectedHandleError(){
4953
messagingServiceDelegateService,
5054
scanService,
5155
eventPortalProperties,
52-
Optional.of(scanStatusPublisher)
56+
Optional.of(scanStatusPublisher),
57+
environmentUtil
5358
);
5459
scanManagerUnderTest.handleError(mockEx,createScanCommandMessage());
5560
verify(scanStatusPublisher, times(1)).sendOverallScanStatus(any(),any());
@@ -66,7 +71,8 @@ void testScanManagerStandaloneHandleError(){
6671
messagingServiceDelegateService,
6772
scanService,
6873
eventPortalProperties,
69-
Optional.empty()
74+
Optional.empty(),
75+
environmentUtil
7076
);
7177
// should just do "nothing" and not throw an exception when scanStatusPublisher is not present
7278
assertDoesNotThrow(() ->
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.solace.maas.ep.event.management.agent.plugin.common.util;
2+
3+
import org.springframework.stereotype.Component;
4+
5+
@Component
6+
public class EnvironmentUtil {
7+
8+
/**
9+
* Checks if custom CA certificates are present via the CUSTOM_CA_CERTS_PRESENT environment variable.
10+
* Currently, Only Private CEMAs are capable of importing and using custom ca certs for operating ep runtime operations
11+
* on brokers that may be setup with certs signed by custom ca
12+
* @return true if CUSTOM_CA_CERTS_PRESENT is set to "1", false otherwise
13+
*/
14+
public boolean isCustomCACertPresent() {
15+
String customCaCertsPresent = System.getenv("CUSTOM_CA_CERTS_PRESENT");
16+
return "1".equals(customCaCertsPresent);
17+
}
18+
}

service/plugin/src/main/java/com/solace/maas/ep/event/management/agent/plugin/config/VMRProperties.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.solace.maas.ep.event.management.agent.plugin.jacoco.ExcludeFromJacocoGeneratedReport;
55
import com.solace.maas.ep.event.management.agent.plugin.messagingService.MessagingServiceConnectionProperties;
66
import com.solace.maas.ep.event.management.agent.plugin.messagingService.MessagingServiceUsersProperties;
7+
import com.solace.maas.ep.event.management.agent.plugin.common.util.EnvironmentUtil;
78
import com.solace.messaging.config.SolaceConstants;
89
import com.solace.messaging.config.SolaceProperties;
910
import com.solacesystems.solclientj.core.handle.SessionHandle;
@@ -41,6 +42,7 @@ public class VMRProperties {
4142
private static final String SOLACE_PROXY_PASSWORD = "solace.proxy.password";
4243

4344
private final EventPortalPluginProperties eventPortalPluginProperties;
45+
private final EnvironmentUtil environmentUtil;
4446

4547
/**
4648
* The host used to connect to the VMR
@@ -77,8 +79,9 @@ public class VMRProperties {
7779
*/
7880

7981
@Autowired
80-
public VMRProperties(EventPortalPluginProperties eventPortalPluginProperties) {
82+
public VMRProperties(EventPortalPluginProperties eventPortalPluginProperties, EnvironmentUtil environmentUtil) {
8183
this.eventPortalPluginProperties = eventPortalPluginProperties;
84+
this.environmentUtil = environmentUtil;
8285
}
8386

8487
public void parseVmrProperties() {
@@ -137,21 +140,14 @@ private void configureDefaultTrustStore(Properties properties) {
137140
return;
138141
}
139142

140-
if (!isCustomCACertConfigured()) {
143+
if (!environmentUtil.isCustomCACertPresent()) {
141144
log.debug("Custom CA certificates not present. Skipping explicit default truststore configuration.");
142145
return;
143146
}
144147

145148
setDefaultTrustStore(properties);
146149
}
147150

148-
149-
boolean isCustomCACertConfigured() {
150-
String customCaCertsPresent = System.getenv("CUSTOM_CA_CERTS_PRESENT");
151-
152-
return ("1".equals(customCaCertsPresent));
153-
}
154-
155151
void setDefaultTrustStore(Properties properties) {
156152
String javaHome = System.getProperty("java.home");
157153
if (StringUtils.isBlank(javaHome)) {

0 commit comments

Comments
 (0)