github.com/annwntech/go-micro/v2@v2.9.5/handler/rpc_test.go (about) 1 package handler 2 3 import ( 4 "bytes" 5 "context" 6 "encoding/json" 7 "fmt" 8 "net/http" 9 "net/http/httptest" 10 "testing" 11 12 "github.com/annwntech/go-micro/v2" 13 "github.com/annwntech/go-micro/v2/metadata" 14 ) 15 16 type TestHandler struct { 17 t *testing.T 18 expect metadata.Metadata 19 } 20 21 type TestRequest struct{} 22 type TestResponse struct{} 23 24 func (t *TestHandler) Exec(ctx context.Context, req *TestRequest, rsp *TestResponse) error { 25 md, ok := metadata.FromContext(ctx) 26 if !ok { 27 return fmt.Errorf("Expected metadata got %t", ok) 28 } 29 30 for k, v := range t.expect { 31 if val := md[k]; val != v { 32 return fmt.Errorf("Expected %s for key %s got %s", v, k, val) 33 } 34 } 35 36 t.t.Logf("Received request %+v", req) 37 t.t.Logf("Received metadata %+v", md) 38 39 return nil 40 } 41 42 func TestRPCHandler(t *testing.T) { 43 44 srv := micro.NewService( 45 micro.Name("test"), 46 ) 47 48 srv.Server().Handle( 49 srv.Server().NewHandler(&TestHandler{t, metadata.Metadata{"Foo": "Bar"}}), 50 ) 51 52 if err := srv.Server().Start(); err != nil { 53 t.Fatal(err) 54 } 55 56 defer srv.Server().Stop() 57 58 w := httptest.NewRecorder() 59 60 request := map[string]string{ 61 "service": "test", 62 "endpoint": "TestHandler.Exec", 63 "request": "{}", 64 } 65 66 rb, err := json.Marshal(request) 67 if err != nil { 68 t.Fatal(err) 69 } 70 71 b := bytes.NewBuffer(rb) 72 73 req, err := http.NewRequest("POST", "/rpc", b) 74 if err != nil { 75 t.Fatal(err) 76 } 77 req.Header.Set("Content-Type", "application/json") 78 req.Header.Set("Foo", "Bar") 79 80 NewRPCHandler(nil).ServeHTTP(w, req) 81 82 if w.Code != 200 { 83 t.Fatalf("Expected 200 response got %d %s", w.Code, w.Body.String()) 84 } 85 }