aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorMatteo Mara <matteo.mara@sonarsource.com>2025-07-10 15:17:54 +0200
committersonartech <sonartech@sonarsource.com>2025-07-10 20:04:03 +0000
commita3f87dfda6d8ad6f6f36dc36cb155c88f9a8f808 (patch)
tree01930455a676ad8d44a8501d689ddcbe18f3da95 /server
parentdbc586710357eac8bbe746bd859fe64187f42204 (diff)
downloadsonarqube-master.tar.gz
sonarqube-master.zip
SONAR-25443 Modify active version calculation logic for SQS 2025.4HEADmaster
Diffstat (limited to 'server')
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/platform/ws/ActiveVersionEvaluator.java28
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/platform/ws/ActiveVersionEvaluatorTest.java76
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();
+ }
}