diff options
author | Matteo Mara <matteo.mara@sonarsource.com> | 2025-07-10 15:17:54 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2025-07-10 20:04:03 +0000 |
commit | a3f87dfda6d8ad6f6f36dc36cb155c88f9a8f808 (patch) | |
tree | 01930455a676ad8d44a8501d689ddcbe18f3da95 /server | |
parent | dbc586710357eac8bbe746bd859fe64187f42204 (diff) | |
download | sonarqube-master.tar.gz sonarqube-master.zip |
Diffstat (limited to 'server')
2 files changed, 23 insertions, 81 deletions
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/ActiveVersionEvaluator.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/ActiveVersionEvaluator.java index 2f045a824ed..01e86f3a35e 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/ActiveVersionEvaluator.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/ActiveVersionEvaluator.java @@ -19,12 +19,12 @@ */ package org.sonar.server.platform.ws; -import com.google.common.collect.Lists; +import java.time.LocalDate; import java.util.Calendar; import java.util.Comparator; import java.util.Date; -import java.util.List; import java.util.SortedSet; +import org.sonar.api.internal.MetadataLoader; import org.sonar.api.utils.System2; import org.sonar.core.platform.SonarQubeVersion; import org.sonar.updatecenter.common.Product; @@ -67,11 +67,11 @@ public class ActiveVersionEvaluator { return initialLtaReleaseDate.after(c.getTime()); } else { - return compareWithoutPatchVersion(installedVersion, findPreviousReleaseIgnoringPatch(allReleases).getVersion()) >= 0; + // if installed version is not LTA or past LTA, check if it is still supported + return LocalDate.now().isBefore(LocalDate.parse(MetadataLoader.loadSqVersionEol(system2))); } } - private static int compareWithoutPatchVersion(Version v1, Version v2) { return COMPARATOR.compare(v1, v2); } @@ -85,24 +85,4 @@ public class ActiveVersionEvaluator { )); } - private static Release findPreviousReleaseIgnoringPatch(SortedSet<Release> releases) { - if (!releases.isEmpty()) { - Release refRelease = releases.last(); - int patchesOfRefRelease = 0; - List<Release> sublist = Lists.reverse(releases.stream().toList()); - for (Release release : sublist) { - int versionComparison = compareWithoutPatchVersion(release.getVersion(), refRelease.getVersion()); - if (versionComparison < 0) { - return release; - } else if (versionComparison == 0) { - patchesOfRefRelease++; - } - } - // if all releases have the same version, return the last one - if (patchesOfRefRelease == releases.size()) { - return refRelease; - } - } - throw new IllegalStateException("Unable to find previous release in releases"); - } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/platform/ws/ActiveVersionEvaluatorTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/platform/ws/ActiveVersionEvaluatorTest.java index 9e59be5b82b..eace45eb2a0 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/platform/ws/ActiveVersionEvaluatorTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/platform/ws/ActiveVersionEvaluatorTest.java @@ -19,12 +19,14 @@ */ package org.sonar.server.platform.ws; +import java.time.LocalDate; import java.util.Calendar; -import java.util.Collections; import java.util.SortedSet; import java.util.TreeSet; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.sonar.api.internal.MetadataLoader; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.System2; import org.sonar.core.platform.SonarQubeVersion; @@ -107,69 +109,29 @@ class ActiveVersionEvaluatorTest { } @Test - void evaluateIfActiveVersion_whenNoReleasesFound_shouldThrowIllegalStateException() { + void evaluateIfActiveVersion_whenEOLDateIsAfterToday_shouldReturnActiveVersion() { + LocalDate today = LocalDate.now(); + LocalDate tomorrow = today.plusDays(1); - when(sonarQubeVersion.get()).thenReturn(parse("10.8.0")); + when(sonarQubeVersion.get()).thenReturn(parse("2025.4.0.12345")); - when(sonar.getAllReleases(any())).thenReturn(Collections.emptySortedSet()); - - assertThatThrownBy(() -> underTest.evaluateIfActiveVersion(updateCenter)) - .isInstanceOf(IllegalStateException.class) - .hasMessageContaining("Unable to find previous release in releases"); + try (MockedStatic<MetadataLoader> mocked = org.mockito.Mockito.mockStatic(MetadataLoader.class)) { + mocked.when(() -> MetadataLoader.loadSqVersionEol(system2)).thenReturn(tomorrow.toString()); + assertThat(underTest.evaluateIfActiveVersion(updateCenter)).isTrue(); + } } @Test - void evaluateIfActiveVersion_whenInstalledVersionIsLatestMinusOne_shouldReturnVersionIsActive() { - when(sonarQubeVersion.get()).thenReturn(parse("10.9")); - when(updateCenter.getSonar().getAllReleases(any())).thenReturn(getReleases()); + void evaluateIfActiveVersion_whenEOLDateIsBeforeToday_shouldReturnInactiveVersion() { + LocalDate today = LocalDate.now(); + LocalDate yesterday = today.minusDays(1); - assertThat(underTest.evaluateIfActiveVersion(updateCenter)).isTrue(); - } - - @Test - void evaluateIfActiveVersion_whenInstalledVersionIsSnapshot_shouldReturnVersionIsActive() { - when(sonarQubeVersion.get()).thenReturn(parse("10.11-SNAPSHOT")); - when(updateCenter.getSonar().getAllReleases(any())).thenReturn(getReleases()); + when(sonarQubeVersion.get()).thenReturn(parse("2025.4.0.12345")); - assertThat(underTest.evaluateIfActiveVersion(updateCenter)).isTrue(); - } - - @Test - void evaluateIfActiveVersion_whenInstalledVersionIsTheOnlyAvailableVersion_shouldReturnVersionIsActive() { - TreeSet<Release> releases = new TreeSet<>(); - releases.add(new Release(sonar, Version.create("10.8.0.12345"))); - - when(sonarQubeVersion.get()).thenReturn(parse("10.8.0.12345")); - when(updateCenter.getSonar().getAllReleases(any())).thenReturn(releases); - - assertThat(underTest.evaluateIfActiveVersion(updateCenter)).isTrue(); - } - - @Test - void evaluateIfActiveVersion_whenAvailableVersionsAreAllPatchesOfInstalledVersion_shouldReturnVersionIsActive() { - TreeSet<Release> releases = new TreeSet<>(); - releases.add(new Release(sonar, Version.create("10.8.0.12345"))); - releases.add(new Release(sonar, Version.create("10.8.1.12346"))); - when(sonar.getAllReleases(any())).thenReturn(releases); - - when(sonarQubeVersion.get()).thenReturn(parse("10.8.0.12345")); - when(updateCenter.getSonar().getAllReleases(any())).thenReturn(releases); - - assertThat(underTest.evaluateIfActiveVersion(updateCenter)).isTrue(); - } - - @Test - void evaluateIfActiveVersion_whenAvailableVersionsHaveDifferentNamingScheme_shouldReturnVersionIsActive() { - TreeSet<Release> releases = new TreeSet<>(); - releases.add(new Release(sonar, Version.create("10.8.0.12345"))); - releases.add(new Release(sonar, Version.create("10.8.1.12346"))); - releases.add(new Release(sonar, Version.create("2025.1.0.12347"))); - when(sonar.getAllReleases(any())).thenReturn(releases); - - when(sonarQubeVersion.get()).thenReturn(parse("10.8.0.12345")); - when(updateCenter.getSonar().getAllReleases(any())).thenReturn(releases); - - assertThat(underTest.evaluateIfActiveVersion(updateCenter)).isTrue(); + try (MockedStatic<MetadataLoader> mocked = org.mockito.Mockito.mockStatic(MetadataLoader.class)) { + mocked.when(() -> MetadataLoader.loadSqVersionEol(system2)).thenReturn(yesterday.toString()); + assertThat(underTest.evaluateIfActiveVersion(updateCenter)).isFalse(); + } } |