private static final Logger log = LoggerFactory.getLogger(ResourceAllocator.class);
 
     private static final String[] INPUT_PREFIX = {"ra-input.", "tmp.resource-allocator."};
-    private static final String START_RELEASE_LC = "Starting release for: {}";
+    private static final String START_RELEASE = "Starting release for: {}";
+    private static final String START_RELEASE_FOR_TARGET = "Starting release for: {} on target: {}";
 
     private ResourceManager resourceManager;
     private EndPointAllocator endPointAllocator;
                 getParam(ctx, new String[] {"reservation-entity-type", "resource-entity-type"}, true, null);
         String resourceEntityVersion =
                 getParam(ctx, new String[] {"reservation-entity-version", "resource-entity-version"}, false, null);
+        String resourceTargetId =
+                getParam(ctx, new String[] {"reservation-target-id", "resource-target-id"}, false, null);
+        String resourceTargetType =
+                getParam(ctx, new String[] {"reservation-target-type", "resource-target-type"}, false, null);
 
         String endPointPosition = getParam(ctx, "endpoint-position", false, null);
 
         ResourceRequest rr = new ResourceRequest();
         rr.endPointPosition = endPointPosition;
 
+        ResourceTarget rt = new ResourceTarget();
+        rt.resourceTargetType = resourceTargetType;
+        rt.resourceTargetId = resourceTargetId;
+
         try {
-            this.release(sd, rr);
+            this.release(sd, rr, rt);
         } catch (Exception e) {
             throw new SvcLogicException(e.getMessage());
         }
     }
 
     public AllocationStatus release(ResourceEntity sd) throws Exception {
-
-        if (sd.resourceEntityVersion != null) {
-            String resourceSet = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + sd.resourceEntityVersion;
-            log.info(START_RELEASE_LC, resourceSet);
-
-            resourceManager.releaseResourceSet(resourceSet);
-        } else {
-            String resourceUnion = sd.resourceEntityType + "::" + sd.resourceEntityId;
-            log.info(START_RELEASE_LC, resourceUnion);
-
-            resourceManager.releaseResourceUnion(resourceUnion);
-        }
-
-        return AllocationStatus.Success;
-
+        return release(sd, null, null);
     }
 
     public AllocationStatus release(ResourceEntity sd, ResourceRequest rr) throws Exception {
+        return release(sd, rr, null);
+    }
+
+    public AllocationStatus release(ResourceEntity sd, ResourceRequest rr, ResourceTarget rt) throws Exception {
 
         if (sd != null && sd.resourceEntityVersion != null) {
+            String resourceSet = null;
+
             if (rr != null && rr.endPointPosition != null && !rr.endPointPosition.isEmpty()) {
-                String resourceSet = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + rr.endPointPosition
-                        + "::" + sd.resourceEntityVersion;
-                log.info(START_RELEASE_LC, resourceSet);
-                resourceManager.releaseResourceSet(resourceSet);
+                resourceSet = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + rr.endPointPosition + "::"
+                        + sd.resourceEntityVersion;
+            } else {
+                resourceSet = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + sd.resourceEntityVersion;
+            }
 
+            if (rt != null && rt.resourceTargetId != null && rt.resourceTargetType != null) {
+                String assetId = rt.resourceTargetType + "::" + rt.resourceTargetId;
+                log.info(START_RELEASE_FOR_TARGET, resourceSet, assetId);
+                resourceManager.releaseResourceSet(resourceSet, assetId);
             } else {
-                String resourceSet =
-                        sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + sd.resourceEntityVersion;
-                log.info(START_RELEASE_LC, resourceSet);
+                log.info(START_RELEASE, resourceSet);
                 resourceManager.releaseResourceSet(resourceSet);
             }
 
         } else if (sd != null && (sd.resourceEntityVersion == null || sd.resourceEntityVersion.isEmpty())) {
+            String resourceUnion = null;
+
             if (rr != null && rr.endPointPosition != null && !rr.endPointPosition.isEmpty()) {
-                String resourceUnion = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + rr.endPointPosition;
-                log.info(START_RELEASE_LC, resourceUnion);
-                resourceManager.releaseResourceUnion(resourceUnion);
+                resourceUnion = sd.resourceEntityType + "::" + sd.resourceEntityId + "::" + rr.endPointPosition;
+            } else {
+                resourceUnion = sd.resourceEntityType + "::" + sd.resourceEntityId;
+            }
 
+            if (rt != null && rt.resourceTargetId != null && rt.resourceTargetType != null) {
+                String assetId = rt.resourceTargetType + "::" + rt.resourceTargetId;
+                log.info(START_RELEASE_FOR_TARGET, resourceUnion, assetId);
+                resourceManager.releaseResourceUnion(resourceUnion, assetId);
             } else {
-                String resourceUnion = sd.resourceEntityType + "::" + sd.resourceEntityId;
-                log.info(START_RELEASE_LC, resourceUnion);
+                log.info(START_RELEASE, resourceUnion);
                 resourceManager.releaseResourceUnion(resourceUnion);
             }
         }
 
         return AllocationStatus.Success;
-
     }
 
     private QueryStatus allocateResources(SvcLogicContext ctx, boolean checkOnly, String prefix)
 
     @Override
     public org.onap.ccsdk.sli.adaptors.rm.data.Resource getResource(String assetId, String resourceName) {
         Resource rEntity = resourceJdbcDao.getResource(assetId, resourceName);
-        org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResource(rEntity);
-
-        if (r != null) {
-            List<AllocationItem> aiEntityList = allocationItemJdbcDao.getAllocationItems(rEntity.id);
-            r.allocationItems = new ArrayList<>();
-            for (AllocationItem aiEntity : aiEntityList) {
-                org.onap.ccsdk.sli.adaptors.rm.data.AllocationItem ai = createAllocationItem(r, aiEntity);
-                r.allocationItems.add(ai);
-            }
-
-            List<ResourceLoad> rlEntityList = resourceLoadJdbcDao.getResourceLoads(rEntity.id);
-            r.resourceLoadList = new ArrayList<>();
-            for (ResourceLoad rlEntity : rlEntityList) {
-                org.onap.ccsdk.sli.adaptors.rm.data.ResourceLoad rl = createResourceLoad(r, rlEntity);
-                r.resourceLoadList.add(rl);
-            }
-        }
-
-        return r;
+        return createResourceWithItems(rEntity);
     }
 
     @Override
         List<Resource> rEntityList = resourceJdbcDao.queryResources(assetIdFilter, resourceName);
         List<org.onap.ccsdk.sli.adaptors.rm.data.Resource> rlist = new ArrayList<>();
         for (Resource rEntity : rEntityList) {
-            org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResource(rEntity);
+            org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResourceWithItems(rEntity);
             rlist.add(r);
-
-            List<AllocationItem> aiEntityList = allocationItemJdbcDao.getAllocationItems(rEntity.id);
-            r.allocationItems = new ArrayList<>();
-            for (AllocationItem aiEntity : aiEntityList) {
-                org.onap.ccsdk.sli.adaptors.rm.data.AllocationItem ai = createAllocationItem(r, aiEntity);
-                r.allocationItems.add(ai);
-            }
-
-            List<ResourceLoad> rlEntityList = resourceLoadJdbcDao.getResourceLoads(rEntity.id);
-            r.resourceLoadList = new ArrayList<>();
-            for (ResourceLoad rlEntity : rlEntityList) {
-                org.onap.ccsdk.sli.adaptors.rm.data.ResourceLoad rl = createResourceLoad(r, rlEntity);
-                r.resourceLoadList.add(rl);
-            }
         }
         return rlist;
     }
         List<Resource> rEntityList = resourceJdbcDao.getResourceSet(resourceSetId);
         List<org.onap.ccsdk.sli.adaptors.rm.data.Resource> rlist = new ArrayList<>();
         for (Resource rEntity : rEntityList) {
-            org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResource(rEntity);
+            org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResourceWithItems(rEntity);
             rlist.add(r);
-
-            List<AllocationItem> aiEntityList = allocationItemJdbcDao.getAllocationItems(rEntity.id);
-            r.allocationItems = new ArrayList<>();
-            for (AllocationItem aiEntity : aiEntityList) {
-                org.onap.ccsdk.sli.adaptors.rm.data.AllocationItem ai = createAllocationItem(r, aiEntity);
-                r.allocationItems.add(ai);
-            }
-
-            List<ResourceLoad> rlEntityList = resourceLoadJdbcDao.getResourceLoads(rEntity.id);
-            r.resourceLoadList = new ArrayList<>();
-            for (ResourceLoad rlEntity : rlEntityList) {
-                org.onap.ccsdk.sli.adaptors.rm.data.ResourceLoad rl = createResourceLoad(r, rlEntity);
-                r.resourceLoadList.add(rl);
-            }
         }
         return rlist;
     }
         List<Resource> rEntityList = resourceJdbcDao.getResourceUnion(resourceUnionId);
         List<org.onap.ccsdk.sli.adaptors.rm.data.Resource> rlist = new ArrayList<>();
         for (Resource rEntity : rEntityList) {
-            org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResource(rEntity);
+            org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResourceWithItems(rEntity);
             rlist.add(r);
+        }
+        return rlist;
+    }
 
