github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/proxy/http/http_test.go (about)

     1  package http
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"net"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	_ "net/http/pprof"
    10  	"strings"
    11  	"testing"
    12  	"time"
    13  )
    14  
    15  func init() {
    16  	SetLogLevel(LogLevelDebug)
    17  	go http.ListenAndServe(":6060", nil)
    18  }
    19  
    20  func TestProxy(t *testing.T) {
    21  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    22  		fmt.Fprintf(w, "abc")
    23  	}))
    24  	server := NewServer()
    25  	_, err := server.Start(":8011")
    26  	if err != nil {
    27  		t.Error(err)
    28  		return
    29  	}
    30  	{ //CONNECT
    31  		client := http.Client{
    32  			Transport: &http.Transport{
    33  				Dial: func(network, address string) (conn net.Conn, err error) {
    34  					conn, err = Dial(":8011", address)
    35  					return
    36  				},
    37  			},
    38  		}
    39  		{ //ok
    40  			resp, err := client.Get(ts.URL)
    41  			if err != nil {
    42  				t.Error(err)
    43  				return
    44  			}
    45  			data, _ := ioutil.ReadAll(resp.Body)
    46  			resp.Body.Close()
    47  			if string(data) != "abc" {
    48  				t.Error(string(data))
    49  				return
    50  			}
    51  		}
    52  		{ //error
    53  			_, err := client.Get("http://127.0.0.1:233")
    54  			if err == nil {
    55  				t.Error(err)
    56  				return
    57  			}
    58  		}
    59  	}
    60  	{ //NORMAL
    61  		client := http.Client{
    62  			Transport: &http.Transport{
    63  				Dial: func(network, address string) (conn net.Conn, err error) {
    64  					conn, err = net.Dial("tcp", ":8011")
    65  					return
    66  				},
    67  			},
    68  		}
    69  		{ //ok
    70  			req, _ := http.NewRequest("GET", ts.URL, nil)
    71  			req.Header.Add("Proxy-Connection", "keep-alive")
    72  			resp, err := client.Do(req)
    73  			if err != nil {
    74  				t.Error(err)
    75  				return
    76  			}
    77  			data, _ := ioutil.ReadAll(resp.Body)
    78  			resp.Body.Close()
    79  			if string(data) != "abc" {
    80  				t.Error(string(data))
    81  				return
    82  			}
    83  		}
    84  		{ //not port
    85  			req, _ := http.NewRequest("GET", "http://www.bing.com", nil)
    86  			req.Header.Add("Proxy-Connection", "keep-alive")
    87  			resp, err := client.Do(req)
    88  			if err != nil {
    89  				t.Error(err)
    90  				return
    91  			}
    92  			data, _ := ioutil.ReadAll(resp.Body)
    93  			resp.Body.Close()
    94  			if !strings.Contains(string(data), "搜索") {
    95  				t.Error(string(data))
    96  				return
    97  			}
    98  		}
    99  		{ //error
   100  			req, _ := http.NewRequest("GET", "http://127.0.0.1:233", nil)
   101  			req.Header.Add("Proxy-Connection", "keep-alive")
   102  			resp, err := client.Do(req)
   103  			if err != nil || resp.StatusCode == 200 {
   104  				t.Error(err)
   105  				return
   106  			}
   107  		}
   108  	}
   109  	// { //info
   110  	// 	client := http.Client{}
   111  	// 	{ //ok
   112  	// 		req, _ := http.NewRequest(http.MethodHead, "http://127.0.0.1:8011", nil)
   113  	// 		resp, err := client.Do(req)
   114  	// 		if err != nil {
   115  	// 			t.Error(err)
   116  	// 			return
   117  	// 		}
   118  	// 		if resp.StatusCode != http.StatusOK {
   119  	// 			t.Error("error")
   120  	// 			return
   121  	// 		}
   122  	// 		resp.Body.Close()
   123  	// 	}
   124  	// 	{ //500
   125  	// 		req, _ := http.NewRequest(http.MethodGet, "http://127.0.0.1:8011", nil)
   126  	// 		resp, err := client.Do(req)
   127  	// 		if err != nil {
   128  	// 			t.Error(err)
   129  	// 			return
   130  	// 		}
   131  	// 		if resp.StatusCode != http.StatusInternalServerError {
   132  	// 			t.Error("error")
   133  	// 			return
   134  	// 		}
   135  	// 		resp.Body.Close()
   136  	// 	}
   137  	// }
   138  	{ //ERROR
   139  		conn, _ := net.Dial("tcp", ":8011")
   140  		time.Sleep(10 * time.Millisecond)
   141  		conn.Close()
   142  		Dial("127.0.0.1:233", "")
   143  		Dial("127.0.0.1:8011", "%2f")
   144  	}
   145  	server.Stop()
   146  	go func() {
   147  		server.Run(":8011")
   148  	}()
   149  	time.Sleep(10 * time.Millisecond)
   150  	server.Stop()
   151  	// conn,err:=Dial(":8011",ts.URL)
   152  }