Initial code drop of yang model driven configuration system
[controller.git] / opendaylight / config / yang-jmx-generator / src / test / java / org / opendaylight / controller / config / yangjmxgenerator / SchemaContextTest.java
diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/SchemaContextTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/SchemaContextTest.java
new file mode 100644 (file)
index 0000000..24c0257
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * 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.hamcrest.core.Is.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.opendaylight.controller.config.yangjmxgenerator.ConfigConstants.MODULE_TYPE_Q_NAME;
+import static org.opendaylight.controller.config.yangjmxgenerator.ConfigConstants.SERVICE_TYPE_Q_NAME;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableMap;
+
+public class SchemaContextTest extends AbstractYangTest {
+
+    IdentitySchemaNode findIdentityByQName(Module module, QName qName) {
+        Map<QName, IdentitySchemaNode> mapIdentitiesByQNames = mapIdentitiesByQNames(module);
+        IdentitySchemaNode found = mapIdentitiesByQNames.get(qName);
+        assertNotNull(found);
+        return found;
+    }
+
+    @Test
+    public void testReadingIdentities_threadsModule() {
+
+        IdentitySchemaNode serviceType = findIdentityByQName(configModule,
+                SERVICE_TYPE_Q_NAME);
+
+        Map<String /* identity name */, Optional<QName>> expectedIdentitiesToBases = ImmutableMap
+                .of("eventbus", Optional.<QName>absent(), "threadfactory", Optional.<QName>absent(), "threadpool",
+                        Optional.<QName>absent(), "scheduled-threadpool", Optional.<QName>absent());
+
+        assertThat(threadsModule.getIdentities().size(),
+                is(expectedIdentitiesToBases.size()));
+        assertAllIdentitiesAreExpected(threadsModule, expectedIdentitiesToBases);
+
+        IdentitySchemaNode eventBusSchemaNode = null;
+        for (IdentitySchemaNode id : threadsModule.getIdentities()) {
+            String localName = id.getQName().getLocalName();
+
+            if (localName.equals("eventbus")) {
+                eventBusSchemaNode = id;
+            }
+            // all except scheduled-threadpool should have base set to
+            // serviceType
+            if (localName.equals("scheduled-threadpool") == false) {
+                assertEquals(serviceType, id.getBaseIdentity());
+            }
+        }
+        assertNotNull(eventBusSchemaNode);
+        // check unknown schma nodes
+        List<UnknownSchemaNode> unknownSchemaNodes = eventBusSchemaNode
+                .getUnknownSchemaNodes();
+        assertEquals(1, unknownSchemaNodes.size());
+        UnknownSchemaNode usn = unknownSchemaNodes.get(0);
+        assertEquals("com.google.common.eventbus.EventBus", usn.getQName()
+                .getLocalName());
+        assertEquals(ConfigConstants.JAVA_CLASS_EXTENSION_QNAME,
+                usn.getNodeType());
+    }
+
+    private void assertAllIdentitiesAreExpected(
+            Module module,
+            Map<String /* identity name */, Optional<QName>> expectedIdentitiesToBases) {
+        Map<String /* identity name */, Optional<QName>> copyOfExpectedNames = new HashMap<>(
+                expectedIdentitiesToBases);
+        for (IdentitySchemaNode id : module.getIdentities()) {
+            String localName = id.getQName().getLocalName();
+            assertTrue("Unexpected identity " + localName,
+                    copyOfExpectedNames.containsKey(localName));
+            Optional<QName> maybeExpectedBaseQName = copyOfExpectedNames
+                    .remove(localName);
+            if (maybeExpectedBaseQName.isPresent()) {
+                assertEquals("Unexpected base identity of " + localName,
+                        maybeExpectedBaseQName.get(), id.getBaseIdentity()
+                                .getQName());
+            }
+        }
+        assertEquals("Expected identities not found " + copyOfExpectedNames,
+                Collections.EMPTY_MAP, copyOfExpectedNames);
+    }
+
+    @Test
+    public void testReadingIdentities_threadsJavaModule() {
+        Map<String /* identity name */, Optional<QName>> expectedIdentitiesToBases = ImmutableMap
+                .of("eventbus", Optional.of(MODULE_TYPE_Q_NAME), "async-eventbus", Optional.of(MODULE_TYPE_Q_NAME),
+                        "threadfactory-naming", Optional.of(MODULE_TYPE_Q_NAME), "threadpool-dynamic",
+                        Optional.of(MODULE_TYPE_Q_NAME), "thread-rpc-context", Optional.<QName>absent());
+        assertAllIdentitiesAreExpected(threadsJavaModule,
+                expectedIdentitiesToBases);
+    }
+
+}