Skip to content

Commit

Permalink
e2e: use portforward to test OpenSSL frontend
Browse files Browse the repository at this point in the history
  • Loading branch information
burgerdev committed Mar 5, 2024
1 parent 207222e commit 0447ca4
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 2 deletions.
30 changes: 30 additions & 0 deletions deployments/openssl/portforwarder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,33 @@ spec:
memory: 50Mi
limits:
memory: 50Mi
---
apiVersion: v1
kind: Pod
metadata:
name: port-forwarder-openssl-frontend
namespace: edg-default
labels:
app.kubernetes.io/name: port-forwarder-openssl-frontend
spec:
containers:
- name: port-forwarder
image: "ghcr.io/edgelesssys/contrast/port-forwarder:latest"
env:
- name: LISTEN_PORT
value: "443"
- name: FORWARD_HOST
value: openssl-frontend
- name: FORWARD_PORT
value: "443"
command:
- /bin/bash
- "-c"
- echo Starting port-forward with socat; exec socat -d -d TCP-LISTEN:${LISTEN_PORT},fork TCP:${FORWARD_HOST}:${FORWARD_PORT}
ports:
- containerPort: 443
resources:
requests:
memory: 50Mi
limits:
memory: 50Mi
34 changes: 32 additions & 2 deletions e2e/openssl/openssl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package openssl

import (
"context"
"crypto/tls"
"os"
"testing"
"time"
Expand All @@ -16,10 +17,10 @@ import (
// namespace the tests are executed in.
const namespaceEnv = "K8S_NAMESPACE"

// TestOpenssl verifies that the certificates minted by the coordinator are accepted by OpenSSL in server and client mode.
// TestBackend verifies that the certificates minted by the coordinator are accepted by OpenSSL in server and client mode.
//
// The test expects deployments/openssl to be available in the cluster (manifest set and workloads ready).
func TestOpenSSL(t *testing.T) {
func TestFrontend2Backend(t *testing.T) {
require := require.New(t)

ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
Expand All @@ -45,3 +46,32 @@ func TestOpenSSL(t *testing.T) {
t.Log(stdout)
require.NoError(err, "stderr: %q", stderr)
}

// TestFrontend verifies the certificate used by the OpenSSL frontend comes from the coordinator.
func TestFrontend(t *testing.T) {
require := require.New(t)

ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer cancel()

c := kubeclient.NewForTest(t)

namespace := os.Getenv(namespaceEnv)
require.NotEmpty(namespace, "environment variable %q must be set", namespaceEnv)

addr, cancelPortForward, err := c.PortForwardPod(ctx, namespace, "port-forwarder-openssl-frontend", "443")
require.NoError(err)
defer cancelPortForward()

// TODO(burgerdev): properly test chain to mesh root
dialer := &tls.Dialer{Config: &tls.Config{InsecureSkipVerify: true}}
conn, err := dialer.DialContext(ctx, "tcp", addr)
require.NoError(err)
tlsConn := conn.(*tls.Conn)

var names []string
for _, cert := range tlsConn.ConnectionState().PeerCertificates {
names = append(names, cert.Subject.CommonName)
}
require.Contains(names, "openssl-frontend")
}

0 comments on commit 0447ca4

Please sign in to comment.