github.com/joao-fontenele/go-url-shortener@v1.3.4/pkg/api/handler/internal_test.go (about) 1 package handler_test 2 3 import ( 4 "bytes" 5 "context" 6 "fmt" 7 "io/ioutil" 8 "net" 9 "net/http" 10 "os" 11 "testing" 12 13 "github.com/joao-fontenele/go-url-shortener/pkg/api/router" 14 "github.com/joao-fontenele/go-url-shortener/pkg/configger" 15 "github.com/joao-fontenele/go-url-shortener/pkg/mocks" 16 "github.com/valyala/fasthttp" 17 "github.com/valyala/fasthttp/fasthttputil" 18 ) 19 20 func testMain(m *testing.M) int { 21 var err error 22 23 // change dir because default pwd for tests are it's parent dir 24 os.Chdir("../../../") 25 26 err = configger.Load() 27 if err != nil { 28 fmt.Printf("failed to load configs: %v", err) 29 return 1 30 } 31 32 return m.Run() 33 } 34 35 func TestMain(m *testing.M) { 36 os.Exit(testMain(m)) 37 } 38 39 func TestInternalHandler(t *testing.T) { 40 linkService := &mocks.FakeLinkService{} 41 r := router.New(linkService) 42 server := &fasthttp.Server{ 43 Handler: r.Handler, 44 } 45 46 ln := fasthttputil.NewInmemoryListener() 47 go server.Serve(ln) 48 defer server.Shutdown() 49 50 c := http.Client{ 51 Transport: &http.Transport{ 52 DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { 53 return ln.Dial() 54 }, 55 }, 56 } 57 defer c.CloseIdleConnections() 58 59 res, err := c.Get("http://shortener.com/internal/status") 60 if err != nil { 61 t.Fatalf("Unexpected error requesting /internal/status: %v", err) 62 } 63 defer res.Body.Close() 64 65 got, err := ioutil.ReadAll(res.Body) 66 if err != nil { 67 t.Fatalf("Unexpected error parsing response body: %v", err) 68 } 69 70 want := []byte(`{"running":true}`) 71 72 if !bytes.Equal(want, got) { 73 t.Errorf("Wrong response (want, got): (%s, %s)", want, got) 74 } 75 }