132 lines
2.8 KiB
Go
Executable File
132 lines
2.8 KiB
Go
Executable File
package main
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"flag"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestHTTPSMain(t *testing.T) {
|
|
was := os.Args[:]
|
|
os.Args = []string{"program"}
|
|
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
|
defer func() {
|
|
os.Args = was[:]
|
|
}()
|
|
|
|
addr, stop := echoServer()
|
|
defer stop()
|
|
ported := make(chan string)
|
|
go func() {
|
|
p := getPort()
|
|
ported <- p
|
|
os.Args = []string{
|
|
"foobar",
|
|
"-p",
|
|
p,
|
|
"-user",
|
|
"username",
|
|
"-pass",
|
|
"password",
|
|
"-proxy2",
|
|
"hello," + addr,
|
|
"-crt",
|
|
"./testdata/rproxy3server.crt",
|
|
"-key",
|
|
"./testdata/rproxy3server.key",
|
|
}
|
|
main()
|
|
}()
|
|
port := <-ported
|
|
time.Sleep(time.Millisecond * 100)
|
|
|
|
client := &http.Client{
|
|
Transport: &http.Transport{
|
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
|
},
|
|
}
|
|
r, _ := http.NewRequest("GET", "https://hello.localhost:"+port, nil)
|
|
|
|
if resp, err := client.Do(r); err != nil {
|
|
t.Fatalf("client failed: %v", err)
|
|
} else if resp.StatusCode != http.StatusUnauthorized {
|
|
t.Errorf("proxy failed: code %v != %v", resp.StatusCode, http.StatusUnauthorized)
|
|
}
|
|
|
|
r.SetBasicAuth("username", "password")
|
|
if resp, err := client.Do(r); err != nil {
|
|
t.Fatalf("client failed: %v", err)
|
|
} else if resp.StatusCode != http.StatusOK {
|
|
t.Errorf("proxy failed: code %v != %v", resp.StatusCode, http.StatusOK)
|
|
}
|
|
}
|
|
|
|
func TestHTTPMain(t *testing.T) {
|
|
was := os.Args[:]
|
|
os.Args = []string{"program"}
|
|
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
|
defer func() {
|
|
os.Args = was[:]
|
|
}()
|
|
|
|
addr, stop := echoServer()
|
|
defer stop()
|
|
ported := make(chan string)
|
|
go func() {
|
|
p := getPort()
|
|
ported <- p
|
|
os.Args = []string{
|
|
"foobar",
|
|
"-p",
|
|
p,
|
|
"-user",
|
|
"username",
|
|
"-pass",
|
|
"password",
|
|
"-proxy2",
|
|
"hello," + addr,
|
|
}
|
|
main()
|
|
}()
|
|
port := <-ported
|
|
time.Sleep(time.Millisecond * 100)
|
|
|
|
client := &http.Client{}
|
|
r, _ := http.NewRequest("GET", "http://hello.localhost:"+port, nil)
|
|
|
|
if resp, err := client.Do(r); err != nil {
|
|
t.Fatalf("client failed: %v", err)
|
|
} else if resp.StatusCode != http.StatusUnauthorized {
|
|
t.Errorf("proxy failed: code %v != %v", resp.StatusCode, http.StatusUnauthorized)
|
|
}
|
|
|
|
r.SetBasicAuth("username", "password")
|
|
if resp, err := client.Do(r); err != nil {
|
|
t.Fatalf("client failed: %v", err)
|
|
} else if resp.StatusCode != http.StatusOK {
|
|
t.Errorf("proxy failed: code %v != %v", resp.StatusCode, http.StatusOK)
|
|
}
|
|
}
|
|
|
|
func echoServer() (string, func()) {
|
|
h := func(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Fprintln(w, "hello")
|
|
}
|
|
portsrv := httptest.NewServer(http.HandlerFunc(h))
|
|
return portsrv.URL, func() {
|
|
portsrv.Close()
|
|
}
|
|
}
|
|
|
|
func getPort() string {
|
|
s := httptest.NewServer(nil)
|
|
s.Close()
|
|
return s.URL[strings.LastIndex(s.URL, ":")+1:]
|
|
}
|