gitee.com/sasukebo/go-micro/v4@v4.7.1/api/server/http/http_test.go (about)

     1  package http
     2  
     3  import (
     4  	"fmt"
     5  	"gitee.com/sasukebo/go-micro/v4/api/server"
     6  	"gitee.com/sasukebo/go-micro/v4/api/server/cors"
     7  	"io"
     8  	"net/http"
     9  	"testing"
    10  )
    11  
    12  func TestHTTPServer(t *testing.T) {
    13  	testResponse := "hello world"
    14  
    15  	s := NewServer("localhost:0")
    16  
    17  	s.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    18  		fmt.Fprint(w, testResponse)
    19  	}))
    20  
    21  	if err := s.Start(); err != nil {
    22  		t.Fatal(err)
    23  	}
    24  
    25  	rsp, err := http.Get(fmt.Sprintf("http://%s/", s.Address()))
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  	defer rsp.Body.Close()
    30  
    31  	b, err := io.ReadAll(rsp.Body)
    32  	if err != nil {
    33  		t.Fatal(err)
    34  	}
    35  
    36  	if string(b) != testResponse {
    37  		t.Fatalf("Unexpected response, got %s, expected %s", string(b), testResponse)
    38  	}
    39  
    40  	if err := s.Stop(); err != nil {
    41  		t.Fatal(err)
    42  	}
    43  }
    44  
    45  func TestCORSHTTPServer(t *testing.T) {
    46  	testResponse := "hello world"
    47  	testAllowOrigin := "*"
    48  	testAllowCredentials := true
    49  	testAllowMethods := "GET"
    50  	testAllowHeaders := "Accept, Content-Type, Content-Length"
    51  
    52  	s := NewServer("localhost:0",
    53  		server.EnableCORS(true),
    54  		server.CORSConfig(&cors.Config{
    55  			AllowCredentials: testAllowCredentials,
    56  			AllowOrigin:      testAllowOrigin,
    57  			AllowMethods:     testAllowMethods,
    58  			AllowHeaders:     testAllowHeaders,
    59  		}),
    60  	)
    61  
    62  	s.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    63  		fmt.Fprint(w, testResponse)
    64  	}))
    65  
    66  	if err := s.Start(); err != nil {
    67  		t.Fatal(err)
    68  	}
    69  
    70  	rsp, err := http.Get(fmt.Sprintf("http://%s/", s.Address()))
    71  	if err != nil {
    72  		t.Fatal(err)
    73  	}
    74  	defer rsp.Body.Close()
    75  
    76  	b, err := io.ReadAll(rsp.Body)
    77  	if err != nil {
    78  		t.Fatal(err)
    79  	}
    80  
    81  	if string(b) != testResponse {
    82  		t.Fatalf("Unexpected response, got %s, expected %s", string(b), testResponse)
    83  	}
    84  
    85  	allowCredentials := rsp.Header.Get("Access-Control-Allow-Credentials")
    86  	getTestCredentialsStr := func() string {
    87  		if testAllowCredentials == true {
    88  			return "true"
    89  		} else {
    90  			return "false"
    91  		}
    92  	}
    93  	if getTestCredentialsStr() != allowCredentials {
    94  		t.Fatalf("Unexpected Access-Control-Allow-Credentials, got %s, expected %s", allowCredentials, getTestCredentialsStr())
    95  	}
    96  
    97  	allowOrigin := rsp.Header.Get("Access-Control-Allow-Origin")
    98  	if testAllowOrigin != allowOrigin {
    99  		t.Fatalf("Unexpected Access-Control-Allow-Origins, got %s, expected %s", allowOrigin, testAllowOrigin)
   100  	}
   101  
   102  	allowMethods := rsp.Header.Get("Access-Control-Allow-Methods")
   103  	if testAllowMethods != allowMethods {
   104  		t.Fatalf("Unexpected Access-Control-Allow-Methods, got %s, expected %s", allowMethods, testAllowMethods)
   105  	}
   106  	allowHeaders := rsp.Header.Get("Access-Control-Allow-Headers")
   107  	if testAllowHeaders != allowHeaders {
   108  		t.Fatalf("Unexpected Access-Control-Allow-Headers, got %s, expected %s", allowHeaders, testAllowHeaders)
   109  	}
   110  
   111  	if err := s.Stop(); err != nil {
   112  		t.Fatal(err)
   113  	}
   114  }