package rocks.inspectit.shared.cs.ci;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import org.mockito.InjectMocks;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.esotericsoftware.kryo.Kryo;
import rocks.inspectit.shared.all.exception.BusinessException;
import rocks.inspectit.shared.all.testbase.TestBase;
import rocks.inspectit.shared.cs.ci.business.impl.ApplicationDefinition;
/**
* @author Alexander Wert
*
*/
@SuppressWarnings("PMD")
public class BusinessContextDefinitionTest extends TestBase {
@InjectMocks
BusinessContextDefinition businessContextDefinition;
final int firstApplicationId = 10;
final int secondApplicationId = 20;
ApplicationDefinition firstAppDefinition;
ApplicationDefinition secondAppDefinition;
@BeforeMethod
public void init() {
firstAppDefinition = new ApplicationDefinition(firstApplicationId, "firstAppDefinition", null);
secondAppDefinition = new ApplicationDefinition(secondApplicationId, "secondAppDefinition", null);
}
/**
* Test {@link BusinessContextDefinition#addApplicationDefinition(ApplicationDefinition)} and
* {@link BusinessContextDefinition#addApplicationDefinition(ApplicationDefinition, int)}
* methods.
*/
public static class AddApplicationDefinition extends BusinessContextDefinitionTest {
@Test
public void addAtTheEnd() throws BusinessException {
// contains default application
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(1));
businessContextDefinition.addApplicationDefinition(firstAppDefinition);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(2));
businessContextDefinition.addApplicationDefinition(secondAppDefinition);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(secondAppDefinition));
}
@Test
public void addAtPosition() throws BusinessException {
// contains default application
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(1));
businessContextDefinition.addApplicationDefinition(firstAppDefinition);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(2));
businessContextDefinition.addApplicationDefinition(secondAppDefinition, 0);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(secondAppDefinition));
}
@Test(expectedExceptions = { BusinessException.class })
public void addAtNegative() throws BusinessException {
businessContextDefinition.addApplicationDefinition(firstAppDefinition, -1);
}
@Test(expectedExceptions = { BusinessException.class })
public void addAtInvalidGreatIndex() throws BusinessException {
businessContextDefinition.addApplicationDefinition(firstAppDefinition, businessContextDefinition.getApplicationDefinitions().size());
}
@Test(expectedExceptions = { BusinessException.class })
public void addNull() throws BusinessException {
businessContextDefinition.addApplicationDefinition(null);
}
@Test(expectedExceptions = { BusinessException.class })
public void addDuplicate() throws BusinessException {
businessContextDefinition.addApplicationDefinition(firstAppDefinition);
businessContextDefinition.addApplicationDefinition(firstAppDefinition);
}
}
/**
* Test {@link BusinessContextDefinition#getApplicationDefinitions()} and
* {@link BusinessContextDefinition#getApplicationDefinition(int)} methods.
*/
public static class GetApplicationDefinition extends BusinessContextDefinitionTest {
@BeforeMethod
public void initialize() throws BusinessException {
businessContextDefinition.addApplicationDefinition(firstAppDefinition);
businessContextDefinition.addApplicationDefinition(secondAppDefinition);
}
@Test
public void getApplicationDefitions() {
assertThat(businessContextDefinition.getApplicationDefinitions(), hasItem(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions(), hasItem(secondAppDefinition));
}
@Test
public void getApplicationDefitionsForIds() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinition(firstApplicationId), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinition(secondApplicationId), is(secondAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinition(ApplicationDefinition.DEFAULT_ID), is(ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION));
}
@Test(expectedExceptions = { BusinessException.class })
public void getInvalidApplication() throws BusinessException {
businessContextDefinition.getApplicationDefinition(1000);
}
}
/**
* Test {@link BusinessContextDefinition#updateApplicationDefinition(ApplicationDefinition)}
* method.
*/
public static class UpdateApplicationDefinition extends BusinessContextDefinitionTest {
@BeforeMethod
public void initialize() throws BusinessException {
businessContextDefinition.addApplicationDefinition(firstAppDefinition);
businessContextDefinition.addApplicationDefinition(secondAppDefinition);
}
@Test
public void updateApplicationDefition() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinition(firstApplicationId).getApplicationName(), equalTo("firstAppDefinition"));
assertThat(businessContextDefinition.getApplicationDefinition(secondApplicationId).getApplicationName(), equalTo("secondAppDefinition"));
firstAppDefinition.setApplicationName("newName");
businessContextDefinition.updateApplicationDefinition(firstAppDefinition);
assertThat(businessContextDefinition.getApplicationDefinition(firstApplicationId).getRevision(), is(2));
assertThat(businessContextDefinition.getApplicationDefinition(firstApplicationId).getApplicationName(), equalTo("newName"));
assertThat(businessContextDefinition.getApplicationDefinition(secondApplicationId).getApplicationName(), equalTo("secondAppDefinition"));
}
@Test(expectedExceptions = { BusinessException.class })
public void updateNull() throws BusinessException {
businessContextDefinition.updateApplicationDefinition(null);
}
@Test(expectedExceptions = { BusinessException.class })
public void updateUnknown() throws BusinessException {
businessContextDefinition.updateApplicationDefinition(new ApplicationDefinition(123456789, "unknown", null));
}
@Test(expectedExceptions = { BusinessException.class })
public void updateWithWrongRevision() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinition(firstApplicationId).getApplicationName(), equalTo("firstAppDefinition"));
assertThat(businessContextDefinition.getApplicationDefinition(secondApplicationId).getApplicationName(), equalTo("secondAppDefinition"));
Kryo kryo = new Kryo();
ApplicationDefinition firstAppDefinitionCopy_1 = kryo.copy(firstAppDefinition);
ApplicationDefinition firstAppDefinitionCopy_2 = kryo.copy(firstAppDefinition);
firstAppDefinitionCopy_1.setApplicationName("newName_1");
firstAppDefinitionCopy_2.setApplicationName("newName_2");
businessContextDefinition.updateApplicationDefinition(firstAppDefinitionCopy_1);
businessContextDefinition.updateApplicationDefinition(firstAppDefinitionCopy_2);
}
}
/**
* Test {@link BusinessContextDefinition#moveApplicationDefinition(ApplicationDefinition, int)}
* method.
*/
public static class MoveApplicationDefinition extends BusinessContextDefinitionTest {
@BeforeMethod
public void initialize() throws BusinessException {
businessContextDefinition.addApplicationDefinition(firstAppDefinition);
businessContextDefinition.addApplicationDefinition(secondAppDefinition);
}
@Test
public void moveApplicationDefinition() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(secondAppDefinition));
businessContextDefinition.moveApplicationDefinition(secondAppDefinition, 0);
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(secondAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(firstAppDefinition));
businessContextDefinition.moveApplicationDefinition(secondAppDefinition, 1);
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(secondAppDefinition));
}
@Test
public void moveToSameIndex() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(secondAppDefinition));
businessContextDefinition.moveApplicationDefinition(secondAppDefinition, 1);
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(secondAppDefinition));
}
@Test(expectedExceptions = { BusinessException.class })
public void moveToFar() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(secondAppDefinition));
businessContextDefinition.moveApplicationDefinition(secondAppDefinition, 2);
}
@Test(expectedExceptions = { BusinessException.class })
public void moveToNegativeIndex() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(secondAppDefinition));
businessContextDefinition.moveApplicationDefinition(secondAppDefinition, -1);
}
@Test(expectedExceptions = { BusinessException.class })
public void moveNull() throws BusinessException {
businessContextDefinition.moveApplicationDefinition(null, 0);
}
@Test(expectedExceptions = { BusinessException.class })
public void moveUnknown() throws BusinessException {
businessContextDefinition.moveApplicationDefinition(new ApplicationDefinition(123456789, "unknown", null), 0);
}
}
/**
* Test {@link BusinessContextDefinition#deleteApplicationDefinition(ApplicationDefinition)}
* method.
*/
public static class DeleteApplicationDefinition extends BusinessContextDefinitionTest {
@BeforeMethod
public void initialize() throws BusinessException {
businessContextDefinition.addApplicationDefinition(firstAppDefinition);
businessContextDefinition.addApplicationDefinition(secondAppDefinition);
}
@Test
public void deleteApplicationDefition() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(secondAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(2), is(ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION));
businessContextDefinition.deleteApplicationDefinition(secondAppDefinition);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(2));
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(firstAppDefinition));
assertThat(businessContextDefinition.getApplicationDefinitions().get(1), is(ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION));
businessContextDefinition.deleteApplicationDefinition(firstAppDefinition);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(1));
assertThat(businessContextDefinition.getApplicationDefinitions().get(0), is(ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION));
}
@Test
public void deleteNull() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
businessContextDefinition.deleteApplicationDefinition(null);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
}
@Test
public void deleteUnknown() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
businessContextDefinition.deleteApplicationDefinition(new ApplicationDefinition(123456789, "unknown", null));
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
}
@Test
public void deleteDefaultApplication() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
businessContextDefinition.deleteApplicationDefinition(ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
}
@Test
public void deleteTwice() throws BusinessException {
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(3));
businessContextDefinition.deleteApplicationDefinition(firstAppDefinition);
businessContextDefinition.deleteApplicationDefinition(firstAppDefinition);
assertThat(businessContextDefinition.getApplicationDefinitions(), hasSize(2));
}
}
}