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 }