public ValidateContext validate(CubeDesc cube) { ValidateContext context = new ValidateContext(); for (IValidatorRule<CubeDesc> rule : rules) { rule.validate(cube, context); } for (ValidateContext.Result result : context.getResults()) { cube.addError(result.getLevel() + " : " + result.getMessage()); } return context; }
@Test public void testCombinationIntOverflow() throws IOException { for (File f : new File(LocalFileMetadataTestCase.LOCALMETA_TEMP_DATA + "/cube_desc/").listFiles()) { if (f.getName().endsWith("bad")) { String path = f.getPath(); f.renameTo(new File(path.substring(0, path.length() - 4))); } } ValidateContext vContext = new ValidateContext(); CubeDesc desc = JsonUtil.readValue(new FileInputStream(LocalFileMetadataTestCase.LOCALMETA_TEMP_DATA + "/cube_desc/ut_cube_desc_combination_int_overflow.json"), CubeDesc.class); IValidatorRule<CubeDesc> rule = getAggregationGroupRule(); try { desc.init(getTestConfig()); } catch (Exception ex) { // as it's a failure case, it should throw exception } rule.validate(desc, vContext); assertEquals(1, vContext.getResults().length); }
@Test public void testBadDesc1() throws IOException { ValidateContext vContext = new ValidateContext(); CubeDesc desc = JsonUtil.readValue(new FileInputStream(LocalFileMetadataTestCase.LOCALMETA_TEMP_DATA + "/cube_desc/test_kylin_cube_with_slr_desc.json"), CubeDesc.class); String[] temp = Arrays.asList(desc.getAggregationGroups().get(0).getIncludes()).subList(0, 3).toArray(new String[3]); desc.getAggregationGroups().get(0).setIncludes(temp); IValidatorRule<CubeDesc> rule = getAggregationGroupRule(); rule.validate(desc, vContext); //vContext.print(System.out); assertEquals(1, vContext.getResults().length); assertEquals("Aggregation group 1 'includes' dimensions not include all the dimensions:[seller_id, META_CATEG_NAME, lstg_format_name, lstg_site_id, slr_segment_cd]", (vContext.getResults()[0].getMessage())); }
@Test public void testGoodDesc() throws IOException { DictionaryRule rule = new DictionaryRule(); for (File f : new File(LocalFileMetadataTestCase.LOCALMETA_TEST_DATA + "/cube_desc/").listFiles()) { if (!f.getName().endsWith("json")) { continue; } CubeDesc desc = JsonUtil.readValue(new FileInputStream(f), CubeDesc.class); desc.init(config); ValidateContext vContext = new ValidateContext(); rule.validate(desc, vContext); assertTrue(vContext.getResults().length == 0); } }
@Test public void testGoodDesc() throws IOException { for (File f : new File(LocalFileMetadataTestCase.LOCALMETA_TEST_DATA + "/cube_desc/").listFiles()) { CubeDesc desc = JsonUtil.readValue(new FileInputStream(f), CubeDesc.class); ValidateContext vContext = new ValidateContext(); IValidatorRule<CubeDesc> rule = new RowKeyAttrRule(); rule.validate(desc, vContext); vContext.print(System.out); assertTrue(vContext.getResults().length == 0); } }
@Test public void testGoodDesc() throws IOException { AggregationGroupRule rule = getAggregationGroupRule(); for (File f : new File(LocalFileMetadataTestCase.LOCALMETA_TEMP_DATA + "/cube_desc/").listFiles()) { if (!f.getName().endsWith("json")) { continue; } CubeDesc desc = JsonUtil.readValue(new FileInputStream(f), CubeDesc.class); desc.init(getTestConfig()); ValidateContext vContext = new ValidateContext(); rule.validate(desc, vContext); //vContext.print(System.out); assertTrue(vContext.getResults().length == 0); } }
@Test public void testBadDesc2() throws IOException { ValidateContext vContext = new ValidateContext(); CubeDesc desc = JsonUtil.readValue(new FileInputStream(LocalFileMetadataTestCase.LOCALMETA_TEMP_DATA + "/cube_desc/test_kylin_cube_with_slr_desc.json"), CubeDesc.class); desc.getAggregationGroups().get(0).getSelectRule().jointDims = new String[][] { // new String[] { "lstg_format_name", "lstg_site_id", "slr_segment_cd", "META_CATEG_NAME", "CATEG_LVL2_NAME" } }; IValidatorRule<CubeDesc> rule = getAggregationGroupRule(); rule.validate(desc, vContext); //vContext.print(System.out); assertEquals(2, vContext.getResults().length); assertEquals("Aggregation group 1 joint dimensions has overlap with more than 1 dimensions in same hierarchy: [CATEG_LVL2_NAME, META_CATEG_NAME]", (vContext.getResults()[0].getMessage())); }
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); List<DictionaryDesc> newDicts = Lists.newArrayList(desc.getDictionaries()); for (DictionaryDesc dictDesc : descs) { newDicts.add(dictDesc); } desc.setDictionaries(newDicts); desc.init(config); ValidateContext vContext = new ValidateContext(); rule.validate(desc, vContext); if (expectMessage == null) { assertTrue(vContext.getResults().length == 0); } else { assertTrue(vContext.getResults().length == 1); String actualMessage = vContext.getResults()[0].getMessage(); assertTrue(actualMessage.startsWith(expectMessage)); } } }
@Test public void testGoodBecomeBadDesc() throws IOException { AggregationGroupRule rule = new AggregationGroupRule() { @Override protected long getMaxCombinations(CubeDesc cubeDesc) { return 2; } }; for (File f : new File(LocalFileMetadataTestCase.LOCALMETA_TEMP_DATA + "/cube_desc/").listFiles()) { System.out.println(f.getName()); CubeDesc desc = JsonUtil.readValue(new FileInputStream(f), CubeDesc.class); try { desc.init(getTestConfig()); } catch (Exception e) { // Ignore any exception here, validation may fail for bad json } ValidateContext vContext = new ValidateContext(); rule.validate(desc, vContext); //vContext.print(System.out); assertTrue(vContext.getResults().length > 0); assertTrue(vContext.getResults()[0].getMessage().startsWith("Aggregation group 1 has too many combinations")); } }
@Test public void testBadDesc() throws IOException { ValidateContext vContext = new ValidateContext(); CubeDesc desc = JsonUtil.readValue(new FileInputStream(LocalFileMetadataTestCase.LOCALMETA_TEST_DATA + "/cube_desc/test_kylin_cube_with_slr_desc.json"), CubeDesc.class); desc.getRowkey().getRowKeyColumns()[2].setColumn(""); IValidatorRule<CubeDesc> rule = new RowKeyAttrRule(); rule.validate(desc, vContext); vContext.print(System.out); assertTrue(vContext.getResults().length == 1); assertTrue("Rowkey column empty".equalsIgnoreCase(vContext.getResults()[0].getMessage())); } }
@Test public void testGoodDesc2() throws IOException { ValidateContext vContext = new ValidateContext(); CubeDesc desc = JsonUtil.readValue(new FileInputStream(LocalFileMetadataTestCase.LOCALMETA_TEMP_DATA + "/cube_desc/test_kylin_cube_with_slr_desc.json"), CubeDesc.class); desc.getAggregationGroups().get(0).getSelectRule().jointDims = new String[][] { // new String[] { "lstg_format_name", "lstg_site_id", "slr_segment_cd", "CATEG_LVL2_NAME" } }; IValidatorRule<CubeDesc> rule = getAggregationGroupRule(); rule.validate(desc, vContext); //vContext.print(System.out); assertEquals(1, vContext.getResults().length); }
@Test public void testGoodDesc() throws IOException { FunctionRule rule = new FunctionRule(); File f = new File(LocalFileMetadataTestCase.LOCALMETA_TEST_DATA + "/cube_desc/ssb.json"); CubeDesc desc = JsonUtil.readValue(new FileInputStream(f), CubeDesc.class); desc.init(config); ValidateContext vContext = new ValidateContext(); rule.validate(desc, vContext); vContext.print(System.out); assertTrue(vContext.getResults().length == 0); }
/** * * Inject errors info into cubeDesc * * @param cubeDesc * @param context */ public void injectResult(CubeDesc cubeDesc, ValidateContext context) { ValidateContext.Result[] results = context.getResults(); for (int i = 0; i < results.length; i++) { ValidateContext.Result result = results[i]; cubeDesc.addError(result.getLevel() + " : " + result.getMessage(), true); } }
@Test public void testOneMandatoryColumn() { IValidatorRule<CubeDesc> rule = new MandatoryColumnRule(); rule.validate(cube, vContext); assertTrue("Failed to validate mandatory error", vContext.getResults().length == 1); assertTrue("Failed to validate mandatory error", vContext.getResults()[0].getMessage().startsWith("mandatory column")); } }
@Test public void testOneMandatoryColumn() { IValidatorRule<CubeDesc> rule = new RowKeyAttrRule(); rule.validate(cube, vContext); vContext.print(System.out); assertTrue("Failed to validate rowkey", vContext.getResults().length == 1); assertTrue("Failed to validate mandatory error", vContext.getResults()[0].getMessage().startsWith("Rowkey column")); } }
@Test public void testOneMandatoryColumn() { IValidatorRule<CubeDesc> rule = new AggregationGroupSizeRule() { /* * (non-Javadoc) * * @see * org.apache.kylin.metadata.validation.rule.AggregationGroupSizeRule * #getMaxAgrGroupSize() */ @Override protected int getMaxAgrGroupSize() { return 3; } }; rule.validate(cube, vContext); vContext.print(System.out); assertEquals("Failed to validate aggragation group error", vContext.getResults().length, 2); assertTrue("Failed to validate aggragation group error", vContext.getResults()[0].getMessage().startsWith("Length of the number")); assertTrue("Failed to validate aggragation group error", vContext.getResults()[1].getMessage().startsWith("Length of the number")); // assertTrue("Failed to validate aggragation group error", // vContext.getResults()[2].getMessage() // .startsWith("Hierachy column")); }
@Test public void testAggColumnSize() { AggregationGroupSizeRule rule = new AggregationGroupSizeRule() { /* * (non-Javadoc) * * @see * org.apache.kylin.metadata.validation.rule.AggregationGroupSizeRule * #getMaxAgrGroupSize() */ @Override protected int getMaxAgrGroupSize() { return 20; } }; rule.validate(cube, vContext); vContext.print(System.out); assertEquals("Failed to validate aggragation group error", vContext.getResults().length, 0); // assertTrue("Failed to validate aggragation group error", // vContext.getResults()[0].getMessage() // .startsWith("Aggregation group")); // assertTrue("Failed to validate aggragation group error", // vContext.getResults()[0].getMessage() // .startsWith("Hierachy column")); } }
/** * * Inject errors info into cubeDesc * * @param cubeDesc * @param context */ public void injectResult(CubeDesc cubeDesc, ValidateContext context) { ValidateContext.Result[] results = context.getResults(); for (int i = 0; i < results.length; i++) { ValidateContext.Result result = results[i]; cubeDesc.addError(result.getLevel() + " : " + result.getMessage(), true); } }
public ValidateContext validate(CubeDesc cube) { ValidateContext context = new ValidateContext(); for (IValidatorRule<CubeDesc> rule : rules) { rule.validate(cube, context); } for (ValidateContext.Result result : context.getResults()) { cube.addError(result.getLevel() + " : " + result.getMessage()); } return context; }