github.com/machinebox/remoto@v0.1.2-0.20191024144331-eff21a7d321f/go/remotohttp/server_test.go (about) 1 package remotohttp_test 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "net/http" 7 "net/http/httptest" 8 "strings" 9 "testing" 10 11 "github.com/machinebox/remoto/go/remotohttp" 12 "github.com/matryer/is" 13 ) 14 15 func TestServerServeHTTP(t *testing.T) { 16 is := is.New(t) 17 type greetRequest struct { 18 Name string `json:"name"` 19 } 20 type greetResponse struct { 21 Greeting string `json:"greeting"` 22 } 23 h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 24 var reqs []greetRequest 25 err := remotohttp.Decode(r, &reqs) 26 is.NoErr(err) 27 resps := make([]greetResponse, len(reqs)) 28 for i := range reqs { 29 resps[i].Greeting = "Hello " + reqs[i].Name 30 } 31 err = remotohttp.Encode(w, r, http.StatusOK, resps) 32 is.NoErr(err) 33 }) 34 srv := &remotohttp.Server{} 35 srv.Register("/remoto/Greeter.Greet", h) 36 var reqs = []greetRequest{ 37 {Name: "Mat"}, 38 {Name: "David"}, 39 {Name: "Aaron"}, 40 } 41 b, err := json.Marshal(reqs) 42 is.NoErr(err) 43 req, err := http.NewRequest(http.MethodPost, "/remoto/Greeter.Greet", bytes.NewReader(b)) 44 is.NoErr(err) 45 req.Header.Set("Content-Type", "application/json") 46 w := httptest.NewRecorder() 47 srv.ServeHTTP(w, req) 48 is.Equal(w.Code, http.StatusOK) 49 is.Equal(w.Body.String(), `[{"greeting":"Hello Mat"},{"greeting":"Hello David"},{"greeting":"Hello Aaron"}]`) 50 } 51 52 func TestServerDescribe(t *testing.T) { 53 is := is.New(t) 54 nilHandler := http.HandlerFunc(nil) 55 srv := &remotohttp.Server{} 56 srv.Register("/remoto/Service1.Method1", nilHandler) 57 srv.Register("/remoto/Service2.Method2", nilHandler) 58 srv.Register("/remoto/Service3.Method3", nilHandler) 59 var buf bytes.Buffer 60 err := srv.Describe(&buf) 61 is.NoErr(err) 62 s := buf.String() 63 is.True(strings.Contains(s, "endpoint: /remoto/Service1.Method1")) 64 is.True(strings.Contains(s, "endpoint: /remoto/Service2.Method2")) 65 is.True(strings.Contains(s, "endpoint: /remoto/Service3.Method3")) 66 }