Skip to content

Commit 8e56a6d

Browse files
committed
Use and include test from
#3161
1 parent 37b4dd7 commit 8e56a6d

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

server/src/test/java/org/cloudfoundry/identity/uaa/authentication/manager/PasswordGrantAuthenticationManagerTest.java

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.junit.jupiter.api.BeforeEach;
3434
import org.junit.jupiter.api.Test;
3535
import org.junit.jupiter.api.extension.ExtendWith;
36+
import org.junit.jupiter.params.ParameterizedTest;
37+
import org.junit.jupiter.params.provider.ValueSource;
3638
import org.mockito.ArgumentCaptor;
3739
import org.springframework.context.ApplicationEventPublisher;
3840
import org.springframework.core.ParameterizedTypeReference;
@@ -108,12 +110,16 @@ void setUp() throws Exception {
108110
uaaProvider = mock(IdentityProvider.class);
109111
when(uaaProvider.getType()).thenReturn(OriginKeys.UAA);
110112
when(uaaProvider.getOriginKey()).thenReturn(OriginKeys.UAA);
113+
when(uaaProvider.isActive()).thenReturn(true);
111114
ldapProvider = mock(IdentityProvider.class);
112115
when(ldapProvider.getType()).thenReturn(OriginKeys.LDAP);
113116
when(ldapProvider.getOriginKey()).thenReturn(OriginKeys.LDAP);
117+
when(ldapProvider.isActive()).thenReturn(true);
114118

115119
when(identityProviderProvisioning.retrieveActive("uaa")).thenReturn(Arrays.asList(idp, uaaProvider, ldapProvider));
116120
when(identityProviderProvisioning.retrieveByOrigin("oidcprovider", "uaa")).thenReturn(idp);
121+
when(identityProviderProvisioning.retrieveByOrigin("uaa", "uaa")).thenReturn(uaaProvider);
122+
when(identityProviderProvisioning.retrieveByOrigin("ldap", "uaa")).thenReturn(ldapProvider);
117123

118124
Authentication clientAuth = mock(Authentication.class);
119125
when(clientAuth.getName()).thenReturn("clientid");
@@ -627,22 +633,29 @@ void testUaaPasswordGrant_defaultProviderUaa() {
627633
verify(zoneAwareAuthzAuthenticationManager, times(0)).setLoginHint(any(), any());
628634
}
629635

630-
@Test
631-
void testPasswordGrant_NoLoginHintWithDefaultUaa() {
636+
@ParameterizedTest
637+
@ValueSource(strings = { OriginKeys.UAA, OriginKeys.LDAP })
638+
void testPasswordGrant_NoLoginHintWithDefaultUaaOrLdap(final String loginHintOrigin) {
632639
Authentication auth = mock(Authentication.class);
633640
when(zoneAwareAuthzAuthenticationManager.extractLoginHint(auth)).thenReturn(null);
634641
Map<String, Object> additionalInformation = new HashMap<>();
635-
additionalInformation.put(ClientConstants.ALLOWED_PROVIDERS, Collections.singletonList("uaa"));
642+
additionalInformation.put(ClientConstants.ALLOWED_PROVIDERS, Collections.singletonList(loginHintOrigin));
636643
when(uaaClient.getAdditionalInformation()).thenReturn(additionalInformation);
637-
IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("uaa");
644+
IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider(loginHintOrigin);
638645

639646
instance.authenticate(auth);
640647

648+
/* should not read all in the zone during lookup of possible providers
649+
* - "uaa" or "ldap" is used, but not as login hint */
650+
final String idzId = IdentityZoneHolder.get().getId();
651+
verify(identityProviderProvisioning, times(0)).retrieveActive(idzId);
652+
verify(identityProviderProvisioning, times(1)).retrieveByOrigin(loginHintOrigin, idzId);
653+
641654
verify(zoneAwareAuthzAuthenticationManager, times(1)).authenticate(auth);
642655
ArgumentCaptor<UaaLoginHint> captor = ArgumentCaptor.forClass(UaaLoginHint.class);
643656
verify(zoneAwareAuthzAuthenticationManager, times(1)).setLoginHint(eq(auth), captor.capture());
644657
assertNotNull(captor.getValue());
645-
assertEquals("uaa", captor.getValue().getOrigin());
658+
assertEquals(loginHintOrigin, captor.getValue().getOrigin());
646659
}
647660

648661
@Test
@@ -719,24 +732,30 @@ void testOIDCPasswordGrant_LoginHintOidcOverridesDefaultUaa() {
719732
verify(identityProviderProvisioning, times(0)).retrieveActive(any());
720733
}
721734

722-
@Test
723-
void testOIDCPasswordGrant_LoginHintUaaOverridesDefaultOidc() {
735+
@ParameterizedTest
736+
@ValueSource(strings = { OriginKeys.UAA, OriginKeys.LDAP })
737+
void testOIDCPasswordGrant_LoginHintUaaOrLdapOverridesDefaultOidc(final String loginHintOrigin) {
724738
UaaLoginHint loginHint = mock(UaaLoginHint.class);
725-
when(loginHint.getOrigin()).thenReturn("uaa");
739+
when(loginHint.getOrigin()).thenReturn(loginHintOrigin);
726740
Authentication auth = mock(Authentication.class);
727-
when(zoneAwareAuthzAuthenticationManager.extractLoginHint(auth)).thenReturn(null);
741+
when(zoneAwareAuthzAuthenticationManager.extractLoginHint(auth)).thenReturn(loginHint);
728742
Map<String, Object> additionalInformation = new HashMap<>();
729-
additionalInformation.put(ClientConstants.ALLOWED_PROVIDERS, Collections.singletonList("uaa"));
743+
additionalInformation.put(ClientConstants.ALLOWED_PROVIDERS, Collections.singletonList(loginHintOrigin));
730744
when(uaaClient.getAdditionalInformation()).thenReturn(additionalInformation);
731745
IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("oidcprovider");
732746

733747
instance.authenticate(auth);
734748

749+
// should read only "uaa" or "ldap" IdP during lookup of possible providers
750+
final String idzId = IdentityZoneHolder.get().getId();
751+
verify(identityProviderProvisioning, times(0)).retrieveActive(idzId);
752+
verify(identityProviderProvisioning, times(1)).retrieveByOrigin(loginHintOrigin, idzId);
753+
735754
verify(zoneAwareAuthzAuthenticationManager, times(1)).authenticate(auth);
736755
ArgumentCaptor<UaaLoginHint> captor = ArgumentCaptor.forClass(UaaLoginHint.class);
737756
verify(zoneAwareAuthzAuthenticationManager, times(1)).setLoginHint(eq(auth), captor.capture());
738757
assertNotNull(captor.getValue());
739-
assertEquals("uaa", captor.getValue().getOrigin());
758+
assertEquals(loginHintOrigin, captor.getValue().getOrigin());
740759
}
741760

742761
@Test

0 commit comments

Comments
 (0)