2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.yangjmxgenerator;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.fail;
13 import com.google.common.base.Preconditions;
14 import com.google.common.collect.ImmutableList;
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
19 import org.junit.Before;
20 import org.junit.Ignore;
21 import org.junit.Test;
22 import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.NameConflictException;
23 import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.YangModelSearchUtils;
24 import org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl;
25 import org.opendaylight.yangtools.yang.common.YangConstants;
26 import org.opendaylight.yangtools.yang.model.api.Module;
27 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
31 public class ModuleMXBeanEntryNameConflictTest extends AbstractYangTest {
33 private static final Logger LOG = LoggerFactory.getLogger(ModuleMXBeanEntryNameConflictTest.class);
35 public static final String PACKAGE_NAME = "pack2";
37 private final List<String> testedModules = ImmutableList.of(
38 "config-test-duplicate-attribute-in-list",
39 "config-test-duplicate-attribute-in-runtime-and-mxbean",
40 "config-test-duplicate-attribute-runtime-bean",
41 "config-test-duplicate-attribute",
42 "config-test-generated-attributes-name-conflict",
43 "config-test-runtime-bean-list-name-conflict2",
44 "config-test-runtime-bean-list-name-conflict",
45 "config-test-runtime-bean-name-conflict2",
46 "config-test-runtime-bean-name-conflict");
47 private final Map<String, String> testedYangModulesToExpectedConflictingName = new HashMap<>();
51 testedYangModulesToExpectedConflictingName.put("config-test-duplicate-attribute", "DtoA");
52 testedYangModulesToExpectedConflictingName.put("config-test-duplicate-attribute-in-list", "DtoA");
53 testedYangModulesToExpectedConflictingName.put("config-test-duplicate-attribute-runtime-bean", "DtoA");
54 testedYangModulesToExpectedConflictingName.put("config-test-generated-attributes-name-conflict", "StateB");
55 testedYangModulesToExpectedConflictingName.put("config-test-runtime-bean-list-name-conflict",
56 "StateARuntimeMXBean");
57 testedYangModulesToExpectedConflictingName.put("config-test-runtime-bean-list-name-conflict2",
58 "StateARuntimeMXBean");
59 testedYangModulesToExpectedConflictingName.put("config-test-runtime-bean-name-conflict",
60 "StateARuntimeMXBean");
61 testedYangModulesToExpectedConflictingName.put("config-test-runtime-bean-name-conflict2",
62 "StateARuntimeMXBean");
63 testedYangModulesToExpectedConflictingName.put("config-test-duplicate-attribute-in-runtime-and-mxbean", "port");
66 private Module loadYangs(final String testedModule, final String moduleName) {
67 final List<String> yangs = new ArrayList<>();
68 yangs.add("/ietf-inet-types.yang");
69 yangs.add("/duplicates/" + testedModule + YangConstants.RFC6020_YANG_FILE_EXTENSION);
70 yangs.addAll(getConfigApiYangs());
72 this.context = YangParserTestUtils.parseYangResources(ModuleMXBeanEntryNameConflictTest.class, yangs);
73 this.namesToModules = YangModelSearchUtils.mapModulesByNames(this.context.getModules());
74 this.configModule = this.namesToModules.get(ConfigConstants.CONFIG_MODULE);
75 final Module module = this.namesToModules.get(moduleName);
76 Preconditions.checkNotNull(module, "Cannot get module %s from %s", moduleName, this.namesToModules.keySet());
82 public void testNameConflicts() {
83 for (final String moduleName : testedModules) {
84 final Module testedModule = loadYangs(moduleName, moduleName);
87 LOG.debug("Testing {}", moduleName);
88 ModuleMXBeanEntry.create(testedModule, new HashMap<>(), this.context,
89 new TypeProviderWrapper(new TypeProviderImpl(this.context)), PACKAGE_NAME);
90 fail(moduleName + " did not cause a name conflict and should");
91 } catch (final NameConflictException e) {
92 assertEquals(this.testedYangModulesToExpectedConflictingName.get(moduleName), e.getConflictingName());