package org.radargun.stages.query;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.IntStream;
import org.radargun.DistStageAck;
import org.radargun.StageResult;
import org.radargun.stages.test.TransactionMode;
import org.radargun.traits.Lifecycle;
import org.radargun.traits.Queryable;
import org.radargun.util.QueryStageRunner;
import org.radargun.util.QueryTraitRepository;
import org.radargun.utils.Utils;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
* @author Matej Cimbora
*/
@Test(timeOut = 30000)
public class QueryStageTest {
public void smokeTest() throws Exception {
QueryStageRunner stageRunner = new QueryStageRunner(1);
Lifecycle lifecycle = stageRunner.getTraitImpl(Lifecycle.class);
lifecycle.start();
QueryStage queryStage = new QueryStage();
queryStage.totalThreads = 5;
queryStage.duration = 3000;
queryStage.useTransactions = TransactionMode.NEVER;
QueryConfiguration queryConfiguration = new QueryConfiguration();
Utils.setField(QueryConfiguration.class, "clazz", queryConfiguration, "java.lang.Integer");
Condition.Eq eqCondition = new Condition.Eq();
eqCondition.value = new Object();
eqCondition.path = "path";
Condition.Lt ltCondition = new Condition.Lt();
ltCondition.value = Long.valueOf(1);
ltCondition.path = "path";
Condition.Any anyCondition = new Condition.Any();
Utils.setField(Condition.Any.class, "subs", anyCondition, Arrays.asList(eqCondition, ltCondition));
List<Condition> conditions = Arrays.asList(anyCondition);
queryConfiguration.conditions = conditions;
OrderBy orderBy = new OrderBy("attribute", true);
queryConfiguration.orderBy = Arrays.asList(orderBy);
queryConfiguration.projection = new String[] {"attribute1", "attribute2"};
Utils.setField(QueryStage.class, "query", queryStage, queryConfiguration);
QueryTraitRepository.Queryable queryable = (QueryTraitRepository.Queryable) stageRunner.getTraitImpl(Queryable.class);
ConcurrentHashMap cache = new ConcurrentHashMap();
queryable.setCache(cache);
IntStream.range(0, 100).forEach(i -> cache.put(i, i));
Assert.assertEquals(cache.size(), 100);
List<DistStageAck> acks = new ArrayList<>(1);
acks.add(stageRunner.executeOnSlave(queryStage, 0));
Assert.assertEquals(stageRunner.processAckOnMaster(queryStage, acks), StageResult.SUCCESS);
}
}