Repository navigation
Expand file tree
/
Copy pathmain_test.go
More file actions
137 lines (127 loc) · 4.35 KB
/
Copy pathmain_test.go
File metadata and controls
137 lines (127 loc) · 4.35 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package main
import (
"os"
"testing"
)
// Test_setLangEnvVars_serviceEvents verifies that the service_events sub-map from
// --auto-instrumentation-config is translated into the AUTO_INSTRUMENTATION_<LANG>_SERVICE_EVENTS_*
// env vars the instrumentation package reads, and that empty/absent values are treated as unset
// (so the SDK default applies — Service Events follows OTEL_AWS_APPLICATION_SIGNALS_ENABLED).
func Test_setLangEnvVars_serviceEvents(t *testing.T) {
const (
enabledVar = "AUTO_INSTRUMENTATION_JAVA_SERVICE_EVENTS_ENABLED"
functionVar = "AUTO_INSTRUMENTATION_JAVA_SERVICE_EVENTS_FUNCTION_INSTRUMENT_ENABLED"
profilerVar = "AUTO_INSTRUMENTATION_JAVA_SERVICE_EVENTS_PROFILER_ENABLED"
dynamicVar = "AUTO_INSTRUMENTATION_JAVA_DYNAMIC_INSTRUMENTATION_ENABLED"
)
tests := []struct {
name string
serviceEvent map[string]string
dynamicInst map[string]string
wantEnabled *string // nil = expect unset
wantFunction *string
wantProfiler *string
wantDynamic *string
}{
{
name: "absent keys leave env unset",
serviceEvent: map[string]string{},
},
{
name: "empty enabled treated as unset",
serviceEvent: map[string]string{"enabled": ""},
},
{
name: "enabled=false is forwarded",
serviceEvent: map[string]string{"enabled": "false"},
wantEnabled: ptr("false"),
},
{
name: "profiler_enabled=false is forwarded",
serviceEvent: map[string]string{"profiler_enabled": "false"},
wantProfiler: ptr("false"),
},
{
name: "dynamic_instrumentation enabled=true is forwarded",
dynamicInst: map[string]string{"enabled": "true"},
wantDynamic: ptr("true"),
},
{
name: "empty dynamic_instrumentation enabled treated as unset",
dynamicInst: map[string]string{"enabled": ""},
},
{
name: "all toggles forwarded",
serviceEvent: map[string]string{
"enabled": "true",
"function_instrument_enabled": "true",
"profiler_enabled": "false",
},
dynamicInst: map[string]string{"enabled": "true"},
wantEnabled: ptr("true"),
wantFunction: ptr("true"),
wantProfiler: ptr("false"),
wantDynamic: ptr("true"),
},
}
envVars := []string{enabledVar, functionVar, profilerVar, dynamicVar}
unsetAll := func() {
for _, v := range envVars {
_ = os.Unsetenv(v)
}
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
unsetAll()
t.Cleanup(unsetAll)
setLangEnvVars("JAVA", map[string]map[string]string{
"service_events": tt.serviceEvent,
"dynamic_instrumentation": tt.dynamicInst,
})
assertEnv(t, enabledVar, tt.wantEnabled)
assertEnv(t, functionVar, tt.wantFunction)
assertEnv(t, profilerVar, tt.wantProfiler)
assertEnv(t, dynamicVar, tt.wantDynamic)
})
}
}
func ptr(s string) *string { return &s }
func assertEnv(t *testing.T, name string, want *string) {
t.Helper()
got, ok := os.LookupEnv(name)
if want == nil {
if ok {
t.Errorf("%s: expected unset, got %q", name, got)
}
return
}
if !ok {
t.Errorf("%s: expected %q, but it was unset", name, *want)
return
}
if got != *want {
t.Errorf("%s: got %q, want %q", name, got, *want)
}
}
// Test_setLangEnvVars_profiling verifies that java.profiling.enabled reaches the pod mutator as
// AUTO_INSTRUMENTATION_JAVA_PROFILING_ENABLED, the other keys as JSON in _SETTINGS, and that other languages are ignored.
func Test_setLangEnvVars_profiling(t *testing.T) {
names := []string{"AUTO_INSTRUMENTATION_JAVA_PROFILING_ENABLED", "AUTO_INSTRUMENTATION_JAVA_PROFILING_MODE", "AUTO_INSTRUMENTATION_PYTHON_PROFILING_ENABLED", "AUTO_INSTRUMENTATION_JAVA_PROFILING_SETTINGS", "AUTO_INSTRUMENTATION_PYTHON_PROFILING_SETTINGS"}
unsetAll := func() {
for _, n := range names {
_ = os.Unsetenv(n)
}
}
unsetAll()
t.Cleanup(unsetAll)
profiling := map[string]string{"enabled": "true", "mode": "wall"}
setLangEnvVars("JAVA", map[string]map[string]string{"profiling": profiling})
setLangEnvVars("PYTHON", map[string]map[string]string{"profiling": profiling})
assertEnv(t, names[0], ptr("true"))
assertEnv(t, names[1], nil)
assertEnv(t, names[2], nil)
assertEnv(t, "AUTO_INSTRUMENTATION_JAVA_PROFILING_SETTINGS", ptr(`{"mode":"wall"}`))
assertEnv(t, "AUTO_INSTRUMENTATION_PYTHON_PROFILING_SETTINGS", nil)
}