Skip to content

Commit cd44790

Browse files
keksStebalien
keks
authored andcommitted
add superficial tests
1 parent 27f9363 commit cd44790

File tree

2 files changed

+120
-17
lines changed

2 files changed

+120
-17
lines changed

http/handler_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"errors"
77
"fmt"
88
"io"
9+
"io/ioutil"
910
"net/http/httptest"
1011
"runtime"
1112

@@ -200,6 +201,31 @@ var (
200201
},
201202
},
202203

204+
"echo": &cmds.Command{
205+
Arguments: []cmdkit.Argument{
206+
cmdkit.FileArg("file", true, false, "a file"),
207+
},
208+
Type: "",
209+
Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error {
210+
err := re.Emit("i received:")
211+
if err != nil {
212+
return err
213+
}
214+
215+
f, err := req.Files.NextFile()
216+
if err != nil {
217+
return err
218+
}
219+
220+
data, err := ioutil.ReadAll(f)
221+
if err != nil {
222+
return err
223+
}
224+
225+
return re.Emit(string(data))
226+
},
227+
},
228+
203229
"version": &cmds.Command{
204230
Helptext: cmdkit.HelpText{
205231
Tagline: "Show ipfs version information.",

http/http_test.go

+94-17
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@ import (
1212
"testing"
1313

1414
"github.com/ipfs/go-ipfs-cmds"
15+
"github.com/ipfs/go-ipfs-files"
1516
)
1617

1718
func TestHTTP(t *testing.T) {
1819
type testcase struct {
1920
path []string
2021
v interface{}
22+
vs []interface{}
23+
file files.File
2124
r string
2225
err error
2326
sendErr error
@@ -56,6 +59,22 @@ func TestHTTP(t *testing.T) {
5659
path: []string{"reader"},
5760
r: "the reader call returns a reader.",
5861
},
62+
63+
{
64+
path: []string{"echo"},
65+
file: files.NewSliceFile(
66+
"",
67+
"",
68+
[]files.File{
69+
files.NewReaderFile(
70+
"stdin",
71+
"/dev/stdin",
72+
readCloser{
73+
Reader: bytes.NewBufferString("This is the body of the request!"),
74+
Closer: nopCloser{},
75+
}, nil)}),
76+
vs: []interface{}{"i received:", "This is the body of the request!"},
77+
},
5978
}
6079

6180
mkTest := func(tc testcase) func(*testing.T) {
@@ -67,6 +86,10 @@ func TestHTTP(t *testing.T) {
6786
t.Fatal(err)
6887
}
6988

89+
if tc.file != nil {
90+
req.Files = tc.file
91+
}
92+
7093
res, err := c.Send(req)
7194
if tc.sendErr != nil {
7295
if err == nil {
@@ -79,27 +102,55 @@ func TestHTTP(t *testing.T) {
79102

80103
return
81104
} else if err != nil {
82-
t.Fatal("unexpected error:", tc.sendErr)
105+
t.Fatal("unexpected error:", err)
83106
}
84107

85-
v, err := res.Next()
86-
t.Log("v:", v, "err:", err)
87-
if tc.err != nil {
88-
if err == nil {
89-
t.Error("got nil error, expected:", tc.err)
90-
} else if err.Error() != tc.err.Error() {
91-
t.Errorf("got error %q, expected %q", err, tc.err)
108+
if len(tc.vs) > 0 {
109+
for _, tc.v = range tc.vs {
110+
v, err := res.Next()
111+
if err != nil {
112+
t.Error("unexpected error:", err)
113+
}
114+
// TODO find a better way to solve this!
115+
if s, ok := v.(*string); ok {
116+
v = *s
117+
}
118+
t.Log("v:", v, "err:", err)
119+
120+
// if we don't expect a reader
121+
if !reflect.DeepEqual(v, tc.v) {
122+
t.Errorf("expected value to be %v but got: %+v", tc.v, v)
123+
}
92124
}
93-
} else if err != nil {
94-
t.Fatal("unexpected error:", err)
95-
}
96125

97-
// TODO find a better way to solve this!
98-
if s, ok := v.(*string); ok {
99-
v = *s
100-
}
126+
_, err = res.Next()
127+
if tc.err != nil {
128+
if err == nil {
129+
t.Fatal("got nil error, expected:", tc.err)
130+
} else if err.Error() != tc.err.Error() {
131+
t.Fatalf("got error %q, expected %q", err, tc.err)
132+
}
133+
} else if err != io.EOF {
134+
t.Fatal("expected io.EOF error, got:", err)
135+
}
136+
} else if len(tc.r) == 0 {
137+
v, err := res.Next()
138+
// TODO find a better way to solve this!
139+
if s, ok := v.(*string); ok {
140+
v = *s
141+
}
142+
143+
t.Log("v:", v, "err:", err)
144+
if tc.err != nil {
145+
if err == nil {
146+
t.Error("got nil error, expected:", tc.err)
147+
} else if err.Error() != tc.err.Error() {
148+
t.Errorf("got error %q, expected %q", err, tc.err)
149+
}
150+
} else if err != nil {
151+
t.Fatal("unexpected error:", err)
152+
}
101153

102-
if len(tc.r) == 0 {
103154
// if we don't expect a reader
104155
if !reflect.DeepEqual(v, tc.v) {
105156
t.Errorf("expected value to be %v but got: %+v", tc.v, v)
@@ -116,14 +167,31 @@ func TestHTTP(t *testing.T) {
116167
t.Fatal("expected io.EOF error, got:", err)
117168
}
118169
} else {
170+
v, err := res.Next()
171+
// TODO find a better way to solve this!
172+
if s, ok := v.(*string); ok {
173+
v = *s
174+
}
175+
176+
t.Log("v:", v, "err:", err)
177+
if tc.err != nil {
178+
if err == nil {
179+
t.Error("got nil error, expected:", tc.err)
180+
} else if err.Error() != tc.err.Error() {
181+
t.Errorf("got error %q, expected %q", err, tc.err)
182+
}
183+
} else if err != nil {
184+
t.Fatal("unexpected error:", err)
185+
}
186+
119187
r, ok := v.(io.Reader)
120188
if !ok {
121189
t.Fatalf("expected a %T but got a %T", r, v)
122190
}
123191

124192
var buf bytes.Buffer
125193

126-
_, err := io.Copy(&buf, r)
194+
_, err = io.Copy(&buf, r)
127195
if err != nil {
128196
t.Fatal("unexpected copy error:", err)
129197
}
@@ -148,3 +216,12 @@ func TestHTTP(t *testing.T) {
148216
t.Run(fmt.Sprintf("%d-%s", i, strings.Join(tc.path, "/")), mkTest(tc))
149217
}
150218
}
219+
220+
type nopCloser struct{}
221+
222+
func (nopCloser) Close() error { return nil }
223+
224+
type readCloser struct {
225+
io.Reader
226+
io.Closer
227+
}

0 commit comments

Comments
 (0)