* NormalizedNodeContainer has NodeIdentifierWithPredicates which
has to contain the map of all node keys
* (new codecs [xml,json] don't populate Attributes)
Change-Id: I5befc6d8ad5a63a04c11ad9102610be9508df672
Signed-off-by: Vaclav Demcak <vdemcak@cisco.com>
RestconfValidationUtils.checkDocumentedError(uriKeyValue != null, ErrorType.PROTOCOL, ErrorTag.DATA_MISSING,
"Missing key " + keyDefinition + " in URI.");
RestconfValidationUtils.checkDocumentedError(uriKeyValue != null, ErrorType.PROTOCOL, ErrorTag.DATA_MISSING,
"Missing key " + keyDefinition + " in URI.");
- final Object dataKeyValue = payload.getAttributeValue(keyDefinition);
- RestconfValidationUtils.checkDocumentedError(dataKeyValue != null, ErrorType.PROTOCOL, ErrorTag.DATA_MISSING,
- "Missing key " + keyDefinition.getLocalName() + " in the message body.");
-
+ final Object dataKeyValue = payload.getIdentifier().getKeyValues().get(keyDefinition);
if ( ! uriKeyValue.equals(dataKeyValue)) {
final String errMsg = "The value '" + uriKeyValue + "' for key '" + keyDefinition.getLocalName() +
if ( ! uriKeyValue.equals(dataKeyValue)) {
final String errMsg = "The value '" + uriKeyValue + "' for key '" + keyDefinition.getLocalName() +
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.opendaylight.controller.sal.restconf.impl.RestconfImpl;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.controller.sal.restconf.impl.RestconfImpl;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
final InstanceIdentifierContext<?> iiCx = controllerCx.toInstanceIdentifier(identifier);
final MapEntryNode data = Mockito.mock(MapEntryNode.class);
final QName qName = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "interface");
final InstanceIdentifierContext<?> iiCx = controllerCx.toInstanceIdentifier(identifier);
final MapEntryNode data = Mockito.mock(MapEntryNode.class);
final QName qName = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "interface");
+ final QName qNameKey = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "name");
+ final NodeIdentifierWithPredicates identWithPredicates = new NodeIdentifierWithPredicates(qName, qNameKey, "key");
Mockito.when(data.getNodeType()).thenReturn(qName);
Mockito.when(data.getNodeType()).thenReturn(qName);
- Mockito.when(data.getAttributeValue(Matchers.any(QName.class))).thenReturn("key");
+ Mockito.when(data.getIdentifier()).thenReturn(identWithPredicates);
final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data);
mockingBrokerPut(iiCx.getInstanceIdentifier(), data);
final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data);
mockingBrokerPut(iiCx.getInstanceIdentifier(), data);
restconfService.updateConfigurationData(identifier, payload);
}
restconfService.updateConfigurationData(identifier, payload);
}
- @Test(expected=RestconfDocumentedException.class)
- public void testPutConfigDataNull() {
- final String identifier = "test-interface:interfaces/interface/key";
+ @Test
+ public void testPutConfigDataCheckOnlyLastElement() {
+ final String identifier = "test-interface:interfaces/interface/key/sub-interface/subkey";
final InstanceIdentifierContext<?> iiCx = controllerCx.toInstanceIdentifier(identifier);
final MapEntryNode data = Mockito.mock(MapEntryNode.class);
final InstanceIdentifierContext<?> iiCx = controllerCx.toInstanceIdentifier(identifier);
final MapEntryNode data = Mockito.mock(MapEntryNode.class);
- final QName qName = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "interface");
+ final QName qName = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "sub-interface");
+ final QName qNameSubKey = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "sub-name");
+ final NodeIdentifierWithPredicates identWithPredicates = new NodeIdentifierWithPredicates(qName, qNameSubKey, "subkey");
Mockito.when(data.getNodeType()).thenReturn(qName);
Mockito.when(data.getNodeType()).thenReturn(qName);
- Mockito.when(data.getAttributeValue(Matchers.any(QName.class))).thenReturn(null);
+ Mockito.when(data.getIdentifier()).thenReturn(identWithPredicates);
final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data);
mockingBrokerPut(iiCx.getInstanceIdentifier(), data);
final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data);
mockingBrokerPut(iiCx.getInstanceIdentifier(), data);
restconfService.updateConfigurationData(identifier, payload);
}
restconfService.updateConfigurationData(identifier, payload);
}
+ @Test(expected=RestconfDocumentedException.class)
+ public void testPutConfigDataMissingUriKey() {
+ final String identifier = "test-interface:interfaces/interface";
+ controllerCx.toInstanceIdentifier(identifier);
+ }
+
@Test(expected=RestconfDocumentedException.class)
public void testPutConfigDataDiferentKey() {
final String identifier = "test-interface:interfaces/interface/key";
final InstanceIdentifierContext<?> iiCx = controllerCx.toInstanceIdentifier(identifier);
final MapEntryNode data = Mockito.mock(MapEntryNode.class);
final QName qName = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "interface");
@Test(expected=RestconfDocumentedException.class)
public void testPutConfigDataDiferentKey() {
final String identifier = "test-interface:interfaces/interface/key";
final InstanceIdentifierContext<?> iiCx = controllerCx.toInstanceIdentifier(identifier);
final MapEntryNode data = Mockito.mock(MapEntryNode.class);
final QName qName = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "interface");
+ final QName qNameKey = QName.create("urn:ietf:params:xml:ns:yang:test-interface", "2014-07-01", "name");
+ final NodeIdentifierWithPredicates identWithPredicates = new NodeIdentifierWithPredicates(qName, qNameKey, "notSameKey");
Mockito.when(data.getNodeType()).thenReturn(qName);
Mockito.when(data.getNodeType()).thenReturn(qName);
- Mockito.when(data.getAttributeValue(Matchers.any(QName.class))).thenReturn("notSameKey");
+ Mockito.when(data.getIdentifier()).thenReturn(identWithPredicates);
final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data);
mockingBrokerPut(iiCx.getInstanceIdentifier(), data);
final NormalizedNodeContext payload = new NormalizedNodeContext(iiCx, data);
mockingBrokerPut(iiCx.getInstanceIdentifier(), data);
list interface {
key "name";
list interface {
key "name";
+ list sub-interface {
+ key "sub-name";
+
+ leaf sub-name {
+ type string;
+ }
+ }
+
leaf name {
type string;
}
leaf name {
type string;
}