decred.org/dcrwallet/v3@v3.1.0/internal/rpc/jsonrpc/rpcserver_test.go (about) 1 // Copyright (c) 2013-2014 The btcsuite developers 2 // Copyright (c) 2015 The Decred developers 3 // Use of this source code is governed by an ISC 4 // license that can be found in the LICENSE file. 5 6 package jsonrpc 7 8 import ( 9 "net/http" 10 "net/http/httptest" 11 "reflect" 12 "testing" 13 ) 14 15 func TestThrottle(t *testing.T) { 16 const threshold = 1 17 busy := make(chan struct{}) 18 19 srv := httptest.NewServer(throttledFn(threshold, 20 func(w http.ResponseWriter, r *http.Request) { 21 <-busy 22 }), 23 ) 24 25 type resp struct { 26 resp *http.Response 27 err error 28 } 29 responses := make(chan resp, 2) 30 for i := 0; i < cap(responses); i++ { 31 go func() { 32 r, err := http.Get(srv.URL) 33 responses <- resp{r, err} 34 }() 35 } 36 37 got := make(map[int]int, cap(responses)) 38 for i := 0; i < cap(responses); i++ { 39 r := <-responses 40 if r.err != nil { 41 t.Fatal(r.err) 42 } 43 got[r.resp.StatusCode]++ 44 45 if i == 0 { 46 close(busy) 47 } 48 } 49 50 want := map[int]int{200: 1, 429: 1} 51 if !reflect.DeepEqual(want, got) { 52 t.Fatalf("status codes: want: %v, got: %v", want, got) 53 } 54 }