[tor-commits] [snowflake/master] Added tests to check large read guards
cohosh at torproject.org
cohosh at torproject.org
Tue May 28 18:11:44 UTC 2019
commit 0842dad38e6cfd464166f16ed8088b02055714e3
Author: Cecylia Bocovich <cohosh at torproject.org>
Date: Fri May 10 15:39:05 2019 -0400
Added tests to check large read guards
---
broker/snowflake-broker_test.go | 10 ++++++++++
client/lib/lib_test.go | 28 +++++++++++++++++++++-------
2 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/broker/snowflake-broker_test.go b/broker/snowflake-broker_test.go
index 0d50035..03aa2b4 100644
--- a/broker/snowflake-broker_test.go
+++ b/broker/snowflake-broker_test.go
@@ -178,6 +178,16 @@ func TestBroker(t *testing.T) {
proxyAnswers(ctx, w, r)
So(w.Code, ShouldEqual, http.StatusBadRequest)
})
+
+ Convey("with error if the proxy writes too much data", func() {
+ data := bytes.NewReader(make([]byte, 100001, 100001))
+ r, err := http.NewRequest("POST", "snowflake.broker/answer", data)
+ r.Header.Set("X-Session-ID", "test")
+ So(err, ShouldBeNil)
+ proxyAnswers(ctx, w, r)
+ So(w.Code, ShouldEqual, http.StatusBadRequest)
+ })
+
})
})
diff --git a/client/lib/lib_test.go b/client/lib/lib_test.go
index 5a9a2e5..4f74cb3 100644
--- a/client/lib/lib_test.go
+++ b/client/lib/lib_test.go
@@ -6,7 +6,6 @@ import (
"io/ioutil"
"net"
"net/http"
- "strings"
"testing"
"github.com/keroserene/go-webrtc"
@@ -33,11 +32,14 @@ func (m *MockResponse) Read(p []byte) (int, error) {
}
func (m *MockResponse) Close() error { return nil }
-type MockTransport struct{ statusOverride int }
+type MockTransport struct {
+ statusOverride int
+ body []byte
+}
// Just returns a response with fake SDP answer.
func (m *MockTransport) RoundTrip(req *http.Request) (*http.Response, error) {
- s := ioutil.NopCloser(strings.NewReader(`{"type":"answer","sdp":"fake"}`))
+ s := ioutil.NopCloser(bytes.NewReader(m.body))
r := &http.Response{
StatusCode: m.statusOverride,
Body: s,
@@ -263,7 +265,10 @@ func TestSnowflakeClient(t *testing.T) {
Convey("Rendezvous", t, func() {
webrtc.SetLoggingVerbosity(0)
- transport := &MockTransport{http.StatusOK}
+ transport := &MockTransport{
+ http.StatusOK,
+ []byte(`{"type":"answer","sdp":"fake"}`),
+ }
fakeOffer := webrtc.DeserializeSessionDescription("test")
Convey("Construct BrokerChannel with no front domain", func() {
@@ -291,7 +296,7 @@ func TestSnowflakeClient(t *testing.T) {
Convey("BrokerChannel.Negotiate fails with 503", func() {
b := NewBrokerChannel("test.broker", "",
- &MockTransport{http.StatusServiceUnavailable})
+ &MockTransport{http.StatusServiceUnavailable, []byte("\n")})
answer, err := b.Negotiate(fakeOffer)
So(err, ShouldNotBeNil)
So(answer, ShouldBeNil)
@@ -300,16 +305,25 @@ func TestSnowflakeClient(t *testing.T) {
Convey("BrokerChannel.Negotiate fails with 400", func() {
b := NewBrokerChannel("test.broker", "",
- &MockTransport{http.StatusBadRequest})
+ &MockTransport{http.StatusBadRequest, []byte("\n")})
answer, err := b.Negotiate(fakeOffer)
So(err, ShouldNotBeNil)
So(answer, ShouldBeNil)
So(err.Error(), ShouldResemble, BrokerError400)
})
+ Convey("BrokerChannel.Negotiate fails with large read", func() {
+ b := NewBrokerChannel("test.broker", "",
+ &MockTransport{http.StatusOK, make([]byte, 100001, 100001)})
+ answer, err := b.Negotiate(fakeOffer)
+ So(err, ShouldNotBeNil)
+ So(answer, ShouldBeNil)
+ So(err.Error(), ShouldResemble, "unexpected EOF")
+ })
+
Convey("BrokerChannel.Negotiate fails with unexpected error", func() {
b := NewBrokerChannel("test.broker", "",
- &MockTransport{123})
+ &MockTransport{123, []byte("")})
answer, err := b.Negotiate(fakeOffer)
So(err, ShouldNotBeNil)
So(answer, ShouldBeNil)
More information about the tor-commits
mailing list