/** * Copyright 2014 SAP AG * * 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.aim.api.measurement.dataset; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.aim.api.measurement.AbstractRecord; import org.aim.artifacts.records.ResponseTimeRecord; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class DatasetTest { DatasetBuilder dsBuilder; private static final String NUM_USERS_PARAM = "numUsers"; private static final String OPERATION_1 = "op1"; private static final String OPERATION_2 = "op2"; private static final int numRecords = 30; private static final int numUsers_1 = 1; private static final int numUsers_2 = 5; private static final int numUsers_3 = 10; private static final int numConfigurations = 6; private static final int numInputParams = 3; private static final int numObservationParams = 3; private List<Long> timestamps = new ArrayList<>(); private List<Long> responseTimes = new ArrayList<>(); @Before public void createDataset() { List<AbstractRecord> records = new ArrayList<>(); for (int i = 0; i < numRecords / numConfigurations; i++) { timestamps.add(new Long(i)); responseTimes.add(new Long(i * 2)); records.add(new ResponseTimeRecord(i, OPERATION_1, i * 2)); records.add(new ResponseTimeRecord(i, OPERATION_2, i * 2)); } dsBuilder = new DatasetBuilder(ResponseTimeRecord.class); for (AbstractRecord record : records) { Set<Parameter> parameters = new TreeSet<>(); parameters.add(new Parameter(NUM_USERS_PARAM, numUsers_1)); dsBuilder.addRecord(record, parameters); parameters = new HashSet<>(); parameters.add(new Parameter(NUM_USERS_PARAM, numUsers_2)); dsBuilder.addRecord(record, parameters); parameters = new HashSet<>(); parameters.add(new Parameter(NUM_USERS_PARAM, numUsers_3)); dsBuilder.addRecord(record, parameters); } } @Test public void testDatasetCreation() { Dataset dataset = dsBuilder.build(); Assert.assertEquals(ResponseTimeRecord.class, dataset.getRecordType()); Assert.assertEquals(numRecords, dataset.getRecords().size()); Assert.assertEquals(numConfigurations, dataset.getAllParameterConfigurations().size()); Assert.assertEquals(numConfigurations, dataset.getRows().size()); Set<String> selection = new HashSet<String>(); selection.add(NUM_USERS_PARAM); selection.add(ResponseTimeRecord.PAR_OPERATION); selection.add(ResponseTimeRecord.PAR_PROCESS_ID); Assert.assertEquals(selection.hashCode() + ResponseTimeRecord.class.hashCode(), dataset.getRecordStructureHash()); String[] header = { ResponseTimeRecord.PAR_CALL_ID, ResponseTimeRecord.PAR_OPERATION, ResponseTimeRecord.PAR_PROCESS_ID, ResponseTimeRecord.PAR_RESPONSE_TIME, ResponseTimeRecord.PAR_TIMESTAMP, NUM_USERS_PARAM }; String[] types = { "Long", "String", "String", "Long", "Long", "Integer" }; Assert.assertArrayEquals(header, dataset.getHeader()); Assert.assertArrayEquals(types, dataset.getTypes()); Assert.assertArrayEquals(types, dataset.getTypes()); Assert.assertEquals(numInputParams, dataset.getInputParameterNames().size()); Assert.assertEquals(numObservationParams, dataset.getObservationPropertiesNames().size()); Assert.assertTrue(dataset.getObservationPropertiesNames().contains(ResponseTimeRecord.PAR_RESPONSE_TIME)); Assert.assertTrue(dataset.getInputParameterNames().contains(NUM_USERS_PARAM)); Assert.assertTrue(dataset.getValues(ResponseTimeRecord.PAR_TIMESTAMP).containsAll(timestamps)); Assert.assertTrue(dataset.getValues(ResponseTimeRecord.PAR_RESPONSE_TIME).containsAll(responseTimes)); Assert.assertTrue(dataset.getValues(ResponseTimeRecord.PAR_TIMESTAMP, new ResponseTimeRecord().getType(ResponseTimeRecord.PAR_TIMESTAMP)).containsAll(timestamps)); Assert.assertTrue(dataset.getValues(ResponseTimeRecord.PAR_RESPONSE_TIME, new ResponseTimeRecord().getType(ResponseTimeRecord.PAR_RESPONSE_TIME)).containsAll(responseTimes)); } }