-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
Copy pathsplunk_observability_scaler_test.go
89 lines (78 loc) · 3.8 KB
/
splunk_observability_scaler_test.go
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
package scalers
import (
"context"
"testing"
"github.com/kedacore/keda/v2/pkg/scalers/scalersconfig"
)
type parseSplunkObservabilityMetadataTestData struct {
metadata map[string]string
authParams map[string]string
isError bool
}
type SplunkObservabilityMetricIdentifier struct {
metadataTestData *parseSplunkObservabilityMetadataTestData
triggerIndex int
metricName string
}
var validSplunkObservabilityAuthParams = map[string]string{
"accessToken": "my-suyper-secret-access-token",
"realm": "my-realm",
}
var validSplunkObservabilityMetadata = map[string]string{
"query": "data('demo.trans.latency').max().publish()",
"duration": "10",
"targetValue": "200.0",
"queryAggregator": "avg",
"ActivationTargetValue": "1.1",
}
var testSplunkObservabilityMetadata = []parseSplunkObservabilityMetadataTestData{
// Valid metadata and valid auth params, pass.
{validSplunkObservabilityMetadata, validSplunkObservabilityAuthParams, false},
// no params at all, fail
{map[string]string{}, map[string]string{}, true},
// No meta dada but valid auth, fail.
{map[string]string{}, validSplunkObservabilityAuthParams, true},
// Valid meta dada but no auth params, fail.
{validSplunkObservabilityMetadata, map[string]string{}, true},
// Missing 'query' field, fail
{map[string]string{"duration": "10", "targetValue": "200.0", "queryAggregator": "avg", "activationTargetValue": "1.1"}, validSplunkObservabilityAuthParams, true},
// Missing 'duration' field, fail
{map[string]string{"query": "data('demo.trans.latency').max().publish()", "targetValue": "200.0", "queryAggregator": "avg", "activationTargetValue": "1.1"}, validSplunkObservabilityAuthParams, true},
// Missing 'targetValue' field, fail
{map[string]string{"query": "data('demo.trans.latency').max().publish()", "duration": "10", "queryAggregator": "avg", "activationTargetValue": "1.1"}, validSplunkObservabilityAuthParams, true},
// Missing 'queryAggregator' field, fail
{map[string]string{"query": "data('demo.trans.latency').max().publish()", "duration": "10", "targetValue": "200.0", "activationTargetValue": "1.1"}, validSplunkObservabilityAuthParams, true},
// Missing 'activationTargetValue' field, fail
{map[string]string{"query": "data('demo.trans.latency').max().publish()", "duration": "10", "targetValue": "200.0", "queryAggregator": "avg"}, validSplunkObservabilityAuthParams, true},
}
var SplunkObservabilityMetricIdentifiers = []SplunkObservabilityMetricIdentifier{
{&testSplunkObservabilityMetadata[0], 0, "s0-signalfx"},
{&testSplunkObservabilityMetadata[0], 1, "s1-signalfx"},
}
func TestSplunkObservabilityParseMetadata(t *testing.T) {
for _, testData := range testSplunkObservabilityMetadata {
_, err := parseSplunkObservabilityMetadata(&scalersconfig.ScalerConfig{TriggerMetadata: testData.metadata, AuthParams: testData.authParams})
if err != nil && !testData.isError {
t.Error("Expected success but got error", err)
} else if testData.isError && err == nil {
t.Error("Expected error but got success")
}
}
}
func TestSplunkObservabilityGetMetricSpecForScaling(t *testing.T) {
for _, testData := range SplunkObservabilityMetricIdentifiers {
ctx := context.Background()
meta, err := parseSplunkObservabilityMetadata(&scalersconfig.ScalerConfig{TriggerMetadata: testData.metadataTestData.metadata, AuthParams: validSplunkObservabilityAuthParams, TriggerIndex: testData.triggerIndex})
if err != nil {
t.Fatal("Could not parse Splunk Observability metadata:", err)
}
mockSplunkObservabilityScaler := splunkObservabilityScaler{
metadata: meta,
}
metricSpec := mockSplunkObservabilityScaler.GetMetricSpecForScaling(ctx)
metricName := metricSpec[0].External.Metric.Name
if metricName != testData.metricName {
t.Error("Wrong External metric source name:", metricName)
}
}
}