Skip to content

Commit effe1d9

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

File tree

7 files changed

+220
-5
lines changed

7 files changed

+220
-5
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

+5-1
Original file line numberDiff line numberDiff line change
@@ -327,10 +327,14 @@ func (c *Config) GetExtensionPorts(logger logr.Logger) ([]corev1.ServicePort, er
327327
return c.getPortsForComponentKinds(logger, KindExtension)
328328
}
329329

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

334+
func (c *Config) GetAllPorts(logger logr.Logger) ([]corev1.ServicePort, error) {
335+
return c.getPortsForComponentKinds(logger, KindReceiver, KindExporter, KindExtension)
336+
}
337+
334338
func (c *Config) GetEnvironmentVariables(logger logr.Logger) ([]corev1.EnvVar, error) {
335339
return c.getEnvironmentVariablesForComponentKinds(logger, KindReceiver)
336340
}

internal/manifests/collector/service.go

+2-4
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())
@@ -154,7 +152,7 @@ func Service(params manifests.Params) (*corev1.Service, error) {
154152
return nil, err
155153
}
156154

157-
ports, err := params.OtelCol.Spec.Config.GetAllPorts(params.Log)
155+
ports, err := params.OtelCol.Spec.Config.GetReceiverAndExporterPorts(params.Log)
158156
if err != nil {
159157
return nil, err
160158
}

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

+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
apiVersion: v1
2+
items:
3+
- apiVersion: apps/v1
4+
kind: Deployment
5+
metadata:
6+
name: jaeger-inmemory-collector
7+
spec:
8+
template:
9+
spec:
10+
containers:
11+
- ports:
12+
- containerPort: 16686
13+
name: jaeger
14+
protocol: TCP
15+
- containerPort: 8888
16+
name: metrics
17+
protocol: TCP
18+
- containerPort: 4317
19+
name: otlp-grpc
20+
protocol: TCP
21+
- containerPort: 4318
22+
name: otlp-http
23+
protocol: TCP
24+
kind: List
25+
metadata:
26+
resourceVersion: ""
27+
---
28+
apiVersion: v1
29+
kind: Service
30+
metadata:
31+
name: jaeger-inmemory-collector
32+
spec:
33+
ports:
34+
- name: jaeger
35+
port: 16686
36+
protocol: TCP
37+
targetPort: 16686
38+
- appProtocol: grpc
39+
name: otlp-grpc
40+
port: 4317
41+
protocol: TCP
42+
targetPort: 4317
43+
- appProtocol: http
44+
name: otlp-http
45+
port: 4318
46+
protocol: TCP
47+
targetPort: 4318
48+
---
49+
apiVersion: v1
50+
kind: Service
51+
metadata:
52+
annotations:
53+
service.beta.openshift.io/serving-cert-secret-name: jaeger-inmemory-collector-headless-tls
54+
labels:
55+
app.kubernetes.io/component: opentelemetry-collector
56+
app.kubernetes.io/managed-by: opentelemetry-operator
57+
app.kubernetes.io/name: jaeger-inmemory-collector
58+
app.kubernetes.io/part-of: opentelemetry
59+
app.kubernetes.io/version: latest
60+
operator.opentelemetry.io/collector-headless-service: Exists
61+
operator.opentelemetry.io/collector-service-type: headless
62+
name: jaeger-inmemory-collector-headless
63+
ownerReferences:
64+
- apiVersion: opentelemetry.io/v1beta1
65+
blockOwnerDeletion: true
66+
controller: true
67+
kind: OpenTelemetryCollector
68+
name: jaeger-inmemory
69+
spec:
70+
clusterIP: None
71+
clusterIPs:
72+
- None
73+
internalTrafficPolicy: Cluster
74+
ipFamilies:
75+
- IPv4
76+
ipFamilyPolicy: SingleStack
77+
ports:
78+
- name: jaeger
79+
port: 16686
80+
protocol: TCP
81+
targetPort: 16686
82+
- appProtocol: grpc
83+
name: otlp-grpc
84+
port: 4317
85+
protocol: TCP
86+
targetPort: 4317
87+
- appProtocol: http
88+
name: otlp-http
89+
port: 4318
90+
protocol: TCP
91+
targetPort: 4318
92+
selector:
93+
app.kubernetes.io/component: opentelemetry-collector
94+
app.kubernetes.io/managed-by: opentelemetry-operator
95+
app.kubernetes.io/part-of: opentelemetry
96+
sessionAffinity: None
97+
type: ClusterIP
98+
status:
99+
loadBalancer: {}
100+
---
101+
apiVersion: v1
102+
kind: Service
103+
metadata:
104+
labels:
105+
app.kubernetes.io/component: opentelemetry-collector
106+
app.kubernetes.io/managed-by: opentelemetry-operator
107+
app.kubernetes.io/name: jaeger-inmemory-collector-monitoring
108+
app.kubernetes.io/part-of: opentelemetry
109+
app.kubernetes.io/version: latest
110+
operator.opentelemetry.io/collector-monitoring-service: Exists
111+
operator.opentelemetry.io/collector-service-type: monitoring
112+
name: jaeger-inmemory-collector-monitoring
113+
spec:
114+
ports:
115+
- name: monitoring
116+
port: 8888
117+
protocol: TCP
118+
targetPort: 8888
119+
selector:
120+
app.kubernetes.io/component: opentelemetry-collector
121+
app.kubernetes.io/managed-by: opentelemetry-operator
122+
app.kubernetes.io/part-of: opentelemetry
123+
sessionAffinity: None
124+
type: ClusterIP
125+
status:
126+
loadBalancer: {}
127+
---
128+
apiVersion: v1
129+
kind: Service
130+
metadata:
131+
name: "jaeger-inmemory-collector-extension"
132+
labels:
133+
app.kubernetes.io/component: opentelemetry-collector
134+
app.kubernetes.io/managed-by: opentelemetry-operator
135+
app.kubernetes.io/part-of: opentelemetry
136+
app.kubernetes.io/version: latest
137+
operator.opentelemetry.io/collector-service-type: extension
138+
spec:
139+
selector:
140+
app.kubernetes.io/component: opentelemetry-collector
141+
app.kubernetes.io/managed-by: opentelemetry-operator
142+
app.kubernetes.io/part-of: opentelemetry
143+
ports:
144+
- name: "jaeger-query"
145+
port: 16686
146+
targetPort: 16686
147+
status:
148+
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)