tun2: make Server benchmarks, disabled for now
This commit is contained in:
parent
0b46f035c6
commit
73f278aed2
|
@ -135,7 +135,7 @@ func (s *Server) Wait() {
|
||||||
|
|
||||||
// Listen passes this Server a given net.Listener to accept backend connections.
|
// Listen passes this Server a given net.Listener to accept backend connections.
|
||||||
func (s *Server) Listen(l net.Listener, isKCP bool) {
|
func (s *Server) Listen(l net.Listener, isKCP bool) {
|
||||||
ctx := context.Background()
|
ctx := s.ctx
|
||||||
|
|
||||||
f := ln.F{
|
f := ln.F{
|
||||||
"listener_addr": l.Addr(),
|
"listener_addr": l.Addr(),
|
||||||
|
@ -143,6 +143,12 @@ func (s *Server) Listen(l net.Listener, isKCP bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
conn, err := l.Accept()
|
conn, err := l.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ln.Error(ctx, err, f, ln.Action("accept connection"))
|
ln.Error(ctx, err, f, ln.Action("accept connection"))
|
||||||
|
@ -326,12 +332,14 @@ func (s *Server) HandleConn(c net.Conn, isKCP bool) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
connection.cancel()
|
connection.cancel()
|
||||||
}
|
}
|
||||||
case <-s.ctx.Done():
|
// case <-s.ctx.Done():
|
||||||
s.removeConn(ctx, connection)
|
// ln.Log(ctx, connection, ln.Action("server context finished"))
|
||||||
connection.Close()
|
// s.removeConn(ctx, connection)
|
||||||
|
// connection.Close()
|
||||||
|
|
||||||
return
|
// return
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
ln.Log(ctx, connection, ln.Action("client context finished"))
|
||||||
s.removeConn(ctx, connection)
|
s.removeConn(ctx, connection)
|
||||||
connection.Close()
|
connection.Close()
|
||||||
|
|
||||||
|
|
|
@ -232,3 +232,93 @@ func TestBackendRouting(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setupTestServer() (*Server, *mockStorage, net.Listener, error) {
|
||||||
|
st := MockStorage()
|
||||||
|
|
||||||
|
st.AddRoute(domain, user)
|
||||||
|
st.AddToken(token, user, []string{"connect"})
|
||||||
|
|
||||||
|
s, err := NewServer(&ServerConfig{
|
||||||
|
Storage: st,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, err
|
||||||
|
}
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
|
l, err := net.Listen("tcp", "127.0.0.1:0")
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
go s.Listen(l, false)
|
||||||
|
|
||||||
|
return s, st, l, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkHTTP200(b *testing.B) {
|
||||||
|
b.Skip("this benchmark doesn't work yet")
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
s, _, l, err := setupTestServer()
|
||||||
|
if err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
defer s.Close()
|
||||||
|
defer l.Close()
|
||||||
|
|
||||||
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}))
|
||||||
|
defer ts.Close()
|
||||||
|
|
||||||
|
cc := &ClientConfig{
|
||||||
|
ConnType: "tcp",
|
||||||
|
ServerAddr: l.Addr().String(),
|
||||||
|
Token: token,
|
||||||
|
BackendURL: ts.URL,
|
||||||
|
Domain: domain,
|
||||||
|
|
||||||
|
forceTCPClear: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
c, err := NewClient(cc)
|
||||||
|
if err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
go c.Connect(ctx) // TODO: fix the client library so this ends up actually getting cleaned up
|
||||||
|
|
||||||
|
for {
|
||||||
|
r := s.GetBackendsForDomain(domain)
|
||||||
|
if len(r) == 0 {
|
||||||
|
time.Sleep(125 * time.Millisecond)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("GET", "http://cetacean.club/", nil)
|
||||||
|
if err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = s.RoundTrip(req)
|
||||||
|
if err != nil {
|
||||||
|
b.Fatalf("got error on initial request exchange: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
resp, err := s.RoundTrip(req)
|
||||||
|
if err != nil {
|
||||||
|
b.Fatalf("got error on %d: %v", n, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
b.Fail()
|
||||||
|
b.Logf("got %d instead of 200", resp.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue