Skip to content

Commit

Permalink
Backfill some tests
Browse files Browse the repository at this point in the history
  • Loading branch information
fhanik committed Mar 24, 2017
1 parent bf91d6b commit 3d8dcb7
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 52 deletions.
Expand Up @@ -12,12 +12,6 @@
*******************************************************************************/
package org.cloudfoundry.identity.uaa.scim.jdbc;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.cloudfoundry.identity.uaa.resources.jdbc.AbstractQueryable;
Expand All @@ -42,6 +36,12 @@
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.List;

public class JdbcScimGroupExternalMembershipManager extends AbstractQueryable<ScimGroupExternalMember>
implements ScimGroupExternalMembershipManager {

Expand Down
Expand Up @@ -14,7 +14,6 @@

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.cloudfoundry.identity.uaa.audit.event.SystemDeletable;
import org.cloudfoundry.identity.uaa.resources.jdbc.AbstractQueryable;
import org.cloudfoundry.identity.uaa.resources.jdbc.JdbcPagingListFactory;
import org.cloudfoundry.identity.uaa.resources.jdbc.SearchQueryConverter;
Expand Down Expand Up @@ -57,7 +56,7 @@
import java.util.concurrent.ConcurrentHashMap;

public class JdbcScimGroupMembershipManager extends AbstractQueryable<ScimGroupMember> implements
ScimGroupMembershipManager, SystemDeletable {
ScimGroupMembershipManager {

private JdbcTemplate jdbcTemplate;

Expand Down Expand Up @@ -423,35 +422,6 @@ public void setValues(PreparedStatement ps) throws SQLException {
return groups;
}

@Override
public int deleteByIdentityZone(String zoneId) {
//no op
return 0;
}

@Override
public int deleteByOrigin(String origin, String zoneId) {
//no op
return 0;
}

@Override
public int deleteByClient(String clientId, String zoneId) {
//no op
return 0;
}

@Override
public int deleteByUser(String userId, String zoneId) {
//no op
return 0;
}

@Override
public Log getLogger() {
return logger;
}

@Override
protected void validateOrderBy(String orderBy) throws IllegalArgumentException {
super.validateOrderBy(orderBy, MEMBERSHIP_FIELDS);
Expand Down
Expand Up @@ -59,7 +59,26 @@ public void tearDown() throws Exception {
IdentityZoneHolder.clear();
}

@Test
public void ignore_unknown_events() throws Exception {
AbstractUaaEvent event = mock(AbstractUaaEvent.class);
deletable.onApplicationEvent(event);
verify(deletable, never()).onApplicationEvent(any(EntityDeletedEvent.class));
verify(deletable, never()).deleteByIdentityZone(any());
verify(deletable, never()).deleteByOrigin(any(),any());
verify(deletable, never()).deleteByClient(any(),any());
verify(deletable, never()).deleteByUser(any(),any());
}

@Test
public void uaa_default_zone_is_ignored() throws Exception {
EntityDeletedEvent event = new EntityDeletedEvent(IdentityZone.getUaa(), authentication);
deletable.onApplicationEvent(event);
verify(deletable, never()).deleteByIdentityZone(any());
verify(deletable, never()).deleteByOrigin(any(),any());
verify(deletable, never()).deleteByClient(any(),any());
verify(deletable, never()).deleteByUser(any(),any());
}

@Test
public void zone_event_received() throws Exception {
Expand Down Expand Up @@ -129,6 +148,8 @@ public void user_event_received() throws Exception {
public void resetDeletable() {
reset(deletable);
doCallRealMethod().when(deletable).onApplicationEvent(any(EntityDeletedEvent.class));
doCallRealMethod().when(deletable).onApplicationEvent(any(AbstractUaaEvent.class));
doCallRealMethod().when(deletable).isUaaZone(any());
when(deletable.getLogger()).thenReturn(mock(Log.class));
}

Expand Down
Expand Up @@ -12,14 +12,6 @@
*******************************************************************************/
package org.cloudfoundry.identity.uaa.scim.jdbc;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.cloudfoundry.identity.uaa.audit.event.EntityDeletedEvent;
import org.cloudfoundry.identity.uaa.constants.OriginKeys;
import org.cloudfoundry.identity.uaa.provider.IdentityProvider;
Expand All @@ -38,8 +30,19 @@
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.common.util.RandomValueStringGenerator;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;

import static org.cloudfoundry.identity.uaa.constants.OriginKeys.LDAP;
import static org.cloudfoundry.identity.uaa.constants.OriginKeys.LOGIN_SERVER;
import static org.cloudfoundry.identity.uaa.constants.OriginKeys.UAA;
import static org.hamcrest.core.Is.is;
Expand All @@ -50,6 +53,7 @@
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;

public class JdbcScimGroupMembershipManagerTests extends JdbcTestBase {

Expand All @@ -70,10 +74,10 @@ public class JdbcScimGroupMembershipManagerTests extends JdbcTestBase {
private RandomValueStringGenerator generator = new RandomValueStringGenerator();

private IdentityZone zone = MultitenancyFixture.identityZone(generator.generate(), generator.generate());
private JdbcScimGroupExternalMembershipManager egdao;

@Before
public void initJdbcScimGroupMembershipManagerTests() {

JdbcTemplate template = new JdbcTemplate(dataSource);

JdbcPagingListFactory pagingListFactory = new JdbcPagingListFactory(template, limitSqlAdapter);
Expand All @@ -84,6 +88,7 @@ public void initJdbcScimGroupMembershipManagerTests() {
dao.setScimGroupProvisioning(gdao);
dao.setScimUserProvisioning(udao);
dao.setDefaultUserGroups(Collections.singleton("uaa.user"));
egdao = new JdbcScimGroupExternalMembershipManager(jdbcTemplate, pagingListFactory);

for (String id : Arrays.asList(zone.getId(), IdentityZone.getUaa().getId())) {
String g1 = id.equals(zone.getId()) ? zone.getId()+"-"+"g1" : "g1";
Expand Down Expand Up @@ -130,8 +135,12 @@ private void addUser(String id, String password, String zoneId) {
}

private void validateCount(int expected) {
validateCount(expected, "No message given.");
}

private void validateCount(int expected, String msg) {
int existingMemberCount = jdbcTemplate.queryForObject("select count(*) from groups g, group_membership gm where g.identity_zone_id=? and gm.group_id=g.id", new Object[] {IdentityZoneHolder.get().getId()}, Integer.class);
assertEquals(expected, existingMemberCount);
assertEquals(msg, expected, existingMemberCount);
}

private void validateUserGroups(String id, String... gNm) {
Expand Down Expand Up @@ -159,10 +168,35 @@ private void validateUserGroups(String id, String... gNm) {
@After
public void cleanupDataSource() throws Exception {
IdentityZoneHolder.clear();
TestUtils.deleteFrom(dataSource, "group_membership");
TestUtils.deleteFrom(dataSource, "groups");
TestUtils.deleteFrom(dataSource, "users");
validateCount(0);
}

@Test
public void zone_delete_clears_memberships() throws Exception {
for (IdentityZone zone : Arrays.asList(this.zone, IdentityZone.getUaa())) {
IdentityZoneHolder.set(zone);
addMembers(OriginKeys.LDAP);
validateCount(4);
IdentityZoneHolder.clear();
gdao.onApplicationEvent(new EntityDeletedEvent<>(zone, mock(Authentication.class)));
validateCount(Objects.equals(zone, IdentityZone.getUaa()) ? 4 : 0, "ZoneID: "+zone.getId());
}
}

@Test
public void provider_delete_clears_memberships() throws Exception {
for (IdentityZone zone : Arrays.asList(this.zone, IdentityZone.getUaa())) {
IdentityZoneHolder.set(zone);
addMembers(OriginKeys.LDAP);
validateCount(4, "ZoneID: "+zone.getId());
IdentityZoneHolder.clear();
IdentityProvider provider = new IdentityProvider()
.setId("ldap-id")
.setOriginKey(LDAP)
.setIdentityZoneId(zone.getId());
gdao.onApplicationEvent(new EntityDeletedEvent<>(provider, mock(Authentication.class)));
IdentityZoneHolder.set(zone);
validateCount(0, "ZoneID: "+zone.getId());
}
}

@Test
Expand Down Expand Up @@ -295,7 +329,8 @@ public void test_provider_deleted() {
new IdentityProvider()
.setOriginKey(LOGIN_SERVER)
.setIdentityZoneId(zone.getId());
gdao.onApplicationEvent(new EntityDeletedEvent<>(loginServer, null));
EntityDeletedEvent<IdentityProvider> event = new EntityDeletedEvent<>(loginServer, null);
gdao.onApplicationEvent(event);
assertThat(jdbcTemplate.queryForObject("select count(*) from group_membership where group_id in (select id from groups where identity_zone_id=?)", new Object[] {IdentityZoneHolder.get().getId()}, Integer.class), is(0));
assertThat(jdbcTemplate.queryForObject("select count(*) from groups where identity_zone_id=?", new Object[] {IdentityZoneHolder.get().getId()}, Integer.class), is(3));
assertThat(jdbcTemplate.queryForObject("select count(*) from external_group_mapping where origin = ? and group_id in (select id from groups where identity_zone_id=?)", new Object[] {LOGIN_SERVER, IdentityZoneHolder.get().getId()}, Integer.class), is(0));
Expand Down
Expand Up @@ -972,6 +972,7 @@ public void test_delete_zone_cleans_db() throws Exception {
IdentityZoneHolder.set(zone);
ScimGroupExternalMember externalMember = externalMembershipManager.mapExternalGroup(group.getId(), "externalDeleteGroup", LOGIN_SERVER);
assertEquals(1, externalMembershipManager.getExternalGroupMapsByGroupId(group.getId(), LOGIN_SERVER).size());
assertThat(template.queryForObject("select count(*) from external_group_mapping where origin=?", new Object[]{LOGIN_SERVER}, Integer.class), is(1));

//add user approvals
approvalStore.addApproval(
Expand Down

0 comments on commit 3d8dcb7

Please sign in to comment.