File tree Expand file tree Collapse file tree 2 files changed +38
-4
lines changed Expand file tree Collapse file tree 2 files changed +38
-4
lines changed Original file line number Diff line number Diff line change @@ -209,21 +209,21 @@ func (ut Utils) ToJSONString(obj interface{}) string {
209
209
// If obj is not []byte, string, or io.Reader, it will be encoded as JSON.
210
210
func (ut Utils ) Write (obj interface {}) (writer func (io.Writer )) {
211
211
lock := sync.Mutex {}
212
- var cache io. ReadWriter
212
+ var cache [] byte
213
213
return func (w io.Writer ) {
214
214
lock .Lock ()
215
215
defer lock .Unlock ()
216
216
217
217
ut .Helper ()
218
218
219
219
if cache != nil {
220
- _ , err := io . Copy ( w , cache )
220
+ _ , err := w . Write ( cache )
221
221
ut .err (err )
222
222
return
223
223
}
224
224
225
- cache = bytes .NewBuffer (nil )
226
- w = io .MultiWriter (cache , w )
225
+ buf : = bytes .NewBuffer (nil )
226
+ w = io .MultiWriter (buf , w )
227
227
228
228
var err error
229
229
switch v := obj .(type ) {
@@ -237,6 +237,7 @@ func (ut Utils) Write(obj interface{}) (writer func(io.Writer)) {
237
237
err = json .NewEncoder (w ).Encode (v )
238
238
}
239
239
ut .err (err )
240
+ cache = buf .Bytes ()
240
241
}
241
242
}
242
243
Original file line number Diff line number Diff line change @@ -2,8 +2,10 @@ package got_test
2
2
3
3
import (
4
4
"bytes"
5
+ "io"
5
6
"net/http"
6
7
"os"
8
+ "sync"
7
9
"testing"
8
10
9
11
"github.com/ysmood/got"
@@ -116,3 +118,34 @@ func TestHelper(t *testing.T) {
116
118
mut .Skipf ("test skip" )
117
119
ut .Eq (m .msg , "test skip" )
118
120
}
121
+
122
+ func TestServe (t * testing.T ) {
123
+ ut := got .New (t )
124
+
125
+ key := ut .Srand (8 )
126
+ s := ut .Serve ().Route ("/" , "" , key )
127
+ count := 30
128
+
129
+ wg := sync.WaitGroup {}
130
+ wg .Add (count )
131
+
132
+ request := func () {
133
+ req , err := http .NewRequest (http .MethodGet , s .URL (), nil )
134
+ ut .E (err )
135
+
136
+ res , err := http .DefaultClient .Do (req )
137
+ ut .E (err )
138
+
139
+ b , err := io .ReadAll (res .Body )
140
+ ut .E (err )
141
+
142
+ ut .Eq (string (b ), key )
143
+ wg .Done ()
144
+ }
145
+
146
+ for i := 0 ; i < count ; i ++ {
147
+ go request ()
148
+ }
149
+
150
+ wg .Wait ()
151
+ }
You can’t perform that action at this time.
0 commit comments