Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
5 changes: 3 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 @@ -57,12 +57,13 @@ mutation RefreshPlatformRegistrationConnectivityStatus($input: RefreshPlatformRe
"input": {
"platformId": "%s",
"platformVersion": "%s",
"token": "%s"
"token": "%s",
"platformIdentifier": "%s"
}
}
}
""",
platformId, platformVersion, token);
platformId, platformVersion, token, "openaev");

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
19 changes: 12 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,15 @@ 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) {
return platformSettingsService.deleteXTMHubRegistration();
}

handleConnectivityLossNotification(settings, checkResult);

return updateRegistrationStatus(settings, checkResult);
Expand All @@ -61,10 +64,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 +85,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 +103,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 +130,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
Loading