Fix data race in tests

This commit is contained in:
Bruce Marriner 2016-06-17 13:12:42 -05:00
parent 32229d5de5
commit 5322552229

View file

@ -227,6 +227,7 @@ func TestOpenClose(t *testing.T) {
} }
func TestAddHandler(t *testing.T) { func TestAddHandler(t *testing.T) {
testHandlerCalled := int32(0) testHandlerCalled := int32(0)
testHandler := func(s *Session, m *MessageCreate) { testHandler := func(s *Session, m *MessageCreate) {
atomic.AddInt32(&testHandlerCalled, 1) atomic.AddInt32(&testHandlerCalled, 1)
@ -237,9 +238,9 @@ func TestAddHandler(t *testing.T) {
atomic.AddInt32(&interfaceHandlerCalled, 1) atomic.AddInt32(&interfaceHandlerCalled, 1)
} }
bogusHandlerCalled := false bogusHandlerCalled := int32(0)
bogusHandler := func(s *Session, se *Session) { bogusHandler := func(s *Session, se *Session) {
bogusHandlerCalled = true atomic.AddInt32(&bogusHandlerCalled, 1)
} }
d := Session{} d := Session{}
@ -252,24 +253,25 @@ func TestAddHandler(t *testing.T) {
d.handle(&MessageCreate{}) d.handle(&MessageCreate{})
d.handle(&MessageDelete{}) d.handle(&MessageDelete{})
<-time.After(100 * time.Millisecond) <-time.After(500 * time.Millisecond)
// testHandler will be called twice because it was added twice. // testHandler will be called twice because it was added twice.
if testHandlerCalled != 2 { if atomic.LoadInt32(&testHandlerCalled) != 2 {
t.Fatalf("testHandler was not called twice.") t.Fatalf("testHandler was not called twice.")
} }
// interfaceHandler will be called twice, once for each event. // interfaceHandler will be called twice, once for each event.
if interfaceHandlerCalled != 2 { if atomic.LoadInt32(&interfaceHandlerCalled) != 2 {
t.Fatalf("interfaceHandler was not called twice.") t.Fatalf("interfaceHandler was not called twice.")
} }
if bogusHandlerCalled { if atomic.LoadInt32(&bogusHandlerCalled) != 0 {
t.Fatalf("bogusHandler was called.") t.Fatalf("bogusHandler was called.")
} }
} }
func TestRemoveHandler(t *testing.T) { func TestRemoveHandler(t *testing.T) {
testHandlerCalled := int32(0) testHandlerCalled := int32(0)
testHandler := func(s *Session, m *MessageCreate) { testHandler := func(s *Session, m *MessageCreate) {
atomic.AddInt32(&testHandlerCalled, 1) atomic.AddInt32(&testHandlerCalled, 1)
@ -284,10 +286,10 @@ func TestRemoveHandler(t *testing.T) {
d.handle(&MessageCreate{}) d.handle(&MessageCreate{})
<-time.After(100 * time.Millisecond) <-time.After(500 * time.Millisecond)
// testHandler will be called once, as it was removed in between calls. // testHandler will be called once, as it was removed in between calls.
if testHandlerCalled != 1 { if atomic.LoadInt32(&testHandlerCalled) != 1 {
t.Fatalf("testHandler was not called once.") t.Fatalf("testHandler was not called once.")
} }
} }