NcmpCloudEventBuilder refactoring
[cps.git] / integration-test / src / test / groovy / org / onap / cps / integration / performance / cps / DeletePerfTest.groovy
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2023-2024 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the 'License');
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an 'AS IS' BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *  SPDX-License-Identifier: Apache-2.0
18  *  ============LICENSE_END=========================================================
19  */
20
21 package org.onap.cps.integration.performance.cps
22
23 import org.onap.cps.spi.exceptions.DataNodeNotFoundException
24
25 import java.time.OffsetDateTime
26 import org.onap.cps.api.CpsDataService
27 import org.onap.cps.integration.performance.base.CpsPerfTestBase
28
29 class DeletePerfTest extends CpsPerfTestBase {
30
31     CpsDataService objectUnderTest
32
33     def setup() { objectUnderTest = cpsDataService }
34
35     def 'Create test data (please note, subsequent tests depend on this running first).'() {
36         when: 'multiple anchors with a node with a large number of descendants is created'
37             resourceMeter.start()
38             def data = generateOpenRoadData(300)
39             addAnchorsWithData(10, CPS_PERFORMANCE_TEST_DATASPACE, LARGE_SCHEMA_SET, 'delete', data)
40             resourceMeter.stop()
41             def setupDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
42         then: 'setup duration is within expected time and memory used is within limit'
43             recordAndAssertResourceUsage('Delete test setup', 100, setupDurationInSeconds, 800, resourceMeter.getTotalMemoryUsageInMB())
44     }
45
46     def 'Delete 100 container nodes'() {
47         given: 'a list of xpaths to delete'
48             def xpathsToDelete = (1..100).collect {
49                 "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device"
50             }
51         when: 'child nodes are deleted'
52             resourceMeter.start()
53             xpathsToDelete.each {
54                 objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete1', it, OffsetDateTime.now())
55             }
56             resourceMeter.stop()
57             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
58         then: 'delete duration is within expected time and memory used is within limit'
59             recordAndAssertResourceUsage('Delete 100 containers', 2.5, deleteDurationInSeconds, 20, resourceMeter.getTotalMemoryUsageInMB())
60     }
61
62     def 'Batch delete 100 container nodes'() {
63         given: 'a list of xpaths to delete'
64             def xpathsToDelete = (1..100).collect {
65                 "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device"
66             }
67         when: 'child nodes are deleted'
68             resourceMeter.start()
69             objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete2', xpathsToDelete, OffsetDateTime.now())
70             resourceMeter.stop()
71             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
72         then: 'delete duration is within expected time and memory used is within limit'
73             recordAndAssertResourceUsage('Batch delete 100 containers', 0.6, deleteDurationInSeconds, 2, resourceMeter.getTotalMemoryUsageInMB())
74     }
75
76     def 'Delete 100 list elements'() {
77         given: 'a list of xpaths to delete'
78             def xpathsToDelete = (1..100).collect {
79                 "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']"
80             }
81         when: 'list elements are deleted'
82             resourceMeter.start()
83             xpathsToDelete.each {
84                 objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete3', it, OffsetDateTime.now())
85             }
86             resourceMeter.stop()
87             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
88         then: 'delete duration is within expected time and memory used is within limit'
89             recordAndAssertResourceUsage('Delete 100 lists elements', 2.5, deleteDurationInSeconds, 20, resourceMeter.getTotalMemoryUsageInMB())
90     }
91
92     def 'Batch delete 100 list elements'() {
93         given: 'a list of xpaths to delete'
94             def xpathsToDelete = (1..100).collect {
95                 "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']"
96             }
97         when: 'list elements are deleted'
98             resourceMeter.start()
99             objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete4', xpathsToDelete, OffsetDateTime.now())
100             resourceMeter.stop()
101             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
102         then: 'delete duration is within expected time and memory used is within limit'
103             recordAndAssertResourceUsage('Batch delete 100 lists elements', 0.6, deleteDurationInSeconds, 2, resourceMeter.getTotalMemoryUsageInMB())
104     }
105
106     def 'Delete 100 whole lists'() {
107         given: 'a list of xpaths to delete'
108             def xpathsToDelete = (1..100).collect {
109                 "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device/degree"
110             }
111         when: 'lists are deleted'
112             resourceMeter.start()
113             xpathsToDelete.each {
114                 objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete5', it, OffsetDateTime.now())
115             }
116             resourceMeter.stop()
117             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
118         then: 'delete duration is within expected time and memory used is within limit'
119             recordAndAssertResourceUsage('Delete 100 whole lists', 6, deleteDurationInSeconds, 20, resourceMeter.getTotalMemoryUsageInMB())
120     }
121
122     def 'Batch delete 100 whole lists'() {
123         given: 'a list of xpaths to delete'
124             def xpathsToDelete = (1..100).collect {
125                 "/openroadm-devices/openroadm-device[@device-id='C201-7-1A-" + it + "']/org-openroadm-device/degree"
126             }
127         when: 'lists are deleted'
128             resourceMeter.start()
129             objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete6', xpathsToDelete, OffsetDateTime.now())
130             resourceMeter.stop()
131             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
132         then: 'delete duration is within expected time and memory used is within limit'
133             recordAndAssertResourceUsage('Batch delete 100 whole lists', 5, deleteDurationInSeconds, 3, resourceMeter.getTotalMemoryUsageInMB())
134     }
135
136     def 'Delete 1 large data node'() {
137         when: 'parent node is deleted'
138             resourceMeter.start()
139             objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete7', '/openroadm-devices', OffsetDateTime.now())
140             resourceMeter.stop()
141             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
142         then: 'delete duration is within expected time and memory used is within limit'
143             recordAndAssertResourceUsage('Delete one large node', 2, deleteDurationInSeconds, 1, resourceMeter.getTotalMemoryUsageInMB())
144     }
145
146     def 'Delete root node with many descendants'() {
147         when: 'root node is deleted'
148             resourceMeter.start()
149             objectUnderTest.deleteDataNode(CPS_PERFORMANCE_TEST_DATASPACE, 'delete8', '/', OffsetDateTime.now())
150             resourceMeter.stop()
151             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
152         then: 'delete duration is within expected time and memory used is within limit'
153             recordAndAssertResourceUsage('Delete root node', 2, deleteDurationInSeconds, 1, resourceMeter.getTotalMemoryUsageInMB())
154     }
155
156     def 'Delete data nodes for an anchor'() {
157         when: 'data nodes are deleted'
158             resourceMeter.start()
159             objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete9', OffsetDateTime.now())
160             resourceMeter.stop()
161             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
162         then: 'delete duration is within expected time and memory used is within limit'
163             recordAndAssertResourceUsage('Delete data nodes for anchor', 2, deleteDurationInSeconds, 1, resourceMeter.getTotalMemoryUsageInMB())
164     }
165
166     def 'Batch delete 100 non-existing nodes'() {
167         given: 'a list of xpaths to delete'
168             def xpathsToDelete = (1..100).collect { "/path/to/non-existing/node[@id='" + it + "']" }
169         when: 'child nodes are deleted'
170             resourceMeter.start()
171             try {
172                 objectUnderTest.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'delete10', xpathsToDelete, OffsetDateTime.now())
173             } catch (DataNodeNotFoundException ignored) {}
174             resourceMeter.stop()
175             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
176         then: 'delete duration is within expected time and memory used is within limit'
177             recordAndAssertResourceUsage('Batch delete 100 non-existing', 7, deleteDurationInSeconds, 3, resourceMeter.getTotalMemoryUsageInMB())
178     }
179
180     def 'Clean up test data'() {
181         given: 'a list of anchors to delete'
182             def anchorNames = (1..10).collect {'delete' + it}
183         when: 'data nodes are deleted'
184             resourceMeter.start()
185             cpsAnchorService.deleteAnchors(CPS_PERFORMANCE_TEST_DATASPACE, anchorNames)
186             resourceMeter.stop()
187             def deleteDurationInSeconds = resourceMeter.getTotalTimeInSeconds()
188         then: 'delete duration is within expected time and memory used is within limit'
189             recordAndAssertResourceUsage('Delete test cleanup', 10, deleteDurationInSeconds, 1, resourceMeter.getTotalMemoryUsageInMB())
190     }
191
192 }