package org.dcache.services.info.base;
import org.junit.Before;
import org.junit.Test;
import java.util.Collection;
import java.util.Date;
import static org.junit.Assert.*;
public class StateChangeSetTests {
public final static String METRIC_NAME = "child-metric";
StateChangeSet _scs;
@Before
public void setUp()
{
_scs = new StateChangeSet();
}
@Test
public void testRecordNewChild() {
StateValue value = new TestStateValue( false);
_scs.recordNewChild( METRIC_NAME, value);
assertSame( "checking we get metric back", value,
_scs.getNewChildValue( METRIC_NAME));
assertTrue( "checking childIsNew ", _scs.childIsNew( METRIC_NAME));
Collection<String> newChildren = _scs.getNewChildren();
assertEquals( "checking new-children Set size ", 1, newChildren.size());
assertTrue( "checking new-children Set contents ",
newChildren.contains( METRIC_NAME));
}
@Test
public void testRecordUpdatedChild() {
StateValue value = new TestStateValue( false);
_scs.recordUpdatedChild( METRIC_NAME, value);
assertSame( "checking we get metric back", value,
_scs.getUpdatedChildValue( METRIC_NAME));
assertTrue( "checking childIsUpdated ",
_scs.childIsUpdated( METRIC_NAME));
Collection<String> updatedChildren = _scs.getUpdatedChildren();
assertEquals( "checking new-children Set size ", 1,
updatedChildren.size());
assertTrue( "checking new-children Set contents ",
updatedChildren.contains( METRIC_NAME));
}
@Test
public void testRecordRemovedChild() {
_scs.recordRemovedChild( METRIC_NAME);
assertTrue( "checking childIsRemoved ",
_scs.childIsRemoved( METRIC_NAME));
Collection<String> removedChildren = _scs.getRemovedChildren();
assertEquals( "checking new-children Set size ", 1,
removedChildren.size());
assertTrue( "checking new-children Set contents ",
removedChildren.contains( METRIC_NAME));
}
@Test
public void testRecordChildIsImmortalWith() {
assertFalse( "checking haveImmortalChild before setting",
_scs.haveImmortalChild());
_scs.recordChildIsImmortal();
assertTrue( "checking haveImmortalChild after setting",
_scs.haveImmortalChild());
}
@Test
public void testRecordNewWhenIShouldExpireDate() {
assertNull( "Test initial expire date", _scs.getWhenIShouldExpireDate());
Date someTimeInTheFuture = new Date(
System.currentTimeMillis() + 10 * 1000);
_scs.recordNewWhenIShouldExpireDate( someTimeInTheFuture);
Date expireDate = _scs.getWhenIShouldExpireDate();
assertEquals( "Check new value is recorded", someTimeInTheFuture,
expireDate);
}
@Test
public void testInitialExpireDate() {
assertNull( "Test initial expire date", _scs.getWhenIShouldExpireDate());
}
@Test
public void testRecordChildItr() {
_scs.recordChildItr( METRIC_NAME);
assertTrue( "named child not found when added",
_scs.getItrChildren().contains( METRIC_NAME));
}
@Test
public void testGetItrChildrenInitial() {
assertTrue( "checking getItrChildren() initial empty",
_scs.getItrChildren().isEmpty());
}
@Test
public void testGetItrChildrenAfterChange() {
_scs.recordChildItr( METRIC_NAME);
assertFalse( "checking getItrChildren() not empty",
_scs.getItrChildren().isEmpty());
}
@Test
public void testHasChildChangedInitial() {
assertFalse( "Checking hasChildChanged initially false",
_scs.hasChildChanged( METRIC_NAME));
}
@Test
public void testHasChildChangedAfterChange() {
_scs.recordChildItr( METRIC_NAME);
assertTrue( "Checking hasChildChanged updated correctly",
_scs.hasChildChanged( METRIC_NAME));
}
@Test
public void testHasChildChangedAfterNewChild() {
StateValue value = new TestStateValue( false);
_scs.recordNewChild( METRIC_NAME, value);
assertTrue( "Checking hasChildChanged returns true for new child",
_scs.hasChildChanged( METRIC_NAME));
}
@Test
public void testHasChildChangedAfterUpdatedChild() {
StateValue value = new TestStateValue( false);
_scs.recordUpdatedChild( METRIC_NAME, value);
assertTrue( "Checking hasChildChanged returns true for updated child",
_scs.hasChildChanged( METRIC_NAME));
}
@Test
public void testHasChildChangedAfterRemovedChild() {
_scs.recordRemovedChild( METRIC_NAME);
assertTrue( "Checking hasChildChanged returns true for updated child",
_scs.hasChildChanged( METRIC_NAME));
}
@Test
public void testHaveImmortalChildInitial() {
assertFalse( "checking initially haveImmortalChild() false",
_scs.haveImmortalChild());
}
@Test
public void testHaveImmortalChildAfterRegistered() {
_scs.recordChildIsImmortal();
assertTrue( "checking initially haveImmortalChild() true",
_scs.haveImmortalChild());
}
@Test
public void testChildIsRemovedInitial() {
assertFalse( "Checking initial childIsRemoved",
_scs.childIsRemoved( METRIC_NAME));
}
@Test
public void testChildIsRemovedAfterUpdate() {
_scs.recordRemovedChild( METRIC_NAME);
assertTrue( "Checking childIsRemoved after recording removed child",
_scs.childIsRemoved( METRIC_NAME));
}
@Test
public void testChildIsUpdatedInitial() {
assertFalse( "Checking initial childIsUpdated",
_scs.childIsUpdated( METRIC_NAME));
}
@Test
public void testChildIsUpdatedAfterUpdate() {
StateValue metricValue = new TestStateValue( true);
_scs.recordUpdatedChild( METRIC_NAME, metricValue);
assertTrue( "Checking childIsUpdated after recording updated metric",
_scs.childIsUpdated( METRIC_NAME));
}
@Test
public void testChildIsNewInitial() {
assertFalse( "Checking initial childIsNew",
_scs.childIsNew( METRIC_NAME));
}
@Test
public void testChildIsNewWithMetric() {
StateValue metricValue = new TestStateValue( true);
_scs.recordNewChild( METRIC_NAME, metricValue);
assertTrue( "Checking childIsNew after recording new metric",
_scs.childIsNew( METRIC_NAME));
}
@Test
public void testGetFreshChildValueInitial() {
assertNull( "Checking initial getFreshChildValue",
_scs.getFreshChildValue( METRIC_NAME));
}
@Test
public void testGetFreshChildValueAfterUpdate() {
StateValue metricValue = new TestStateValue( true);
_scs.recordUpdatedChild( METRIC_NAME, metricValue);
StateComponent freshComponent = _scs.getFreshChildValue( METRIC_NAME);
assertSame( "checking recovered StateComponent is what was recorded",
metricValue, freshComponent);
}
@Test
public void testGetFreshChildValueAfterNew() {
StateValue metricValue = new TestStateValue( true);
_scs.recordNewChild( METRIC_NAME, metricValue);
StateComponent freshComponent = _scs.getFreshChildValue( METRIC_NAME);
assertSame( "checking recovered StateComponent is what was recorded",
metricValue, freshComponent);
}
@Test
public void testGetFreshChildValueAfterNewAndUpdated() {
StateValue newMetricValue = new TestStateValue( true);
_scs.recordNewChild( METRIC_NAME, newMetricValue);
StateValue updatedMetricValue = new TestStateValue( true);
_scs.recordUpdatedChild( METRIC_NAME, updatedMetricValue);
StateComponent freshComponent = _scs.getFreshChildValue( METRIC_NAME);
assertSame( "checking recovered StateComponent is what was recorded",
updatedMetricValue, freshComponent);
}
@Test
public void testGetFreshChildValueAfterUpdatedAndNew() {
StateValue updatedMetricValue = new TestStateValue( true);
_scs.recordUpdatedChild( METRIC_NAME, updatedMetricValue);
StateValue newMetricValue = new TestStateValue( true);
_scs.recordNewChild( METRIC_NAME, newMetricValue);
StateComponent freshComponent = _scs.getFreshChildValue( METRIC_NAME);
assertSame( "checking recovered StateComponent is what was recorded",
newMetricValue, freshComponent);
}
@Test
public void testNewThenUpdate() {
StateValue updatedMetricValue = new TestStateValue( true);
StateValue newMetricValue = new TestStateValue( true);
_scs.recordUpdatedChild( METRIC_NAME, updatedMetricValue);
_scs.recordNewChild( METRIC_NAME, newMetricValue);
assertFalse( "childIsUpdate", _scs.childIsUpdated( METRIC_NAME));
assertTrue( "childIsNew", _scs.childIsNew( METRIC_NAME));
assertNull( "updatedChildValue",
_scs.getUpdatedChildValue( METRIC_NAME));
assertSame( "newChildValue", newMetricValue,
_scs.getNewChildValue( METRIC_NAME));
Collection<String> updatedChildren = _scs.getUpdatedChildren();
Collection<String> newChildren = _scs.getNewChildren();
assertFalse( "updatedChildren not null", updatedChildren == null);
assertFalse( "newChildren not null", newChildren == null);
assertTrue( "updatedChildren", updatedChildren.isEmpty());
assertTrue( "newChildren", newChildren.contains( METRIC_NAME));
}
@Test
public void testUpdateThenNew() {
StateValue updatedMetricValue = new TestStateValue( true);
StateValue newMetricValue = new TestStateValue( true);
_scs.recordNewChild( METRIC_NAME, newMetricValue);
_scs.recordUpdatedChild( METRIC_NAME, updatedMetricValue);
assertTrue( "childIsUpdate", _scs.childIsUpdated( METRIC_NAME));
assertFalse( "childIsNew", _scs.childIsNew( METRIC_NAME));
assertNull( "getNewChildValue", _scs.getNewChildValue( METRIC_NAME));
assertSame( "getUpdatedChildValue", updatedMetricValue,
_scs.getUpdatedChildValue( METRIC_NAME));
Collection<String> updatedChildren = _scs.getUpdatedChildren();
Collection<String> newChildren = _scs.getNewChildren();
assertFalse( "updatedChildren not null", updatedChildren == null);
assertFalse( "newChildren not null", newChildren == null);
assertTrue( "newChildren", newChildren.isEmpty());
assertTrue( "updatedChildren", updatedChildren.contains( METRIC_NAME));
}
@Test
public void testRemovedThenNew() {
StateValue newMetricValue = new TestStateValue( true);
_scs.recordRemovedChild( METRIC_NAME);
_scs.recordNewChild( METRIC_NAME, newMetricValue);
assertTrue( "childIsNew", _scs.childIsNew( METRIC_NAME));
assertFalse( "childIsRemoved", _scs.childIsRemoved( METRIC_NAME));
assertSame( "newChildValue", newMetricValue,
_scs.getNewChildValue( METRIC_NAME));
Collection<String> removedChildren = _scs.getRemovedChildren();
Collection<String> newChildren = _scs.getNewChildren();
assertFalse( "removedChildren not null", removedChildren == null);
assertFalse( "newChildren not null", newChildren == null);
assertTrue( "removedChildren", removedChildren.isEmpty());
assertTrue( "newChildren", newChildren.contains( METRIC_NAME));
}
@Test
public void testNewThenRemoved() {
StateValue newMetricValue = new TestStateValue( true);
_scs.recordNewChild( METRIC_NAME, newMetricValue);
_scs.recordRemovedChild( METRIC_NAME);
assertFalse( "childIsNew()", _scs.childIsNew( METRIC_NAME));
assertTrue( "childIsRemoved()", _scs.childIsRemoved( METRIC_NAME));
assertNull( "newChildValue is null",
_scs.getNewChildValue( METRIC_NAME));
Collection<String> removedChildren = _scs.getRemovedChildren();
Collection<String> newChildren = _scs.getNewChildren();
assertFalse( "removedChildren not null", removedChildren == null);
assertFalse( "newChildren not null", newChildren == null);
assertTrue( "getNewChildren() is empty", newChildren.isEmpty());
assertTrue( "getRemovedChildren() has METRIC_NAME",
removedChildren.contains( METRIC_NAME));
}
@Test
public void testRemoveThenEnsureNotRemoved() {
_scs.recordRemovedChild( METRIC_NAME);
_scs.ensureChildNotRemoved( METRIC_NAME);
assertFalse( "childIsRemoved", _scs.childIsRemoved( METRIC_NAME));
Collection<String> removedChildren = _scs.getRemovedChildren();
assertFalse( "removedChildren not null", removedChildren == null);
assertFalse( "getRemovedChildren() does not have METRIC_NAME",
removedChildren.contains( METRIC_NAME));
}
@Test
public void testRemoveTwoChildrenThenEnsureNotRemovedOne() {
String metricName2 = "otherMetric";
_scs.recordRemovedChild( METRIC_NAME);
_scs.recordRemovedChild( metricName2);
_scs.ensureChildNotRemoved( METRIC_NAME);
assertFalse( "childIsRemoved", _scs.childIsRemoved( METRIC_NAME));
assertTrue( "childIsRemoved", _scs.childIsRemoved( metricName2));
Collection<String> removedChildren = _scs.getRemovedChildren();
assertFalse( "removedChildren not null", removedChildren == null);
assertFalse( "getRemovedChildren() does not have METRIC_NAME",
removedChildren.contains( METRIC_NAME));
assertTrue( "getRemovedChildren() does have metricName2",
removedChildren.contains( metricName2));
}
@Test
public void testGetNewChildrenInitial() {
Collection<String> names = _scs.getNewChildren();
assertNotNull( "Check what we get back isn't null", names);
assertTrue( "Check that initial state is empty", names.isEmpty());
}
@Test
public void testGetNewChildrenAfterRegistering() {
StateComponent metricValue = new TestStateValue( true);
_scs.recordNewChild( METRIC_NAME, metricValue);
Collection<String> names = _scs.getNewChildren();
assertNotNull( "Check what we get back isn't null", names);
assertTrue( "Check that Collection has our metric",
names.contains( METRIC_NAME));
}
@Test
public void testGetRemovedChildrenInitial() {
Collection<String> names = _scs.getRemovedChildren();
assertNotNull( "Check what we get back isn't null", names);
assertTrue( "Check that initial state is empty", names.isEmpty());
}
@Test
public void testGetRemovedChildrenAfterRegistering() {
_scs.recordRemovedChild( METRIC_NAME);
Collection<String> names = _scs.getRemovedChildren();
assertNotNull( "Check what we get back isn't null", names);
assertTrue( "Check that Collection has our metric",
names.contains( METRIC_NAME));
}
@Test
public void testGetUpdatedChildrenInitial() {
Collection<String> names = _scs.getUpdatedChildren();
assertNotNull( "Check what we get back isn't null", names);
assertTrue( "Check that initial state is empty", names.isEmpty());
}
@Test
public void testGetUpdatedChildrenAfterRegistering() {
StateComponent metricValue = new TestStateValue( true);
_scs.recordUpdatedChild( METRIC_NAME, metricValue);
Collection<String> names = _scs.getUpdatedChildren();
assertNotNull( "Check what we get back isn't null", names);
assertTrue( "Check that Collection has our metric",
names.contains( METRIC_NAME));
}
@Test
public void testGetUpdatedChildValueInitial() {
assertNull( "expect null reply initially",
_scs.getUpdatedChildValue( METRIC_NAME));
}
@Test
public void testGetUpdatedChildValueAfterRecording() {
StateComponent metricValue = new TestStateValue( true);
_scs.recordUpdatedChild( METRIC_NAME, metricValue);
StateComponent component = _scs.getUpdatedChildValue( METRIC_NAME);
assertSame( "checking we get back same value as registered",
metricValue, component);
}
@Test
public void testGetNewChildValue() {
StateComponent metricValue = new TestStateValue( true);
_scs.recordNewChild( METRIC_NAME, metricValue);
StateComponent component = _scs.getNewChildValue( METRIC_NAME);
assertSame( "Checking we get back same value as registered",
metricValue, component);
}
@Test
public void testDumpContentsInitial() {
String dump = _scs.dumpContents();
assertNotNull( "checking initial dump not null", dump);
assertTrue( "checking initial dump not empty", dump.length() > 0);
}
@Test
public void testDumpContentsAfterUpdate() {
StateComponent metricValue = new StringStateValue( "String-value", true);
String initialDump = _scs.dumpContents();
_scs.recordUpdatedChild( METRIC_NAME, metricValue);
String afterUpdateDump = _scs.dumpContents();
assertNotNull( "checking dump after update not null", afterUpdateDump);
assertTrue( "checking dump after update not empty",
afterUpdateDump.length() > 0);
assertFalse( "checking dump before and after add are not equal",
initialDump.equals( afterUpdateDump));
}
}