Browse Source

Merge pull request #102 from matrix-org/kegan/tests

Move test util functions to dedicated file to clean up test files
kegan/rss-escape-entities
Kegsay 8 years ago
committed by GitHub
parent
commit
94e2c72451
  1. 2
      hooks/pre-commit
  2. 57
      src/github.com/matrix-org/go-neb/goneb_services_test.go
  3. 63
      src/github.com/matrix-org/go-neb/testutil_test.go

2
hooks/pre-commit

@ -6,4 +6,4 @@ golint src/...
go fmt ./src/...
go tool vet --shadow ./src
gocyclo -over 12 src/
gb test -timeout 5s
gb test -timeout 5s -test.v

57
src/github.com/matrix-org/go-neb/goneb_services_test.go

@ -2,7 +2,6 @@ package main
import (
"bytes"
"fmt"
"net/http"
"net/http/httptest"
"os"
@ -10,45 +9,7 @@ import (
)
var mux = http.NewServeMux()
type MockTripper struct {
handlers map[string]func(req *http.Request) (*http.Response, error)
}
func (rt MockTripper) RoundTrip(req *http.Request) (*http.Response, error) {
key := req.Method + " " + req.URL.Path
h := rt.handlers[key]
if h == nil {
panic(
fmt.Sprintf("Test RoundTrip: Unhandled request: %s\nHandlers: %d",
key, len(rt.handlers)),
)
}
return h(req)
}
func (rt MockTripper) Handle(method, path string, handler func(req *http.Request) (*http.Response, error)) {
key := method + " " + path
if _, exists := rt.handlers[key]; exists {
panic("Test handler with key " + key + " already exists")
}
rt.handlers[key] = handler
}
var tripper = MockTripper{make(map[string]func(req *http.Request) (*http.Response, error))}
type nopCloser struct {
*bytes.Buffer
}
func (nopCloser) Close() error { return nil }
func newResponse(statusCode int, body string) *http.Response {
return &http.Response{
StatusCode: statusCode,
Body: nopCloser{bytes.NewBufferString(body)},
}
}
var mxTripper = newMatrixTripper()
func TestMain(m *testing.M) {
setup(envVars{
@ -56,26 +17,18 @@ func TestMain(m *testing.M) {
DatabaseType: "sqlite3",
DatabaseURL: ":memory:",
}, mux, &http.Client{
Transport: tripper,
Transport: mxTripper,
})
exitCode := m.Run()
os.Exit(exitCode)
}
func TestConfigureClient(t *testing.T) {
for k := range tripper.handlers {
delete(tripper.handlers, k)
}
mxTripper.ClearHandlers()
mockWriter := httptest.NewRecorder()
tripper.Handle("POST", "/_matrix/client/r0/user/@link:hyrule/filter",
func(req *http.Request) (*http.Response, error) {
return newResponse(200, `{
"filter_id":"abcdef"
}`), nil
},
)
syncChan := make(chan string)
tripper.Handle("GET", "/_matrix/client/r0/sync",
mxTripper.HandlePOSTFilter("@link:hyrule")
mxTripper.Handle("GET", "/_matrix/client/r0/sync",
func(req *http.Request) (*http.Response, error) {
syncChan <- "sync"
return newResponse(200, `{

63
src/github.com/matrix-org/go-neb/testutil_test.go

@ -0,0 +1,63 @@
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
)
// newResponse creates a new HTTP response with the given data.
func newResponse(statusCode int, body string) *http.Response {
return &http.Response{
StatusCode: statusCode,
Body: ioutil.NopCloser(bytes.NewBufferString(body)),
}
}
// matrixTripper mocks out RoundTrip and calls a registered handler instead.
type matrixTripper struct {
handlers map[string]func(req *http.Request) (*http.Response, error)
}
func newMatrixTripper() *matrixTripper {
return &matrixTripper{
handlers: make(map[string]func(req *http.Request) (*http.Response, error)),
}
}
func (rt *matrixTripper) RoundTrip(req *http.Request) (*http.Response, error) {
key := req.Method + " " + req.URL.Path
h := rt.handlers[key]
if h == nil {
panic(fmt.Sprintf(
"RoundTrip: Unhandled request: %s\nHandlers: %d",
key, len(rt.handlers),
))
}
return h(req)
}
func (rt *matrixTripper) Handle(method, path string, handler func(req *http.Request) (*http.Response, error)) {
key := method + " " + path
if _, exists := rt.handlers[key]; exists {
panic(fmt.Sprintf("Test handler with key %s already exists", key))
}
rt.handlers[key] = handler
}
func (rt *matrixTripper) HandlePOSTFilter(userID string) {
rt.Handle("POST", "/_matrix/client/r0/user/"+userID+"/filter",
func(req *http.Request) (*http.Response, error) {
return newResponse(200, `{
"filter_id":"abcdef"
}`), nil
},
)
}
func (rt *matrixTripper) ClearHandlers() {
for k := range rt.handlers {
delete(rt.handlers, k)
}
}
Loading…
Cancel
Save