1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/*
* ============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.spi.impl
import org.onap.cps.spi.model.DataNode
import org.onap.cps.spi.model.DataNodeBuilder
import org.springframework.util.StopWatch
class CpsPersistencePerfSpecBase extends CpsPersistenceSpecBase {
static final String PERF_TEST_DATA = '/data/perf-test.sql'
static final String PERF_DATASPACE = 'PERF-DATASPACE'
static final String PERF_ANCHOR = 'PERF-ANCHOR'
static final String PERF_TEST_PARENT = '/perf-parent-1'
static def xpathsToAllGrandChildren = []
static def PERFORMANCE_RECORD = []
def stopWatch = new StopWatch()
def cleanupSpec() {
println('#############################################################################')
println('## P E R F O R M A N C E T E S T R E S U L T S ##')
println('#############################################################################')
PERFORMANCE_RECORD.sort().each { println(it) }
PERFORMANCE_RECORD.clear()
}
def createLineage(cpsDataPersistenceService, numberOfChildren, numberOfGrandChildren, createLists) {
xpathsToAllGrandChildren = []
(1..numberOfChildren).each {
if (createLists) {
def xpathFormat = "${PERF_TEST_PARENT}/perf-test-list-${it}[@key='%d']"
def listElements = goForthAndMultiply(xpathFormat, numberOfGrandChildren)
cpsDataPersistenceService.addListElements(PERF_DATASPACE, PERF_ANCHOR, PERF_TEST_PARENT, listElements)
} else {
def xpathFormat = "${PERF_TEST_PARENT}/perf-test-child-${it}/perf-test-grand-child-%d"
def grandChildren = goForthAndMultiply(xpathFormat, numberOfGrandChildren)
def child = new DataNodeBuilder()
.withXpath("${PERF_TEST_PARENT}/perf-test-child-${it}")
.withChildDataNodes(grandChildren)
.build()
cpsDataPersistenceService.addChildDataNode(PERF_DATASPACE, PERF_ANCHOR, PERF_TEST_PARENT, child)
}
}
}
def goForthAndMultiply(xpathFormat, numberOfGrandChildren) {
def grandChildren = []
(1..numberOfGrandChildren).each {
def xpath = String.format(xpathFormat as String, it)
def grandChild = new DataNodeBuilder().withXpath(xpath).build()
xpathsToAllGrandChildren.add(grandChild.xpath)
grandChildren.add(grandChild)
}
return grandChildren
}
def countDataNodes(dataNodes) {
int nodeCount = 1
for (DataNode parent : dataNodes) {
for (DataNode child : parent.childDataNodes) {
nodeCount = nodeCount + (countDataNodes(child))
}
}
return nodeCount
}
def recordAndAssertPerformance(String shortTitle, thresholdInMs, recordedTimeInMs) {
def pass = recordedTimeInMs <= thresholdInMs
if (shortTitle.length()>40) {
shortTitle = shortTitle.substring(0,40)
}
def record = String.format('%2d.%-40s limit%,7d took %,7d ms ', PERFORMANCE_RECORD.size()+1, shortTitle, thresholdInMs, recordedTimeInMs)
record += pass?'PASS':'FAIL'
PERFORMANCE_RECORD.add(record)
assert recordedTimeInMs <= thresholdInMs
return true
}
}
|