Skip to content

Commit 8f4b696

Browse files
committed
tests: use implemented server for libp2p transport tests
1 parent 14f7431 commit 8f4b696

File tree

1 file changed

+77
-76
lines changed

1 file changed

+77
-76
lines changed

pkg/meshnet/transport/libp2p/transport_test.go

Lines changed: 77 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
"google.golang.org/grpc/credentials"
3838
"google.golang.org/grpc/credentials/insecure"
3939
"google.golang.org/grpc/status"
40+
"google.golang.org/protobuf/types/known/emptypb"
4041

4142
"github.com/webmeshproj/webmesh/pkg/context"
4243
"github.com/webmeshproj/webmesh/pkg/crypto"
@@ -45,6 +46,67 @@ import (
4546
"github.com/webmeshproj/webmesh/pkg/plugins/clients"
4647
)
4748

49+
var testNode = &v1.MeshNode{
50+
Id: "test-node",
51+
PublicKey: must(crypto.MustGenerateKey().PublicKey().Encode),
52+
}
53+
54+
func must(fn func() (string, error)) string {
55+
s, err := fn()
56+
if err != nil {
57+
panic(err)
58+
}
59+
return s
60+
}
61+
62+
type TestMeshAPI struct {
63+
v1.UnimplementedMeshServer
64+
}
65+
66+
func (*TestMeshAPI) GetMeshGraph(context.Context, *emptypb.Empty) (*v1.MeshGraph, error) {
67+
// Leave unimplemented.
68+
return nil, status.Errorf(codes.Unimplemented, "unimplemented")
69+
}
70+
71+
func (*TestMeshAPI) GetNode(context.Context, *v1.GetNodeRequest) (*v1.MeshNode, error) {
72+
// Return a dummy node
73+
return testNode, nil
74+
}
75+
76+
func (*TestMeshAPI) ListNodes(context.Context, *emptypb.Empty) (*v1.NodeList, error) {
77+
// Use for a custom error message
78+
return nil, status.Errorf(codes.Internal, "something went wrong")
79+
}
80+
81+
func RunClientConnTests(ctx context.Context, t *testing.T, c *grpc.ClientConn) {
82+
t.Helper()
83+
cli := v1.NewMeshClient(c)
84+
_, err := cli.GetMeshGraph(ctx, &emptypb.Empty{})
85+
if err == nil {
86+
t.Fatal("Expected error, got nil")
87+
}
88+
if status.Code(err) != codes.Unimplemented {
89+
t.Fatal("Expected unimplemented error, got", err)
90+
}
91+
_, err = cli.ListNodes(ctx, &emptypb.Empty{})
92+
if err == nil {
93+
t.Fatal("Expected error, got nil")
94+
}
95+
if status.Code(err) != codes.Internal {
96+
t.Fatal("Expected internal error, got", err)
97+
}
98+
node, err := cli.GetNode(ctx, &v1.GetNodeRequest{})
99+
if err != nil {
100+
t.Fatal("GetNode:", err)
101+
}
102+
if node.Id != testNode.Id {
103+
t.Fatal("Expected node ID", testNode.Id, "got", node.Id)
104+
}
105+
if node.PublicKey != testNode.PublicKey {
106+
t.Fatal("Expected node public key", testNode.PublicKey, "got", node.PublicKey)
107+
}
108+
}
109+
48110
func TestRPCTransport(t *testing.T) {
49111
ctx := context.Background()
50112

@@ -89,7 +151,7 @@ func TestRPCTransport(t *testing.T) {
89151
}
90152
// Create a dummy gRPC server and register an unimplemented service.
91153
srv := grpc.NewServer()
92-
v1.RegisterMeshServer(srv, v1.UnimplementedMeshServer{})
154+
v1.RegisterMeshServer(srv, &TestMeshAPI{})
93155
go func() {
94156
err := srv.Serve(server.RPCListener())
95157
if err != nil {
@@ -107,15 +169,7 @@ func TestRPCTransport(t *testing.T) {
107169
t.Fatal("Dial server address:", err)
108170
}
109171
defer c.Close()
110-
cli := v1.NewMeshClient(c)
111-
_, err = cli.GetNode(ctx, &v1.GetNodeRequest{})
112-
// We should actually get an unimplemented error here.
113-
if err == nil {
114-
t.Fatal("Expected error, got nil")
115-
}
116-
if status.Code(err) != codes.Unimplemented {
117-
t.Fatal("Expected unimplemented error, got", err)
118-
}
172+
RunClientConnTests(ctx, t, c)
119173
})
120174

121175
t.Run("DialByMultiaddr", func(t *testing.T) {
@@ -125,15 +179,7 @@ func TestRPCTransport(t *testing.T) {
125179
t.Fatal("Dial server address:", err)
126180
}
127181
defer c.Close()
128-
cli := v1.NewMeshClient(c)
129-
_, err = cli.GetNode(ctx, &v1.GetNodeRequest{})
130-
// We should actually get an unimplemented error here.
131-
if err == nil {
132-
t.Fatal("Expected error, got nil")
133-
}
134-
if status.Code(err) != codes.Unimplemented {
135-
t.Fatal("Expected unimplemented error, got", err)
136-
}
182+
RunClientConnTests(ctx, t, c)
137183
}
138184
})
139185
})
@@ -159,7 +205,7 @@ func TestRPCTransport(t *testing.T) {
159205
// Create a dummy gRPC server and register an unimplemented service.
160206
srv := grpc.NewServer()
161207
t.Cleanup(srv.Stop)
162-
v1.RegisterMeshServer(srv, v1.UnimplementedMeshServer{})
208+
v1.RegisterMeshServer(srv, &TestMeshAPI{})
163209
go func() {
164210
err := srv.Serve(server.RPCListener())
165211
if err != nil {
@@ -176,15 +222,7 @@ func TestRPCTransport(t *testing.T) {
176222
t.Fatal("Dial server address:", err)
177223
}
178224
defer c.Close()
179-
cli := v1.NewMeshClient(c)
180-
_, err = cli.GetNode(ctx, &v1.GetNodeRequest{})
181-
// We should actually get an unimplemented error here.
182-
if err == nil {
183-
t.Fatal("Expected error, got nil")
184-
}
185-
if status.Code(err) != codes.Unimplemented {
186-
t.Fatal("Expected unimplemented error, got", err)
187-
}
225+
RunClientConnTests(ctx, t, c)
188226
}
189227
})
190228

