KYLIN-1904 fix DictionaryRuleTest
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/57a259a9 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/57a259a9 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/57a259a9 Branch: refs/heads/1.5.x-CDH5.7 Commit: 57a259a9d28484b3494fc62385a8d284c1052209 Parents: 579dfcf Author: Li Yang <liy...@apache.org> Authored: Thu Aug 25 12:01:46 2016 +0800 Committer: Li Yang <liy...@apache.org> Committed: Thu Aug 25 12:01:46 2016 +0800 ---------------------------------------------------------------------- .../model/validation/rule/DictionaryRule.java | 12 ++++++++++- .../validation/rule/DictionaryRuleTest.java | 22 ++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/57a259a9/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java index 9e6b600..d06c816 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java @@ -48,16 +48,26 @@ public class DictionaryRule implements IValidatorRule<CubeDesc> { context.addResult(ResultLevel.ERROR, "Some column in dictionaries not found"); return; } + String builder = dictDesc.getBuilderClass(); TblColRef reuseCol = dictDesc.getResuseColumnRef(); if (reuseCol == null) { + if (builder == null || builder.isEmpty()) { + context.addResult(ResultLevel.ERROR, "Column " + dictCol + " cannot have builder and reuse column both empty"); + return; + } + // Make sure the same column associate with same builder class - String builder = dictDesc.getBuilderClass(); String oldBuilder = colToBuilderMap.put(dictCol, builder); if (oldBuilder != null && !oldBuilder.equals(builder)) { context.addResult(ResultLevel.ERROR, "Column " + dictCol + " has inconsistent builders " + builder + " and " + oldBuilder); return; } } else { + if (builder != null && !builder.isEmpty()) { + context.addResult(ResultLevel.ERROR, "Column " + dictCol + " cannot have builder and reuse column both"); + return; + } + // Make sure one column only reuse another one column TblColRef oldReuseCol = colToReuseColMap.put(dictCol, reuseCol); if (oldReuseCol != null && !reuseCol.equals(oldReuseCol)) { http://git-wip-us.apache.org/repos/asf/kylin/blob/57a259a9/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java ---------------------------------------------------------------------- diff --git a/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java b/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java index e5afe48..fdbbb2c 100644 --- a/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java +++ b/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java @@ -72,20 +72,25 @@ public class DictionaryRuleTest extends LocalFileMetadataTestCase { @Test public void testBadDesc() throws IOException { - testBadDictionaryDesc("Column EDW.TEST_SITES.SITE_NAME has inconsistent builders " + "FakeBuilderClass and org.apache.kylin.dict.GlobalDictionaryBuilder", DictionaryDesc.create("SITE_NAME", null, "FakeBuilderClass")); + testDictionaryDesc("Column EDW.TEST_SITES.SITE_NAME has inconsistent builders " + "FakeBuilderClass and org.apache.kylin.dict.GlobalDictionaryBuilder", DictionaryDesc.create("SITE_NAME", null, "FakeBuilderClass")); } @Test public void testBadDesc2() throws IOException { - testBadDictionaryDesc("Column EDW.TEST_SITES.SITE_NAME has inconsistent builders " + "FakeBuilderClass and org.apache.kylin.dict.GlobalDictionaryBuilder", DictionaryDesc.create("lstg_site_id", "SITE_NAME", "FakeBuilderClass")); + testDictionaryDesc("Column DEFAULT.TEST_KYLIN_FACT.LSTG_SITE_ID cannot have builder and reuse column both", DictionaryDesc.create("lstg_site_id", "SITE_NAME", "FakeBuilderClass")); } @Test public void testBadDesc3() throws IOException { - testBadDictionaryDesc("Column DEFAULT.TEST_KYLIN_FACT.LSTG_SITE_ID used as dimension and conflict with GlobalDictBuilder", DictionaryDesc.create("lstg_site_id", null, GlobalDictionaryBuilder.class.getName())); + testDictionaryDesc("Column DEFAULT.TEST_KYLIN_FACT.LSTG_SITE_ID cannot have builder and reuse column both empty", DictionaryDesc.create("lstg_site_id", null, null)); + } + + @Test + public void testGoodDesc2() throws IOException { + testDictionaryDesc(null, DictionaryDesc.create("lstg_site_id", null, GlobalDictionaryBuilder.class.getName())); } - private void testBadDictionaryDesc(String expectMessage, DictionaryDesc... descs) throws IOException { + private void testDictionaryDesc(String expectMessage, DictionaryDesc... descs) throws IOException { DictionaryRule rule = new DictionaryRule(); File f = new File(LocalFileMetadataTestCase.LOCALMETA_TEST_DATA + "/cube_desc/test_kylin_cube_without_slr_left_join_desc.json"); CubeDesc desc = JsonUtil.readValue(new FileInputStream(f), CubeDesc.class); @@ -98,7 +103,12 @@ public class DictionaryRuleTest extends LocalFileMetadataTestCase { ValidateContext vContext = new ValidateContext(); rule.validate(desc, vContext); vContext.print(System.out); - assertTrue(vContext.getResults().length >= 1); - assertEquals(expectMessage, vContext.getResults()[0].getMessage()); + + if (expectMessage == null) { + assertTrue(vContext.getResults().length == 0); + } else { + assertTrue(vContext.getResults().length >= 1); + assertEquals(expectMessage, vContext.getResults()[0].getMessage()); + } } } \ No newline at end of file