chore: add additional tailnet topology integration tests (#13549)

This commit is contained in:
Ethan
2024-06-13 02:02:34 +10:00
committed by GitHub
parent ba7d1835e5
commit 58bf0ec1c6
2 changed files with 135 additions and 6 deletions

View File

@ -4,8 +4,10 @@
package integration
import (
"net/http"
"net/url"
"testing"
"time"
"github.com/stretchr/testify/require"
@ -14,9 +16,34 @@ import (
"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, _ *url.URL, conn *tailnet.Conn, _, peer Client) {
func TestSuite(t *testing.T, _ slog.Logger, serverURL *url.URL, conn *tailnet.Conn, _, peer Client) {
t.Parallel()
t.Run("Connectivity", func(t *testing.T) {
@ -26,5 +53,30 @@ func TestSuite(t *testing.T, _ slog.Logger, _ *url.URL, conn *tailnet.Conn, _, p
require.NoError(t, err, "ping peer")
})
// TODO: more
t.Run("RestartDERP", func(t *testing.T) {
peerIP := tailnet.IPFromUUID(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.IPFromUUID(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.IPFromUUID(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")
})
}