func closeAndCountFDs(t *testing.T, conn *tls.Conn, err error, fdc *fdcount.Counter) { if err == nil { if err := conn.Close(); err != nil { t.Fatalf("Unable to close connection: %v", err) } } assert.NoError(t, fdc.AssertDelta(0), "Number of open TCP files should be the same after test as before") }
func doTestPlainText(buffered bool, useHostFn bool, t *testing.T) { var counter *fdcount.Counter var err error startServers(t, useHostFn) err = fdcount.WaitUntilNoneMatch("CLOSE_WAIT", 5*time.Second) if err != nil { t.Fatalf("Unable to wait until no more connections are in CLOSE_WAIT: %v", err) } _, counter, err = fdcount.Matching("TCP") if err != nil { t.Fatalf("Unable to get fdcount: %v", err) } var reportedHost string var reportedHostMutex sync.Mutex onResponse := func(resp *http.Response) { reportedHostMutex.Lock() reportedHost = resp.Header.Get(X_ENPROXY_PROXY_HOST) reportedHostMutex.Unlock() } conn, err := prepareConn(httpAddr, buffered, false, t, onResponse) if err != nil { t.Fatalf("Unable to prepareConn: %s", err) } defer func() { err := conn.Close() assert.Nil(t, err, "Closing conn should succeed") if !assert.NoError(t, counter.AssertDelta(2), "All file descriptors except the connection from proxy to destination site should have been closed") { DumpConnTrace() } }() doRequests(conn, t) assert.Equal(t, 208, bytesReceived, "Wrong number of bytes received") assert.Equal(t, 284, bytesSent, "Wrong number of bytes sent") assert.True(t, destsSent[httpAddr], "http address wasn't recorded as sent destination") assert.True(t, destsReceived[httpAddr], "http address wasn't recorded as received destination") reportedHostMutex.Lock() rh := reportedHost reportedHostMutex.Unlock() assert.Equal(t, "localhost", rh, "Didn't get correct reported host") }
func closeAndCountFDs(t *testing.T, conn *tls.Conn, err error, fdc *fdcount.Counter) { if err == nil { conn.Close() } assert.NoError(t, fdc.AssertDelta(0), "Number of open TCP files should be the same after test as before") }