package org.hivedb.hibernate;
import org.hibernate.shards.ShardId;
import org.hibernate.shards.strategy.selection.ShardResolutionStrategyData;
import org.hibernate.shards.strategy.selection.ShardResolutionStrategyDataImpl;
import org.hivedb.Hive;
import org.hivedb.configuration.EntityHiveConfig;
import org.hivedb.util.database.test.Continent;
import org.hivedb.util.database.test.HiveTest;
import org.hivedb.util.database.test.HiveTest.Config;
import org.hivedb.util.database.test.WeatherReport;
import org.hivedb.util.database.test.WeatherReportImpl;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import java.util.Collection;
@Config("hive_default")
public class HiveShardResolverTest extends HiveTest {
@Test
public void testShardResolution() throws Exception {
Hive hive = getHive();
ConfigurationReader reader = new ConfigurationReader(Continent.class, WeatherReport.class);
EntityHiveConfig config = reader.getHiveConfiguration();
WeatherReport report = WeatherReportImpl.generate();
Continent asia = new AsiaticContinent();
HiveIndexer indexer = new HiveIndexer(hive);
HiveShardResolver resolver = new HiveShardResolver(config, hive);
indexer.insert(config.getEntityConfig(Continent.class), asia);
indexer.insert(config.getEntityConfig(WeatherReport.class), report);
ShardResolutionStrategyData continentData = new ShardResolutionStrategyDataImpl(Continent.class, asia.getName());
ShardResolutionStrategyData reportData = new ShardResolutionStrategyDataImpl(WeatherReport.class, report.getReportId());
Collection<ShardId> asiaIds = resolver.selectShardIdsFromShardResolutionStrategyData(continentData);
Collection<ShardId> reportIds = resolver.selectShardIdsFromShardResolutionStrategyData(reportData);
assertNotNull(asiaIds);
assertNotNull(reportIds);
assertTrue(asiaIds.size() > 0);
assertTrue(reportIds.size() > 0);
Collection<Integer> nodeIds = hive.directory().getNodeIdsOfPrimaryIndexKey(asia.getName());
for (ShardId id : asiaIds)
assertTrue(nodeIds.contains(id.getId()));
nodeIds = hive.directory().getNodeIdsOfResourceId("WeatherReport", report.getReportId());
for (ShardId id : reportIds)
assertTrue(nodeIds.contains(id.getId()));
}
}