@@ -17,6 +17,11 @@ limitations under the License.
1717package eks
1818
1919import (
20+ "crypto/sha1"
21+ "crypto/tls"
22+ "crypto/x509"
23+ "encoding/hex"
24+ "encoding/pem"
2025 "net/http"
2126 "net/http/httptest"
2227 "testing"
@@ -35,10 +40,13 @@ import (
3540 ekscontrolplanev1 "sigs.k8s.io/cluster-api-provider-aws/v2/controlplane/eks/api/v1beta2"
3641 "sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope"
3742 "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"
3844 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3945)
4046
4147func TestOIDCReconcile (t * testing.T ) {
48+ testCertThumbprint := getTestcertTumbprint (t )
49+
4250 tests := []struct {
4351 name string
4452 expect func (m * mock_iamauth.MockIAMAPIMockRecorder , url string )
@@ -64,7 +72,7 @@ func TestOIDCReconcile(t *testing.T) {
6472 }, nil )
6573 m .CreateOpenIDConnectProvider (& iam.CreateOpenIDConnectProviderInput {
6674 ClientIDList : aws .StringSlice ([]string {"sts.amazonaws.com" }),
67- ThumbprintList : aws .StringSlice ([]string {"15dbd260c7465ecca6de2c0b2181187f66ee0d1a" }),
75+ ThumbprintList : aws .StringSlice ([]string {testCertThumbprint }),
6876 Url : & url ,
6977 }).Return (& iam.CreateOpenIDConnectProviderOutput {
7078 OpenIDConnectProviderArn : aws .String ("arn::oidc" ),
@@ -102,7 +110,7 @@ func TestOIDCReconcile(t *testing.T) {
102110 OpenIDConnectProviderArn : aws .String ("arn::oidc" ),
103111 }).Return (& iam.GetOpenIDConnectProviderOutput {
104112 ClientIDList : aws .StringSlice ([]string {"sts.amazonaws.com" }),
105- ThumbprintList : aws .StringSlice ([]string {"15dbd260c7465ecca6de2c0b2181187f66ee0d1a" }),
113+ ThumbprintList : aws .StringSlice ([]string {testCertThumbprint }),
106114 Url : & url ,
107115 }, nil )
108116 m .TagOpenIDConnectProvider (& iam.TagOpenIDConnectProviderInput {
@@ -125,11 +133,7 @@ func TestOIDCReconcile(t *testing.T) {
125133 _ = ekscontrolplanev1 .AddToScheme (scheme )
126134 _ = corev1 .AddToScheme (scheme )
127135
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 )
133137 defer ts .Close ()
134138
135139 controlPlane := & ekscontrolplanev1.AWSManagedControlPlane {
@@ -178,6 +182,41 @@ func TestOIDCReconcile(t *testing.T) {
178182 }
179183}
180184
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+
181220var kubeConfig = []byte (`apiVersion: v1
182221clusters:
183222- cluster:
0 commit comments