You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/09/03 12:46:04 UTC

[10/50] [abbrv] kylin git commit: KYLIN-1904 fix DictionaryRuleTest

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 <li...@apache.org>
Authored: Thu Aug 25 12:01:46 2016 +0800
Committer: Li Yang <li...@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