Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions openaev-api/src/main/java/io/openaev/xtmhub/XtmHubClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
public class XtmHubClient {
private final XtmHubConfig config;
private final HttpClientFactory httpClientFactory;
private static final String platformIdentifier = "openaev";

public XtmHubConnectivityStatus refreshRegistrationStatus(
String platformId, String platformVersion, String token) {
Expand Down Expand Up @@ -57,12 +58,13 @@ mutation RefreshPlatformRegistrationConnectivityStatus($input: RefreshPlatformRe
"input": {
"platformId": "%s",
"platformVersion": "%s",
"token": "%s"
"token": "%s",
"platformIdentifier": "%s"
}
}
}
""",
platformId, platformVersion, token);
platformId, platformVersion, token, platformIdentifier);

JsonElement element = JsonParser.parseString(mutationBody);
return new StringEntity(element.toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

public enum XtmHubConnectivityStatus {
ACTIVE("active"),
INACTIVE("inactive");
INACTIVE("inactive"),
NOT_FOUND("not_found");

public final String label;

Expand Down
20 changes: 13 additions & 7 deletions openaev-api/src/main/java/io/openaev/xtmhub/XtmHubService.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,16 @@ public PlatformSettings unregister() {

public PlatformSettings refreshConnectivity() {
PlatformSettings settings = platformSettingsService.findSettings();

if (!isRegisteredWithXtmHub(settings)) {
return settings;
}

ConnectivityCheckResult checkResult = checkConnectivityStatus(settings);
if (checkResult.status == XtmHubConnectivityStatus.NOT_FOUND) {
log.warn("Platform was not found on XTM Hub");
return platformSettingsService.deleteXTMHubRegistration();
}

handleConnectivityLossNotification(settings, checkResult);

return updateRegistrationStatus(settings, checkResult);
Expand All @@ -61,10 +65,9 @@ private ConnectivityCheckResult checkConnectivityStatus(PlatformSettings setting
xtmHubClient.refreshRegistrationStatus(
settings.getPlatformId(), settings.getPlatformVersion(), settings.getXtmHubToken());

boolean isActive = status == XtmHubConnectivityStatus.ACTIVE;
LocalDateTime lastCheck = parseLastConnectivityCheck(settings);

return new ConnectivityCheckResult(isActive, lastCheck);
return new ConnectivityCheckResult(status, lastCheck);
}

private LocalDateTime parseLastConnectivityCheck(PlatformSettings settings) {
Expand All @@ -83,7 +86,7 @@ private void handleConnectivityLossNotification(
private boolean shouldSendConnectivityLossEmail(
PlatformSettings settings, ConnectivityCheckResult checkResult) {

return !checkResult.isActive()
return checkResult.status() != XtmHubConnectivityStatus.ACTIVE
&& hasConnectivityBeenLostForTooLong(checkResult.lastCheck())
&& isEmailNotificationEnabled(settings);
}
Expand All @@ -101,12 +104,14 @@ private PlatformSettings updateRegistrationStatus(
PlatformSettings settings, ConnectivityCheckResult checkResult) {

XtmHubRegistrationStatus newStatus =
checkResult.isActive()
checkResult.status() == XtmHubConnectivityStatus.ACTIVE
? XtmHubRegistrationStatus.REGISTERED
: XtmHubRegistrationStatus.LOST_CONNECTIVITY;

LocalDateTime updatedLastCheck =
checkResult.isActive() ? LocalDateTime.now() : checkResult.lastCheck();
checkResult.status() == XtmHubConnectivityStatus.ACTIVE
? LocalDateTime.now()
: checkResult.lastCheck();

boolean shouldKeepEmailNotificationEnabled =
!shouldSendConnectivityLossEmail(settings, checkResult);
Expand All @@ -126,5 +131,6 @@ private LocalDateTime parseRegistrationDate(PlatformSettings settings) {
}

/** Encapsulates the result of a connectivity check */
private record ConnectivityCheckResult(boolean isActive, LocalDateTime lastCheck) {}
private record ConnectivityCheckResult(
XtmHubConnectivityStatus status, LocalDateTime lastCheck) {}
}
24 changes: 24 additions & 0 deletions openaev-api/src/test/java/io/openaev/xtmhub/XtmHubServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,30 @@ void refreshConnectivity_WhenTokenIsNull_ShouldReturnSettingsUnchanged() {
verifyNoInteractions(xtmHubEmailService);
}

@Test
@DisplayName("Should remove XTM Hub registration when platform is not found in the hub")
void refreshConnectivity_WhenPlatformIsNotFound_ShouldRemoveRegistration() {
// Given
String token = "valid-token";
String platformId = "platform-123";
String platformVersion = "1.0.0";

mockSettings.setXtmHubToken(token);
mockSettings.setPlatformId(platformId);
mockSettings.setPlatformVersion(platformVersion);

when(platformSettingsService.findSettings()).thenReturn(mockSettings);
when(xtmHubClient.refreshRegistrationStatus(platformId, platformVersion, token))
.thenReturn(XtmHubConnectivityStatus.NOT_FOUND);

// When
xtmHubService.refreshConnectivity();

// Then
verify(platformSettingsService).deleteXTMHubRegistration();
verifyNoInteractions(xtmHubEmailService);
}

@Test
@DisplayName("Should update registration as REGISTERED when connectivity is ACTIVE")
void refreshConnectivity_WhenConnectivityIsActive_ShouldUpdateAsRegistered() {
Expand Down