Skip to content

Commit 0091576

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

File tree

7 files changed

+212
-5
lines changed

7 files changed

+212
-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

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