-
Notifications
You must be signed in to change notification settings - Fork 21
/
grpc_test.go
106 lines (96 loc) · 2.17 KB
/
grpc_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
package katsubushi_test
import (
"context"
"fmt"
"net"
"testing"
"time"
"github.com/kayac/go-katsubushi/v2"
"github.com/kayac/go-katsubushi/v2/grpc"
gogrpc "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
var grpcApp *katsubushi.App
var grpcPort int
func init() {
var err error
grpcApp, err = katsubushi.New(88)
if err != nil {
panic(err)
}
listener, err := net.Listen("tcp", "localhost:0")
if err != nil {
panic(err)
}
grpcPort = listener.Addr().(*net.TCPAddr).Port
go grpcApp.RunGRPCServer(context.Background(), &katsubushi.Config{GRPCListener: listener})
time.Sleep(3 * time.Second)
}
func newgRPCClient() (grpc.GeneratorClient, func(), error) {
addr := fmt.Sprintf("localhost:%d", grpcPort)
conn, err := gogrpc.Dial(
addr,
gogrpc.WithTransportCredentials(insecure.NewCredentials()),
gogrpc.WithBlock(),
)
if err != nil {
return nil, func() {}, err
}
c := grpc.NewGeneratorClient(conn)
return c, func() { conn.Close() }, nil
}
func TestGRPCSingle(t *testing.T) {
client, close, err := newgRPCClient()
defer close()
if err != nil {
t.Fatal(err)
}
for i := 0; i < 10; i++ {
res, err := client.Fetch(context.Background(), &grpc.FetchRequest{})
if err != nil {
t.Fatal(err)
}
if res.Id == 0 {
t.Fatal("id should not be 0")
}
t.Logf("HTTP fetched single ID: %d", res.Id)
}
}
func TestGRPCMulti(t *testing.T) {
client, close, err := newgRPCClient()
defer close()
if err != nil {
t.Fatal(err)
}
for i := 0; i < 10; i++ {
res, err := client.FetchMulti(context.Background(), &grpc.FetchMultiRequest{N: 10})
if err != nil {
t.Fatal(err)
}
if len(res.Ids) != 10 {
t.Fatalf("ids should contain 10 elements %v", res.Ids)
}
for _, id := range res.Ids {
if id == 0 {
t.Fatal("id should not be 0")
}
}
t.Logf("HTTP fetched IDs: %v", res.Ids)
}
}
func BenchmarkGRPCClientFetch(b *testing.B) {
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
c, close, _ := newgRPCClient()
defer close()
for pb.Next() {
res, err := c.Fetch(context.Background(), &grpc.FetchRequest{})
if err != nil {
b.Fatal(err)
}
if res.Id == 0 {
b.Error("could not fetch id > 0")
}
}
})
}