From 965d66bb3385fc196ba867e5ccabbe23a574ca39 Mon Sep 17 00:00:00 2001 From: Antoine Vigneau Date: Thu, 4 May 2023 14:58:54 +0200 Subject: [PATCH] SONAR-19084 Return GitHub as provider managing the instance in system/info --- .../DelegatingManagedInstanceService.java | 7 +++++ .../management/ManagedInstanceService.java | 2 ++ .../DelegatingManagedInstanceServiceTest.java | 27 +++++++++++++++++++ .../monitoring/CommonSystemInformation.java | 10 ++----- .../monitoring/StandaloneSystemSection.java | 2 +- .../cluster/GlobalSystemSection.java | 2 +- .../CommonSystemInformationTest.java | 24 +++++------------ .../StandaloneSystemSectionTest.java | 4 +-- .../cluster/GlobalSystemSectionTest.java | 4 +-- 9 files changed, 50 insertions(+), 32 deletions(-) diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/management/DelegatingManagedInstanceService.java b/server/sonar-server-common/src/main/java/org/sonar/server/management/DelegatingManagedInstanceService.java index 4ff988baab3..f4db6c5516a 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/management/DelegatingManagedInstanceService.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/management/DelegatingManagedInstanceService.java @@ -47,6 +47,13 @@ public class DelegatingManagedInstanceService implements ManagedInstanceService return delegates.stream().anyMatch(ManagedInstanceService::isInstanceExternallyManaged); } + @Override + public String getProviderName() { + return findManagedInstanceService() + .map(ManagedInstanceService::getProviderName) + .orElseThrow(() -> NOT_MANAGED_INSTANCE_EXCEPTION); + } + @Override public Map getUserUuidToManaged(DbSession dbSession, Set userUuids) { return findManagedInstanceService() diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/management/ManagedInstanceService.java b/server/sonar-server-common/src/main/java/org/sonar/server/management/ManagedInstanceService.java index 1a615555d92..2580f55dc4d 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/management/ManagedInstanceService.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/management/ManagedInstanceService.java @@ -29,6 +29,8 @@ public interface ManagedInstanceService { boolean isInstanceExternallyManaged(); + String getProviderName(); + Map getUserUuidToManaged(DbSession dbSession, Set userUuids); Map getGroupUuidToManaged(DbSession dbSession, Set groupUuids); diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/management/DelegatingManagedInstanceServiceTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/management/DelegatingManagedInstanceServiceTest.java index aee38302901..5f3b35dac93 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/management/DelegatingManagedInstanceServiceTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/management/DelegatingManagedInstanceServiceTest.java @@ -30,6 +30,7 @@ import org.sonar.db.DbSession; import static java.util.Collections.emptySet; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -39,6 +40,22 @@ public class DelegatingManagedInstanceServiceTest { @Mock private DbSession dbSession; + @Test + public void getProviderName_whenNotManaged_shouldThrow() { + DelegatingManagedInstanceService managedInstanceService = new DelegatingManagedInstanceService(emptySet()); + + assertThatThrownBy(() -> managedInstanceService.getProviderName()) + .isInstanceOf(IllegalStateException.class) + .hasMessage("This instance is not managed."); + } + + @Test + public void getProviderName_whenManaged_shouldReturnName() { + DelegatingManagedInstanceService managedInstanceService = new DelegatingManagedInstanceService(Set.of(new AlwaysManagedInstanceService())); + + assertThat(managedInstanceService.getProviderName()).isEqualTo("Always"); + } + @Test public void isInstanceExternallyManaged_whenNoManagedInstanceService_returnsFalse() { DelegatingManagedInstanceService managedInstanceService = new DelegatingManagedInstanceService(emptySet()); @@ -176,6 +193,11 @@ public class DelegatingManagedInstanceServiceTest { return false; } + @Override + public String getProviderName() { + return "Never"; + } + @Override public Map getUserUuidToManaged(DbSession dbSession, Set userUuids) { return null; @@ -204,6 +226,11 @@ public class DelegatingManagedInstanceServiceTest { return true; } + @Override + public String getProviderName() { + return "Always"; + } + @Override public Map getUserUuidToManaged(DbSession dbSession, Set userUuids) { return null; diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/CommonSystemInformation.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/CommonSystemInformation.java index 40629019e54..8789f0f5ca2 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/CommonSystemInformation.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/CommonSystemInformation.java @@ -70,15 +70,9 @@ public class CommonSystemInformation { .toList(); } - public String getManagedProvider() { + public String getManagedInstanceProviderName() { if (managedInstanceService.isInstanceExternallyManaged()) { - return identityProviderRepository.getAllEnabledAndSorted() - .stream() - .filter(provider -> provider.getKey().equalsIgnoreCase("saml")) - .filter(IdentityProvider::isEnabled) - .findFirst() - .map(IdentityProvider::getName) - .orElse(null); + return managedInstanceService.getProviderName(); } return null; } diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/StandaloneSystemSection.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/StandaloneSystemSection.java index c238e175deb..c7f433985ef 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/StandaloneSystemSection.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/StandaloneSystemSection.java @@ -91,7 +91,7 @@ public class StandaloneSystemSection extends BaseSectionMBean implements SystemS setAttribute(protobuf, "Edition", sonarRuntime.getEdition().getLabel()); setAttribute(protobuf, NCLOC.getName(), statisticsSupport.getLinesOfCode()); setAttribute(protobuf, "Docker", dockerSupport.isRunningInDocker()); - setAttribute(protobuf, "External Users and Groups Provisioning", commonSystemInformation.getManagedProvider()); + setAttribute(protobuf, "External Users and Groups Provisioning", commonSystemInformation.getManagedInstanceProviderName()); setAttribute(protobuf, "External User Authentication", commonSystemInformation.getExternalUserAuthentication()); addIfNotEmpty(protobuf, "Accepted external identity providers", commonSystemInformation.getEnabledIdentityProviders()); diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/cluster/GlobalSystemSection.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/cluster/GlobalSystemSection.java index 31b3cbb7798..308b1733c1d 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/cluster/GlobalSystemSection.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/platform/monitoring/cluster/GlobalSystemSection.java @@ -62,7 +62,7 @@ public class GlobalSystemSection implements SystemInfoSection, Global { setAttribute(protobuf, "Docker", dockerSupport.isRunningInDocker()); setAttribute(protobuf, "High Availability", true); setAttribute(protobuf, "External Users and Groups Provisioning", - commonSystemInformation.getManagedProvider()); + commonSystemInformation.getManagedInstanceProviderName()); setAttribute(protobuf, "External User Authentication", commonSystemInformation.getExternalUserAuthentication()); addIfNotEmpty(protobuf, "Accepted external identity providers", diff --git a/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/CommonSystemInformationTest.java b/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/CommonSystemInformationTest.java index bc12e9fe82f..ac0771c3b55 100644 --- a/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/CommonSystemInformationTest.java +++ b/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/CommonSystemInformationTest.java @@ -121,33 +121,20 @@ public class CommonSystemInformationTest { } @Test - public void getManagedProvider_whenInstanceNotManaged_shouldReturnNull() { + public void getManagedInstanceProvider_whenInstanceNotManaged_shouldReturnNull() { mockIdentityProviders(List.of()); mockManagedInstance(false); - assertThat(commonSystemInformation.getManagedProvider()) + assertThat(commonSystemInformation.getManagedInstanceProviderName()) .isNull(); } @Test - public void getManagedProvider_whenInstanceManagedButNoValidProviderDefined_shouldReturnNull() { - mockIdentityProviders(List.of()); - mockManagedInstance(true); - - assertThat(commonSystemInformation.getManagedProvider()) - .isNull(); - } - - @Test - public void getManagedProvider_whenInstanceManagedAndValidProviderDefined_shouldReturnProviderName() { - mockIdentityProviders(List.of( - new TestIdentityProvider().setKey("saml").setName("Okta").setEnabled(true).setAllowsUsersToSignUp(true), - new TestIdentityProvider().setKey("github").setName("GitHub").setEnabled(true).setAllowsUsersToSignUp(true) - )); + public void getManagedInstanceProvider_whenInstanceManaged_shouldReturnName() { mockManagedInstance(true); - assertThat(commonSystemInformation.getManagedProvider()) - .isEqualTo("Okta"); + assertThat(commonSystemInformation.getManagedInstanceProviderName()) + .isEqualTo("Provider"); } @Test @@ -170,6 +157,7 @@ public class CommonSystemInformationTest { private void mockManagedInstance(boolean managed) { when(managedInstanceService.isInstanceExternallyManaged()).thenReturn(managed); + when(managedInstanceService.getProviderName()).thenReturn("Provider"); } private void mockSecurityRealmFactory(String name) { diff --git a/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/StandaloneSystemSectionTest.java b/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/StandaloneSystemSectionTest.java index 1735090758b..25b06a0dcbf 100644 --- a/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/StandaloneSystemSectionTest.java +++ b/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/StandaloneSystemSectionTest.java @@ -184,7 +184,7 @@ public class StandaloneSystemSectionTest { @Test public void toProtobuf_whenInstanceIsNotManaged_shouldWriteNothing() { - when(commonSystemInformation.getManagedProvider()).thenReturn(null); + when(commonSystemInformation.getManagedInstanceProviderName()).thenReturn(null); ProtobufSystemInfo.Section protobuf = underTest.toProtobuf(); assertThatAttributeDoesNotExist(protobuf, "External Users and Groups Provisioning"); @@ -192,7 +192,7 @@ public class StandaloneSystemSectionTest { @Test public void toProtobuf_whenInstanceIsManaged_shouldWriteItsProviderName() { - when(commonSystemInformation.getManagedProvider()).thenReturn("Okta"); + when(commonSystemInformation.getManagedInstanceProviderName()).thenReturn("Okta"); ProtobufSystemInfo.Section protobuf = underTest.toProtobuf(); assertThatAttributeIs(protobuf, "External Users and Groups Provisioning", "Okta"); diff --git a/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/cluster/GlobalSystemSectionTest.java b/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/cluster/GlobalSystemSectionTest.java index 86c42a4fb52..95711e23360 100644 --- a/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/cluster/GlobalSystemSectionTest.java +++ b/server/sonar-webserver-core/src/test/java/org/sonar/server/platform/monitoring/cluster/GlobalSystemSectionTest.java @@ -111,7 +111,7 @@ public class GlobalSystemSectionTest { @Test public void toProtobuf_whenInstanceIsNotManaged_shouldWriteNothing() { - when(commonSystemInformation.getManagedProvider()).thenReturn(null); + when(commonSystemInformation.getManagedInstanceProviderName()).thenReturn(null); ProtobufSystemInfo.Section protobuf = underTest.toProtobuf(); assertThatAttributeDoesNotExist(protobuf, "External Users and Groups Provisioning"); @@ -119,7 +119,7 @@ public class GlobalSystemSectionTest { @Test public void toProtobuf_whenInstanceIsManaged_shouldWriteItsProviderName() { - when(commonSystemInformation.getManagedProvider()).thenReturn("Okta"); + when(commonSystemInformation.getManagedInstanceProviderName()).thenReturn("Okta"); ProtobufSystemInfo.Section protobuf = underTest.toProtobuf(); assertThatAttributeIs(protobuf, "External Users and Groups Provisioning", "Okta"); -- 2.39.5