package com.jivesoftware.os.amzabot.deployable;
import com.jivesoftware.os.amza.api.PartitionClient;
import com.jivesoftware.os.amza.api.PartitionClientProvider;
import com.jivesoftware.os.amza.api.RingPartitionProperties;
import com.jivesoftware.os.amza.api.partition.Consistency;
import com.jivesoftware.os.amza.api.partition.Durability;
import com.jivesoftware.os.amza.api.partition.PartitionName;
import com.jivesoftware.os.amza.api.partition.PartitionProperties;
import com.jivesoftware.os.amza.api.ring.RingMember;
import com.jivesoftware.os.amza.api.wal.KeyUtil;
import com.jivesoftware.os.amza.client.test.InMemoryPartitionClient;
import com.jivesoftware.os.amzabot.deployable.bot.AmzaBotCoalmineConfig;
import com.jivesoftware.os.amzabot.deployable.bot.AmzaBotCoalmineService;
import com.jivesoftware.os.amzabot.deployable.bot.AmzaBotCoalminer;
import com.jivesoftware.os.jive.utils.ordered.id.ConstantWriterIdProvider;
import com.jivesoftware.os.jive.utils.ordered.id.OrderIdProvider;
import com.jivesoftware.os.jive.utils.ordered.id.OrderIdProviderImpl;
import com.jivesoftware.os.routing.bird.deployable.InstanceConfig;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListMap;
import org.merlin.config.BindInterfaceToConfiguration;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class AmzaBotCoalmineTest {
private AmzaBotCoalmineService service;
@BeforeMethod
public void setUp() throws Exception {
OrderIdProvider orderIdProvider = new OrderIdProviderImpl(
new ConstantWriterIdProvider(1));
Map<PartitionName, PartitionClient> indexes = new ConcurrentHashMap<>();
PartitionClientProvider partitionClientProvider = new PartitionClientProvider() {
@Override
public PartitionClient getPartition(PartitionName partitionName) throws Exception {
return indexes.computeIfAbsent(partitionName,
partitionName1 -> new InMemoryPartitionClient(new RingMember("member1"),
new ConcurrentSkipListMap<>(),
new ConcurrentSkipListMap<>(KeyUtil.lexicographicalComparator()),
orderIdProvider));
}
@Override
public PartitionClient getPartition(PartitionName partitionName, int desiredRingSize, PartitionProperties partitionProperties) throws Exception {
return getPartition(partitionName);
}
@Override
public RingPartitionProperties getProperties(PartitionName partitionName) throws Exception {
return null;
}
};
InstanceConfig instanceConfig = BindInterfaceToConfiguration.bindDefault(InstanceConfig.class);
instanceConfig.setInstanceName(1);
AmzaBotConfig amzaBotConfig = BindInterfaceToConfiguration.bindDefault(AmzaBotConfig.class);
AmzaBotCoalmineConfig amzaBotCoalmineConfig = BindInterfaceToConfiguration.bindDefault(AmzaBotCoalmineConfig.class);
amzaBotCoalmineConfig.setEnabled(false);
amzaBotCoalmineConfig.setFrequencyMs(60_000L);
amzaBotCoalmineConfig.setCoalmineCapacity(10L);
amzaBotCoalmineConfig.setCanarySizeThreshold(10);
amzaBotCoalmineConfig.setHesitationMs(1);
amzaBotCoalmineConfig.setDurability(String.valueOf(Durability.fsync_async));
amzaBotCoalmineConfig.setConsistency(String.valueOf(Consistency.leader_quorum));
amzaBotCoalmineConfig.setRingSize(1);
amzaBotCoalmineConfig.setClientOrdering(true);
service = new AmzaBotCoalmineService(
instanceConfig,
amzaBotConfig,
amzaBotCoalmineConfig,
partitionClientProvider,
new AmzaKeyClearingHousePool());
service.start();
}
@AfterMethod
public void tearDown() throws Exception {
service.stop();
}
@Test
public void testOneMiner() throws Exception {
AmzaBotCoalminer amzaBotCoalminer = service.newMiner();
amzaBotCoalminer.run();
}
@Test
public void testWaitOnCoalminers() throws Exception {
Thread.sleep(1_000L);
}
}