package org.cloudfoundry.identity.uaa.zone; import org.cloudfoundry.identity.uaa.audit.event.EntityDeletedEvent; import org.cloudfoundry.identity.uaa.test.JdbcTestBase; import org.junit.Before; import org.junit.Test; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.security.oauth2.common.util.RandomValueStringGenerator; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; public class JdbcIdentityZoneProvisioningTests extends JdbcTestBase { private JdbcIdentityZoneProvisioning db; private RandomValueStringGenerator generator = new RandomValueStringGenerator(8); @Before public void createDatasource() throws Exception { db = new JdbcIdentityZoneProvisioning(jdbcTemplate); } @Test public void test_delete_zone() { IdentityZone identityZone = MultitenancyFixture.identityZone(generator.generate(),generator.generate()); identityZone.setId(generator.generate()); identityZone.setConfig(new IdentityZoneConfiguration(new TokenPolicy(3600, 7200))); IdentityZone createdIdZone = db.create(identityZone); assertThat(jdbcTemplate.queryForObject("select count(*) from identity_zone where id = ?", new Object[] {createdIdZone.getId()}, Integer.class), is(1)); db.onApplicationEvent(new EntityDeletedEvent<>(identityZone, null)); assertThat(jdbcTemplate.queryForObject("select count(*) from identity_zone where id = ?", new Object[] {createdIdZone.getId()}, Integer.class), is(0)); } @Test public void test_cannot_delete_uaa_zone() { assertThat(jdbcTemplate.queryForObject("select count(*) from identity_zone where id = ?", new Object[] {IdentityZone.getUaa().getId()}, Integer.class), is(1)); db.onApplicationEvent(new EntityDeletedEvent<>(IdentityZone.getUaa(), null)); assertThat(jdbcTemplate.queryForObject("select count(*) from identity_zone where id = ?", new Object[] {IdentityZone.getUaa().getId()}, Integer.class), is(1)); } @Test public void testCreateIdentityZone() throws Exception { IdentityZone identityZone = MultitenancyFixture.identityZone(generator.generate(),generator.generate()); identityZone.setId(generator.generate()); identityZone.setConfig(new IdentityZoneConfiguration(new TokenPolicy(3600, 7200))); IdentityZone createdIdZone = db.create(identityZone); assertEquals(identityZone.getId(), createdIdZone.getId()); assertEquals(identityZone.getSubdomain(), createdIdZone.getSubdomain()); assertEquals(identityZone.getName(), createdIdZone.getName()); assertEquals(identityZone.getDescription(), createdIdZone.getDescription()); assertEquals(3600, createdIdZone.getConfig().getTokenPolicy().getAccessTokenValidity()); assertEquals(7200, createdIdZone.getConfig().getTokenPolicy().getRefreshTokenValidity()); } @Test public void testCreateIdentityZone_Subdomain_Becomes_LowerCase() throws Exception { String subdomain = generator.generate().toUpperCase(); IdentityZone identityZone = MultitenancyFixture.identityZone(generator.generate(),subdomain); identityZone.setId(generator.generate()); identityZone.setSubdomain(subdomain); IdentityZone createdIdZone = db.create(identityZone); assertEquals(identityZone.getId(), createdIdZone.getId()); assertEquals(subdomain.toLowerCase(), createdIdZone.getSubdomain()); assertEquals(identityZone.getName(), createdIdZone.getName()); assertEquals(identityZone.getDescription(), createdIdZone.getDescription()); } @Test(expected = EmptyResultDataAccessException.class) public void test_null_subdomain() { db.retrieveBySubdomain(null); } @Test public void testUpdateIdentityZone() throws Exception { IdentityZone identityZone = MultitenancyFixture.identityZone(generator.generate(), generator.generate()); identityZone.setId(generator.generate()); IdentityZone createdIdZone = db.create(identityZone); assertEquals(identityZone.getId(), createdIdZone.getId()); assertEquals(identityZone.getSubdomain(), createdIdZone.getSubdomain()); assertEquals(identityZone.getName(), createdIdZone.getName()); assertEquals(identityZone.getDescription(), createdIdZone.getDescription()); String newDomain = new RandomValueStringGenerator().generate(); createdIdZone.setSubdomain(newDomain); createdIdZone.setDescription("new desc"); createdIdZone.setName("new name"); IdentityZone updatedIdZone = db.update(createdIdZone); assertEquals(createdIdZone.getId(), updatedIdZone.getId()); assertEquals(createdIdZone.getSubdomain().toLowerCase(), updatedIdZone.getSubdomain()); assertEquals(createdIdZone.getName(), updatedIdZone.getName()); assertEquals(createdIdZone.getDescription(), updatedIdZone.getDescription()); } @Test public void testUpdateIdentityZone_SubDomain_Is_LowerCase() throws Exception { IdentityZone identityZone = MultitenancyFixture.identityZone(generator.generate(),generator.generate()); identityZone.setId(generator.generate()); IdentityZone createdIdZone = db.create(identityZone); assertEquals(identityZone.getId(), createdIdZone.getId()); assertEquals(identityZone.getSubdomain(), createdIdZone.getSubdomain()); assertEquals(identityZone.getName(), createdIdZone.getName()); assertEquals(identityZone.getDescription(), createdIdZone.getDescription()); String newDomain = new RandomValueStringGenerator().generate(); createdIdZone.setSubdomain(newDomain.toUpperCase()); createdIdZone.setDescription("new desc"); createdIdZone.setName("new name"); IdentityZone updatedIdZone = db.update(createdIdZone); assertEquals(createdIdZone.getId(), updatedIdZone.getId()); assertEquals(createdIdZone.getSubdomain().toLowerCase(), updatedIdZone.getSubdomain()); assertEquals(createdIdZone.getName(), updatedIdZone.getName()); assertEquals(createdIdZone.getDescription(), updatedIdZone.getDescription()); } @Test(expected = ZoneDoesNotExistsException.class) public void testUpdateNonExistentIdentityZone() throws Exception { IdentityZone identityZone = MultitenancyFixture.identityZone(generator.generate(),generator.generate()); identityZone.setId(generator.generate()); db.update(identityZone); } @Test public void testCreateDuplicateIdentityZone() throws Exception { IdentityZone identityZone = MultitenancyFixture.identityZone("there-can-be-only-one","there-can-be-only-one"); identityZone.setId(generator.generate()); db.create(identityZone); try { db.create(identityZone); fail("Should have thrown exception"); } catch (ZoneAlreadyExistsException e) { // success } } @Test public void testCreateDuplicateIdentityZoneSubdomain() throws Exception { IdentityZone identityZone = MultitenancyFixture.identityZone("there-can-be-only-one","there-can-be-only-one"); identityZone.setId(generator.generate()); db.create(identityZone); try { identityZone.setId(new RandomValueStringGenerator().generate()); db.create(identityZone); fail("Should have thrown exception"); } catch (ZoneAlreadyExistsException e) { // success } } }