Add tests to check for data race in broker

We had some data races in the broker that occur when proxies and clients
modify the heap/snowflake map at the same time. This test has a client
and proxy access the broker simultaneously to check for data races.
This commit is contained in:
Cecylia Bocovich 2019-11-25 14:00:54 -05:00
parent dccc15a6e9
commit 42e16021c4

View file

@ -191,12 +191,61 @@ func TestBroker(t *testing.T) {
})
})
})
Convey("End-To-End", t, func() {
ctx := NewBrokerContext(NullLogger())
Convey("Check for client/proxy data race", func() {
proxy_done := make(chan bool)
client_done := make(chan bool)
go ctx.Broker()
// Make proxy poll
wp := httptest.NewRecorder()
datap := bytes.NewReader([]byte(`{"Sid":"ymbcCMto7KHNGYlp","Version":"1.0"}`))
rp, err := http.NewRequest("POST", "snowflake.broker/proxy", datap)
So(err, ShouldBeNil)
go func(ctx *BrokerContext) {
proxyPolls(ctx, wp, rp)
proxy_done <- true
}(ctx)
// Client offer
wc := httptest.NewRecorder()
datac := bytes.NewReader([]byte("test"))
rc, err := http.NewRequest("POST", "snowflake.broker/client", datac)
So(err, ShouldBeNil)
go func() {
clientOffers(ctx, wc, rc)
client_done <- true
}()
<-proxy_done
So(wp.Code, ShouldEqual, http.StatusOK)
// Proxy answers
wp = httptest.NewRecorder()
datap = bytes.NewReader([]byte(`{"Version":"1.0","Sid":"ymbcCMto7KHNGYlp","Answer":"test"}`))
rp, err = http.NewRequest("POST", "snowflake.broker/answer", datap)
So(err, ShouldBeNil)
go func(ctx *BrokerContext) {
proxyAnswers(ctx, wp, rp)
proxy_done <- true
}(ctx)
<-proxy_done
<-client_done
})
Convey("Ensure correct snowflake brokering", func() {
done := make(chan bool)
polled := make(chan bool)
ctx := NewBrokerContext(NullLogger())
// Proxy polls with its ID first...
dataP := bytes.NewReader([]byte(`{"Sid":"ymbcCMto7KHNGYlp","Version":"1.0"}`))
@ -244,6 +293,7 @@ func TestBroker(t *testing.T) {
So(wC.Code, ShouldEqual, http.StatusOK)
So(wC.Body.String(), ShouldEqual, "test")
})
})
}
func TestSnowflakeHeap(t *testing.T) {