-            List<AllocationItem> aiEntityList = allocationItemJdbcDao.getAllocationItems(rEntity.id);
-            r.allocationItems = new ArrayList<>();
-            for (AllocationItem aiEntity : aiEntityList) {
-                org.onap.ccsdk.sli.adaptors.rm.data.AllocationItem ai = createAllocationItem(r, aiEntity);
-                r.allocationItems.add(ai);
-            }
+    @Override
+    public List<org.onap.ccsdk.sli.adaptors.rm.data.Resource> getResourceSetForAsset(String resourceSetId,
+            String assetId) {
+        List<Resource> rEntityList = resourceJdbcDao.getResourceSetForAsset(resourceSetId, assetId);
+        List<org.onap.ccsdk.sli.adaptors.rm.data.Resource> rlist = new ArrayList<>();
+        for (Resource rEntity : rEntityList) {
+            org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResourceWithItems(rEntity);
+            rlist.add(r);
+        }
+        return rlist;
+    }
 
-            List<ResourceLoad> rlEntityList = resourceLoadJdbcDao.getResourceLoads(rEntity.id);
-            r.resourceLoadList = new ArrayList<>();
-            for (ResourceLoad rlEntity : rlEntityList) {
-                org.onap.ccsdk.sli.adaptors.rm.data.ResourceLoad rl = createResourceLoad(r, rlEntity);
-                r.resourceLoadList.add(rl);
-            }
+    @Override
+    public List<org.onap.ccsdk.sli.adaptors.rm.data.Resource> getResourceUnionForAsset(String resourceUnionId,
+            String assetId) {
+        List<Resource> rEntityList = resourceJdbcDao.getResourceUnionForAsset(resourceUnionId, assetId);
+        List<org.onap.ccsdk.sli.adaptors.rm.data.Resource> rlist = new ArrayList<>();
+        for (Resource rEntity : rEntityList) {
+            org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResourceWithItems(rEntity);
+            rlist.add(r);
         }
         return rlist;
     }
         }
     }
 
