Skip to content

Commit

Permalink
Enable subtests for environments prior to Go 1.7
Browse files Browse the repository at this point in the history
  • Loading branch information
Acconut committed Oct 13, 2016
1 parent 3f0faed commit 9b4126c
Show file tree
Hide file tree
Showing 4 changed files with 159 additions and 114 deletions.
114 changes: 0 additions & 114 deletions handler_test.go
Original file line number Diff line number Diff line change
@@ -1,128 +1,14 @@
package tusd_test

import (
"fmt"
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"reflect"
"strings"
"testing"

"github.com/golang/mock/gomock"

"github.com/tus/tusd"
. "github.com/tus/tusd"
)

type zeroStore struct{}

func (store zeroStore) NewUpload(info FileInfo) (string, error) {
return "", nil
}
func (store zeroStore) WriteChunk(id string, offset int64, src io.Reader) (int64, error) {
return 0, nil
}

func (store zeroStore) GetInfo(id string) (FileInfo, error) {
return FileInfo{}, nil
}

type FullDataStore interface {
tusd.DataStore
tusd.TerminaterDataStore
tusd.ConcaterDataStore
tusd.GetReaderDataStore
}

type httpTest struct {
Name string

Method string
URL string

ReqBody io.Reader
ReqHeader map[string]string

Code int
ResBody string
ResHeader map[string]string
}

func (test *httpTest) Run(handler http.Handler, t *testing.T) *httptest.ResponseRecorder {
req, _ := http.NewRequest(test.Method, test.URL, test.ReqBody)

// Add headers
for key, value := range test.ReqHeader {
req.Header.Set(key, value)
}

req.Host = "tus.io"
w := httptest.NewRecorder()
handler.ServeHTTP(w, req)

if w.Code != test.Code {
t.Errorf("Expected %v %s as status code (got %v %s)", test.Code, http.StatusText(test.Code), w.Code, http.StatusText(w.Code))
}

for key, value := range test.ResHeader {
header := w.HeaderMap.Get(key)

if value != header {
t.Errorf("Expected '%s' as '%s' (got '%s')", value, key, header)
}
}

if test.ResBody != "" && string(w.Body.Bytes()) != test.ResBody {
t.Errorf("Expected '%s' as body (got '%s'", test.ResBody, string(w.Body.Bytes()))
}

return w
}

func SubTest(t *testing.T, name string, runTest func(*testing.T, *MockFullDataStore)) {
t.Run(name, func(subT *testing.T) {
//subT.Parallel()

ctrl := gomock.NewController(subT)
defer ctrl.Finish()

store := NewMockFullDataStore(ctrl)

runTest(subT, store)
})
}

type ReaderMatcher struct {
expect string
}

func NewReaderMatcher(expect string) gomock.Matcher {
return ReaderMatcher{
expect: expect,
}
}

func (m ReaderMatcher) Matches(x interface{}) bool {
input, ok := x.(io.Reader)
if !ok {
return false
}

bytes, err := ioutil.ReadAll(input)
if err != nil {
panic(err)
}

readStr := string(bytes)
return reflect.DeepEqual(m.expect, readStr)
}

func (m ReaderMatcher) String() string {
return fmt.Sprintf("reads to %s", m.expect)
}

func TestMethodOverride(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
Expand Down
22 changes: 22 additions & 0 deletions subtest_go17_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// +build go1.7

package tusd_test

import (
"testing"

"github.com/golang/mock/gomock"
)

func SubTest(t *testing.T, name string, runTest func(*testing.T, *MockFullDataStore)) {
t.Run(name, func(subT *testing.T) {
//subT.Parallel()

ctrl := gomock.NewController(subT)
defer ctrl.Finish()

store := NewMockFullDataStore(ctrl)

runTest(subT, store)
})
}
28 changes: 28 additions & 0 deletions subtest_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// +build !go1.7

package tusd_test

import (
"fmt"
"testing"

"github.com/golang/mock/gomock"
)

func SubTest(t *testing.T, name string, runTest func(*testing.T, *MockFullDataStore)) {
fmt.Println("\t=== RUN SubTest:", name)

ctrl := gomock.NewController(t)
defer ctrl.Finish()

store := NewMockFullDataStore(ctrl)

runTest(t, store)

if t.Failed() {
fmt.Println("\t--- FAIL SubTest:", name)
t.FailNow()
} else {
fmt.Println("\t--- PASS SubTest:", name)
}
}
109 changes: 109 additions & 0 deletions utils_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package tusd_test

import (
"fmt"
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"reflect"
"testing"

"github.com/golang/mock/gomock"
"github.com/tus/tusd"
. "github.com/tus/tusd"
)

type zeroStore struct{}

func (store zeroStore) NewUpload(info FileInfo) (string, error) {
return "", nil
}
func (store zeroStore) WriteChunk(id string, offset int64, src io.Reader) (int64, error) {
return 0, nil
}

func (store zeroStore) GetInfo(id string) (FileInfo, error) {
return FileInfo{}, nil
}

type FullDataStore interface {
tusd.DataStore
tusd.TerminaterDataStore
tusd.ConcaterDataStore
tusd.GetReaderDataStore
}

type httpTest struct {
Name string

Method string
URL string

ReqBody io.Reader
ReqHeader map[string]string

Code int
ResBody string
ResHeader map[string]string
}

func (test *httpTest) Run(handler http.Handler, t *testing.T) *httptest.ResponseRecorder {
req, _ := http.NewRequest(test.Method, test.URL, test.ReqBody)

// Add headers
for key, value := range test.ReqHeader {
req.Header.Set(key, value)
}

req.Host = "tus.io"
w := httptest.NewRecorder()
handler.ServeHTTP(w, req)

if w.Code != test.Code {
t.Errorf("Expected %v %s as status code (got %v %s)", test.Code, http.StatusText(test.Code), w.Code, http.StatusText(w.Code))
}

for key, value := range test.ResHeader {
header := w.HeaderMap.Get(key)

if value != header {
t.Errorf("Expected '%s' as '%s' (got '%s')", value, key, header)
}
}

if test.ResBody != "" && string(w.Body.Bytes()) != test.ResBody {
t.Errorf("Expected '%s' as body (got '%s'", test.ResBody, string(w.Body.Bytes()))
}

return w
}

type ReaderMatcher struct {
expect string
}

func NewReaderMatcher(expect string) gomock.Matcher {
return ReaderMatcher{
expect: expect,
}
}

func (m ReaderMatcher) Matches(x interface{}) bool {
input, ok := x.(io.Reader)
if !ok {
return false
}

bytes, err := ioutil.ReadAll(input)
if err != nil {
panic(err)
}

readStr := string(bytes)
return reflect.DeepEqual(m.expect, readStr)
}

func (m ReaderMatcher) String() string {
return fmt.Sprintf("reads to %s", m.expect)
}

0 comments on commit 9b4126c

Please sign in to comment.