mirror of
https://codeberg.org/cunicu/cunicu.git
synced 2025-10-28 21:01:47 +08:00
186 lines
4.4 KiB
Go
186 lines
4.4 KiB
Go
package wg_test
|
|
|
|
import (
|
|
"bytes"
|
|
"net"
|
|
"time"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
"github.com/stv0g/cunicu/pkg/util/terminal"
|
|
"github.com/stv0g/cunicu/pkg/wg"
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
)
|
|
|
|
var _ = Context("device", func() {
|
|
var err error
|
|
var dev wg.Device
|
|
var sk, skp1, skp2, psk wgtypes.Key
|
|
|
|
BeforeEach(func() {
|
|
now := time.Now()
|
|
|
|
sk, err = wgtypes.ParseKey("QI1WbUUJJS69sLS1TSBfx5U/n1jMQaPwbcDnq2S24Fg=")
|
|
Expect(err).To(Succeed())
|
|
|
|
skp1, err = wgtypes.ParseKey("KOMLkp/ZuAjnrwV2OsXNZ7rx3cBrCjOTv1Zhk1SiDlQ=")
|
|
Expect(err).To(Succeed())
|
|
|
|
skp2, err = wgtypes.ParseKey("UL6T4C540jv1xy4cC8nr03wnepLQPDsObRCBhhSzXUM=")
|
|
Expect(err).To(Succeed())
|
|
|
|
psk, err = wgtypes.ParseKey("eZuJ5S7fcYVm5wuRZitib4UsqVpmS81hZiZPt5Ob9SE=")
|
|
Expect(err).To(Succeed())
|
|
|
|
dev = wg.Device{
|
|
Name: "wg0",
|
|
PrivateKey: sk,
|
|
PublicKey: sk.PublicKey(),
|
|
ListenPort: 1234,
|
|
FirewallMark: 5678,
|
|
Peers: []wgtypes.Peer{
|
|
{
|
|
PublicKey: skp1.PublicKey(),
|
|
PresharedKey: psk,
|
|
Endpoint: &net.UDPAddr{
|
|
IP: net.IPv4(1, 2, 3, 4),
|
|
Port: 51820,
|
|
},
|
|
PersistentKeepaliveInterval: 25 * time.Second,
|
|
AllowedIPs: []net.IPNet{
|
|
{
|
|
IP: net.IPv4(5, 6, 7, 8),
|
|
Mask: net.CIDRMask(16, 32),
|
|
},
|
|
},
|
|
LastHandshakeTime: now.Add(-5 * time.Second),
|
|
},
|
|
{
|
|
PublicKey: skp2.PublicKey(),
|
|
LastHandshakeTime: now,
|
|
TransmitBytes: 512,
|
|
ReceiveBytes: 1024,
|
|
},
|
|
},
|
|
}
|
|
})
|
|
|
|
Context("list", func() {
|
|
It("can get device by name", func() {
|
|
l := wg.DeviceList{
|
|
&wgtypes.Device{
|
|
Name: "wg5",
|
|
ListenPort: 5,
|
|
},
|
|
&wgtypes.Device{
|
|
Name: "wg6",
|
|
ListenPort: 6,
|
|
},
|
|
&wgtypes.Device{
|
|
Name: "wg2",
|
|
ListenPort: 2,
|
|
},
|
|
&wgtypes.Device{
|
|
Name: "wg9",
|
|
ListenPort: 9,
|
|
},
|
|
&wgtypes.Device{
|
|
Name: "wg2",
|
|
ListenPort: 2,
|
|
},
|
|
}
|
|
|
|
d := l.GetByName("wg9")
|
|
Expect(d).NotTo(BeNil())
|
|
Expect(d.ListenPort).To(Equal(9))
|
|
|
|
d = l.GetByName("wg3")
|
|
Expect(d).To(BeNil())
|
|
})
|
|
})
|
|
|
|
It("to config", func() {
|
|
cfg := dev.Config()
|
|
|
|
Expect(cfg.PrivateKey).NotTo(BeNil())
|
|
Expect(*cfg.PrivateKey).To(Equal(sk))
|
|
|
|
Expect(cfg.ListenPort).NotTo(BeNil())
|
|
Expect(*cfg.ListenPort).To(Equal(1234))
|
|
|
|
Expect(cfg.FirewallMark).NotTo(BeNil())
|
|
Expect(*cfg.FirewallMark).To(Equal(5678))
|
|
|
|
Expect(cfg.Peers).To(HaveLen(2))
|
|
Expect(cfg.Peers[0].PublicKey).To(Equal(skp1.PublicKey()))
|
|
|
|
Expect(cfg.Peers[0].PresharedKey).NotTo(BeNil())
|
|
Expect(*cfg.Peers[0].PresharedKey).To(Equal(psk))
|
|
|
|
Expect(cfg.Peers[0].PersistentKeepaliveInterval).NotTo(BeNil())
|
|
Expect(*cfg.Peers[0].PersistentKeepaliveInterval).To(Equal(25 * time.Second))
|
|
|
|
Expect(cfg.Peers[0].Endpoint).NotTo(BeNil())
|
|
Expect(cfg.Peers[0].Endpoint.String()).To(Equal("1.2.3.4:51820"))
|
|
|
|
Expect(cfg.Peers[0].AllowedIPs).To(HaveLen(1))
|
|
Expect(cfg.Peers[0].AllowedIPs[0].String()).To(Equal("5.6.7.8/16"))
|
|
})
|
|
|
|
Context("dump", func() {
|
|
It("hide keys", func() {
|
|
buf := &bytes.Buffer{}
|
|
buf2 := terminal.NewANSIStripper(buf)
|
|
|
|
err = dev.Dump(buf2, true)
|
|
Expect(err).To(Succeed())
|
|
|
|
Expect(buf.String()).Should(Equal(`interface: wg0
|
|
public key: OUE5VJPyG9HEygYZowUJBARyCRIy8joQQKyl/YHvYWc=
|
|
private key: (hidden)
|
|
listening port: 1234
|
|
fwmark: 5678
|
|
|
|
peer: 6Oh0ZnWPQCVftiiD5P+pLf0c271rBdcQluxYgAGsgj0=
|
|
latest handshake: Now
|
|
allowed ips: (none)
|
|
transfer: 1.00 KiB received, 512 B sent
|
|
|
|
peer: Y658qGkT02yrLopsu1pnT2/DdgeJdMK8HxDI2UYSOX4=
|
|
preshared key: (hidden)
|
|
endpoint: 1.2.3.4:51820
|
|
latest handshake: 5 seconds ago
|
|
allowed ips: 5.6.7.8/16
|
|
persistent keepalive: every 25 seconds
|
|
`))
|
|
})
|
|
|
|
It("show keys", func() {
|
|
buf := &bytes.Buffer{}
|
|
buf2 := terminal.NewANSIStripper(buf)
|
|
|
|
err = dev.Dump(buf2, false)
|
|
Expect(err).To(Succeed())
|
|
|
|
Expect(buf.String()).Should(Equal(`interface: wg0
|
|
public key: OUE5VJPyG9HEygYZowUJBARyCRIy8joQQKyl/YHvYWc=
|
|
private key: QI1WbUUJJS69sLS1TSBfx5U/n1jMQaPwbcDnq2S24Fg=
|
|
listening port: 1234
|
|
fwmark: 5678
|
|
|
|
peer: 6Oh0ZnWPQCVftiiD5P+pLf0c271rBdcQluxYgAGsgj0=
|
|
latest handshake: Now
|
|
allowed ips: (none)
|
|
transfer: 1.00 KiB received, 512 B sent
|
|
|
|
peer: Y658qGkT02yrLopsu1pnT2/DdgeJdMK8HxDI2UYSOX4=
|
|
preshared key: eZuJ5S7fcYVm5wuRZitib4UsqVpmS81hZiZPt5Ob9SE=
|
|
endpoint: 1.2.3.4:51820
|
|
latest handshake: 5 seconds ago
|
|
allowed ips: 5.6.7.8/16
|
|
persistent keepalive: every 25 seconds
|
|
`))
|
|
})
|
|
})
|
|
})
|