-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathtest_utils.go
81 lines (75 loc) · 2.07 KB
/
test_utils.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
// This vile ciontains utilitiles used during the tests
package main
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"io/ioutil"
"testing"
"time"
"github.com/pion/webrtc/v3"
"github.com/stretchr/testify/require"
"github.com/tuzig/webexec/peers"
"go.uber.org/zap/zaptest"
"golang.org/x/sys/unix"
)
// used to keep track of sent control messages
var lastRef int
// NewClient is used generate a new client return the client, it's fingerprint
// and an error
func NewClient(known bool) (*webrtc.PeerConnection, *webrtc.Certificate, error) {
secretKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
if err != nil {
return nil, nil, err
}
certificate, err := webrtc.GenerateCertificate(secretKey)
certs := []webrtc.Certificate{*certificate}
client, err := webrtc.NewPeerConnection(
webrtc.Configuration{Certificates: certs})
if err != nil {
return nil, nil, err
}
return client, certificate, err
}
func isAlive(pid int) bool {
return unix.Kill(pid, 0) == nil
}
func initTest(t *testing.T) {
if peers.PtyMux == nil {
peers.PtyMux = peers.PtyMuxType{}
}
Logger = zaptest.NewLogger(t).Sugar()
conf, addr, err := parseConf(defaultConf)
require.Nil(t, err, "parseConf failed with: %s", err)
conf.Logger = Logger
require.NotNil(t, conf)
require.Equal(t, "0.0.0.0:7777", string(addr))
Conf.insecure = true
Conf.iceServers = nil
f, err := ioutil.TempFile("", "private.key")
require.Nil(t, err)
f.Close()
key = &KeyType{Name: f.Name()}
cert, err := key.generate()
require.Nil(t, err)
key.save(cert)
}
func newPeer(t *testing.T, fp string, certificate *webrtc.Certificate) *peers.Peer {
conf := peers.Conf{
Certificate: certificate,
AckTimeout: time.Second,
Logger: Logger,
DisconnectTimeout: time.Second,
FailedTimeout: time.Second,
KeepAliveInterval: time.Second,
GatheringTimeout: time.Second,
GetICEServers: func() ([]webrtc.ICEServer, error) {
return []webrtc.ICEServer{}, nil
},
OnCTRLMsg: handleCTRLMsg,
}
peer, err := peers.NewPeer(fp, &conf)
require.NoError(t, err)
require.NotNil(t, peer)
return peer
}