mirror of
https://github.com/soheilhy/cmux.git
synced 2024-11-10 03:31:52 +08:00
Add simple test for cmux.TLS() matcher
This commit is contained in:
parent
9a3402ad7a
commit
3b204bab2a
83
cmux_test.go
83
cmux_test.go
@ -16,14 +16,19 @@ package cmux
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"crypto/rand"
|
||||||
|
"crypto/tls"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"go/build"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/rpc"
|
"net/rpc"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@ -128,8 +133,57 @@ func runTestHTTPServer(errCh chan<- error, l net.Listener) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func generateTLSCert(t *testing.T) {
|
||||||
|
err := exec.Command("go", "run", build.Default.GOROOT+"/src/crypto/tls/generate_cert.go", "--host", "*").Run()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func cleanupTLSCert(t *testing.T) {
|
||||||
|
err := os.Remove("cert.pem")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
err = os.Remove("key.pem")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func runTestTLSServer(errCh chan<- error, l net.Listener) {
|
||||||
|
certificate, err := tls.LoadX509KeyPair("cert.pem", "key.pem")
|
||||||
|
if err != nil {
|
||||||
|
errCh <- err
|
||||||
|
log.Printf("1")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
config := &tls.Config{
|
||||||
|
Certificates: []tls.Certificate{certificate},
|
||||||
|
Rand: rand.Reader,
|
||||||
|
}
|
||||||
|
|
||||||
|
tlsl := tls.NewListener(l, config)
|
||||||
|
runTestHTTPServer(errCh, tlsl)
|
||||||
|
}
|
||||||
|
|
||||||
func runTestHTTP1Client(t *testing.T, addr net.Addr) {
|
func runTestHTTP1Client(t *testing.T, addr net.Addr) {
|
||||||
r, err := http.Get("http://" + addr.String())
|
runTestHTTPClient(t, "http", addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runTestTLSClient(t *testing.T, addr net.Addr) {
|
||||||
|
runTestHTTPClient(t, "https", addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runTestHTTPClient(t *testing.T, proto string, addr net.Addr) {
|
||||||
|
client := http.Client{
|
||||||
|
Timeout: 5 * time.Second,
|
||||||
|
Transport: &http.Transport{
|
||||||
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
r, err := client.Get(proto + "://" + addr.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -345,6 +399,33 @@ func TestAny(t *testing.T) {
|
|||||||
runTestHTTP1Client(t, l.Addr())
|
runTestHTTP1Client(t, l.Addr())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTLS(t *testing.T) {
|
||||||
|
generateTLSCert(t)
|
||||||
|
defer cleanupTLSCert(t)
|
||||||
|
defer leakCheck(t)()
|
||||||
|
errCh := make(chan error)
|
||||||
|
defer func() {
|
||||||
|
select {
|
||||||
|
case err := <-errCh:
|
||||||
|
t.Fatal(err)
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
l, cleanup := testListener(t)
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
|
muxl := New(l)
|
||||||
|
tlsl := muxl.Match(TLS())
|
||||||
|
httpl := muxl.Match(Any())
|
||||||
|
|
||||||
|
go runTestTLSServer(errCh, tlsl)
|
||||||
|
go runTestHTTPServer(errCh, httpl)
|
||||||
|
go safeServe(errCh, muxl)
|
||||||
|
|
||||||
|
runTestHTTP1Client(t, l.Addr())
|
||||||
|
runTestTLSClient(t, l.Addr())
|
||||||
|
}
|
||||||
|
|
||||||
func TestHTTP2(t *testing.T) {
|
func TestHTTP2(t *testing.T) {
|
||||||
defer leakCheck(t)()
|
defer leakCheck(t)()
|
||||||
errCh := make(chan error)
|
errCh := make(chan error)
|
||||||
|
Loading…
Reference in New Issue
Block a user