run integration tests with qlog and metrics on CircleCI

This commit is contained in:
Marten Seemann
2020-07-20 11:31:33 +07:00
parent 4e4c71c1b9
commit 1c1c24545f
2 changed files with 38 additions and 22 deletions

View File

@@ -41,8 +41,8 @@ jobs:
name: "Run self integration tests with race detector"
command: ginkgo -race -v -randomizeAllSpecs -trace integrationtests/self
- run:
name: "Run self integration tests with qlog"
command: ginkgo -v -randomizeAllSpecs -trace integrationtests/self -- -qlog
name: "Run self integration tests with qlog and metrics"
command: ginkgo -v -randomizeAllSpecs -trace integrationtests/self -- -qlog -metrics
go114:
<<: *test
interop-build:

View File

@@ -22,6 +22,7 @@ import (
"github.com/lucas-clemente/quic-go"
"github.com/lucas-clemente/quic-go/internal/utils"
"github.com/lucas-clemente/quic-go/logging"
"github.com/lucas-clemente/quic-go/metrics"
"github.com/lucas-clemente/quic-go/qlog"
. "github.com/onsi/ginkgo"
@@ -86,23 +87,12 @@ var (
logBufOnce sync.Once
logBuf *syncedBuffer
enableQlog bool
enableMetrics bool
tlsConfig *tls.Config
tlsConfigLongChain *tls.Config
tlsClientConfig *tls.Config
tracer = qlog.NewTracer(func(p logging.Perspective, connectionID []byte) io.WriteCloser {
role := "server"
if p == logging.PerspectiveClient {
role = "client"
}
filename := fmt.Sprintf("log_%x_%s.qlog", connectionID, role)
fmt.Fprintf(GinkgoWriter, "Creating %s.\n", filename)
f, err := os.Create(filename)
Expect(err).ToNot(HaveOccurred())
bw := bufio.NewWriter(f)
return utils.NewBufferedWriteCloser(bw, f)
})
tracer logging.Tracer
)
// read the logfile command line flag
@@ -110,6 +100,8 @@ var (
func init() {
flag.StringVar(&logFileName, "logfile", "", "log file")
flag.BoolVar(&enableQlog, "qlog", false, "enable qlog")
// metrics won't be accessible anywhere, but it's useful to exercise the code
flag.BoolVar(&enableMetrics, "metrics", false, "enable metrics")
ca, caPrivateKey, err := generateCA()
if err != nil {
@@ -138,6 +130,33 @@ func init() {
RootCAs: root,
NextProtos: []string{alpn},
}
var qlogTracer, metricsTracer logging.Tracer
if enableQlog {
qlogTracer = qlog.NewTracer(func(p logging.Perspective, connectionID []byte) io.WriteCloser {
role := "server"
if p == logging.PerspectiveClient {
role = "client"
}
filename := fmt.Sprintf("log_%x_%s.qlog", connectionID, role)
fmt.Fprintf(GinkgoWriter, "Creating %s.\n", filename)
f, err := os.Create(filename)
Expect(err).ToNot(HaveOccurred())
bw := bufio.NewWriter(f)
return utils.NewBufferedWriteCloser(bw, f)
})
}
if enableMetrics {
metricsTracer = metrics.NewTracer()
}
if enableQlog && enableMetrics {
tracer = logging.NewMultiplexedTracer(qlogTracer, metricsTracer)
} else if enableQlog {
tracer = qlogTracer
} else if enableMetrics {
tracer = metricsTracer
}
}
func generateCA() (*x509.Certificate, *rsa.PrivateKey, error) {
@@ -263,9 +282,6 @@ func getQuicConfig(conf *quic.Config) *quic.Config {
} else {
conf = conf.Clone()
}
if !enableQlog {
return conf
}
conf.Tracer = tracer
return conf
}