-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathtlsconfig_test.go
More file actions
108 lines (86 loc) · 3.55 KB
/
Copy pathtlsconfig_test.go
File metadata and controls
108 lines (86 loc) · 3.55 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
// Copyright (c) 2026 Red Hat, Inc.
// Copyright Contributors to the Open Cluster Management project
package main
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
authorizationv1 "k8s.io/api/authorization/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
testclient "k8s.io/client-go/kubernetes/fake"
k8stesting "k8s.io/client-go/testing"
sdktls "open-cluster-management.io/sdk-go/pkg/tls"
)
// allowSelfSubjectAccessReviews makes a fake clientset report every SelfSubjectAccessReview as
// allowed. Without this, the fake client's default "create" reaction just stores and echoes back
// the submitted object, leaving Status.Allowed at its false zero value - indistinguishable from a
// real permission denial.
func allowSelfSubjectAccessReviews(client *testclient.Clientset) {
client.PrependReactor("create", "selfsubjectaccessreviews",
func(action k8stesting.Action) (bool, runtime.Object, error) {
//nolint:forcetypeassert
review := action.(k8stesting.CreateAction).GetObject().(*authorizationv1.SelfSubjectAccessReview)
review.Status.Allowed = true
return true, review, nil
},
)
}
func TestResolveTLSConfigFlagsTakePrecedence(t *testing.T) {
wantVersion, err := sdktls.ParseTLSVersion("VersionTLS13")
require.NoError(t, err)
// A nil kubeClient would panic if resolveTLSConfig tried to use it, proving the
// ConfigMap path is skipped when the flags are set.
cfg, err := resolveTLSConfig(t.Context(), "VersionTLS13", "", nil, "", func() {})
require.NoError(t, err)
require.NotNil(t, cfg)
assert.Equal(t, wantVersion, cfg.MinVersion)
}
func TestResolveTLSConfigInvalidFlagsReturnsError(t *testing.T) {
_, err := resolveTLSConfig(t.Context(), "not-a-version", "", nil, "", func() {})
assert.Error(t, err)
}
func TestResolveTLSConfigNoFlagsNoClusterFallsBackToNil(t *testing.T) {
cfg, err := resolveTLSConfig(t.Context(), "", "", nil, "", func() {})
require.NoError(t, err)
assert.Nil(t, cfg, "expected nil config so caller falls back to a TLS 1.2 floor with Go's default cipher suites")
}
func TestResolveTLSConfigReadsConfigMapWhenNoFlags(t *testing.T) {
client := testclient.NewSimpleClientset(&corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: sdktls.ConfigMapName,
Namespace: "addon-ns",
},
Data: map[string]string{
sdktls.ConfigMapKeyMinVersion: "VersionTLS13",
},
})
allowSelfSubjectAccessReviews(client)
cfg, err := resolveTLSConfig(t.Context(), "", "", client, "addon-ns", func() {})
require.NoError(t, err)
require.NotNil(t, cfg)
wantVersion, err := sdktls.ParseTLSVersion("VersionTLS13")
require.NoError(t, err)
assert.Equal(t, wantVersion, cfg.MinVersion)
}
func TestResolveTLSConfigDefaultsWhenConfigMapAbsent(t *testing.T) {
client := testclient.NewSimpleClientset()
allowSelfSubjectAccessReviews(client)
cfg, err := resolveTLSConfig(t.Context(), "", "", client, "addon-ns", func() {})
require.NoError(t, err)
require.NotNil(t, cfg)
assert.Equal(t, sdktls.GetDefaultTLSConfig().MinVersion, cfg.MinVersion)
}
func TestResolveTLSConfigMissingConfigMapPermissionReturnsError(t *testing.T) {
// No allowSelfSubjectAccessReviews call: the fake client's default reaction leaves
// Status.Allowed at its false zero value, simulating denied RBAC.
client := testclient.NewSimpleClientset(&corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: sdktls.ConfigMapName,
Namespace: "addon-ns",
},
})
_, err := resolveTLSConfig(t.Context(), "", "", client, "addon-ns", func() {})
assert.Error(t, err)
}