@@ -227,7 +265,7 @@ func TestRPCTransport(t *testing.T) {
227265
idauthcli := clients.NewInProcessClient(idauthsrv)
228266
srv := grpc.NewServer(grpc.ChainUnaryInterceptor(plugins.NewAuthUnaryInterceptor(idauthcli.Auth())))
229267
t.Cleanup(srv.Stop)
230-
v1.RegisterMeshServer(srv, v1.UnimplementedMeshServer{})
268+
v1.RegisterMeshServer(srv, &TestMeshAPI{})
231269
go func() {
232270
err := srv.Serve(server.RPCListener())
233271
if err != nil {
@@ -244,15 +282,7 @@ func TestRPCTransport(t *testing.T) {
244282
t.Fatal("Dial server address:", err)
245283
}
246284
defer c.Close()
247-
cli := v1.NewMeshClient(c)
248-
_, err = cli.GetNode(ctx, &v1.GetNodeRequest{})
249-
// We should actually get an unimplemented error here.
250-
if err == nil {
251-
t.Fatal("Expected error, got nil")
252-
}
253-
if status.Code(err) != codes.Unimplemented {
254-
t.Fatal("Expected unimplemented error, got", err)
255-
}
285+
RunClientConnTests(ctx, t, c)
256286
}
257287
})
258288
// Test that an unallowed ID can use the server, but will be rejected.
@@ -307,7 +337,7 @@ func TestRPCTransport(t *testing.T) {
307337
}
308338
srv := grpc.NewServer(grpc.Creds(credentials.NewTLS(tlsconf)))
309339
t.Cleanup(srv.Stop)
310-
v1.RegisterMeshServer(srv, v1.UnimplementedMeshServer{})
340+
v1.RegisterMeshServer(srv, &TestMeshAPI{})
311341
go func() {
312342
err := srv.Serve(server.RPCListener())
313343
if err != nil {
@@ -324,15 +354,7 @@ func TestRPCTransport(t *testing.T) {
324354
t.Fatal("Dial server address:", err)
325355
}
326356
defer c.Close()
327-
cli := v1.NewMeshClient(c)
328-
_, err = cli.GetNode(ctx, &v1.GetNodeRequest{})
329-
// We should actually get an unimplemented error here.
330-
if err == nil {
331-
t.Fatal("Expected error, got nil")
332-
}
333-
if status.Code(err) != codes.Unimplemented {
334-
t.Fatal("Expected unimplemented error, got", err)
335-
}
357+
RunClientConnTests(ctx, t, c)
336358
}
337359
})
338360

