jaeger: add install unit tests (#6166)

Manifests are very prone to go wrong as Helm indentation
changes, etc are very easy to go wrong. This PR adds
unit tests to the render logic, so that changes to the
output manifests are tracked.

This follows the same pattern as that of other render
unit tests in core cp, viz, etc.

Signed-off-by: Tarun Pothulapati <tarunpothulapati@outlook.com>
This commit is contained in:
Tarun Pothulapati 2021-05-25 01:51:22 +05:30 committed by GitHub
parent 8c98d88763
commit acee6b0a64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 424 additions and 0 deletions

View File

@ -0,0 +1,43 @@
package cmd
import (
"bytes"
"fmt"
"testing"
"github.com/linkerd/linkerd2/pkg/charts"
)
func TestRender(t *testing.T) {
// pin values that are changed by render functions on each test run
defaultValues := map[string]interface{}{
"webhook": map[string]interface{}{
"keyPEM": "test-webhhook-key-pem",
"crtPEM": "test-webhook-crt-pem",
"caBundle": "test-webhook-ca-bundle",
},
}
testCases := []struct {
values map[string]interface{}
goldenFileName string
}{
{
nil,
"install_default.golden",
},
}
for i, tc := range testCases {
tc := tc // pin
t.Run(fmt.Sprintf("%d: %s", i, tc.goldenFileName), func(t *testing.T) {
var buf bytes.Buffer
// Merge overrides with default
if err := render(&buf, charts.MergeMaps(defaultValues, tc.values)); err != nil {
t.Fatalf("Failed to render templates: %v", err)
}
testDataDiffer.DiffTestdata(t, tc.goldenFileName, buf.String())
})
}
}

23
jaeger/cmd/main_test.go Normal file
View File

@ -0,0 +1,23 @@
package cmd
import (
"flag"
"os"
"testing"
"github.com/linkerd/linkerd2/testutil"
)
var (
testDataDiffer testutil.TestDataDiffer
)
// TestMain parses flags before running tests
func TestMain(m *testing.M) {
flag.BoolVar(&testDataDiffer.UpdateFixtures, "update", false, "update text fixtures in place")
prettyDiff := os.Getenv("LINKERD_TEST_PRETTY_DIFF") != ""
flag.BoolVar(&testDataDiffer.PrettyDiff, "pretty-diff", prettyDiff, "display the full text when diffing")
flag.StringVar(&testDataDiffer.RejectPath, "reject-path", "", "write results for failed tests to this path (path is relative to the test location)")
flag.Parse()
os.Exit(m.Run())
}

View File

@ -0,0 +1,358 @@
---
kind: Namespace
apiVersion: v1
metadata:
name: linkerd-jaeger
labels:
linkerd.io/extension: jaeger
annotations:
linkerd.io/inject: enabled
config.linkerd.io/proxy-await: "enabled"
---
###
### Jaeger Injector
###
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
linkerd.io/extension: jaeger
app.kubernetes.io/name: jaeger-injector
app.kubernetes.io/part-of: Linkerd
app.kubernetes.io/version: dev-undefined
component: jaeger-injector
name: jaeger-injector
namespace: linkerd-jaeger
spec:
replicas: 1
selector:
matchLabels:
linkerd.io/extension: jaeger
component: jaeger-injector
template:
metadata:
annotations:
checksum/config: 525d4805deeeee18bbcd97ab075362fcae2250d997ff311665a0b7b464eebdc4
labels:
linkerd.io/extension: jaeger
component: jaeger-injector
spec:
nodeSelector:
beta.kubernetes.io/os: linux
containers:
- args:
- -collector-svc-addr=collector.linkerd-jaeger:55678
- -collector-svc-account=collector
- -log-level=info
image: cr.l5d.io/linkerd/jaeger-webhook:dev-undefined
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /ping
port: 9995
initialDelaySeconds: 10
name: jaeger-injector
ports:
- containerPort: 8443
name: jaeger-injector
- containerPort: 9995
name: admin-http
readinessProbe:
failureThreshold: 7
httpGet:
path: /ready
port: 9995
volumeMounts:
- mountPath: /var/run/linkerd/tls
name: tls
readOnly: true
serviceAccountName: jaeger-injector
volumes:
- name: tls
secret:
secretName: jaeger-injector-k8s-tls
---
kind: Service
apiVersion: v1
metadata:
name: jaeger-injector
namespace: linkerd-jaeger
labels:
linkerd.io/extension: jaeger
component: jaeger-injector
spec:
type: ClusterIP
selector:
linkerd.io/extension: jaeger
component: jaeger-injector
ports:
- name: jaeger-injector
port: 443
targetPort: jaeger-injector
---
###
### collector RBAC
###
kind: ServiceAccount
apiVersion: v1
metadata:
name: collector
namespace: linkerd-jaeger
---
###
### jaeger RBAC
###
kind: ServiceAccount
apiVersion: v1
metadata:
name: jaeger
namespace: linkerd-jaeger
---
###
### Jaeger Injector RBAC
###
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: linkerd-jaeger-injector
labels:
linkerd.io/extension: jaeger
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "list", "watch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: linkerd-jaeger-injector
labels:
linkerd.io/extension: jaeger
subjects:
- kind: ServiceAccount
name: jaeger-injector
namespace: linkerd-jaeger
apiGroup: ""
roleRef:
kind: ClusterRole
name: linkerd-jaeger-injector
apiGroup: rbac.authorization.k8s.io
---
kind: ServiceAccount
apiVersion: v1
metadata:
name: jaeger-injector
namespace: linkerd-jaeger
---
kind: Secret
apiVersion: v1
metadata:
name: jaeger-injector-k8s-tls
namespace: linkerd-jaeger
type: kubernetes.io/tls
data:
tls.crt: dGVzdC13ZWJob29rLWNydC1wZW0=
tls.key: dGVzdC13ZWJoaG9vay1rZXktcGVt
---
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
name: linkerd-jaeger-injector-webhook-config
labels:
linkerd.io/extension: jaeger
webhooks:
- name: jaeger-injector.linkerd.io
clientConfig:
service:
name: jaeger-injector
namespace: linkerd-jaeger
path: "/"
caBundle: dGVzdC13ZWJob29rLWNhLWJ1bmRsZQ==
failurePolicy: Ignore
admissionReviewVersions: ["v1", "v1beta1"]
reinvocationPolicy: IfNeeded
rules:
- operations: [ "CREATE" ]
apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
sideEffects: None
---
###
### Tracing Collector Service
###
apiVersion: v1
kind: ConfigMap
metadata:
name: collector-config
namespace: linkerd-jaeger
labels:
component: collector
data:
collector-config: |
receivers:
opencensus:
port: 55678
zipkin:
port: 9411
jaeger:
jaeger-thrift-http-port: 14268
queued-exporters:
jaeger-all-in-one:
num-workers: 4
queue-size: 100
retry-on-failure: true
sender-type: jaeger-thrift-http
jaeger-thrift-http:
collector-endpoint: http://jaeger.linkerd-jaeger:14268/api/traces
timeout: 5s
---
apiVersion: v1
kind: Service
metadata:
name: collector
namespace: linkerd-jaeger
labels:
component: collector
spec:
type: ClusterIP
ports:
- name: opencensus
port: 55678
protocol: TCP
targetPort: 55678
- name: zipkin
port: 9411
protocol: TCP
targetPort: 9411
- name: jaeger
port: 14268
protocol: TCP
targetPort: 14268
selector:
component: collector
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: collector
app.kubernetes.io/part-of: Linkerd
component: collector
name: collector
namespace: linkerd-jaeger
spec:
replicas: 1
selector:
matchLabels:
component: collector
minReadySeconds: 5
progressDeadlineSeconds: 120
template:
metadata:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: "8888"
prometheus.io/scrape: "true"
labels:
component: collector
spec:
nodeSelector:
beta.kubernetes.io/os: linux
containers:
- command:
- /occollector_linux
- --config=/conf/collector-config.yaml
env:
- name: GOGC
value: "80"
image: omnition/opencensus-collector:0.1.11
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /
port: 13133
name: oc-collector
ports:
- containerPort: 55678
- containerPort: 9411
- containerPort: 14268
- containerPort: 8888
readinessProbe:
httpGet:
path: /
port: 13133
volumeMounts:
- mountPath: /conf
name: collector-config-val
serviceAccountName: collector
volumes:
- configMap:
items:
- key: collector-config
path: collector-config.yaml
name: collector-config
name: collector-config-val
---
###
### Tracing Jaeger Service
###
apiVersion: v1
kind: Service
metadata:
name: jaeger
namespace: linkerd-jaeger
labels:
component: jaeger
spec:
type: ClusterIP
selector:
component: jaeger
ports:
- name: collection
port: 14268
- name: ui
port: 16686
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: jaeger
app.kubernetes.io/part-of: Linkerd
component: jaeger
name: jaeger
namespace: linkerd-jaeger
spec:
replicas: 1
selector:
matchLabels:
component: jaeger
template:
metadata:
annotations:
config.linkerd.io/proxy-await: "enabled"
prometheus.io/path: /metrics
prometheus.io/port: "14269"
prometheus.io/scrape: "true"
labels:
component: jaeger
spec:
nodeSelector:
beta.kubernetes.io/os: linux
containers:
- args:
- --query.base-path=/jaeger
image: jaegertracing/all-in-one:1.19.2
imagePullPolicy: Always
name: jaeger
ports:
- containerPort: 14269
name: admin
- containerPort: 14268
name: collection
- containerPort: 16686
name: ui
dnsPolicy: ClusterFirst
serviceAccountName: jaeger