@@ -12,12 +12,15 @@ import (
12
12
"testing"
13
13
14
14
"github.com/ipfs/go-ipfs-cmds"
15
+ "github.com/ipfs/go-ipfs-files"
15
16
)
16
17
17
18
func TestHTTP (t * testing.T ) {
18
19
type testcase struct {
19
20
path []string
20
21
v interface {}
22
+ vs []interface {}
23
+ file files.File
21
24
r string
22
25
err error
23
26
sendErr error
@@ -56,6 +59,22 @@ func TestHTTP(t *testing.T) {
56
59
path : []string {"reader" },
57
60
r : "the reader call returns a reader." ,
58
61
},
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
+ },
59
78
}
60
79
61
80
mkTest := func (tc testcase ) func (* testing.T ) {
@@ -67,6 +86,10 @@ func TestHTTP(t *testing.T) {
67
86
t .Fatal (err )
68
87
}
69
88
89
+ if tc .file != nil {
90
+ req .Files = tc .file
91
+ }
92
+
70
93
res , err := c .Send (req )
71
94
if tc .sendErr != nil {
72
95
if err == nil {
@@ -79,27 +102,55 @@ func TestHTTP(t *testing.T) {
79
102
80
103
return
81
104
} else if err != nil {
82
- t .Fatal ("unexpected error:" , tc . sendErr )
105
+ t .Fatal ("unexpected error:" , err )
83
106
}
84
107
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
+ }
92
124
}
93
- } else if err != nil {
94
- t .Fatal ("unexpected error:" , err )
95
- }
96
125
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
+ }
101
153
102
- if len (tc .r ) == 0 {
103
154
// if we don't expect a reader
104
155
if ! reflect .DeepEqual (v , tc .v ) {
105
156
t .Errorf ("expected value to be %v but got: %+v" , tc .v , v )
@@ -116,14 +167,31 @@ func TestHTTP(t *testing.T) {
116
167
t .Fatal ("expected io.EOF error, got:" , err )
117
168
}
118
169
} 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
+
119
187
r , ok := v .(io.Reader )
120
188
if ! ok {
121
189
t .Fatalf ("expected a %T but got a %T" , r , v )
122
190
}
123
191
124
192
var buf bytes.Buffer
125
193
126
- _ , err : = io .Copy (& buf , r )
194
+ _ , err = io .Copy (& buf , r )
127
195
if err != nil {
128
196
t .Fatal ("unexpected copy error:" , err )
129
197
}
@@ -148,3 +216,12 @@ func TestHTTP(t *testing.T) {
148
216
t .Run (fmt .Sprintf ("%d-%s" , i , strings .Join (tc .path , "/" )), mkTest (tc ))
149
217
}
150
218
}
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