X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fyang-jmx-generator%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyangjmxgenerator%2FModuleMXBeanEntryNameConflictTest.java;fp=opendaylight%2Fconfig%2Fyang-jmx-generator%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyangjmxgenerator%2FModuleMXBeanEntryNameConflictTest.java;h=deef08a292e6d5a7853796effeaa85fc5096773e;hb=9fb64948564e252018f9b1e13e7cea2c92f991aa;hp=0000000000000000000000000000000000000000;hpb=1742b3894614be478c333a1043ced8ef1bc5dc84;p=controller.git diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryNameConflictTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryNameConflictTest.java new file mode 100644 index 0000000000..deef08a292 --- /dev/null +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryNameConflictTest.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.config.yangjmxgenerator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.Test; +import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.NameConflictException; +import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.YangModelSearchUtils; +import org.opendaylight.yangtools.sal.binding.yang.types.TypeProviderImpl; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Preconditions; + +public class ModuleMXBeanEntryNameConflictTest extends AbstractYangTest { + + private static final Logger logger = LoggerFactory + .getLogger(ModuleMXBeanEntryNameConflictTest.class); + + public static final String PACKAGE_NAME = "pack2"; + Map testedFilesToYangModules = new HashMap<>(); + Map testedYangModulesToExpectedConflictingName = new HashMap<>(); + + @Test + public void testNameConflicts() throws Exception { + prepareSamples(); + prepareExceptionAssertions(); + + for (Map.Entry currentTestEntry : testedFilesToYangModules + .entrySet()) { + final String moduleName = currentTestEntry.getValue(); + final File yangFile = currentTestEntry.getKey(); + Module testedModule = loadYangs(yangFile, moduleName); + + try { + logger.debug("Testing {}", yangFile); + ModuleMXBeanEntry.create(testedModule, + new HashMap(), context, + new TypeProviderWrapper(new TypeProviderImpl(context)), + PACKAGE_NAME); + fail(yangFile.toString() + + " did not cause a name conflict and should"); + } catch (NameConflictException e) { + assertEquals( + testedYangModulesToExpectedConflictingName + .get(moduleName), + e.getConflictingName()); + } + } + } + + private void prepareSamples() { + File first = new File(getClass().getResource( + "/duplicates/config-test-duplicate-attribute-in-list.yang") + .getFile()); + File dir = first.getParentFile(); + + for (File testYang : dir.listFiles()) { + String moduleName = getYangModuleName(testYang.getName()); + testedFilesToYangModules.put(testYang, moduleName); + } + } + + private void prepareExceptionAssertions() { + testedYangModulesToExpectedConflictingName.put( + "config-test-duplicate-attribute", "DtoA"); + testedYangModulesToExpectedConflictingName.put( + "config-test-duplicate-attribute-in-list", "DtoA"); + testedYangModulesToExpectedConflictingName.put( + "config-test-duplicate-attribute-runtime-bean", "DtoA"); + testedYangModulesToExpectedConflictingName.put( + "config-test-generated-attributes-name-conflict", "StateB"); + testedYangModulesToExpectedConflictingName.put( + "config-test-runtime-bean-list-name-conflict", + "StateARuntimeMXBean"); + testedYangModulesToExpectedConflictingName.put( + "config-test-runtime-bean-list-name-conflict2", + "StateARuntimeMXBean"); + testedYangModulesToExpectedConflictingName + .put("config-test-runtime-bean-name-conflict", "StateARuntimeMXBean"); + testedYangModulesToExpectedConflictingName.put( + "config-test-runtime-bean-name-conflict2", + "StateARuntimeMXBean"); + } + + private String getYangModuleName(String name) { + int startIndex = 0; + int endIndex = name.indexOf(".yang"); + return name.substring(startIndex, endIndex); + } + + private Module loadYangs(File testedModule, String moduleName) + throws Exception { + List yangISs = new ArrayList<>(); + yangISs.addAll(getStreams("/ietf-inet-types.yang")); + + yangISs.add(new FileInputStream(testedModule)); + + yangISs.addAll(getConfigApiYangInputStreams()); + + YangParserImpl parser = new YangParserImpl(); + Set modulesToBuild = parser.parseYangModelsFromStreams(yangISs); + // close ISs + for (InputStream is : yangISs) { + is.close(); + } + context = parser.resolveSchemaContext(modulesToBuild); + namesToModules = YangModelSearchUtils.mapModulesByNames(context + .getModules()); + configModule = namesToModules.get(ConfigConstants.CONFIG_MODULE); + final Module module = namesToModules.get(moduleName); + Preconditions.checkNotNull(module, "Cannot get module %s from %s", + moduleName, namesToModules.keySet()); + return module; + } + +}