MCPcopy
hub / github.com/gotify/server / TestMultipleClients

Function TestMultipleClients

api/stream/stream_test.go:363–438  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

361}
362
363func 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)

Callers

nothing calls this directly

Calls 10

SetFunction · 0.92
RegisterAuthenticationFunction · 0.92
bootTestServerFunction · 0.85
wsURLFunction · 0.85
testClientFunction · 0.85
waitForConnectedClientsFunction · 0.85
expectNoMessageFunction · 0.85
expectMessageFunction · 0.85
NotifyMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…