Java tutorial
/** * JBoss, Home of Professional Open Source. * Copyright 2014-2019 Red Hat, Inc., and individual contributors * as indicated by the @author tags. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.pnc.model; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import javax.persistence.EntityManager; import javax.persistence.RollbackException; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; /** * Tests for BuildConfiguration entity * * @author Jakub Bartecek <jbartece@redhat.com> * */ public class BuildConfigurationTest extends AbstractModelTest { protected final Map<String, String> GENERIC_PARAMETERS_EMPTY = new HashMap<>(); protected final BuildEnvironment BUILD_ENVIRONMENT_WITH_ID_1; protected final Project PROJECT_WITH_ID_1; protected final RepositoryConfiguration REPOSITORY_CONFIGURATION_ID_1 = RepositoryConfiguration.Builder .newBuilder().id(1).build(); private final String KEY1 = "key1"; private final String VALUE1 = "value1"; private final static String DBUNIT_DATASET_FILE = "basic-model-test-data.xml"; private EntityManager em; public BuildConfigurationTest() { BUILD_ENVIRONMENT_WITH_ID_1 = BuildEnvironment.Builder.newBuilder().id(1).build(); PROJECT_WITH_ID_1 = Project.Builder.newBuilder().id(1).build(); } @Before public void init() throws Exception { em = getEmFactory().createEntityManager(); initDatabaseUsingDataset(em, DBUNIT_DATASET_FILE); } @After public void cleanup() { clearDatabaseTables(); em.close(); } @Test public void testAddEmptyGenericParameters() { BuildConfiguration original = BuildConfiguration.Builder.newBuilder().name("Test Build Configuration 1") .description("Test Build Configuration 1 Description").project(PROJECT_WITH_ID_1) .repositoryConfiguration(REPOSITORY_CONFIGURATION_ID_1).buildScript("mvn install") .genericParameters(GENERIC_PARAMETERS_EMPTY).buildEnvironment(BUILD_ENVIRONMENT_WITH_ID_1).build(); em.getTransaction().begin(); em.persist(original); em.getTransaction().commit(); BuildConfiguration obtained = em.find(BuildConfiguration.class, original.getId()); assertEquals(0, obtained.getGenericParameters().size()); } @Test(expected = RollbackException.class) public void testFailToCreateBCWithoutRepoConfig() { BuildConfiguration bc = BuildConfiguration.Builder.newBuilder().name("Test Build Configuration 1") .project(PROJECT_WITH_ID_1).buildScript("mvn install").buildEnvironment(BUILD_ENVIRONMENT_WITH_ID_1) .build(); em.getTransaction().begin(); em.persist(bc); em.getTransaction().commit(); } @Test public void testAllowToChangeRepoConfigInBC() { RepositoryConfiguration defaultRepositoryConfiguration = em.find(RepositoryConfiguration.class, 1); RepositoryConfiguration secondRepositoryConfiguration = em.find(RepositoryConfiguration.class, 2); BuildConfiguration bc = BuildConfiguration.Builder.newBuilder().name("Test Build Configuration 1") .project(PROJECT_WITH_ID_1).repositoryConfiguration(defaultRepositoryConfiguration) .buildScript("mvn install").buildEnvironment(BUILD_ENVIRONMENT_WITH_ID_1).build(); em.getTransaction().begin(); em.persist(bc); em.getTransaction().commit(); em.getTransaction().begin(); BuildConfiguration loadedBc = em.find(BuildConfiguration.class, bc.getId()); loadedBc.setRepositoryConfiguration(secondRepositoryConfiguration); em.getTransaction().commit(); em.clear(); assertEquals(2, em.find(BuildConfiguration.class, loadedBc.getId()).getRepositoryConfiguration().getId() .intValue()); } @Test public void testAddGenericParameters() { Map<String, String> genericParameters = new HashMap<>(); genericParameters.put(KEY1, VALUE1); BuildConfiguration original = createBc("Test Build Configuration 1", "Test Build Configuration 1 Description", genericParameters); em.getTransaction().begin(); em.persist(original); em.getTransaction().commit(); BuildConfiguration obtained = em.find(BuildConfiguration.class, original.getId()); assertEquals(1, obtained.getGenericParameters().size()); assertEquals(VALUE1, obtained.getGenericParameters().get(KEY1)); } @Test public void testAddSameGenericParametersInto2BCs() { final String KEY2 = "key2"; final String VALUE2 = "value2"; Map<String, String> genericParameters = new HashMap<>(); genericParameters.put(KEY1, VALUE1); genericParameters.put(KEY2, VALUE2); BuildConfiguration original1 = createBc("Test Build Configuration 1", "Test Build Configuration 1 Description", genericParameters); BuildConfiguration original2 = createBc("Test Build Configuration 2", "Test Build Configuration 2 Description", genericParameters); em.getTransaction().begin(); em.persist(original1); em.persist(original2); em.getTransaction().commit(); BuildConfiguration obtained1 = em.find(BuildConfiguration.class, original1.getId()); assertEquals(2, obtained1.getGenericParameters().size()); assertEquals(VALUE1, obtained1.getGenericParameters().get(KEY1)); assertEquals(VALUE2, obtained1.getGenericParameters().get(KEY2)); BuildConfiguration obtained2 = em.find(BuildConfiguration.class, original1.getId()); assertEquals(2, obtained2.getGenericParameters().size()); assertEquals(VALUE1, obtained2.getGenericParameters().get(KEY1)); assertEquals(VALUE2, obtained2.getGenericParameters().get(KEY2)); } @Test public void testRetrieveAuditedGenericParameters() { //given String key = "key"; String initialValue = "initialValue"; String updatedValue = "updatedValue"; Map<String, String> initialParameters = new HashMap<>(); initialParameters.put(key, initialValue); Map<String, String> updatedParameters = new HashMap<>(); updatedParameters.put(key, updatedValue); //when BuildConfiguration buildConfiguration = createBc("auditing test", "description", initialParameters); em.getTransaction().begin(); em.persist(buildConfiguration); em.getTransaction().commit(); buildConfiguration.setGenericParameters(updatedParameters); buildConfiguration.setDescription("updated description"); em.getTransaction().begin(); em.persist(buildConfiguration); em.getTransaction().commit(); //then BuildConfiguration obtained = em.find(BuildConfiguration.class, buildConfiguration.getId()); AuditReader reader = AuditReaderFactory.get(em); List<Number> revisions = reader.getRevisions(BuildConfiguration.class, obtained.getId()); assertEquals(2, revisions.size()); Number firstRevision = revisions.get(0); BuildConfiguration oldBuildConfiguration = reader.find(BuildConfiguration.class, obtained.getId(), firstRevision); Number secondRevision = revisions.get(1); BuildConfiguration newBuildConfiguration = reader.find(BuildConfiguration.class, obtained.getId(), secondRevision); Assert.assertEquals(oldBuildConfiguration.getGenericParameters().get(key), initialValue); Assert.assertEquals(newBuildConfiguration.getGenericParameters().get(key), updatedValue); BuildConfiguration buildConfigurationOld = getByIdRev(buildConfiguration.getId(), firstRevision.intValue()); BuildConfigurationAudited auditedOld = BuildConfigurationAudited .fromBuildConfiguration(buildConfigurationOld, firstRevision.intValue()); Assert.assertEquals(auditedOld.getGenericParameters().get(key), initialValue); BuildConfiguration buildConfigurationNew = getByIdRev(buildConfiguration.getId(), secondRevision.intValue()); BuildConfigurationAudited auditedNew = BuildConfigurationAudited .fromBuildConfiguration(buildConfigurationNew, secondRevision.intValue()); Assert.assertEquals(auditedNew.getGenericParameters().get(key), updatedValue); } private BuildConfiguration getByIdRev(Integer buildConfigurationId, Integer revision) { return (BuildConfiguration) AuditReaderFactory.get(em).createQuery() .forEntitiesAtRevision(BuildConfiguration.class, revision) .add(AuditEntity.id().eq(buildConfigurationId)).addOrder(AuditEntity.revisionNumber().desc()) .getSingleResult(); } private BuildConfiguration createBc(String name, String description, Map<String, String> genericParameters) { return BuildConfiguration.Builder.newBuilder().name(name).description(description) .project(PROJECT_WITH_ID_1).repositoryConfiguration(REPOSITORY_CONFIGURATION_ID_1) .buildScript("mvn install").genericParameters(genericParameters) .buildEnvironment(BUILD_ENVIRONMENT_WITH_ID_1).build(); } }