X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=restconf%2Frestconf-nb-rfc8040%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Frestconf%2Fnb%2Frfc8040%2Frests%2Fservices%2Fimpl%2FCreateStreamUtilTest.java;h=b5bc8c7ae89d0c7dd4cb1ed92bdf5eabdbd641e1;hb=refs%2Fchanges%2F03%2F101503%2F1;hp=edd27c49c6382eb2c4c12ef1e6735f653f7093ba;hpb=c894986ef8b0b40d7457c8c0c54a656ea0e9a521;p=netconf.git diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java index edd27c49c6..b5bc8c7ae8 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/CreateStreamUtilTest.java @@ -7,109 +7,122 @@ */ package org.opendaylight.restconf.nb.rfc8040.rests.services.impl; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertThrows; -import java.util.Collections; -import org.junit.Before; +import java.util.List; +import java.util.function.Function; +import org.junit.BeforeClass; import org.junit.Test; -import org.mockito.MockitoAnnotations; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; -import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils; +import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload; +import org.opendaylight.yangtools.yang.common.ErrorTag; +import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.ContainerLike; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; -import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; +@RunWith(MockitoJUnitRunner.StrictStubs.class) public class CreateStreamUtilTest { - private static final String PATH_FOR_NEW_SCHEMA_CONTEXT = "/streams"; + private static EffectiveModelContext SCHEMA_CTX; - private NormalizedNodeContext payload; - private EffectiveModelContext refSchemaCtx; - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - this.refSchemaCtx = - YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles(PATH_FOR_NEW_SCHEMA_CONTEXT)); + @BeforeClass + public static void setUp() throws Exception { + SCHEMA_CTX = YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/streams")); } @Test public void createStreamTest() { - this.payload = prepareDomPayload("create-data-change-event-subscription", "input", "toaster", "path"); - final DOMRpcResult result = CreateStreamUtil.createDataChangeNotifiStream(this.payload, this.refSchemaCtx); - assertEquals(result.getErrors(), Collections.emptyList()); - final NormalizedNode testedNn = result.getResult(); + final DOMRpcResult result = CreateStreamUtil.createDataChangeNotifiStream( + prepareDomPayload("create-data-change-event-subscription", RpcDefinition::getInput, "toaster", "path"), + SCHEMA_CTX); + assertEquals(List.of(), result.getErrors()); + final NormalizedNode testedNn = result.getResult(); assertNotNull(testedNn); - final NormalizedNodeContext contextRef = prepareDomPayload("create-data-change-event-subscription", "output", - "data-change-event-subscription/toaster:toaster/datastore=CONFIGURATION/scope=BASE", "stream-name"); + final NormalizedNodePayload contextRef = prepareDomPayload("create-data-change-event-subscription", + RpcDefinition::getOutput, + "data-change-event-subscription/toaster:toaster/datastore=CONFIGURATION/scope=BASE", "stream-name"); assertEquals(contextRef.getData(), testedNn); } - @Test(expected = RestconfDocumentedException.class) + @Test public void createStreamWrongValueTest() { - this.payload = prepareDomPayload("create-data-change-event-subscription", "input", "String value", "path"); - final DOMRpcResult result = CreateStreamUtil.createDataChangeNotifiStream(this.payload, this.refSchemaCtx); - assertEquals(result.getErrors(), Collections.emptyList()); + final var payload = prepareDomPayload("create-data-change-event-subscription", RpcDefinition::getInput, + "String value", "path"); + final var errors = assertThrows(RestconfDocumentedException.class, + () -> CreateStreamUtil.createDataChangeNotifiStream(payload, SCHEMA_CTX)).getErrors(); + assertEquals(1, errors.size()); + final var error = errors.get(0); + assertEquals(ErrorType.APPLICATION, error.getErrorType()); + assertEquals(ErrorTag.OPERATION_FAILED, error.getErrorTag()); + assertEquals("Instance identifier was not normalized correctly", error.getErrorMessage()); } - @Test(expected = RestconfDocumentedException.class) + @Test public void createStreamWrongInputRpcTest() { - this.payload = prepareDomPayload("create-data-change-event-subscription2", "input", "toaster", "path2"); - final DOMRpcResult result = CreateStreamUtil.createDataChangeNotifiStream(this.payload, this.refSchemaCtx); - assertEquals(result.getErrors(), Collections.emptyList()); + final var payload = prepareDomPayload("create-data-change-event-subscription2", RpcDefinition::getInput, + "toaster", "path2"); + final var errors = assertThrows(RestconfDocumentedException.class, + () -> CreateStreamUtil.createDataChangeNotifiStream(payload, SCHEMA_CTX)).getErrors(); + assertEquals(1, errors.size()); + final var error = errors.get(0); + assertEquals(ErrorType.APPLICATION, error.getErrorType()); + assertEquals(ErrorTag.OPERATION_FAILED, error.getErrorTag()); + assertEquals("Instance identifier was not normalized correctly", error.getErrorMessage()); } - private NormalizedNodeContext prepareDomPayload(final String rpcName, final String inputOutput, - final String toasterValue, final String inputOutputName) { - final EffectiveModelContext schema = this.refSchemaCtx; - final Module rpcModule = schema.findModules("sal-remote").iterator().next(); + private static NormalizedNodePayload prepareDomPayload(final String rpcName, + final Function rpcToContainer, final String toasterValue, + final String inputOutputName) { + final Module rpcModule = SCHEMA_CTX.findModules("sal-remote").iterator().next(); final QName rpcQName = QName.create(rpcModule.getQNameModule(), rpcName); - final QName rpcInputQName = QName.create(rpcModule.getQNameModule(), inputOutput); - ContainerLike rpcInputSchemaNode = null; + + ContainerLike containerSchemaNode = null; for (final RpcDefinition rpc : rpcModule.getRpcs()) { if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { - rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName); + containerSchemaNode = rpcToContainer.apply(rpc); break; } } - assertNotNull(rpcInputSchemaNode); - - final DataContainerNodeBuilder container = - Builders.containerBuilder(rpcInputSchemaNode); + assertNotNull(containerSchemaNode); final QName lfQName = QName.create(rpcModule.getQNameModule(), inputOutputName); - final DataSchemaNode lfSchemaNode = rpcInputSchemaNode.getDataChildByName(lfQName); - - assertTrue(lfSchemaNode instanceof LeafSchemaNode); + final DataSchemaNode lfSchemaNode = containerSchemaNode.getDataChildByName(lfQName); + assertThat(lfSchemaNode, instanceOf(LeafSchemaNode.class)); final Object o; if ("toaster".equals(toasterValue)) { final QName rpcQname = QName.create("http://netconfcentral.org/ns/toaster", "2009-11-20", toasterValue); - o = YangInstanceIdentifier.builder().node(rpcQname).build(); + o = YangInstanceIdentifier.of(rpcQname); } else { o = toasterValue; } - final LeafNode lfNode = Builders.leafBuilder((LeafSchemaNode) lfSchemaNode) - .withValue(o).build(); - container.withChild(lfNode); - return new NormalizedNodeContext(new InstanceIdentifierContext<>(null, rpcInputSchemaNode, null, schema), - container.build()); + return NormalizedNodePayload.of(InstanceIdentifierContext.ofStack( + SchemaInferenceStack.of(SCHEMA_CTX, Absolute.of(rpcQName, containerSchemaNode.getQName()))), + Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(containerSchemaNode.getQName())) + .withChild(ImmutableNodes.leafNode(lfQName, o)) + .build()); } }