/* Copyright 2012 Google, Inc.
*
* 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.arbeitspferde.groningen.display;
import org.arbeitspferde.groningen.Pipeline;
import org.arbeitspferde.groningen.PipelineId;
import org.arbeitspferde.groningen.common.ClockedExperimentDbTestCaseBase;
import org.arbeitspferde.groningen.common.EvaluatedSubject;
import org.arbeitspferde.groningen.experimentdb.SubjectStateBridge;
import org.arbeitspferde.groningen.experimentdb.jvmflags.JvmFlag;
import org.arbeitspferde.groningen.experimentdb.jvmflags.JvmFlagSet;
import org.easymock.Capture;
import org.easymock.EasyMock;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
/**
* The test for {@link DisplayMediator}
*/
public class DisplayMediatorTest extends ClockedExperimentDbTestCaseBase {
private DisplayMediator mediator;
private Pipeline pipelineMock;
Object obj1, obj2;
String displayString1, displayString2;
SubjectStateBridge subject1, subject2;
@Override
protected void setUp() throws Exception {
super.setUp();
pipelineMock = EasyMock.createNiceMock(Pipeline.class);
EasyMock.expect(pipelineMock.id()).andReturn(new PipelineId("pipeline_id")).anyTimes();
EasyMock.expect(
pipelineManagerMock.findPipelineById(new PipelineId("pipeline_id")))
.andReturn(pipelineMock).anyTimes();
EasyMock.replay(pipelineMock, pipelineManagerMock, historyDataStoreMock);
mediator = new DisplayMediator(experimentDb, historyDataStoreMock,
pipelineManagerMock, new PipelineId("pipeline_id"), mockBestPerformerScorer);
experimentDb.nextExperimentId();
}
/* Creates two objects to monitor */
private void createObjects() {
obj1 = new AtomicLong(21);
obj2 = "I am a string";
displayString1 = "test1";
displayString2 = "test2";
}
/* Creates two individuals */
private void createIndividuals() {
final JvmFlagSet.Builder builder = JvmFlagSet.builder()
.withValue(JvmFlag.HEAP_SIZE, 20)
.withValue(JvmFlag.ADAPTIVE_SIZE_DECREMENT_SCALE_FACTOR, 2)
.withValue(JvmFlag.CMS_EXP_AVG_FACTOR, 3)
.withValue(JvmFlag.CMS_INCREMENTAL_DUTY_CYCLE, 4)
.withValue(JvmFlag.CMS_INCREMENTAL_DUTY_CYCLE_MIN, 5)
.withValue(JvmFlag.CMS_INCREMENTAL_OFFSET, 6)
.withValue(JvmFlag.CMS_INCREMENTAL_SAFETY_FACTOR, 7)
.withValue(JvmFlag.CMS_INITIATING_OCCUPANCY_FRACTION, 8)
.withValue(JvmFlag.GC_TIME_RATIO, 9)
.withValue(JvmFlag.MAX_GC_PAUSE_MILLIS, 10)
.withValue(JvmFlag.MAX_HEAP_FREE_RATIO, 11)
.withValue(JvmFlag.MIN_HEAP_FREE_RATIO, 12)
.withValue(JvmFlag.NEW_RATIO, 13)
.withValue(JvmFlag.MAX_NEW_SIZE, 14)
.withValue(JvmFlag.PARALLEL_GC_THREADS, 15)
.withValue(JvmFlag.SURVIVOR_RATIO, 16)
.withValue(JvmFlag.TENURED_GENERATION_SIZE_INCREMENT, 17)
.withValue(JvmFlag.YOUNG_GENERATION_SIZE_INCREMENT, 18)
.withValue(JvmFlag.SOFT_REF_LRU_POLICY_MS_PER_MB, 19)
.withValue(JvmFlag.CMS_INCREMENTAL_MODE, 1)
.withValue(JvmFlag.CMS_INCREMENTAL_PACING, 0)
.withValue(JvmFlag.USE_CMS_INITIATING_OCCUPANCY_ONLY, 1)
.withValue(JvmFlag.USE_CONC_MARK_SWEEP_GC, 1)
.withValue(JvmFlag.USE_PARALLEL_GC, 0)
.withValue(JvmFlag.USE_PARALLEL_OLD_GC, 0)
.withValue(JvmFlag.USE_SERIAL_GC, 0);
subject1 = experimentDb.makeSubject();
subject1.storeCommandLine(builder.build());
builder.withValue(JvmFlag.HEAP_SIZE, 40)
.withValue(JvmFlag.ADAPTIVE_SIZE_DECREMENT_SCALE_FACTOR, 32)
.withValue(JvmFlag.CMS_EXP_AVG_FACTOR, 33);
subject2 = experimentDb.makeSubject();
subject2.storeCommandLine(builder.build());
}
/* Tests the maxIndividuals method */
public void testMaxIndividuals() {
assertEquals(3, mediator.maxIndv);
mediator.maxIndividuals(7);
assertEquals(7, mediator.maxIndv);
}
/* Tests the addIndividual method */
public void testAddIndividual() {
createIndividuals();
mediator.addIndividual(new EvaluatedSubject(clock, subject1, 21));
mediator.addIndividual(new EvaluatedSubject(clock, subject2, 22));
assertEquals(2, mediator.tempEvaluatedSubjects.size());
assertEquals(21.0, mediator.tempEvaluatedSubjects.get(0).getFitness());
assertEquals(22.0, mediator.tempEvaluatedSubjects.get(1).getFitness());
}
/* Tests the processGeneration method */
public void testProcessGeneration() {
createIndividuals();
EvaluatedSubject evaledSubject1Pass1 = new EvaluatedSubject(clock, subject1, 21.0, 1);
EvaluatedSubject evaledSubject2Pass1 = new EvaluatedSubject(clock, subject1, 21.0, 1);
EvaluatedSubject evaledSubject1Pass2 = new EvaluatedSubject(clock, subject1, 21.0, 2);
EvaluatedSubject evaledSubject2Pass2 = new EvaluatedSubject(clock, subject2, 24.0, 2);
EvaluatedSubject evaledSubjectReturnPass1 = new EvaluatedSubject(clock, subject1, 21.0, 1);
Capture<List<EvaluatedSubject>> captureGenList1 = new Capture<>();
Capture<List<EvaluatedSubject>> captureGenList2 = new Capture<>();
List<EvaluatedSubject> addGenReturnListPass1 = new ArrayList<>();
addGenReturnListPass1.add(evaledSubjectReturnPass1);
List<EvaluatedSubject> addGenReturnListPass2 = new ArrayList<>();
addGenReturnListPass2.add(evaledSubject2Pass2);
addGenReturnListPass2.add(evaledSubject1Pass2);
EasyMock.expect(
mockBestPerformerScorer.addGeneration(EasyMock.capture(captureGenList1)))
.andReturn(addGenReturnListPass1);
EasyMock.expect(
mockBestPerformerScorer.addGeneration(EasyMock.capture(captureGenList2)))
.andReturn(addGenReturnListPass2);
EasyMock.replay(mockBestPerformerScorer);
// first pass
mediator.addIndividual(evaledSubject1Pass1);
mediator.addIndividual(evaledSubject2Pass1);
mediator.processGeneration();
assertEquals(0, mediator.tempEvaluatedSubjects.size());
assertEquals(1, mediator.currentEvaluatedSubjects.size());
assertTrue(captureGenList1.hasCaptured());
// second pass
mediator.addIndividual(evaledSubject1Pass2);
mediator.addIndividual(evaledSubject2Pass2);
mediator.processGeneration();
assertEquals(0, mediator.tempEvaluatedSubjects.size());
assertEquals(2, mediator.currentEvaluatedSubjects.size());
}
/* Invoke processGeneration without adding individuals */
public void testEmptyProcessGeneration() {
Capture<List<EvaluatedSubject>> captureGenList = new Capture<>();
List<EvaluatedSubject> emptySubjectList = new ArrayList<>();
EasyMock.expect(
mockBestPerformerScorer.addGeneration(EasyMock.capture(captureGenList)))
.andReturn(emptySubjectList);
EasyMock.replay(mockBestPerformerScorer);
//do not add any individual
mediator.processGeneration();
assertEquals(0, mediator.tempEvaluatedSubjects.size());
assertEquals(0, mediator.currentEvaluatedSubjects.size());
}
/* Tests the monitorObject method */
public void testMonitorObject() {
createObjects();
mediator.monitorObject(obj1, displayString1);
assertEquals(1, mediator.monitoredObjects.size());
mediator.monitorObject(obj2, displayString2);
assertEquals(2, mediator.monitoredObjects.size());
}
/* Tests the stopMonitoringObject method */
public void testStopMonitoringObject() {
// object not initialized
assertFalse(mediator.stopMonitoringObject(obj2));
// object initialized but not monitored
createObjects();
mediator.monitorObject(obj1, displayString1);
assertFalse(mediator.stopMonitoringObject(obj2));
// object initialized and monitored
mediator.monitorObject(obj2, displayString1);
assertTrue(mediator.stopMonitoringObject(obj1));
assertEquals(1, mediator.monitoredObjects.size());
}
}