Merge "Add write performance tests"
authorToine Siebelink <toine.siebelink@est.tech>
Thu, 27 Jul 2023 15:14:02 +0000 (15:14 +0000)
committerGerrit Code Review <gerrit@onap.org>
Thu, 27 Jul 2023 15:14:02 +0000 (15:14 +0000)
integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/WritePerfTest.groovy [new file with mode: 0644]

diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/WritePerfTest.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/performance/cps/WritePerfTest.groovy
new file mode 100644 (file)
index 0000000..419ec60
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2023 Nordix Foundation
+ *  ================================================================================
+ *  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.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.integration.performance.cps
+
+import java.time.OffsetDateTime
+import org.onap.cps.integration.performance.base.CpsPerfTestBase
+
+class WritePerfTest extends CpsPerfTestBase {
+
+    def 'Writing openroadm data has linear time.'() {
+        given: 'an empty anchor exists for openroadm'
+            cpsAdminService.createAnchor(CPS_PERFORMANCE_TEST_DATASPACE, LARGE_SCHEMA_SET, 'writeAnchor')
+        and: 'a list of device nodes to add'
+            def jsonData = generateOpenRoadData(totalNodes)
+        when: 'device nodes are added'
+            stopWatch.start()
+            cpsDataService.saveData(CPS_PERFORMANCE_TEST_DATASPACE, 'writeAnchor', jsonData, OffsetDateTime.now())
+            stopWatch.stop()
+            def durationInMillis = stopWatch.getTotalTimeMillis()
+        then: 'the operation takes less than #expectedDuration'
+            recordAndAssertPerformance("Writing ${totalNodes} devices", expectedDuration, durationInMillis)
+        cleanup:
+            cpsDataService.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'writeAnchor', OffsetDateTime.now())
+            cpsAdminService.deleteAnchor(CPS_PERFORMANCE_TEST_DATASPACE, 'writeAnchor')
+        where:
+            totalNodes || expectedDuration
+            50         ||   2_500
+            100        ||   4_000
+            200        ||   8_000
+            400        ||  16_000
+//          800        ||  32_000
+//          1600       ||  64_000
+//          3200       || 128_000
+    }
+
+    def 'Writing bookstore data has exponential time.'() {
+        given: 'an anchor containing a bookstore with a single category'
+            cpsAdminService.createAnchor(CPS_PERFORMANCE_TEST_DATASPACE, BOOKSTORE_SCHEMA_SET, 'writeAnchor')
+            def parentNodeData = '{"bookstore": { "categories": [{ "code": 1, "name": "Test", "books" : [] }] }}'
+            cpsDataService.saveData(CPS_PERFORMANCE_TEST_DATASPACE, 'writeAnchor', parentNodeData, OffsetDateTime.now())
+        and: 'a list of books to add'
+            def booksData = '{"books":[' + (1..totalBooks).collect {'{ "title": "' + it + '" }' }.join(',') + ']}'
+        when: 'books are added'
+            stopWatch.start()
+            cpsDataService.saveData(CPS_PERFORMANCE_TEST_DATASPACE, 'writeAnchor', '/bookstore/categories[@code=1]', booksData, OffsetDateTime.now())
+            stopWatch.stop()
+            def durationInMillis = stopWatch.getTotalTimeMillis()
+        then: 'the operation takes less than #expectedDuration'
+            recordAndAssertPerformance("Writing ${totalBooks} books", expectedDuration, durationInMillis)
+        cleanup:
+            cpsDataService.deleteDataNodes(CPS_PERFORMANCE_TEST_DATASPACE, 'writeAnchor', OffsetDateTime.now())
+            cpsAdminService.deleteAnchor(CPS_PERFORMANCE_TEST_DATASPACE, 'writeAnchor')
+        where:
+            totalBooks || expectedDuration
+            400        ||     200
+            800        ||     500
+            1600       ||   1_000
+            3200       ||   2_500
+            6400       ||  10_000
+//          12800      ||  30_000
+//          25600      || 120_000
+//          51200      || 600_000
+    }
+
+}