github.com/diamondburned/arikawa/v2@v2.1.0/gateway/perseverance_test.go (about) 1 // +build perseverance 2 3 package gateway 4 5 import ( 6 "testing" 7 "time" 8 9 "github.com/diamondburned/arikawa/v2/internal/testenv" 10 ) 11 12 func TestPerseverance(t *testing.T) { 13 t.Parallel() 14 15 config := testenv.Must(t) 16 17 g, err := NewGateway("Bot " + config.BotToken) 18 if err != nil { 19 t.Fatal("failed to make the gateway:", err) 20 } 21 g.AddIntents(IntentGuilds) 22 23 if err := g.Open(); err != nil { 24 t.Fatal("failed to open the gateway:", err) 25 } 26 27 timeout := make(chan struct{}, 1) 28 29 // Automatically close the gateway after set duration. 30 time.AfterFunc(testenv.PerseveranceTime, func() { 31 t.Log("Perserverence test finshed. Closing gateway.") 32 timeout <- struct{}{} 33 34 if err := g.Close(); err != nil { 35 t.Error("failed to close gateway:", err) 36 } 37 }) 38 39 // Spin on events. 40 for ev := range g.Events { 41 t.Logf("Received event %T.", ev) 42 } 43 44 // Exit gracefully if we have not. 45 select { 46 case <-timeout: 47 return 48 default: 49 } 50 51 if err := g.Close(); err != nil { 52 t.Fatal("failed to clean up gateway after fail:", err) 53 } 54 55 t.Fatal("Test failed before timeout.") 56 }