Files
coder/tailnet/test/integration/suite.go
T
Spike Curtis 7d9f5ab81d chore: add Coder service prefix to tailnet (#14943)
re: #14715

This PR introduces the Coder service prefix: `fd60:627a:a42b::/48` and refactors our existing code as calling the Tailscale service prefix explicitly (rather than implicitly).

Removes the unused `Addresses` agent option. All clients today assume they can compute the Agent's IP address based on its UUID, so an agent started with a custom address would break things.
2024-10-04 10:04:10 +04:00

83 lines
2.6 KiB
Go

//go:build linux
// +build linux
package integration
import (
"net/http"
"net/url"
"testing"
"time"
"github.com/stretchr/testify/require"
"cdr.dev/slog"
"github.com/coder/coder/v2/tailnet"
"github.com/coder/coder/v2/testutil"
)
// nolint:revive
func sendRestart(t *testing.T, serverURL *url.URL, derp bool, coordinator bool) {
t.Helper()
ctx := testutil.Context(t, 2*time.Second)
serverURL, err := url.Parse(serverURL.String() + "/restart")
q := serverURL.Query()
if derp {
q.Set("derp", "true")
}
if coordinator {
q.Set("coordinator", "true")
}
serverURL.RawQuery = q.Encode()
require.NoError(t, err)
req, err := http.NewRequestWithContext(ctx, http.MethodPost, serverURL.String(), nil)
require.NoError(t, err)
resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()
require.Equal(t, http.StatusOK, resp.StatusCode, "unexpected status code %d", resp.StatusCode)
}
// TODO: instead of reusing one conn for each suite, maybe we should make a new
// one for each subtest?
func TestSuite(t *testing.T, _ slog.Logger, serverURL *url.URL, conn *tailnet.Conn, _, peer Client) {
t.Parallel()
t.Run("Connectivity", func(t *testing.T) {
t.Parallel()
peerIP := tailnet.TailscaleServicePrefix.AddrFromUUID(peer.ID)
_, _, _, err := conn.Ping(testutil.Context(t, testutil.WaitLong), peerIP)
require.NoError(t, err, "ping peer")
})
t.Run("RestartDERP", func(t *testing.T) {
peerIP := tailnet.TailscaleServicePrefix.AddrFromUUID(peer.ID)
_, _, _, err := conn.Ping(testutil.Context(t, testutil.WaitLong), peerIP)
require.NoError(t, err, "ping peer")
sendRestart(t, serverURL, true, false)
_, _, _, err = conn.Ping(testutil.Context(t, testutil.WaitLong), peerIP)
require.NoError(t, err, "ping peer after derp restart")
})
t.Run("RestartCoordinator", func(t *testing.T) {
peerIP := tailnet.TailscaleServicePrefix.AddrFromUUID(peer.ID)
_, _, _, err := conn.Ping(testutil.Context(t, testutil.WaitLong), peerIP)
require.NoError(t, err, "ping peer")
sendRestart(t, serverURL, false, true)
_, _, _, err = conn.Ping(testutil.Context(t, testutil.WaitLong), peerIP)
require.NoError(t, err, "ping peer after coordinator restart")
})
t.Run("RestartBoth", func(t *testing.T) {
peerIP := tailnet.TailscaleServicePrefix.AddrFromUUID(peer.ID)
_, _, _, err := conn.Ping(testutil.Context(t, testutil.WaitLong), peerIP)
require.NoError(t, err, "ping peer")
sendRestart(t, serverURL, true, true)
_, _, _, err = conn.Ping(testutil.Context(t, testutil.WaitLong), peerIP)
require.NoError(t, err, "ping peer after restart")
})
}