blob: ff8bd824562555de49098fe132f5a5b2f20d49a9 [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.yang.runtime.impl;
import org.junit.Test;
import org.onosproject.yang.compiler.datamodel.YangNode;
import org.onosproject.yang.compiler.datamodel.YangRevision;
import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getDateInStringFormat;
/**
* Unit test for model registry.
*/
public class DefaultYangModelRegistryTest {
private static final String SCHEMA_NAME_3 = "ietf-network3";
private static final String INTERFACE_NAME_3 =
"org.onosproject.yang.gen.v1.ietfnetwork3.rev20151208.IetfNetwork3";
private static final String SCHEMA_NAME_4_14 = "ietf-network4@2014-12-08";
private static final String SCHEMA_NAME_4_15 = "ietf-network4@2015-12-08";
private static final String SCHEMA_NAME_4_16 = "ietf-network4@2016-12-08";
private static final String SCHEMA_NAME_4_17 = "ietf-network4@2017-12-08";
private static final String SCHEMA_NAME_4 = "ietf-network4";
private static final String INTERFACE_NAME_REV_14 =
"org.onosproject.yang.gen.v1.ietfnetwork4.rev20141208.IetfNetwork4";
private static final String INTERFACE_NAME_REV_15 =
"org.onosproject.yang.gen.v1.ietfnetwork4.rev20151208.IetfNetwork4";
private static final String INTERFACE_NAME_REV_16 =
"org.onosproject.yang.gen.v1.ietfnetwork4.rev20161208.IetfNetwork4";
private static final String INTERFACE_NAME_REV_17 =
"org.onosproject.yang.gen.v1.ietfnetwork4.rev20171208.IetfNetwork4";
private static final String INTERFACE_NAME_NO_REV =
"org.onosproject.yang.gen.v1.ietfnetwork4.IetfNetwork4";
private static final String CHECK = "check";
private static final String DATE_NAMESPACE = "2015-12-08";
private static final String NAMESPACE =
"urn:ietf:params:xml:ns:yang:ietf-network4:check:namespace";
private final TestYangSchemaNodeProvider provider =
new TestYangSchemaNodeProvider();
/**
* Unit test case in which schema node should be present.
*
* @throws IOException when fails to do IO operation
*/
@Test
public void testForGetSchemaNode()
throws IOException {
provider.processSchemaRegistry();
List<YangNode> nodes = new ArrayList<>();
DefaultYangModelRegistry registry = provider.registry();
YangSchemaNode yangNode = registry.getForSchemaName(SCHEMA_NAME_3);
assertThat(true, is(SCHEMA_NAME_3.equals(yangNode.getName())));
yangNode = registry.getForRegClassName(INTERFACE_NAME_3);
assertThat(true, is(SCHEMA_NAME_3.equals(yangNode.getName())));
Class<?> cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(INTERFACE_NAME_3.equals(cls.getName())));
//Unregister service
nodes.add((YangNode) yangNode);
provider.unRegister(nodes);
yangNode = registry.getForSchemaName(SCHEMA_NAME_3);
assertThat(true, is(yangNode == null));
yangNode = registry.getForRegClassName(INTERFACE_NAME_3);
assertThat(true, is(yangNode == null));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(cls == null));
}
/**
* Unit test case in which schema node should be present with multi
* revisions.
*
* @throws IOException when fails to do IO operation
*/
@Test
public void testForGetSchemaNodeWhenNoRevision()
throws IOException {
provider.processSchemaRegistry();
DefaultYangModelRegistry registry = provider.registry();
List<YangNode> nodes = new ArrayList<>();
//Service with rev.
YangSchemaNode yangNode = registry.getForSchemaName(SCHEMA_NAME_4_15);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_15);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
Class<?> cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(INTERFACE_NAME_REV_15.equals(cls.getName())));
//unregister SERVICE_NAME_REV_15.
nodes.add((YangNode) yangNode);
provider.unRegister(nodes);
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(yangNode != null));
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_15);
assertThat(true, is(yangNode == null));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(cls == null));
//Here the yangNode should be the node which does not have revision.
// asset should pass with false.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(((YangNode) yangNode).getRevision() == null));
//---------------------------------------------------------------//
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
yangNode = registry.getForRegClassName(INTERFACE_NAME_NO_REV);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(INTERFACE_NAME_NO_REV.equals(cls.getName())));
//unregister SERVICE_NAME_NO_REV.
nodes.add((YangNode) yangNode);
provider.unRegister(nodes);
//Here the yangNode should be the node which have different revision.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(yangNode != null));
assertThat(true, is(((YangNode) yangNode).getRevision() != null));
yangNode = registry.getForRegClassName(INTERFACE_NAME_NO_REV);
assertThat(true, is(yangNode == null));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(cls == null));
}
/**
* Unit test case in which schema node should be present with multi
* revisions.
*
* @throws IOException when fails to do IO operation
*/
@Test
public void testForGetSchemaNodeWhenMultiRevision()
throws IOException {
provider.processSchemaRegistry();
DefaultYangModelRegistry registry = provider.registry();
List<YangNode> nodes = new ArrayList<>();
//Service with rev.
YangSchemaNode yangNode = registry.getForSchemaName(SCHEMA_NAME_4_15);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_15);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
Class<?> cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(INTERFACE_NAME_REV_15.equals(cls.getName())));
//Unregister SERVICE_NAME_REV_15.
nodes.add((YangNode) yangNode);
provider.unRegister(nodes);
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(yangNode != null));
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_15);
assertThat(true, is(yangNode == null));
//Here the yangNode should be the node which does not have revision.
// asset should pass with false.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(((YangNode) yangNode).getRevision() == null));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(cls != null));
//---------------------------------------------------------------//
//Here the yangNode should be the node which does not have revision.
// asset should pass with false.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(((YangNode) yangNode).getRevision() == null));
yangNode = registry.getForSchemaName(SCHEMA_NAME_4_16);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_16);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(INTERFACE_NAME_REV_16.equals(cls.getName())));
//Unregister SERVICE_NAME_REV_16.
nodes.add((YangNode) yangNode);
provider.unRegister(nodes);
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_16);
assertThat(true, is(yangNode == null));
//Here the yangNode should be the node which have different revision.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(((YangNode) yangNode).getRevision() == null));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(cls != null));
//---------------------------------------------------------------//
//Service with different revision.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4_17);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_17);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(INTERFACE_NAME_REV_17.equals(cls.getName())));
//Unregister SERVICE_NAME_REV_17.
nodes.add((YangNode) yangNode);
provider.unRegister(nodes);
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_17);
assertThat(true, is(yangNode == null));
//Here the yangNode should be the node which have different revision.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(((YangNode) yangNode).getRevision() == null));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(cls != null));
//---------------------------------------------------------------//
//Service no revision.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
yangNode = registry.getForRegClassName(INTERFACE_NAME_NO_REV);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(INTERFACE_NAME_NO_REV.equals(cls.getName())));
//Unregister SERVICE_NAME_NO_REV.
nodes.add((YangNode) yangNode);
provider.unRegister(nodes);
yangNode = registry.getForRegClassName(INTERFACE_NAME_NO_REV);
assertThat(true, is(yangNode == null));
//Here the yangNode should be the node which have different revision.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(yangNode != null));
assertThat(true, is(((YangNode) yangNode).getRevision() != null));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(cls != null));
//---------------------------------------------------------------//
//Service with different revision.
yangNode = registry.getForSchemaName(SCHEMA_NAME_4_14);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_14);
assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(INTERFACE_NAME_REV_14.equals(cls.getName())));
//Unregister SERVICE_NAME_REV_14.
nodes.add((YangNode) yangNode);
provider.unRegister(nodes);
yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
assertThat(true, is(yangNode == null));
yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_14);
assertThat(true, is(yangNode == null));
cls = registry.getRegisteredClass(yangNode);
assertThat(true, is(cls == null));
}
/**
* get schema for namespace in decode test.
*/
@Test
public void testGetNodeWrtNamespace() {
provider.processSchemaRegistry();
DefaultYangModelRegistry registry = provider.registry();
YangSchemaNode yangNode = registry.getForNameSpace(NAMESPACE, false);
assertThat(true, is(CHECK.equals(yangNode.getName())));
YangRevision rev = ((YangNode) yangNode).getRevision();
assertThat(true, is(rev != null));
String date = getDateInStringFormat((YangNode) yangNode);
assertThat(true, is(DATE_NAMESPACE.equals(date)));
}
}