+    private org.onap.ccsdk.sli.adaptors.rm.data.Resource createResourceWithItems(Resource rEntity) {
+        org.onap.ccsdk.sli.adaptors.rm.data.Resource r = createResource(rEntity);
+
+        if (r != null) {
+            List<AllocationItem> aiEntityList = allocationItemJdbcDao.getAllocationItems(rEntity.id);
+            r.allocationItems = new ArrayList<>();
+            for (AllocationItem aiEntity : aiEntityList) {
+                org.onap.ccsdk.sli.adaptors.rm.data.AllocationItem ai = createAllocationItem(r, aiEntity);
+                r.allocationItems.add(ai);
+            }
+
+            List<ResourceLoad> rlEntityList = resourceLoadJdbcDao.getResourceLoads(rEntity.id);
+            r.resourceLoadList = new ArrayList<>();
+            for (ResourceLoad rlEntity : rlEntityList) {
+                org.onap.ccsdk.sli.adaptors.rm.data.ResourceLoad rl = createResourceLoad(r, rlEntity);
+                r.resourceLoadList.add(rl);
+            }
+        }
+        return r;
+    }
+
     private org.onap.ccsdk.sli.adaptors.rm.data.Resource createResource(Resource resourceEntity) {
         if (resourceEntity == null) {
             return null;
 
--- /dev/null
+package jtest.org.onap.ccsdk.sli.adaptors.ra;
+
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.onap.ccsdk.sli.adaptors.ra.ResourceAllocator;
+import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicResource.QueryStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {"classpath:test-context.xml"})
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class TestRelease {
+
+    private static final Logger log = LoggerFactory.getLogger(TestRelease.class);
+
+    @Autowired(required = true)
+    private ResourceAllocator resourceAllocator;
+
+    @Autowired(required = true)
+    private DataSetup dataSetup;
+
+    private void setupResourceData() {
+        dataSetup.cleanup();
+
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-1::1", "EVC::TEST-1", "1");
+
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-2::1", "EVC::TEST-2", "2");
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-2::2", "EVC::TEST-2", "2");
+
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "EVC::TEST-3", "3");
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "EVC::TEST-3", "4");
+
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::1", "EVC::TEST-4", "5");
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::2", "EVC::TEST-4", "5");
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::3", "EVC::TEST-4", "6");
+
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-1::1", "EVC::TEST-1", "1");
+
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "EVC::TEST-3", "3");
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "EVC::TEST-3", "4");
+
+        dataSetup.setupRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-5::1", "EVC::TEST-5", "5");
+
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-1::1", "EVC::TEST-1", 100);
+
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-2::1", "EVC::TEST-2", 200);
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-2::2", "EVC::TEST-2", 200);
+
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "EVC::TEST-3", 300);
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "EVC::TEST-3", 400);
+
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::1", "EVC::TEST-4", 500);
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::2", "EVC::TEST-4", 500);
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::3", "EVC::TEST-4", 600);
+
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-1::1", "EVC::TEST-1", 100);
+
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "EVC::TEST-3", 300);
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "EVC::TEST-3", 400);
+
+        dataSetup.setupLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-5::1", "EVC::TEST-5", 500);
+    }
+
+    @Test
+    public void test001() throws Exception {
+
+        String t = "001";
+        log.info("============== release node " + t + " ================================");
+        log.info("=== Test release - with resource set");
+
+        setupResourceData();
+
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::1", "5"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::2", "5"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::3", "6"));
+
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::1", 500));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::2", 500));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::3", 600));
+
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("ra-input.resource-entity-type", "EVC");
+        ctx.setAttribute("ra-input.resource-entity-id", "TEST-4");
+        ctx.setAttribute("ra-input.resource-entity-version", "2");
+
+        QueryStatus st = resourceAllocator.release("NETWORK-CAPACITY", null, ctx);
+
+        Assert.assertTrue(st == QueryStatus.SUCCESS);
+
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::1", "5"));
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::2", "5"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::3", "6"));
+
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::1", 500));
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::2", 500));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::3", 600));
+    }
+
+    @Test
+    public void test002() throws Exception {
+
+        String t = "002";
+        log.info("============== query node " + t + " ================================");
+        log.info("=== Test release - with resource union");
+
+        setupResourceData();
+
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::1", "5"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::2", "5"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::3", "6"));
+
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::1", 500));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::2", 500));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::3", 600));
+
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("ra-input.resource-entity-type", "EVC");
+        ctx.setAttribute("ra-input.resource-entity-id", "TEST-4");
+
+        QueryStatus st = resourceAllocator.release("NETWORK-CAPACITY", null, ctx);
+
+        Assert.assertTrue(st == QueryStatus.SUCCESS);
+
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::1", "5"));
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::2", "5"));
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-4::3", "6"));
+
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::1", 500));
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::2", 500));
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-4::3", 600));
+    }
+
+    @Test
+    public void test003() throws Exception {
+
+        String t = "003";
+        log.info("============== release node " + t + " ================================");
+        log.info("=== Test release - with resource set on 2 ports");
+
+        setupResourceData();
+
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "4"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "4"));
+
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", 400));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", 400));
+
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("ra-input.resource-entity-type", "EVC");
+        ctx.setAttribute("ra-input.resource-entity-id", "TEST-3");
+        ctx.setAttribute("ra-input.resource-entity-version", "1");
+
+        QueryStatus st = resourceAllocator.release("NETWORK-CAPACITY", null, ctx);
+
+        Assert.assertTrue(st == QueryStatus.SUCCESS);
+
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "4"));
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "4"));
+
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", 400));
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", 400));
+    }
+
+    @Test
+    public void test004() throws Exception {
+
+        String t = "004";
+        log.info("============== release node " + t + " ================================");
+        log.info("=== Test release - with resource union on 2 ports");
+
+        setupResourceData();
+
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "4"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "4"));
+
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", 400));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", 400));
+
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("ra-input.resource-entity-type", "EVC");
+        ctx.setAttribute("ra-input.resource-entity-id", "TEST-3");
+
+        QueryStatus st = resourceAllocator.release("NETWORK-CAPACITY", null, ctx);
+
+        Assert.assertTrue(st == QueryStatus.SUCCESS);
+
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "3"));
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "4"));
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "3"));
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "4"));
+
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", 300));
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", 400));
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", 300));
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", 400));
+    }
+
+    @Test
+    public void test005() throws Exception {
+
+        String t = "005";
+        log.info("============== release node " + t + " ================================");
+        log.info("=== Test release - with resource set and asset");
+
+        setupResourceData();
+
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "4"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "4"));
+
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", 400));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", 400));
+
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("ra-input.resource-entity-type", "EVC");
+        ctx.setAttribute("ra-input.resource-entity-id", "TEST-3");
+        ctx.setAttribute("ra-input.resource-entity-version", "1");
+
+        ctx.setAttribute("ra-input.resource-target-type", "Port");
+        ctx.setAttribute("ra-input.resource-target-id", "TESTPORT-1");
+
+        QueryStatus st = resourceAllocator.release("NETWORK-CAPACITY", null, ctx);
+
+        Assert.assertTrue(st == QueryStatus.SUCCESS);
+
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "4"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "4"));
+
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", 400));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", 400));
+    }
+
+    @Test
+    public void test006() throws Exception {
+
+        String t = "006";
+        log.info("============== release node " + t + " ================================");
+        log.info("=== Test release - with resource union on 2 ports");
+
+        setupResourceData();
+
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "4"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "4"));
+
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", 400));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", 400));
+
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("ra-input.resource-entity-type", "EVC");
+        ctx.setAttribute("ra-input.resource-entity-id", "TEST-3");
+
+        ctx.setAttribute("ra-input.resource-target-type", "Port");
+        ctx.setAttribute("ra-input.resource-target-id", "TESTPORT-1");
+
+        QueryStatus st = resourceAllocator.release("NETWORK-CAPACITY", null, ctx);
+
+        Assert.assertTrue(st == QueryStatus.SUCCESS);
+
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::1", "3"));
+        Assert.assertFalse(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-1", "EVC::TEST-3::2", "4"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::1", "3"));
+        Assert.assertTrue(dataSetup.checkRangeItem("test-range-1", "Port::TESTPORT-2", "EVC::TEST-3::2", "4"));
+
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::1", 300));
+        Assert.assertFalse(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-1", "EVC::TEST-3::2", 400));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::1", 300));
+        Assert.assertTrue(dataSetup.checkLimitItem("test-limit-1", "Port::TESTPORT-2", "EVC::TEST-3::2", 400));
+    }
+}