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  }