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; }
/** * @param context * @param cube * @param value */ private void validateCostantParameter(ValidateContext context, CubeDesc cube, String value) { try { Integer.parseInt(value); } catch (Exception e) { context.addResult(ResultLevel.ERROR, "Parameter value must be number, but it is " + value); } }
if (!context.ifPass()) { return desc;
@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 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")); } }
/** * * 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); } }
/** * @param cubeDesc * @param inject * inject error into cube desc * @return */ public ValidateContext validate(CubeDesc cube, boolean inject) { ValidateContext context = new ValidateContext(); for (int i = 0; i < rules.length; i++) { IValidatorRule<CubeDesc> rule = rules[i]; rule.validate(cube, context); } if (inject) { injectResult(cube, context); } return context; }
@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); }
@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 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")); } }
/** * @param cubeDesc * @param inject * inject error into cube desc * @return */ public ValidateContext validate(CubeDesc cube, boolean inject) { ValidateContext context = new ValidateContext(); for (int i = 0; i < rules.length; i++) { IValidatorRule<CubeDesc> rule = rules[i]; rule.validate(cube, context); } if (inject) { injectResult(cube, context); } return context; }
@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 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())); } }
/** * @param context * @param cube * @param value */ private void validateColumnParameter(ValidateContext context, CubeDesc cube, String value) { DataModelDesc model = cube.getModel(); try { model.findColumn(value); } catch (IllegalArgumentException e) { context.addResult(ResultLevel.ERROR, e.getMessage()); } }
@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); } }
if (!context.ifPass()) { return cubeDesc;
@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())); }
@Override public void validate(CubeDesc cube, ValidateContext context) { RowKeyDesc row = cube.getRowkey(); if (row == null) { context.addResult(ResultLevel.ERROR, "Rowkey does not exist"); return; } RowKeyColDesc[] rcd = row.getRowKeyColumns(); if (rcd == null || rcd.length == 0) { context.addResult(ResultLevel.ERROR, "Rowkey columns do not exist"); return; } for (int i = 0; i < rcd.length; i++) { RowKeyColDesc rd = rcd[i]; if (rd.getColumn() == null || rd.getColumn().length() == 0) { context.addResult(ResultLevel.ERROR, "Rowkey column empty"); } } } }
if (!context.ifPass()) { return cubeDesc;