package org.radargun.stages.cache;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.IntStream;
import org.radargun.DistStageAck;
import org.radargun.StageResult;
import org.radargun.stages.cache.generators.ByteArrayValueGenerator;
import org.radargun.stages.cache.generators.KeyGenerator;
import org.radargun.stages.cache.generators.StringKeyGenerator;
import org.radargun.stages.cache.generators.ValueGenerator;
import org.radargun.stages.helpers.CacheSelector;
import org.radargun.state.SlaveState;
import org.radargun.traits.BasicOperations;
import org.radargun.traits.CacheInformation;
import org.radargun.traits.Lifecycle;
import org.radargun.util.CacheStageRunner;
import org.radargun.util.CacheTraitRepository;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
* @author Matej Cimbora
*/
@Test(timeOut = 30000)
public class XSReplCheckStageTest {
public void smokeTest() throws Exception {
CacheStageRunner stageRunner = new CacheStageRunner(2);
StringKeyGenerator keyGenerator = new StringKeyGenerator();
ByteArrayValueGenerator valueGenerator = new ByteArrayValueGenerator();
SlaveState slaveState = stageRunner.getSlaveState(0);
slaveState.put(KeyGenerator.KEY_GENERATOR, keyGenerator);
slaveState.put(ValueGenerator.VALUE_GENERATOR, valueGenerator);
slaveState.put(CacheSelector.CACHE_SELECTOR, new CacheSelector.Default());
slaveState = stageRunner.getSlaveState(1);
slaveState.put(KeyGenerator.KEY_GENERATOR, keyGenerator);
slaveState.put(ValueGenerator.VALUE_GENERATOR, valueGenerator);
slaveState.put(CacheSelector.CACHE_SELECTOR, new CacheSelector.Default());
Lifecycle lifecycle1 = stageRunner.getTraitImpl(Lifecycle.class, 0);
lifecycle1.start();
Lifecycle lifecycle2 = stageRunner.getTraitImpl(Lifecycle.class, 0);
lifecycle2.start();
XSReplCheckStage xsReplCheckStage1 = new XSReplCheckStage();
xsReplCheckStage1.backupValueGenerator = valueGenerator;
xsReplCheckStage1.backupCaches = Arrays.asList("test");
xsReplCheckStage1.numEntries = 100;
xsReplCheckStage1.entrySize = 1024;
XSReplCheckStage xsReplCheckStage2 = new XSReplCheckStage();
xsReplCheckStage2.backupValueGenerator = valueGenerator;
xsReplCheckStage2.backupCaches = Arrays.asList("test");
xsReplCheckStage2.numEntries = 100;
xsReplCheckStage2.entrySize = 1024;
BasicOperations basicOperations = stageRunner.getTraitImpl(BasicOperations.class);
stageRunner.replaceTraitImpl(BasicOperations.class, basicOperations, 1);
CacheInformation cacheInformation = stageRunner.getTraitImpl(CacheInformation.class);
stageRunner.replaceTraitImpl(CacheInformation.class, cacheInformation, 1);
CacheTraitRepository.BasicOperationsCache cache = (CacheTraitRepository.BasicOperationsCache) basicOperations.getCache(null);
Random random = new Random(123);
IntStream.range(0, 100).forEach(i -> {
Object key = keyGenerator.generateKey(i);
Object value = valueGenerator.generateValue(key, 1024, random);
cache.put(key, value);
});
Assert.assertEquals(cache.size(), 100);
List<DistStageAck> acks = stageRunner.executeOnSlave(new XSReplCheckStage[] {xsReplCheckStage1, xsReplCheckStage2}, new int[] {0, 1});
Assert.assertEquals(stageRunner.processAckOnMaster(xsReplCheckStage1, acks), StageResult.SUCCESS);
}
}