Skip to content

Commit 14ddcf5

Browse files
committed
Add standalone test
1 parent 8d736af commit 14ddcf5

File tree

4 files changed

+196
-8
lines changed

4 files changed

+196
-8
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Gemfile.lock
1414
vendor/
1515
jaeger-ui-build/
1616
examples/hotrod/hotrod*
17-
cmd/standalone/standalone*
17+
cmd/standalone/standalone-linux
1818
cmd/agent/agent*
1919
cmd/collector/collector*
2020
cmd/query/query*

cmd/standalone/main.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,14 @@ import (
2929
"strconv"
3030

3131
"github.com/gorilla/mux"
32+
jaegerClientConfig "github.com/uber/jaeger-client-go/config"
33+
"github.com/uber/jaeger-lib/metrics"
34+
"github.com/uber/jaeger-lib/metrics/go-kit"
35+
"github.com/uber/jaeger-lib/metrics/go-kit/expvar"
3236
"github.com/uber/tchannel-go"
3337
"github.com/uber/tchannel-go/thrift"
3438
"go.uber.org/zap"
3539

36-
"github.com/uber/jaeger-lib/metrics"
37-
"github.com/uber/jaeger-lib/metrics/go-kit"
38-
"github.com/uber/jaeger-lib/metrics/go-kit/expvar"
3940
agentApp "github.com/uber/jaeger/cmd/agent/app"
4041
basic "github.com/uber/jaeger/cmd/builder"
4142
collector "github.com/uber/jaeger/cmd/collector/app/builder"
@@ -118,6 +119,17 @@ func startCollector(logger *zap.Logger, baseFactory metrics.Factory, memoryStore
118119
func startQuery(logger *zap.Logger, baseFactory metrics.Factory, memoryStore *memory.Store) {
119120
metricsFactory := baseFactory.Namespace("jaeger-query", nil)
120121

122+
jaegerClientConfig.Configuration{
123+
Sampler: &jaegerClientConfig.SamplerConfig{
124+
Type: "const",
125+
Param: 1.0,
126+
},
127+
RPCMetrics: true,
128+
}.InitGlobalTracer(
129+
"jaeger-query",
130+
jaegerClientConfig.Metrics(baseFactory),
131+
)
132+
121133
storageBuild, err := query.NewStorageBuilder(
122134
basic.Options.LoggerOption(logger),
123135
basic.Options.MetricsFactoryOption(metricsFactory),

cmd/standalone/standalone_test.go

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
// +build integration
2+
3+
package main
4+
5+
import (
6+
"encoding/json"
7+
"fmt"
8+
"io/ioutil"
9+
"net/http"
10+
"testing"
11+
"time"
12+
13+
"github.com/docker/docker/api/types"
14+
"github.com/docker/docker/api/types/container"
15+
"github.com/docker/docker/client"
16+
"github.com/docker/go-connections/nat"
17+
"github.com/stretchr/testify/require"
18+
19+
"code.uber.internal/infra/jaeger/model/ui"
20+
21+
"golang.org/x/net/context"
22+
)
23+
24+
const (
25+
imageName = "standalone"
26+
27+
host = "0.0.0.0"
28+
queryPort = "16686"
29+
queryHostPort = host + ":" + queryPort
30+
queryURL = "http://" + queryHostPort
31+
32+
getServicesURL = queryURL + "/api/services"
33+
getTraceURL = queryURL + "/api/traces?service=jaeger-query&tag=jaeger-debug-id:debug"
34+
)
35+
36+
var (
37+
httpClient = &http.Client{
38+
Timeout: time.Second,
39+
}
40+
)
41+
42+
func TestStandalone(t *testing.T) {
43+
ctx := context.Background()
44+
cli, err := client.NewEnvClient()
45+
if err != nil {
46+
t.Fatal(err)
47+
}
48+
49+
exposedPorts, portBindings, _ := nat.ParsePortSpecs([]string{
50+
fmt.Sprintf("%s:%s", queryHostPort, queryPort),
51+
})
52+
53+
resp, err := cli.ContainerCreate(
54+
ctx,
55+
&container.Config{Image: imageName, ExposedPorts: exposedPorts},
56+
&container.HostConfig{PortBindings: portBindings},
57+
nil,
58+
"",
59+
)
60+
if err != nil {
61+
t.Fatal(err)
62+
}
63+
64+
if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
65+
t.Fatal(err)
66+
}
67+
defer func() {
68+
if err := cli.ContainerRemove(ctx, resp.ID, types.ContainerRemoveOptions{Force: true}); err != nil {
69+
t.Fatalf("cannot remove container: %s", err)
70+
}
71+
}()
72+
73+
// Check if the query service is available
74+
if err := healthCheck(); err != nil {
75+
t.Fatal(err)
76+
}
77+
78+
createTrace(t)
79+
getAPITrace(t)
80+
}
81+
82+
func createTrace(t *testing.T) {
83+
req, err := http.NewRequest("GET", getServicesURL, nil)
84+
require.NoError(t, err)
85+
req.Header.Add("jaeger-debug-id", "debug")
86+
87+
resp, err := httpClient.Do(req)
88+
require.NoError(t, err)
89+
resp.Body.Close()
90+
}
91+
92+
type response struct {
93+
Data []*ui.Trace `json:"data"`
94+
}
95+
96+
func getAPITrace(t *testing.T) {
97+
req, err := http.NewRequest("GET", getTraceURL, nil)
98+
require.NoError(t, err)
99+
100+
var queryResponse response
101+
102+
for i := 0; i < 20; i++ {
103+
resp, err := httpClient.Do(req)
104+
require.NoError(t, err)
105+
106+
body, _ := ioutil.ReadAll(resp.Body)
107+
108+
err = json.Unmarshal(body, &queryResponse)
109+
require.NoError(t, err)
110+
resp.Body.Close()
111+
112+
if len(queryResponse.Data) == 1 {
113+
break
114+
}
115+
time.Sleep(time.Second)
116+
}
117+
require.Len(t, queryResponse.Data, 1)
118+
require.Len(t, queryResponse.Data[0].Spans, 1)
119+
}
120+
121+
func healthCheck() error {
122+
for i := 0; i < 100; i++ {
123+
_, err := http.Get(queryURL)
124+
if err == nil {
125+
return nil
126+
}
127+
time.Sleep(100 * time.Millisecond)
128+
}
129+
return fmt.Errorf("query service is not ready")
130+
}

glide.lock

Lines changed: 50 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)