Skip to content

Commit 5e26224

Browse files
committed
chore: added e2e tests for extensions
Signed-off-by: Ankit152 <[email protected]>
1 parent 07787f4 commit 5e26224

File tree

7 files changed

+331
-4
lines changed

7 files changed

+331
-4
lines changed

.chloggen/service-extension.yaml

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
2+
change_type: enhancement
3+
4+
# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action)
5+
component: collector
6+
7+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
8+
note: support for creating a service for extensions when ports are specified.
9+
10+
# One or more tracking issues related to the change
11+
issues: [3460]
12+
13+
# (Optional) One or more lines of additional information to render under the primary note.
14+
# These lines will be padded with 2 spaces and then inserted directly into the document.
15+
# Use pipe (|) for multiline entries.
16+
subtext:

apis/v1beta1/config.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ func (c *Config) GetExtensionPorts(logger logr.Logger) ([]corev1.ServicePort, er
328328
}
329329

330330
func (c *Config) GetAllPorts(logger logr.Logger) ([]corev1.ServicePort, error) {
331-
return c.getPortsForComponentKinds(logger, KindReceiver, KindExporter)
331+
return c.getPortsForComponentKinds(logger, KindReceiver, KindExporter, KindExtension)
332332
}
333333

334334
func (c *Config) GetEnvironmentVariables(logger logr.Logger) ([]corev1.EnvVar, error) {

internal/manifests/collector/service.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import (
3232
const (
3333
headlessLabel = "operator.opentelemetry.io/collector-headless-service"
3434
monitoringLabel = "operator.opentelemetry.io/collector-monitoring-service"
35-
extensionService = "operator.opentelemetry.io/collector-extension-service"
3635
serviceTypeLabel = "operator.opentelemetry.io/collector-service-type"
3736
valueExists = "Exists"
3837
)
@@ -111,9 +110,8 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) {
111110
}
112111

113112
func ExtensionService(params manifests.Params) (*corev1.Service, error) {
114-
name := naming.Service(params.OtelCol.Name)
113+
name := naming.ExtensionService(params.OtelCol.Name)
115114
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
116-
labels[extensionService] = valueExists
117115
labels[serviceTypeLabel] = ExtensionServiceType.String()
118116

119117
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())

internal/naming/main.go

+5
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ func MonitoringService(otelcol string) string {
116116
return DNSName(Truncate("%s-monitoring", 63, Service(otelcol)))
117117
}
118118

119+
// ExtensionService builds the name for the extension service based on the instance.
120+
func ExtensionService(otelcol string) string {
121+
return DNSName(Truncate("%s-extension", 63, Service(otelcol)))
122+
}
123+
119124
// Service builds the service name based on the instance.
120125
func Service(otelcol string) string {
121126
return DNSName(Truncate("%s-collector", 63, otelcol))

tests/e2e/extension/00-assert.yaml

+264
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
apiVersion: v1
2+
items:
3+
- apiVersion: apps/v1
4+
kind: Deployment
5+
metadata:
6+
annotations:
7+
deployment.kubernetes.io/revision: "1"
8+
generation: 1
9+
labels:
10+
app.kubernetes.io/component: opentelemetry-collector
11+
app.kubernetes.io/managed-by: opentelemetry-operator
12+
app.kubernetes.io/name: jaeger-inmemory-collector
13+
app.kubernetes.io/part-of: opentelemetry
14+
app.kubernetes.io/version: latest
15+
name: jaeger-inmemory-collector
16+
ownerReferences:
17+
- apiVersion: opentelemetry.io/v1beta1
18+
blockOwnerDeletion: true
19+
controller: true
20+
kind: OpenTelemetryCollector
21+
name: jaeger-inmemory
22+
spec:
23+
replicas: 1
24+
selector:
25+
matchLabels:
26+
app.kubernetes.io/component: opentelemetry-collector
27+
app.kubernetes.io/managed-by: opentelemetry-operator
28+
app.kubernetes.io/part-of: opentelemetry
29+
strategy:
30+
rollingUpdate:
31+
maxSurge: 25%
32+
maxUnavailable: 25%
33+
type: RollingUpdate
34+
template:
35+
metadata:
36+
annotations:
37+
prometheus.io/path: /metrics
38+
prometheus.io/port: "8888"
39+
prometheus.io/scrape: "true"
40+
creationTimestamp: null
41+
labels:
42+
app.kubernetes.io/component: opentelemetry-collector
43+
app.kubernetes.io/managed-by: opentelemetry-operator
44+
app.kubernetes.io/name: jaeger-inmemory-collector
45+
app.kubernetes.io/part-of: opentelemetry
46+
app.kubernetes.io/version: latest
47+
spec:
48+
containers:
49+
- args:
50+
- --config=/conf/collector.yaml
51+
env:
52+
- name: POD_NAME
53+
valueFrom:
54+
fieldRef:
55+
apiVersion: v1
56+
fieldPath: metadata.name
57+
image: jaegertracing/jaeger-snapshot:latest
58+
imagePullPolicy: Always
59+
name: otc-container
60+
ports:
61+
- containerPort: 16686
62+
name: jaeger
63+
protocol: TCP
64+
- containerPort: 8888
65+
name: metrics
66+
protocol: TCP
67+
- containerPort: 4317
68+
name: otlp-grpc
69+
protocol: TCP
70+
- containerPort: 4318
71+
name: otlp-http
72+
protocol: TCP
73+
resources: {}
74+
terminationMessagePath: /dev/termination-log
75+
terminationMessagePolicy: File
76+
volumeMounts:
77+
- mountPath: /conf
78+
name: otc-internal
79+
dnsConfig: {}
80+
dnsPolicy: ClusterFirst
81+
restartPolicy: Always
82+
schedulerName: default-scheduler
83+
securityContext: {}
84+
serviceAccount: jaeger-inmemory-collector
85+
serviceAccountName: jaeger-inmemory-collector
86+
shareProcessNamespace: false
87+
terminationGracePeriodSeconds: 30
88+
kind: List
89+
metadata:
90+
resourceVersion: ""
91+
---
92+
apiVersion: v1
93+
kind: ServiceAccount
94+
metadata:
95+
labels:
96+
app.kubernetes.io/component: opentelemetry-collector
97+
app.kubernetes.io/managed-by: opentelemetry-operator
98+
app.kubernetes.io/name: jaeger-inmemory-collector
99+
app.kubernetes.io/part-of: opentelemetry
100+
app.kubernetes.io/version: latest
101+
name: jaeger-inmemory-collector
102+
ownerReferences:
103+
- apiVersion: opentelemetry.io/v1beta1
104+
blockOwnerDeletion: true
105+
controller: true
106+
kind: OpenTelemetryCollector
107+
name: jaeger-inmemory
108+
---
109+
apiVersion: v1
110+
kind: Service
111+
metadata:
112+
labels:
113+
app.kubernetes.io/component: opentelemetry-collector
114+
app.kubernetes.io/managed-by: opentelemetry-operator
115+
app.kubernetes.io/name: jaeger-inmemory-collector
116+
app.kubernetes.io/part-of: opentelemetry
117+
app.kubernetes.io/version: latest
118+
operator.opentelemetry.io/collector-service-type: base
119+
name: jaeger-inmemory-collector
120+
ownerReferences:
121+
- apiVersion: opentelemetry.io/v1beta1
122+
blockOwnerDeletion: true
123+
controller: true
124+
kind: OpenTelemetryCollector
125+
name: jaeger-inmemory
126+
spec:
127+
internalTrafficPolicy: Cluster
128+
ipFamilies:
129+
- IPv4
130+
ipFamilyPolicy: SingleStack
131+
ports:
132+
- name: jaeger
133+
port: 16686
134+
protocol: TCP
135+
targetPort: 16686
136+
- appProtocol: grpc
137+
name: otlp-grpc
138+
port: 4317
139+
protocol: TCP
140+
targetPort: 4317
141+
- appProtocol: http
142+
name: otlp-http
143+
port: 4318
144+
protocol: TCP
145+
targetPort: 4318
146+
selector:
147+
app.kubernetes.io/component: opentelemetry-collector
148+
app.kubernetes.io/managed-by: opentelemetry-operator
149+
app.kubernetes.io/part-of: opentelemetry
150+
sessionAffinity: None
151+
type: ClusterIP
152+
status:
153+
loadBalancer: {}
154+
---
155+
apiVersion: v1
156+
kind: Service
157+
metadata:
158+
annotations:
159+
service.beta.openshift.io/serving-cert-secret-name: jaeger-inmemory-collector-headless-tls
160+
labels:
161+
app.kubernetes.io/component: opentelemetry-collector
162+
app.kubernetes.io/managed-by: opentelemetry-operator
163+
app.kubernetes.io/name: jaeger-inmemory-collector
164+
app.kubernetes.io/part-of: opentelemetry
165+
app.kubernetes.io/version: latest
166+
operator.opentelemetry.io/collector-headless-service: Exists
167+
operator.opentelemetry.io/collector-service-type: headless
168+
name: jaeger-inmemory-collector-headless
169+
ownerReferences:
170+
- apiVersion: opentelemetry.io/v1beta1
171+
blockOwnerDeletion: true
172+
controller: true
173+
kind: OpenTelemetryCollector
174+
name: jaeger-inmemory
175+
spec:
176+
clusterIP: None
177+
clusterIPs:
178+
- None
179+
internalTrafficPolicy: Cluster
180+
ipFamilies:
181+
- IPv4
182+
ipFamilyPolicy: SingleStack
183+
ports:
184+
- name: jaeger
185+
port: 16686
186+
protocol: TCP
187+
targetPort: 16686
188+
- appProtocol: grpc
189+
name: otlp-grpc
190+
port: 4317
191+
protocol: TCP
192+
targetPort: 4317
193+
- appProtocol: http
194+
name: otlp-http
195+
port: 4318
196+
protocol: TCP
197+
targetPort: 4318
198+
selector:
199+
app.kubernetes.io/component: opentelemetry-collector
200+
app.kubernetes.io/managed-by: opentelemetry-operator
201+
app.kubernetes.io/part-of: opentelemetry
202+
sessionAffinity: None
203+
type: ClusterIP
204+
status:
205+
loadBalancer: {}
206+
---
207+
apiVersion: v1
208+
kind: Service
209+
metadata:
210+
labels:
211+
app.kubernetes.io/component: opentelemetry-collector
212+
app.kubernetes.io/managed-by: opentelemetry-operator
213+
app.kubernetes.io/name: jaeger-inmemory-collector-monitoring
214+
app.kubernetes.io/part-of: opentelemetry
215+
app.kubernetes.io/version: latest
216+
operator.opentelemetry.io/collector-monitoring-service: Exists
217+
operator.opentelemetry.io/collector-service-type: monitoring
218+
name: jaeger-inmemory-collector-monitoring
219+
ownerReferences:
220+
- apiVersion: opentelemetry.io/v1beta1
221+
blockOwnerDeletion: true
222+
controller: true
223+
kind: OpenTelemetryCollector
224+
name: jaeger-inmemory
225+
spec:
226+
internalTrafficPolicy: Cluster
227+
ipFamilies:
228+
- IPv4
229+
ipFamilyPolicy: SingleStack
230+
ports:
231+
- name: monitoring
232+
port: 8888
233+
protocol: TCP
234+
targetPort: 8888
235+
selector:
236+
app.kubernetes.io/component: opentelemetry-collector
237+
app.kubernetes.io/managed-by: opentelemetry-operator
238+
app.kubernetes.io/part-of: opentelemetry
239+
sessionAffinity: None
240+
type: ClusterIP
241+
status:
242+
loadBalancer: {}
243+
---
244+
apiVersion: v1
245+
kind: Service
246+
metadata:
247+
name: "jaeger-inmemory-collector-extension"
248+
labels:
249+
app.kubernetes.io/component: opentelemetry-collector
250+
app.kubernetes.io/managed-by: opentelemetry-operator
251+
app.kubernetes.io/part-of: opentelemetry
252+
app.kubernetes.io/version: latest
253+
operator.opentelemetry.io/collector-service-type: extension
254+
spec:
255+
selector:
256+
app.kubernetes.io/component: opentelemetry-collector
257+
app.kubernetes.io/managed-by: opentelemetry-operator
258+
app.kubernetes.io/part-of: opentelemetry
259+
ports:
260+
- name: "jaeger-query"
261+
port: 16686
262+
targetPort: 16686
263+
status:
264+
loadBalancer: {}

tests/e2e/extension/00-install.yaml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apiVersion: opentelemetry.io/v1beta1
2+
kind: OpenTelemetryCollector
3+
metadata:
4+
name: jaeger-inmemory
5+
spec:
6+
image: jaegertracing/jaeger-snapshot:latest
7+
config:
8+
service:
9+
extensions: [jaeger_storage, jaeger_query]
10+
pipelines:
11+
traces:
12+
receivers: [otlp]
13+
exporters: [jaeger_storage_exporter]
14+
extensions:
15+
jaeger_query:
16+
storage:
17+
traces: memstore
18+
jaeger_storage:
19+
backends:
20+
memstore:
21+
memory:
22+
max_traces: 100000
23+
receivers:
24+
otlp:
25+
protocols:
26+
grpc:
27+
http:
28+
exporters:
29+
jaeger_storage_exporter:
30+
trace_storage: memstore
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# yaml-language-server: $schema=https://raw.githubusercontent.com/kyverno/chainsaw/main/.schemas/json/test-chainsaw-v1alpha1.json
2+
apiVersion: chainsaw.kyverno.io/v1alpha1
3+
kind: Test
4+
metadata:
5+
creationTimestamp: null
6+
name: extension-test
7+
spec:
8+
steps:
9+
- name: step-00
10+
try:
11+
- apply:
12+
file: 00-install.yaml
13+
- assert:
14+
file: 00-assert.yaml

0 commit comments

Comments
 (0)