(t *testing.T)
| 949 | } |
| 950 | |
| 951 | func TestMultipleConcurrentConnections(t *testing.T) { |
| 952 | t.Parallel() |
| 953 | |
| 954 | ctx := testutil.Context(t, testutil.WaitLong) |
| 955 | repoDir := initTestRepo(t) |
| 956 | require.NoError(t, os.WriteFile(filepath.Join(repoDir, "c.go"), []byte("package c\n"), 0o600)) |
| 957 | |
| 958 | ps := agentgit.NewPathStore() |
| 959 | chatID := uuid.New() |
| 960 | ps.AddPaths([]uuid.UUID{chatID}, []string{filepath.Join(repoDir, "c.go")}) |
| 961 | |
| 962 | logger := slogtest.Make(t, nil) |
| 963 | api := agentgit.NewAPI(logger, ps) |
| 964 | srv := httptest.NewServer(api.Routes()) |
| 965 | t.Cleanup(srv.Close) |
| 966 | |
| 967 | wsURL := "ws" + srv.URL[len("http"):] + "/watch?chat_id=" + chatID.String() |
| 968 | |
| 969 | // Create two independent connections. |
| 970 | conn1, _, err := websocket.Dial(context.Background(), wsURL, nil) |
| 971 | require.NoError(t, err) |
| 972 | t.Cleanup(func() { _ = conn1.Close(websocket.StatusNormalClosure, "") }) |
| 973 | |
| 974 | conn2, _, err := websocket.Dial(context.Background(), wsURL, nil) |
| 975 | require.NoError(t, err) |
| 976 | t.Cleanup(func() { _ = conn2.Close(websocket.StatusNormalClosure, "") }) |
| 977 | |
| 978 | stream1 := wsjson.NewStream[ |
| 979 | codersdk.WorkspaceAgentGitServerMessage, |
| 980 | codersdk.WorkspaceAgentGitClientMessage, |
| 981 | ](conn1, websocket.MessageText, websocket.MessageText, logger) |
| 982 | ch1 := stream1.Chan() |
| 983 | |
| 984 | stream2 := wsjson.NewStream[ |
| 985 | codersdk.WorkspaceAgentGitServerMessage, |
| 986 | codersdk.WorkspaceAgentGitClientMessage, |
| 987 | ](conn2, websocket.MessageText, websocket.MessageText, logger) |
| 988 | ch2 := stream2.Chan() |
| 989 | |
| 990 | // Both should receive independent responses. |
| 991 | msg1 := recvMsg(ctx, t, ch1) |
| 992 | msg2 := recvMsg(ctx, t, ch2) |
| 993 | |
| 994 | assert.Equal(t, codersdk.WorkspaceAgentGitServerMessageTypeChanges, msg1.Type) |
| 995 | assert.Equal(t, codersdk.WorkspaceAgentGitServerMessageTypeChanges, msg2.Type) |
| 996 | assert.NotEmpty(t, msg1.Repositories) |
| 997 | assert.NotEmpty(t, msg2.Repositories) |
| 998 | } |
| 999 | |
| 1000 | func TestScanLargeFileTooLargeToDiff(t *testing.T) { |
| 1001 | t.Parallel() |
nothing calls this directly
no test coverage detected