@@ -17,6 +17,11 @@ limitations under the License.
17
17
package eks
18
18
19
19
import (
20
+ "crypto/sha1"
21
+ "crypto/tls"
22
+ "crypto/x509"
23
+ "encoding/hex"
24
+ "encoding/pem"
20
25
"net/http"
21
26
"net/http/httptest"
22
27
"testing"
@@ -35,10 +40,13 @@ import (
35
40
ekscontrolplanev1 "sigs.k8s.io/cluster-api-provider-aws/v2/controlplane/eks/api/v1beta2"
36
41
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope"
37
42
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/services/iamauth/mock_iamauth"
43
+ "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/internal/testcert"
38
44
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
39
45
)
40
46
41
47
func TestOIDCReconcile (t * testing.T ) {
48
+ testCertThumbprint := getTestcertTumbprint (t )
49
+
42
50
tests := []struct {
43
51
name string
44
52
expect func (m * mock_iamauth.MockIAMAPIMockRecorder , url string )
@@ -64,7 +72,7 @@ func TestOIDCReconcile(t *testing.T) {
64
72
}, nil )
65
73
m .CreateOpenIDConnectProvider (& iam.CreateOpenIDConnectProviderInput {
66
74
ClientIDList : aws .StringSlice ([]string {"sts.amazonaws.com" }),
67
- ThumbprintList : aws .StringSlice ([]string {"15dbd260c7465ecca6de2c0b2181187f66ee0d1a" }),
75
+ ThumbprintList : aws .StringSlice ([]string {testCertThumbprint }),
68
76
Url : & url ,
69
77
}).Return (& iam.CreateOpenIDConnectProviderOutput {
70
78
OpenIDConnectProviderArn : aws .String ("arn::oidc" ),
@@ -102,7 +110,7 @@ func TestOIDCReconcile(t *testing.T) {
102
110
OpenIDConnectProviderArn : aws .String ("arn::oidc" ),
103
111
}).Return (& iam.GetOpenIDConnectProviderOutput {
104
112
ClientIDList : aws .StringSlice ([]string {"sts.amazonaws.com" }),
105
- ThumbprintList : aws .StringSlice ([]string {"15dbd260c7465ecca6de2c0b2181187f66ee0d1a" }),
113
+ ThumbprintList : aws .StringSlice ([]string {testCertThumbprint }),
106
114
Url : & url ,
107
115
}, nil )
108
116
m .TagOpenIDConnectProvider (& iam.TagOpenIDConnectProviderInput {
@@ -125,11 +133,7 @@ func TestOIDCReconcile(t *testing.T) {
125
133
_ = ekscontrolplanev1 .AddToScheme (scheme )
126
134
_ = corev1 .AddToScheme (scheme )
127
135
128
- ts := httptest .NewTLSServer (http .HandlerFunc (func (rw http.ResponseWriter , req * http.Request ) {
129
- // Send response to be tested
130
- rw .WriteHeader (http .StatusOK )
131
- rw .Write ([]byte (`OK` ))
132
- }))
136
+ ts := createTestServer (g )
133
137
defer ts .Close ()
134
138
135
139
controlPlane := & ekscontrolplanev1.AWSManagedControlPlane {
@@ -178,6 +182,41 @@ func TestOIDCReconcile(t *testing.T) {
178
182
}
179
183
}
180
184
185
+ func getTestcertTumbprint (t * testing.T ) string {
186
+ t .Helper ()
187
+ g := NewWithT (t )
188
+
189
+ block , _ := pem .Decode (testcert .LocalhostCert )
190
+ g .Expect (block ).ToNot (BeNil (), "failed to parse certificate PEM" )
191
+
192
+ x509Cert , err := x509 .ParseCertificate (block .Bytes )
193
+ g .Expect (err ).NotTo (HaveOccurred ())
194
+
195
+ hash := sha1 .Sum (x509Cert .Raw ) //nolint:gosec
196
+ return hex .EncodeToString (hash [:])
197
+ }
198
+
199
+ func createTestServer (g * GomegaWithT ) * httptest.Server {
200
+ // Create a certificate and private key
201
+ cert , err := tls .X509KeyPair (testcert .LocalhostCert , testcert .LocalhostKey )
202
+ g .Expect (err ).NotTo (HaveOccurred ())
203
+
204
+ // Create custom TLS config
205
+ tlsConfig := & tls.Config { //nolint:gosec
206
+ Certificates : []tls.Certificate {cert },
207
+ }
208
+
209
+ // Create test server with custom TLS config
210
+ server := httptest .NewUnstartedServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
211
+ w .WriteHeader (http .StatusOK )
212
+ w .Write ([]byte (`OK` ))
213
+ }))
214
+ server .TLS = tlsConfig
215
+ server .StartTLS ()
216
+
217
+ return server
218
+ }
219
+
181
220
var kubeConfig = []byte (`apiVersion: v1
182
221
clusters:
183
222
- cluster:
0 commit comments