|
33 | 33 | import org.junit.jupiter.api.BeforeEach; |
34 | 34 | import org.junit.jupiter.api.Test; |
35 | 35 | import org.junit.jupiter.api.extension.ExtendWith; |
| 36 | +import org.junit.jupiter.params.ParameterizedTest; |
| 37 | +import org.junit.jupiter.params.provider.ValueSource; |
36 | 38 | import org.mockito.ArgumentCaptor; |
37 | 39 | import org.springframework.context.ApplicationEventPublisher; |
38 | 40 | import org.springframework.core.ParameterizedTypeReference; |
@@ -108,12 +110,16 @@ void setUp() throws Exception { |
108 | 110 | uaaProvider = mock(IdentityProvider.class); |
109 | 111 | when(uaaProvider.getType()).thenReturn(OriginKeys.UAA); |
110 | 112 | when(uaaProvider.getOriginKey()).thenReturn(OriginKeys.UAA); |
| 113 | + when(uaaProvider.isActive()).thenReturn(true); |
111 | 114 | ldapProvider = mock(IdentityProvider.class); |
112 | 115 | when(ldapProvider.getType()).thenReturn(OriginKeys.LDAP); |
113 | 116 | when(ldapProvider.getOriginKey()).thenReturn(OriginKeys.LDAP); |
| 117 | + when(ldapProvider.isActive()).thenReturn(true); |
114 | 118 |
|
115 | 119 | when(identityProviderProvisioning.retrieveActive("uaa")).thenReturn(Arrays.asList(idp, uaaProvider, ldapProvider)); |
116 | 120 | when(identityProviderProvisioning.retrieveByOrigin("oidcprovider", "uaa")).thenReturn(idp); |
| 121 | + when(identityProviderProvisioning.retrieveByOrigin("uaa", "uaa")).thenReturn(uaaProvider); |
| 122 | + when(identityProviderProvisioning.retrieveByOrigin("ldap", "uaa")).thenReturn(ldapProvider); |
117 | 123 |
|
118 | 124 | Authentication clientAuth = mock(Authentication.class); |
119 | 125 | when(clientAuth.getName()).thenReturn("clientid"); |
@@ -627,22 +633,29 @@ void testUaaPasswordGrant_defaultProviderUaa() { |
627 | 633 | verify(zoneAwareAuthzAuthenticationManager, times(0)).setLoginHint(any(), any()); |
628 | 634 | } |
629 | 635 |
|
630 | | - @Test |
631 | | - void testPasswordGrant_NoLoginHintWithDefaultUaa() { |
| 636 | + @ParameterizedTest |
| 637 | + @ValueSource(strings = { OriginKeys.UAA, OriginKeys.LDAP }) |
| 638 | + void testPasswordGrant_NoLoginHintWithDefaultUaaOrLdap(final String loginHintOrigin) { |
632 | 639 | Authentication auth = mock(Authentication.class); |
633 | 640 | when(zoneAwareAuthzAuthenticationManager.extractLoginHint(auth)).thenReturn(null); |
634 | 641 | Map<String, Object> additionalInformation = new HashMap<>(); |
635 | | - additionalInformation.put(ClientConstants.ALLOWED_PROVIDERS, Collections.singletonList("uaa")); |
| 642 | + additionalInformation.put(ClientConstants.ALLOWED_PROVIDERS, Collections.singletonList(loginHintOrigin)); |
636 | 643 | when(uaaClient.getAdditionalInformation()).thenReturn(additionalInformation); |
637 | | - IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("uaa"); |
| 644 | + IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider(loginHintOrigin); |
638 | 645 |
|
639 | 646 | instance.authenticate(auth); |
640 | 647 |
|
| 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 | + |
641 | 654 | verify(zoneAwareAuthzAuthenticationManager, times(1)).authenticate(auth); |
642 | 655 | ArgumentCaptor<UaaLoginHint> captor = ArgumentCaptor.forClass(UaaLoginHint.class); |
643 | 656 | verify(zoneAwareAuthzAuthenticationManager, times(1)).setLoginHint(eq(auth), captor.capture()); |
644 | 657 | assertNotNull(captor.getValue()); |
645 | | - assertEquals("uaa", captor.getValue().getOrigin()); |
| 658 | + assertEquals(loginHintOrigin, captor.getValue().getOrigin()); |
646 | 659 | } |
647 | 660 |
|
648 | 661 | @Test |
@@ -719,24 +732,30 @@ void testOIDCPasswordGrant_LoginHintOidcOverridesDefaultUaa() { |
719 | 732 | verify(identityProviderProvisioning, times(0)).retrieveActive(any()); |
720 | 733 | } |
721 | 734 |
|
722 | | - @Test |
723 | | - void testOIDCPasswordGrant_LoginHintUaaOverridesDefaultOidc() { |
| 735 | + @ParameterizedTest |
| 736 | + @ValueSource(strings = { OriginKeys.UAA, OriginKeys.LDAP }) |
| 737 | + void testOIDCPasswordGrant_LoginHintUaaOrLdapOverridesDefaultOidc(final String loginHintOrigin) { |
724 | 738 | UaaLoginHint loginHint = mock(UaaLoginHint.class); |
725 | | - when(loginHint.getOrigin()).thenReturn("uaa"); |
| 739 | + when(loginHint.getOrigin()).thenReturn(loginHintOrigin); |
726 | 740 | Authentication auth = mock(Authentication.class); |
727 | | - when(zoneAwareAuthzAuthenticationManager.extractLoginHint(auth)).thenReturn(null); |
| 741 | + when(zoneAwareAuthzAuthenticationManager.extractLoginHint(auth)).thenReturn(loginHint); |
728 | 742 | Map<String, Object> additionalInformation = new HashMap<>(); |
729 | | - additionalInformation.put(ClientConstants.ALLOWED_PROVIDERS, Collections.singletonList("uaa")); |
| 743 | + additionalInformation.put(ClientConstants.ALLOWED_PROVIDERS, Collections.singletonList(loginHintOrigin)); |
730 | 744 | when(uaaClient.getAdditionalInformation()).thenReturn(additionalInformation); |
731 | 745 | IdentityZoneHolder.get().getConfig().setDefaultIdentityProvider("oidcprovider"); |
732 | 746 |
|
733 | 747 | instance.authenticate(auth); |
734 | 748 |
|
| 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 | + |
735 | 754 | verify(zoneAwareAuthzAuthenticationManager, times(1)).authenticate(auth); |
736 | 755 | ArgumentCaptor<UaaLoginHint> captor = ArgumentCaptor.forClass(UaaLoginHint.class); |
737 | 756 | verify(zoneAwareAuthzAuthenticationManager, times(1)).setLoginHint(eq(auth), captor.capture()); |
738 | 757 | assertNotNull(captor.getValue()); |
739 | | - assertEquals("uaa", captor.getValue().getOrigin()); |
| 758 | + assertEquals(loginHintOrigin, captor.getValue().getOrigin()); |
740 | 759 | } |
741 | 760 |
|
742 | 761 | @Test |
|
0 commit comments