(t *testing.T)
| 361 | } |
| 362 | |
| 363 | func TestMultipleClients(t *testing.T) { |
| 364 | mode.Set(mode.TestDev) |
| 365 | |
| 366 | defer leaktest.Check(t)() |
| 367 | userIDs := []uint{1, 1, 1, 2, 2, 3} |
| 368 | i := 0 |
| 369 | server, api := bootTestServer(func(context *gin.Context) { |
| 370 | auth.RegisterAuthentication(context, nil, userIDs[i], "t"+fmt.Sprint(userIDs[i])) |
| 371 | i++ |
| 372 | }) |
| 373 | defer server.Close() |
| 374 | |
| 375 | wsURL := wsURL(server.URL) |
| 376 | |
| 377 | userOneIPhone := testClient(t, wsURL) |
| 378 | defer userOneIPhone.conn.Close() |
| 379 | userOneAndroid := testClient(t, wsURL) |
| 380 | defer userOneAndroid.conn.Close() |
| 381 | userOneBrowser := testClient(t, wsURL) |
| 382 | defer userOneBrowser.conn.Close() |
| 383 | userOne := []*testingClient{userOneAndroid, userOneBrowser, userOneIPhone} |
| 384 | |
| 385 | userTwoBrowser := testClient(t, wsURL) |
| 386 | defer userTwoBrowser.conn.Close() |
| 387 | userTwoAndroid := testClient(t, wsURL) |
| 388 | defer userTwoAndroid.conn.Close() |
| 389 | userTwo := []*testingClient{userTwoAndroid, userTwoBrowser} |
| 390 | |
| 391 | userThreeAndroid := testClient(t, wsURL) |
| 392 | defer userThreeAndroid.conn.Close() |
| 393 | userThree := []*testingClient{userThreeAndroid} |
| 394 | |
| 395 | waitForConnectedClients(api, len(userOne)+len(userTwo)+len(userThree)) |
| 396 | |
| 397 | // there should not be messages at the beginning |
| 398 | expectNoMessage(userOne...) |
| 399 | expectNoMessage(userTwo...) |
| 400 | expectNoMessage(userThree...) |
| 401 | |
| 402 | api.Notify(1, &model.MessageExternal{ID: 1, Message: "hello"}) |
| 403 | time.Sleep(500 * time.Millisecond) |
| 404 | expectMessage(&model.MessageExternal{ID: 1, Message: "hello"}, userOne...) |
| 405 | expectNoMessage(userTwo...) |
| 406 | expectNoMessage(userThree...) |
| 407 | |
| 408 | api.Notify(2, &model.MessageExternal{ID: 2, Message: "there"}) |
| 409 | expectNoMessage(userOne...) |
| 410 | expectMessage(&model.MessageExternal{ID: 2, Message: "there"}, userTwo...) |
| 411 | expectNoMessage(userThree...) |
| 412 | |
| 413 | userOneIPhone.conn.Close() |
| 414 | |
| 415 | expectNoMessage(userOne...) |
| 416 | expectNoMessage(userTwo...) |
| 417 | expectNoMessage(userThree...) |
| 418 | |
| 419 | api.Notify(1, &model.MessageExternal{ID: 3, Message: "how"}) |
| 420 | expectMessage(&model.MessageExternal{ID: 3, Message: "how"}, userOneAndroid, userOneBrowser) |
nothing calls this directly
no test coverage detected
searching dependent graphs…