1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-03-03 14:52:56 +02:00

Merge pull request #804 from MrAlias/handler-test

Fix global handler_test.go test failure
This commit is contained in:
Tyler Yahn 2020-06-09 17:36:04 -07:00 committed by GitHub
commit c367f256a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,6 +17,7 @@ package global
import (
"bytes"
"errors"
"fmt"
"log"
"testing"
"time"
@ -71,19 +72,40 @@ func (s *HandlerTestSuite) TestGlobalHandler() {
}
func (s *HandlerTestSuite) TestNoDropsOnDelegate() {
// max time to wait for goroutine to Handle an error.
pause := 10 * time.Millisecond
var sent int
err := errors.New("")
stop := make(chan struct{})
beat := make(chan struct{})
done := make(chan struct{})
// Wait for a error to be submitted from the following goroutine.
wait := func(d time.Duration) error {
timer := time.NewTimer(d)
select {
case <-timer.C:
// We are about to fail, stop the spawned goroutine.
stop <- struct{}{}
return fmt.Errorf("no errors sent in %v", d)
case <-beat:
// Allow the timer to be reclaimed by GC.
timer.Stop()
return nil
}
}
go func() {
// Slow down to speed up: do not overload the processor.
ticker := time.NewTicker(100 * time.Microsecond)
for {
select {
case <-stop:
ticker.Stop()
done <- struct{}{}
return
default:
case <-ticker.C:
sent++
Handle(err)
}
@ -96,11 +118,7 @@ func (s *HandlerTestSuite) TestNoDropsOnDelegate() {
}()
// Wait for the spice to flow
select {
case <-time.Tick(2 * time.Millisecond):
s.T().Fatal("no errors were sent in 2ms")
case <-beat:
}
s.Require().NoError(wait(pause), "starting error stream")
// Change to another Handler. We are testing this is loss-less.
newErrLogger := new(errLogger)
@ -108,21 +126,9 @@ func (s *HandlerTestSuite) TestNoDropsOnDelegate() {
l: log.New(newErrLogger, "", 0),
}
SetHandler(secondary)
s.Require().NoError(wait(pause), "switched to new Handler")
select {
case <-time.Tick(2 * time.Millisecond):
s.T().Fatal("no errors were sent within 2ms after SetHandler")
case <-beat:
}
// Now beat is clear, wait for a fresh send.
select {
case <-time.Tick(2 * time.Millisecond):
s.T().Fatal("no fresh errors were sent within 2ms after SetHandler")
case <-beat:
}
// Stop sending errors.
// Testing done, stop sending errors.
stop <- struct{}{}
// Ensure we do not lose any straglers.
<-done