Second async test for Broker's proxy answer handler

This commit is contained in:
Serene Han 2016-02-15 11:31:57 -08:00
parent 032ab6bcb8
commit ee5f4558af
2 changed files with 42 additions and 3 deletions

View file

@ -210,7 +210,7 @@ func answerHandler(ctx *BrokerContext, w http.ResponseWriter, r *http.Request) {
return return
} }
body, err := ioutil.ReadAll(r.Body) body, err := ioutil.ReadAll(r.Body)
if nil != err { if nil != err || nil == body || len(body) <= 0 {
log.Println("Invalid data.") log.Println("Invalid data.")
w.WriteHeader(http.StatusBadRequest) w.WriteHeader(http.StatusBadRequest)
return return

View file

@ -7,6 +7,7 @@ import (
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"testing" "testing"
"fmt"
) )
func TestBroker(t *testing.T) { func TestBroker(t *testing.T) {
@ -25,7 +26,7 @@ func TestBroker(t *testing.T) {
Convey("Responds to client offers...", func() { Convey("Responds to client offers...", func() {
w := httptest.NewRecorder() w := httptest.NewRecorder()
data := bytes.NewReader([]byte("test")) data := bytes.NewReader([]byte("test"))
r, err := http.NewRequest("POST", "broker.com/client", data) r, err := http.NewRequest("POST", "snowflake.broker/client", data)
So(err, ShouldBeNil) So(err, ShouldBeNil)
Convey("with 503 when no snowflakes are available.", func() { Convey("with 503 when no snowflakes are available.", func() {
@ -73,7 +74,7 @@ func TestBroker(t *testing.T) {
done := make(chan bool) done := make(chan bool)
w := httptest.NewRecorder() w := httptest.NewRecorder()
data := bytes.NewReader([]byte("test")) data := bytes.NewReader([]byte("test"))
r, err := http.NewRequest("POST", "broker.com/proxy", data) r, err := http.NewRequest("POST", "snowflake.broker/proxy", data)
r.Header.Set("X-Session-ID", "test") r.Header.Set("X-Session-ID", "test")
So(err, ShouldBeNil) So(err, ShouldBeNil)
@ -105,6 +106,44 @@ func TestBroker(t *testing.T) {
So(w.Code, ShouldEqual, http.StatusGatewayTimeout) So(w.Code, ShouldEqual, http.StatusGatewayTimeout)
}) })
}) })
Convey("Responds to proxy answers...", func() {
w := httptest.NewRecorder()
data := bytes.NewReader([]byte("fake answer"))
s := ctx.AddSnowflake("test")
Convey("by passing to the client if valid.", func() {
r, err := http.NewRequest("POST", "snowflake.broker/answer", data)
So(err, ShouldBeNil)
r.Header.Set("X-Session-ID", "test")
go func(ctx *BrokerContext) {
answerHandler(ctx, w, r)
}(ctx)
answer := <- s.answerChannel
So(w.Code, ShouldEqual, http.StatusOK)
So(answer, ShouldResemble, []byte("fake answer"))
})
Convey("with error if the proxy is not recognized", func() {
r, err := http.NewRequest("POST", "snowflake.broker/answer", nil)
So(err, ShouldBeNil)
r.Header.Set("X-Session-ID", "invalid")
answerHandler(ctx, w, r)
So(w.Code, ShouldEqual, http.StatusGone)
fmt.Println("omg")
})
Convey("with error if the proxy gives invalid answer", func() {
data := bytes.NewReader(nil)
r, err := http.NewRequest("POST", "snowflake.broker/answer", data)
r.Header.Set("X-Session-ID", "test")
So(err, ShouldBeNil)
answerHandler(ctx, w, r)
So(w.Code, ShouldEqual, http.StatusBadRequest)
})
})
}) })
} }