Skip to content
File

Blob: tun/client/server_test.go

go87 lines
1package client
2 
3import (
4 "context"
5 "net"
6 "net/http"
7 "os"
8 "testing"
9 
10 "go.miragespace.co/specter/spec/chord"
11 "go.miragespace.co/specter/spec/mocks"
12 "go.miragespace.co/specter/spec/protocol"
13 
14 "github.com/stretchr/testify/mock"
15 "github.com/stretchr/testify/require"
16 "github.com/zhangyunhao116/skipmap"
17 "go.uber.org/zap/zaptest"
18)
19 
20func TestQueryRPC(t *testing.T) {
21 as := require.New(t)
22 logger := zaptest.NewLogger(t)
23 
24 file, err := os.CreateTemp("", "client")
25 as.NoError(err)
26 defer os.Remove(file.Name())
27 
28 ctx := t.Context()
29 
30 token := &protocol.ClientToken{
31 Token: []byte("test"),
32 }
33 cl := &protocol.Node{
34 Id: chord.Random(),
35 }
36 
37 testTarget := "tcp://127.0.0.1:22"
38 
39 der, cert, key := makeCertificate(as, logger, cl, token, nil)
40 cfg := &Config{
41 path: file.Name(),
42 router: skipmap.NewString[route](),
43 Apex: testApex,
44 Certificate: cert,
45 PrivKey: key,
46 Tunnels: []Tunnel{
47 {
48 Hostname: testHostname,
49 Target: testTarget,
50 },
51 },
52 }
53 as.NoError(cfg.validate())
54 
55 m := func(s *mocks.TunnelService, t1 *mocks.MemoryTransport, publishCall *mock.Call) {
56 defaultNoHostnames(s)
57 transportHelper(t1, der)
58 }
59 
60 client, t2, assertion := setupClient(t, as, ctx, logger, nil, cfg, nil, m, false, 1)
61 defer assertion()
62 defer client.Close()
63 
64 client.Start(ctx)
65 
66 httpCl := &http.Client{
67 Transport: &http.Transport{
68 MaxIdleConnsPerHost: -1,
69 DisableKeepAlives: true,
70 DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
71 c1, err := t2.DialStream(ctx, cl, protocol.Stream_RPC)
72 as.NoError(err)
73 return c1, nil
74 },
75 },
76 }
77 
78 rpcClient := protocol.NewClientQueryServiceProtobufClient("http://client", httpCl)
79 resp, err := rpcClient.ListTunnels(ctx, &protocol.ListTunnelsRequest{})
80 as.NoError(err)
81 as.Len(resp.GetTunnels(), 1)
82 
83 tunnel := resp.GetTunnels()[0]
84 as.Equal(testHostname, tunnel.GetHostname())
85 as.Equal(testTarget, tunnel.GetTarget())
86}