aboutsummaryrefslogtreecommitdiffstats
path: root/generic-resource-api/provider/src/test/java/org/onap/sdnc/northbound/util/MDSALUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'generic-resource-api/provider/src/test/java/org/onap/sdnc/northbound/util/MDSALUtil.java')
-rw-r--r--generic-resource-api/provider/src/test/java/org/onap/sdnc/northbound/util/MDSALUtil.java158
1 files changed, 158 insertions, 0 deletions
diff --git a/generic-resource-api/provider/src/test/java/org/onap/sdnc/northbound/util/MDSALUtil.java b/generic-resource-api/provider/src/test/java/org/onap/sdnc/northbound/util/MDSALUtil.java
new file mode 100644
index 00000000..6586c8e3
--- /dev/null
+++ b/generic-resource-api/provider/src/test/java/org/onap/sdnc/northbound/util/MDSALUtil.java
@@ -0,0 +1,158 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.sdnc.northbound.util;
+
+import com.google.common.base.Optional;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationInputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ServiceTopologyOperationOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.Services;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformationBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.data.ServiceDataBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.information.ServiceInformationBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.Service;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.ServiceBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.ServiceKey;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.response.information.ServiceResponseInformationBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.status.ServiceStatusBuilder;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+import java.util.concurrent.Future;
+import java.util.function.Function;
+
+
+/**
+ * This uill class provides utility to build yang objects using a recursive syntax that resembles the tree structure
+ * when defining the same yang object in json format.
+ *
+ * For Example
+ * <pre>
+ * {@code
+ * import static org.onap.sdnc.northbound.util.MDSALUtil.*;
+ * ServiceTopologyOperationInput input = build(
+ * serviceTopologyOperationInput()
+ * .setSdncRequestHeader(build(sdncRequestHeader()
+ * .setSvcRequestId("svc-request-id: xyz")
+ * .setSvcAction(SvcAction.Assign)
+ * ))
+ * .setRequestInformation(build(requestInformation()
+ * .setRequestId("request-id: xyz")
+ * .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
+ * ))
+ * .setServiceInformation(build(serviceInformationBuilder()
+ * .setServiceInstanceId("service-instance-id: xyz")
+ * ))
+ * );
+ * }
+ * </pre>
+ */
+public class MDSALUtil {
+
+ public static ServiceTopologyOperationInputBuilder serviceTopologyOperationInput() {
+ return new ServiceTopologyOperationInputBuilder();
+ }
+
+
+ public static ServiceTopologyOperationOutputBuilder serviceTopologyOperationOutput(){
+ return new ServiceTopologyOperationOutputBuilder();
+ }
+
+
+ public static SdncRequestHeaderBuilder sdncRequestHeader() {
+ return new SdncRequestHeaderBuilder();
+ }
+
+
+ public static RequestInformationBuilder requestInformation() {
+ return new RequestInformationBuilder();
+ }
+
+ public static ServiceResponseInformationBuilder serviceResponseInformation(){
+ return new ServiceResponseInformationBuilder();
+ }
+
+ public static ServiceInformationBuilder serviceInformationBuilder() {
+ return new ServiceInformationBuilder();
+ }
+
+
+ public static ServiceBuilder service(){return new ServiceBuilder();}
+
+
+ public static ServiceDataBuilder serviceData(){return new ServiceDataBuilder();}
+
+
+ public static ServiceStatusBuilder serviceStatus(){return new ServiceStatusBuilder();}
+
+ public static <P> P build(Builder<P> b) {
+ return b == null? null :b.build();
+ }
+
+ public static <O> O result(Future<RpcResult<O>> future, Function<RpcResult<O>,O> function) throws Exception {
+ return function.apply(future.get());
+ }
+
+ public static <I,O> O rpc(Function<I,Future<RpcResult<O>>> rpc,Function<RpcResult<O>,O> function,I input) throws Exception {
+ Future<RpcResult<O>> future = rpc.apply(input);
+ return function.apply(future.get());
+ }
+
+
+
+ /** @return Service - the Service object read from the DataBroker or null if none was found */
+ public static Service read(DataBroker dataBroker,String serviceKey, LogicalDatastoreType logicalDatastoreType) throws Exception {
+ InstanceIdentifier serviceInstanceIdentifier = InstanceIdentifier.<Services>builder(Services.class)
+ .child(Service.class, new ServiceKey(serviceKey)).build();
+ ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
+ Optional<Service> data = (Optional<Service>) readTx.read(logicalDatastoreType, serviceInstanceIdentifier).get();
+ if(!data.isPresent()){
+ return null;
+ }
+
+
+ //The toString() value from a Service object returned form data.get() is different than the toString() value
+ //from a Service Object constructed from a Builder. This makes it difficult to compare deltas when doing a
+ // assertEquals. That why we rebuild it her to solve that problem.
+ Service service = data.get();
+ return build(
+ (new ServiceBuilder(service))
+ .setServiceStatus(build(
+ service.getServiceStatus() == null ? null : new ServiceStatusBuilder(service.getServiceStatus())
+ ))
+ .setServiceData(build(
+ service.getServiceData() == null ? null : new ServiceDataBuilder(service.getServiceData())
+ ))
+ );
+ }
+
+
+
+
+
+
+
+}