package com.alibaba.cobar.client.router.rules; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; import static org.testng.AssertJUnit.fail; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.alibaba.cobar.client.router.rules.ibatis.IBatisSqlActionRule; import com.alibaba.cobar.client.router.support.IBatisRoutingFact; import com.alibaba.cobar.client.support.utils.CollectionUtils; @Test public class IBatisSqlActionRuleTest { public static final String SQL_MAP_ACTION_ID = "com.alibaba.cobar.client.entity.Tweet.delete"; public static final String[] EXPECTED_SHARDS = { "shard1", "shard2", "shard3" }; private IBatisSqlActionRule rule; @BeforeMethod protected void setUp() throws Exception { rule = new IBatisSqlActionRule(SQL_MAP_ACTION_ID, "shard1, shard2, shard3"); } @AfterMethod protected void tearDown() throws Exception { rule = null; } public void testSqlActionRuleOnShardIdsNormally() { List<String> shards = rule.action(); assertTrue(CollectionUtils.isNotEmpty(shards)); assertEquals(3, shards.size()); for (String shard : shards) { assertTrue(ArrayUtils.contains(EXPECTED_SHARDS, shard)); } } public void testSqlActionRuleOnShardIdsAbnormally() { try { new IBatisSqlActionRule(SQL_MAP_ACTION_ID, ""); } catch (IllegalArgumentException e) { // pass } try { new IBatisSqlActionRule(SQL_MAP_ACTION_ID, null); } catch (IllegalArgumentException e) { // pass } } public void testSqlActionRuleOnShardIdsWithCustomActionPatternSeparatorNormally() { rule.setActionPatternSeparator(";"); List<String> shards = rule.action(); assertTrue(CollectionUtils.isNotEmpty(shards)); assertEquals(1, shards.size()); assertEquals("shard1, shard2, shard3", shards.get(0)); rule = new IBatisSqlActionRule(SQL_MAP_ACTION_ID, "shard1; shard2; shard3"); rule.setActionPatternSeparator(";"); shards = null; shards = rule.action(); assertTrue(CollectionUtils.isNotEmpty(shards)); assertEquals(3, shards.size()); for (String shard : shards) { assertTrue(ArrayUtils.contains(EXPECTED_SHARDS, shard)); } } public void testSqlActionRuleOnShardIdsWithCustomActionPatternSeparatorAbnormally() { try { rule.setActionPatternSeparator(null); } catch (IllegalArgumentException e) { // pass } } public void testSqlActionRuleOnTypePatternNormally() { IBatisRoutingFact fact = new IBatisRoutingFact(SQL_MAP_ACTION_ID, null); assertTrue(rule.isDefinedAt(fact)); fact = new IBatisRoutingFact("com.alibaba.cobar.client.entity.Tweet.del", null); assertFalse(rule.isDefinedAt(fact)); fact = new IBatisRoutingFact("com.alibaba.cobar.client.entity.Tweet", null); assertFalse(rule.isDefinedAt(fact)); fact = new IBatisRoutingFact(null, null); assertFalse(rule.isDefinedAt(fact)); } public void testSqlActionRuleOnTypePatternAbnormally(){ try{ rule.isDefinedAt(null); fail(); } catch(IllegalArgumentException e) { // pass } } }