@@ -392,7 +414,7 @@ func TestRPCTransport(t *testing.T) {
392414
t.Fatal(err)
393415
}
394416
srv := grpc.NewServer(servercreds)
395-
v1.RegisterMeshServer(srv, v1.UnimplementedMeshServer{})
417+
v1.RegisterMeshServer(srv, &TestMeshAPI{})
396418
go func() {
397419
err := srv.Serve(server.RPCListener())
398420
if err != nil {
@@ -419,14 +441,7 @@ func TestRPCTransport(t *testing.T) {
419441
t.Fatal("Dial server address:", err)
420442
}
421443
defer c.Close()
422-
cli := v1.NewMeshClient(c)
423-
_, err = cli.GetNode(ctx, &v1.GetNodeRequest{})
424-
if err == nil {
425-
t.Fatal("Expected error, got nil")
426-
}
427-
if status.Code(err) != codes.Unimplemented {
428-
t.Fatal("Expected unimplemented error, got", err)
429-
}
444+
RunClientConnTests(ctx, t, c)
430445
}
431446
})
432447

@@ -501,7 +516,7 @@ func TestDiscoveryRPCTransport(t *testing.T) {
501516
server.Announce(ctx, rendezvous, time.Minute)
502517
t.Cleanup(func() { _ = server.Close() })
503518
srv := grpc.NewServer(grpc.Creds(insecure.NewCredentials()))
504-
v1.RegisterMeshServer(srv, v1.UnimplementedMeshServer{})
519+
v1.RegisterMeshServer(srv, &TestMeshAPI{})
505520
go func() {
506521
err := srv.Serve(server.RPCListener())
507522
if err != nil {
@@ -532,14 +547,7 @@ func TestDiscoveryRPCTransport(t *testing.T) {
532547
t.Fatal("Dial server address:", err)
533548
}
534549
defer c.Close()
535-
cli := v1.NewMeshClient(c)
536-
_, err = cli.GetNode(ctx, &v1.GetNodeRequest{})
537-
if err == nil {
538-
t.Fatal("Expected error, got nil")
539-
}
540-
if status.Code(err) != codes.Unimplemented {
541-
t.Fatal("Expected unimplemented error, got", err)
542-
}
550+
RunClientConnTests(ctx, t, c)
543551
})
544552

545553
t.Run("PrestartedHosts", func(t *testing.T) {
@@ -565,7 +573,7 @@ func TestDiscoveryRPCTransport(t *testing.T) {
565573
server.Announce(ctx, rendezvous, time.Minute)
566574
t.Cleanup(func() { _ = server.Close() })
567575
srv := grpc.NewServer(grpc.Creds(insecure.NewCredentials()))
568-
v1.RegisterMeshServer(srv, v1.UnimplementedMeshServer{})
576+
v1.RegisterMeshServer(srv, &TestMeshAPI{})
569577
go func() {
570578
err := srv.Serve(server.RPCListener())
571579
if err != nil {
@@ -602,13 +610,6 @@ func TestDiscoveryRPCTransport(t *testing.T) {
602610
t.Fatal("Dial server address:", err)
603611
}
604612
defer c.Close()
605-
cli := v1.NewMeshClient(c)
606-
_, err = cli.GetNode(ctx, &v1.GetNodeRequest{})
607-
if err == nil {
608-
t.Fatal("Expected error, got nil")
609-
}
610-
if status.Code(err) != codes.Unimplemented {
611-
t.Fatal("Expected unimplemented error, got", err)
612-
}
613+
RunClientConnTests(ctx, t, c)
613614
})
614615
}

0 commit comments

Comments
 (0)