package org.dcache.services.info.base; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertTrue; public class PostTransitionStateExhibitorTests { private static final StatePath PATH_ITEMS = new StatePath( "items"); private static final StatePath PATH_ITEM1 = PATH_ITEMS.newChild( "item-1"); private static final StatePath PATH_ITEM2 = PATH_ITEMS.newChild( "item-2"); private static final StatePath PATH_ITEM3 = PATH_ITEMS.newChild( "item-3"); private static final StatePath PATH_METRIC_BRANCH = StatePath.parsePath( "metrics"); private static final StatePath PATH_STRING_METRIC = PATH_METRIC_BRANCH.newChild( "string-metric"); private static final StatePath PATH_INTEGER_METRIC = PATH_METRIC_BRANCH.newChild( "integer-metric"); private static final StatePath PATH_BOOLEAN_METRIC = PATH_METRIC_BRANCH.newChild( "boolean-metric"); private static final StatePath PATH_FLOAT_METRIC = PATH_METRIC_BRANCH.newChild( "float-metric"); private static final StateValue METRIC_STRING = new StringStateValue( "foo"); private static final StateValue METRIC_INTEGER = new IntegerStateValue( 42); private static final StateValue METRIC_BOOLEAN = new BooleanStateValue( false); private static final StateValue METRIC_FLOAT = new FloatingPointStateValue( Math.PI); TestStateExhibitor _exhibitor; VerifyingVisitor _visitor; MalleableStateTransition _transition; StateExhibitor _post; @Before public void setUp() { _exhibitor = new TestStateExhibitor(); _visitor = new VerifyingVisitor(); _transition = new MalleableStateTransition(); _post = new PostTransitionStateExhibitor( _exhibitor, _transition); addBranchToExhibitor( PATH_ITEM1); addBranchToExhibitor( PATH_ITEM2); addBranchToExhibitor( PATH_ITEM3); addMetricToExhibitor( PATH_STRING_METRIC, METRIC_STRING); addMetricToExhibitor( PATH_INTEGER_METRIC, METRIC_INTEGER); addMetricToExhibitor( PATH_BOOLEAN_METRIC, METRIC_BOOLEAN); addMetricToExhibitor( PATH_FLOAT_METRIC, METRIC_FLOAT); } @Test public void testVisitNoChange() { assertVisitorSatisfied(); } @Test public void testAddMetricToRoot() { addMetricToTransition( new StatePath( "new-metric"), new IntegerStateValue( 42), 0); assertVisitorSatisfied(); } @Test public void testAddBranchToRoot() { addBranchToTransition( new StatePath( "new-metric"), 0); assertVisitorSatisfied(); } @Test public void testVisitAddStringMetric() { addMetricToTransition( PATH_METRIC_BRANCH.newChild( "new-metric"), new StringStateValue( "bar"), 1); assertVisitorSatisfied(); } @Test public void testVisitAddIntegerMetric() { addMetricToTransition( PATH_METRIC_BRANCH.newChild( "new-metric"), new IntegerStateValue( 42), 1); assertVisitorSatisfied(); } @Test public void testVisitAddBooleanMetric() { addMetricToTransition( PATH_METRIC_BRANCH.newChild( "new-metric"), new BooleanStateValue( false), 1); assertVisitorSatisfied(); } @Test public void testVisitAddFloatingPointMetric() { addMetricToTransition( PATH_METRIC_BRANCH.newChild( "new-metric"), new FloatingPointStateValue( Math.E), 1); assertVisitorSatisfied(); } @Test public void testVisitAddTwoMetrics() { addMetricToTransition( PATH_METRIC_BRANCH.newChild( "new-metric-1"), new StringStateValue( "bar"), 1); addMetricToTransition( PATH_METRIC_BRANCH.newChild( "new-metric-2"), new StringStateValue( "baz"), 1); assertVisitorSatisfied(); } @Test public void testStringMetricChangesValue() { addMetricToTransition( PATH_STRING_METRIC, new StringStateValue( "baz"), 2); assertVisitorSatisfied(); } @Test public void testStringMetricChangesToIntegerValue() { addMetricToTransition( PATH_STRING_METRIC, new IntegerStateValue( 99), 2); assertVisitorSatisfied(); } @Test public void testIntegerMetricChangesToStringValue() { addMetricToTransition( PATH_INTEGER_METRIC, new StringStateValue( "yet another value"), 2); assertVisitorSatisfied(); } @Test public void testFloatingPointMetricChangesToStringValue() { addMetricToTransition( PATH_FLOAT_METRIC, new StringStateValue( "yet another value"), 2); assertVisitorSatisfied(); } @Test public void testBooleanMetricChangesToStringValue() { addMetricToTransition( PATH_BOOLEAN_METRIC, new StringStateValue( "yet another value"), 2); assertVisitorSatisfied(); } @Test public void testAddBranch() { addBranchToTransition( PATH_ITEMS.newChild( "new-item"), 1); assertVisitorSatisfied(); } @Test public void testAddBranchWithStringMetric() { StatePath newMetricBranch = PATH_METRIC_BRANCH.newChild( "new-branch"); addMetricToTransition( newMetricBranch.newChild( "string-metric"), new StringStateValue( "some value"), 1); assertVisitorSatisfied(); } @Test public void testAddBranchWithIntegerMetric() { StatePath newMetricBranch = PATH_METRIC_BRANCH.newChild( "new-branch"); addMetricToTransition( newMetricBranch.newChild( "int-metric"), new IntegerStateValue( 42), 1); assertVisitorSatisfied(); } @Test public void testAddBranchWithBooleanMetric() { StatePath newMetricBranch = PATH_METRIC_BRANCH.newChild( "new-branch"); addMetricToTransition( newMetricBranch.newChild( "boolean-metric"), new BooleanStateValue( true), 1); assertVisitorSatisfied(); } @Test public void testAddBranchWithFloatMetric() { StatePath newMetricBranch = PATH_METRIC_BRANCH.newChild( "new-branch"); addMetricToTransition( newMetricBranch.newChild( "float-metric"), new FloatingPointStateValue( Math.PI), 1); assertVisitorSatisfied(); } @Test public void testAddBranchWithMultipleMetrics() { StatePath newMetricBranch = PATH_METRIC_BRANCH.newChild( "new-branch"); addMetricToTransition( newMetricBranch.newChild( "string-metric"), new StringStateValue( "some value"), 1); addMetricToTransition( newMetricBranch.newChild( "int-metric"), new IntegerStateValue( 42), 1); assertVisitorSatisfied(); } @Test public void testAddDeepBranchWithMetric() { StatePath newMetricBranch = PATH_METRIC_BRANCH.newChild( "new-branch"); StatePath newDeeperMetricBranch = newMetricBranch.newChild( "new-branch"); addMetricToTransition( newDeeperMetricBranch.newChild( "string-metric"), new StringStateValue( "some value"), 1); assertVisitorSatisfied(); } @Test public void testAddDeepBranchWithMetricsAtDifferentLevels() { StatePath newMetricBranch = PATH_METRIC_BRANCH.newChild( "new-branch"); addMetricToTransition( newMetricBranch.newChild( "string-metric"), new StringStateValue( "new value 1"), 1); StatePath newDeeperMetricBranch = newMetricBranch.newChild( "new-branch"); addMetricToTransition( newDeeperMetricBranch.newChild( "string-metric"), new StringStateValue( "new value 2"), 2); assertVisitorSatisfied(); } @Test public void testBranchBecomesMetric() { StatePath path = PATH_METRIC_BRANCH.newChild( "will-be-metric"); _exhibitor.addBranch( path); addMetricToTransition( path, new StringStateValue( "some value"), 2); assertVisitorSatisfied(); } @Test public void testBranchWithMetricsBecomesMetric() { StatePath branchWithMetricsPath = PATH_METRIC_BRANCH.newChild( "will-be-metric"); _exhibitor.addMetric( branchWithMetricsPath.newChild( "string-metric"), new StringStateValue( "disappearing")); _exhibitor.addMetric( branchWithMetricsPath.newChild( "int-metric"), new IntegerStateValue( 31)); _exhibitor.addMetric( branchWithMetricsPath.newChild( "float-metric"), new FloatingPointStateValue( Math.PI)); _exhibitor.addMetric( branchWithMetricsPath.newChild( "boolean-metric"), new BooleanStateValue( true)); addMetricToTransition( branchWithMetricsPath, new StringStateValue( "some value"), 2); assertVisitorSatisfied(); } @Test public void testMetricBecomesPath() { StatePath path = PATH_METRIC_BRANCH.newChild( "will-be-branch"); _exhibitor.addMetric( path, new StringStateValue( "old string metric value")); _transition.updateTransitionChangingMetricToBranch( path, 2); _visitor.addExpectedBranch( path); assertVisitorSatisfied(); } @Test public void testPurgeBranchWithMetrics() { StatePath toBeRemovedBranch = PATH_METRIC_BRANCH.newChild( "remove-branch"); _exhibitor.addMetric( toBeRemovedBranch.newChild( "int-metric"), new IntegerStateValue( 42)); _exhibitor.addMetric( toBeRemovedBranch.newChild( "string-metric"), new StringStateValue( "some value")); _transition.updateTransitionForRemovingElement( toBeRemovedBranch); assertVisitorSatisfied(); } @Test public void testPurgeMetrics() { StatePath toBeRemovedMetric1 = PATH_METRIC_BRANCH.newChild( "remove-metric-1"); StatePath toBeRemovedMetric2 = PATH_METRIC_BRANCH.newChild( "remove-metric-2"); _exhibitor.addMetric( toBeRemovedMetric1, new IntegerStateValue( 42)); _exhibitor.addMetric( toBeRemovedMetric2, new IntegerStateValue( 42)); _transition.updateTransitionForRemovingElement( toBeRemovedMetric1); _transition.updateTransitionForRemovingElement( toBeRemovedMetric2); assertVisitorSatisfied(); } @Test public void testPurgeBranchWithBranches() { StatePath toBeRemovedBranch = PATH_METRIC_BRANCH.newChild( "remove-branch"); StatePath doomedBranch1 = toBeRemovedBranch.newChild( "doomed-branch-1"); StatePath doomedBranch2 = toBeRemovedBranch.newChild( "doomed-branch-2"); _exhibitor.addBranch( doomedBranch1); _exhibitor.addBranch( doomedBranch2); _transition.updateTransitionForRemovingElement( toBeRemovedBranch); assertVisitorSatisfied(); } /* * SUPPORT METHODS ... */ private void assertVisitorSatisfied() { _post.visitState( _visitor); assertTrue( _visitor.satisfied()); } private void addMetricToTransition( StatePath path, StateValue metric, int existingPathElements) { _transition.updateTransitionForNewMetric( path, metric, existingPathElements); _visitor.addExpectedMetric( path, metric); } private void addBranchToTransition( StatePath path, int existingPathElements) { _transition.updateTransitionForNewBranch( path, existingPathElements); _visitor.addExpectedBranch( path); } private void addMetricToExhibitor( StatePath path, StateValue metric) { _exhibitor.addMetric( path, metric); _visitor.addExpectedMetric( path, metric); } private void addBranchToExhibitor( StatePath path) { _exhibitor.addBranch( path); _visitor.addExpectedBranch( path); } }