84 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package http
 | |
| 
 | |
| import (
 | |
| 	"io/ioutil"
 | |
| 	"net"
 | |
| 	"net/http"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/asim/go-micro/v3/registry"
 | |
| 	"github.com/asim/go-micro/v3/registry/memory"
 | |
| 	"github.com/asim/go-micro/v3/router"
 | |
| 	regRouter "github.com/asim/go-micro/v3/router/registry"
 | |
| )
 | |
| 
 | |
| func TestRoundTripper(t *testing.T) {
 | |
| 	m := memory.NewRegistry()
 | |
| 	r := regRouter.NewRouter(router.Registry(m))
 | |
| 
 | |
| 	rt := NewRoundTripper(WithRouter(r))
 | |
| 
 | |
| 	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
 | |
| 		w.Write([]byte(`hello world`))
 | |
| 	})
 | |
| 
 | |
| 	l, err := net.Listen("tcp", "127.0.0.1:0")
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	defer l.Close()
 | |
| 
 | |
| 	go http.Serve(l, nil)
 | |
| 
 | |
| 	m.Register(®istry.Service{
 | |
| 		Name: "example.com",
 | |
| 		Nodes: []*registry.Node{
 | |
| 			{
 | |
| 				Id:      "1",
 | |
| 				Address: l.Addr().String(),
 | |
| 			},
 | |
| 		},
 | |
| 	})
 | |
| 
 | |
| 	req, err := http.NewRequest("GET", "http://example.com", nil)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	w, err := rt.RoundTrip(req)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	b, err := ioutil.ReadAll(w.Body)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	w.Body.Close()
 | |
| 
 | |
| 	if string(b) != "hello world" {
 | |
| 		t.Fatal("response is", string(b))
 | |
| 	}
 | |
| 
 | |
| 	// test http request
 | |
| 	c := &http.Client{
 | |
| 		Transport: rt,
 | |
| 	}
 | |
| 
 | |
| 	rsp, err := c.Get("http://example.com")
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	b, err = ioutil.ReadAll(rsp.Body)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	rsp.Body.Close()
 | |
| 
 | |
| 	if string(b) != "hello world" {
 | |
| 		t.Fatal("response is", string(b))
 | |
| 	}
 | |
| 
 | |
| }
 |