-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathmain_test.go
113 lines (98 loc) · 2.61 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package main_test
import (
"context"
"log/slog"
"net"
"os"
"testing"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
"go.uber.org/goleak"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/test/bufconn"
"example/federation"
)
const bufSize = 1024
var (
listener *bufconn.Listener
)
func dialer(ctx context.Context, address string) (net.Conn, error) {
return listener.Dial()
}
type resolver struct{}
func TestFederation(t *testing.T) {
defer goleak.VerifyNone(t)
ctx := context.Background()
listener = bufconn.Listen(bufSize)
if os.Getenv("ENABLE_JAEGER") != "" {
exporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithInsecure())
if err != nil {
t.Fatal(err)
}
tp := sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exporter),
sdktrace.WithResource(
resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceNameKey.String("example16/codegenplugin"),
semconv.ServiceVersionKey.String("1.0.0"),
attribute.String("environment", "dev"),
),
),
sdktrace.WithSampler(sdktrace.AlwaysSample()),
)
defer tp.Shutdown(ctx)
otel.SetTextMapPropagator(propagation.TraceContext{})
otel.SetTracerProvider(tp)
}
conn, err := grpc.DialContext(
ctx, "",
grpc.WithContextDialer(dialer),
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
if err != nil {
t.Fatal(err)
}
defer conn.Close()
grpcServer := grpc.NewServer()
defer grpcServer.Stop()
logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug,
}))
federationServer, err := federation.NewFederationService(federation.FederationServiceConfig{
Logger: logger,
Resolver: new(resolver),
})
if err != nil {
t.Fatal(err)
}
defer federation.CleanupFederationService(ctx, federationServer)
federation.RegisterFederationServiceServer(grpcServer, federationServer)
go func() {
if err := grpcServer.Serve(listener); err != nil {
t.Fatal(err)
}
}()
client := federation.NewFederationServiceClient(conn)
res, err := client.Get(ctx, &federation.GetRequest{
Id: 10,
})
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(res, &federation.GetResponse{
Id: 10,
}, cmpopts.IgnoreUnexported(
federation.GetResponse{},
)); diff != "" {
t.Errorf("(-got, +want)\n%s", diff)
}
}