1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-05-13 21:56:48 +02:00

Fix tests

Old tests were masking the underlying function they were trying to test.
This commit is contained in:
Tyler Yahn 2020-06-01 10:38:05 -07:00
parent 7967e53fd9
commit 57e65fe7f8
No known key found for this signature in database
GPG Key ID: 42AA23B0BC85B798
2 changed files with 44 additions and 30 deletions

View File

@ -22,12 +22,14 @@ import (
"go.opentelemetry.io/otel/api/oterror" "go.opentelemetry.io/otel/api/oterror"
) )
var defaultHandler = &handler{ var (
l: log.New(os.Stderr, "", log.LstdFlags), defaultHandler = &handler{
} l: log.New(os.Stderr, "", log.LstdFlags),
}
// Global Handler (used for testing). // Ensure the handler implements oterror.Handle at build time.
var globalHandler oterror.Handler = defaultHandler _ oterror.Handler = (*handler)(nil)
)
// handler logs all errors to STDERR. // handler logs all errors to STDERR.
type handler struct { type handler struct {
@ -65,7 +67,7 @@ func (h *handler) Handle(err error) {
// until an Handler is set (all functionality is delegated to the set // until an Handler is set (all functionality is delegated to the set
// Handler once it is set). // Handler once it is set).
func Handler() oterror.Handler { func Handler() oterror.Handler {
return globalHandler return defaultHandler
} }
// SetHandler sets the global Handler to be h. // SetHandler sets the global Handler to be h.
@ -75,5 +77,5 @@ func SetHandler(h oterror.Handler) {
// Handle is a convience function for Handler().Handle(err) // Handle is a convience function for Handler().Handle(err)
func Handle(err error) { func Handle(err error) {
globalHandler.Handle(err) defaultHandler.Handle(err)
} }

View File

@ -15,52 +15,60 @@
package global package global
import ( import (
"bytes"
"errors" "errors"
"log"
"testing" "testing"
"time" "time"
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
"go.opentelemetry.io/otel/api/oterror"
) )
type mock []error type errLogger []string
func (m *mock) Handle(err error) { func (l *errLogger) Write(p []byte) (int, error) {
(*m) = append(*m, err) msg := bytes.TrimRight(p, "\n")
(*l) = append(*l, string(msg))
return len(msg), nil
}
func (l *errLogger) Reset() {
*l = errLogger([]string{})
}
func (l *errLogger) Got() []string {
return []string(*l)
} }
type HandlerTestSuite struct { type HandlerTestSuite struct {
suite.Suite suite.Suite
origHandler oterror.Handler origHandler *handler
errs []error errLogger *errLogger
}
func (s *HandlerTestSuite) Handle(err error) {
s.errs = append(s.errs, err)
} }
func (s *HandlerTestSuite) SetupSuite() { func (s *HandlerTestSuite) SetupSuite() {
s.origHandler = globalHandler s.errLogger = new(errLogger)
globalHandler = s s.origHandler = defaultHandler
defaultHandler = &handler{
l: log.New(s.errLogger, "", 0),
}
} }
func (s *HandlerTestSuite) TearDownSuite() { func (s *HandlerTestSuite) TearDownSuite() {
globalHandler = s.origHandler defaultHandler = s.origHandler
} }
func (s *HandlerTestSuite) SetupTest() { func (s *HandlerTestSuite) SetupTest() {
s.errs = []error{} s.errLogger.Reset()
} }
func (s *HandlerTestSuite) TestGlobalHandler() { func (s *HandlerTestSuite) TestGlobalHandler() {
err1 := errors.New("one") errs := []string{"one", "two"}
err2 := errors.New("two") Handler().Handle(errors.New(errs[0]))
Handler().Handle(err1) Handle(errors.New(errs[1]))
Handle(err2) s.Assert().Equal(errs, s.errLogger.Got())
s.Assert().Equal([]error{err1, err2}, s.errs)
} }
func (s *HandlerTestSuite) TestNoDropsOnDelegate() { func (s *HandlerTestSuite) TestNoDropsOnDelegate() {
@ -96,7 +104,10 @@ func (s *HandlerTestSuite) TestNoDropsOnDelegate() {
} }
// Change to another Handler. We are testing this is loss-less. // Change to another Handler. We are testing this is loss-less.
secondary := new(mock) newErrLogger := new(errLogger)
secondary := &handler{
l: log.New(newErrLogger, "", 0),
}
SetHandler(secondary) SetHandler(secondary)
select { select {
@ -117,8 +128,9 @@ func (s *HandlerTestSuite) TestNoDropsOnDelegate() {
// Ensure we do not lose any straglers. // Ensure we do not lose any straglers.
<-done <-done
s.Assert().Greater(len(s.errs), 1, "at least 2 errors should have been sent") got := append(s.errLogger.Got(), newErrLogger.Got()...)
s.Assert().Len(s.errs, sent) s.Assert().Greater(len(got), 1, "at least 2 errors should have been sent")
s.Assert().Len(got, sent)
} }
func TestHandlerTestSuite(t *testing.T) { func TestHandlerTestSuite(t *testing.T) {