Welcome to mirror list, hosted at ThFree Co, Russian Federation.

listener_test.go « workhorse - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 26b5535af09f00daeec08d0bf2c56513e1426e70 (plain)
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
package main

import (
	"crypto/tls"
	"crypto/x509"
	"io"
	"net"
	"os"
	"testing"

	"github.com/stretchr/testify/require"

	"gitlab.com/gitlab-org/gitlab/workhorse/internal/config"
)

func TestNewListener(t *testing.T) {
	const unixSocket = "testdata/sock"

	require.NoError(t, os.RemoveAll(unixSocket))

	testCases := []struct {
		network, addr string
	}{
		{"tcp", "127.0.0.1:0"},
		{"unix", unixSocket},
	}

	for _, tc := range testCases {
		t.Run(tc.network+"+"+tc.addr, func(t *testing.T) {
			l, err := newListener("test", config.ListenerConfig{
				Addr:    tc.addr,
				Network: tc.network,
			})
			require.NoError(t, err)
			defer l.Close()
			go pingServer(l)

			c, err := net.Dial(tc.network, l.Addr().String())
			require.NoError(t, err)
			defer c.Close()
			pingClient(t, c)
		})
	}
}

func pingServer(l net.Listener) {
	c, err := l.Accept()
	if err != nil {
		return
	}
	io.WriteString(c, "ping")
	c.Close()
}

func pingClient(t *testing.T, c net.Conn) {
	t.Helper()
	buf, err := io.ReadAll(c)
	require.NoError(t, err)
	require.Equal(t, "ping", string(buf))
}

func TestNewListener_TLS(t *testing.T) {
	const (
		certFile = "testdata/localhost.crt"
		keyFile  = "testdata/localhost.key"
	)

	cfg := config.ListenerConfig{Addr: "127.0.0.1:0",
		Network: "tcp",
		Tls: &config.TlsConfig{
			Certificate: certFile,
			Key:         keyFile,
		},
	}

	l, err := newListener("test", cfg)
	require.NoError(t, err)
	defer l.Close()
	go pingServer(l)

	tlsCertificate, err := tls.LoadX509KeyPair(certFile, keyFile)
	require.NoError(t, err)

	certificate, err := x509.ParseCertificate(tlsCertificate.Certificate[0])
	require.NoError(t, err)
	certpool := x509.NewCertPool()
	certpool.AddCert(certificate)

	c, err := tls.Dial("tcp", l.Addr().String(), &tls.Config{RootCAs: certpool})
	require.NoError(t, err)
	defer c.Close()

	pingClient(t, c)
}