* 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.restconf.nb.rfc8040.jersey.providers.test;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.mockito.Matchers.any;
+import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import com.google.common.base.Optional;
-import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Request;
+import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.restconf.common.context.NormalizedNodeContext;
+import org.junit.function.ThrowingRunnable;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
+import org.opendaylight.mdsal.dom.api.DOMSchemaService;
+import org.opendaylight.mdsal.dom.spi.FixedDOMSchemaService;
+import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
+import org.opendaylight.restconf.common.errors.RestconfError;
import org.opendaylight.restconf.common.patch.PatchContext;
import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
import org.opendaylight.restconf.nb.rfc8040.TestUtils;
-import org.opendaylight.restconf.nb.rfc8040.handlers.DOMMountPointServiceHandler;
import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
import org.opendaylight.restconf.nb.rfc8040.jersey.providers.spi.AbstractIdentifierAwareJaxRsProvider;
-import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
+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.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
public abstract class AbstractBodyReaderTest {
+ protected static final QName CONT_AUG_QNAME = QName.create("test-ns-aug", "container-aug").intern();
+ protected static final QName LEAF_AUG_QNAME = QName.create("test-ns-aug", "leaf-aug").intern();
protected final MediaType mediaType;
protected final SchemaContextHandler schemaContextHandler;
- protected final DOMMountPointServiceHandler mountPointServiceHandler;
+ protected final DOMMountPointService mountPointService;
- protected AbstractBodyReaderTest(SchemaContext schemaContext) throws NoSuchFieldException, IllegalAccessException {
+ protected AbstractBodyReaderTest(final EffectiveModelContext schemaContext) throws NoSuchFieldException,
+ IllegalAccessException {
mediaType = getMediaType();
schemaContextHandler = TestUtils.newSchemaContextHandler(schemaContext);
- final DOMMountPointService mountPointService = mock(DOMMountPointService.class);
- final DOMMountPoint mountPoint = mock(DOMMountPoint.class);
+ mountPointService = mock(DOMMountPointService.class);
+ final var mountPoint = mock(DOMMountPoint.class);
doReturn(Optional.of(mountPoint)).when(mountPointService).getMountPoint(any(YangInstanceIdentifier.class));
- doReturn(schemaContext).when(mountPoint).getSchemaContext();
-
- mountPointServiceHandler = DOMMountPointServiceHandler.newInstance(mountPointService);
+ doReturn(Optional.of(FixedDOMSchemaService.of(schemaContext))).when(mountPoint)
+ .getService(DOMSchemaService.class);
}
protected abstract MediaType getMediaType();
- protected static SchemaContext schemaContextLoader(final String yangPath,
- final SchemaContext schemaContext) {
+ protected static EffectiveModelContext schemaContextLoader(final String yangPath,
+ final EffectiveModelContext schemaContext) {
return TestRestconfUtils.loadSchemaContext(yangPath, schemaContext);
}
- protected static <T extends AbstractIdentifierAwareJaxRsProvider> void mockBodyReader(
- final String identifier, final T normalizedNodeProvider,
- final boolean isPost) throws NoSuchFieldException,
- SecurityException, IllegalArgumentException, IllegalAccessException {
+ protected static <T extends AbstractIdentifierAwareJaxRsProvider<?>> void mockBodyReader(
+ final String identifier, final T normalizedNodeProvider, final boolean isPost) {
final UriInfo uriInfoMock = mock(UriInfo.class);
final MultivaluedMap<String, String> pathParm = new MultivaluedHashMap<>(1);
if (!identifier.isEmpty()) {
- pathParm.put(RestconfConstants.IDENTIFIER, Collections.singletonList(identifier));
+ pathParm.put("identifier", List.of(identifier));
}
when(uriInfoMock.getPathParameters()).thenReturn(pathParm);
normalizedNodeProvider.setRequest(request);
}
- protected static void checkMountPointNormalizedNodeContext(
- final NormalizedNodeContext nnContext) {
- checkNormalizedNodeContext(nnContext);
+ protected static void checkMountPointNormalizedNodePayload(final NormalizedNodePayload nnContext) {
+ checkNormalizedNodePayload(nnContext);
assertNotNull(nnContext.getInstanceIdentifierContext().getMountPoint());
}
- protected static void checkNormalizedNodeContext(
- final NormalizedNodeContext nnContext) {
+ protected static void checkNormalizedNodePayload(final NormalizedNodePayload nnContext) {
assertNotNull(nnContext.getData());
assertNotNull(nnContext.getInstanceIdentifierContext()
.getInstanceIdentifier());
protected static void checkPatchContextMountPoint(final PatchContext patchContext) {
checkPatchContext(patchContext);
assertNotNull(patchContext.getInstanceIdentifierContext().getMountPoint());
- assertNotNull(patchContext.getInstanceIdentifierContext().getMountPoint().getSchemaContext());
+ }
+
+ protected static EffectiveModelContext modelContext(final DOMMountPoint mountPoint) {
+ return mountPoint.getService(DOMSchemaService.class)
+ .flatMap(svc -> Optional.ofNullable(svc.getGlobalContext()))
+ .orElse(null);
+ }
+
+ protected static void assertRangeViolation(final ThrowingRunnable runnable) {
+ final RestconfDocumentedException ex = assertThrows(RestconfDocumentedException.class, runnable);
+ assertEquals(Status.BAD_REQUEST, ex.getResponse().getStatusInfo());
+
+ final List<RestconfError> errors = ex.getErrors();
+ assertEquals(1, errors.size());
+
+ final RestconfError error = errors.get(0);
+ assertEquals(ErrorType.APPLICATION, error.getErrorType());
+ assertEquals(ErrorTag.INVALID_VALUE, error.getErrorTag());
+ assertEquals("bar error app tag", error.getErrorAppTag());
+ assertEquals("bar error message", error.getErrorMessage());
}
}