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.
|
||||
func (s *Server) Listen(l net.Listener, isKCP bool) {
|
||||
ctx := context.Background()
|
||||
ctx := s.ctx
|
||||
|
||||
f := ln.F{
|
||||
"listener_addr": l.Addr(),
|
||||
|
@ -143,6 +143,12 @@ func (s *Server) Listen(l net.Listener, isKCP bool) {
|
|||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
default:
|
||||
}
|
||||
|
||||
conn, err := l.Accept()
|
||||
if err != nil {
|
||||
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 {
|
||||
connection.cancel()
|
||||
}
|
||||
case <-s.ctx.Done():
|
||||
s.removeConn(ctx, connection)
|
||||
connection.Close()
|
||||
// case <-s.ctx.Done():
|
||||
// ln.Log(ctx, connection, ln.Action("server context finished"))
|
||||
// s.removeConn(ctx, connection)
|
||||
// connection.Close()
|
||||
|
||||
return
|
||||
// return
|
||||
case <-ctx.Done():
|
||||
ln.Log(ctx, connection, ln.Action("client context finished"))
|
||||
s.removeConn(ctx, connection)
|
||||
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