mirror of
https://github.com/amnezia-vpn/amneziawg-go.git
synced 2025-04-08 01:56:56 +02:00
124 lines
2.5 KiB
Go
124 lines
2.5 KiB
Go
package device
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/amnezia-vpn/amneziawg-go/conn/bindtest"
|
|
"github.com/amnezia-vpn/amneziawg-go/tun/tuntest"
|
|
)
|
|
|
|
func setUpJunkCreator(t *testing.T) (junkCreator, error) {
|
|
cfg, _ := genASecurityConfigs(t)
|
|
tun := tuntest.NewChannelTUN()
|
|
binds := bindtest.NewChannelBinds()
|
|
level := LogLevelVerbose
|
|
dev := NewDevice(
|
|
tun.TUN(),
|
|
binds[0],
|
|
NewLogger(level, ""),
|
|
)
|
|
|
|
if err := dev.IpcSet(cfg[0]); err != nil {
|
|
t.Errorf("failed to configure device %v", err)
|
|
dev.Close()
|
|
return junkCreator{}, err
|
|
}
|
|
|
|
jc, err := NewJunkCreator(dev)
|
|
|
|
if err != nil {
|
|
t.Errorf("failed to create junk creator %v", err)
|
|
dev.Close()
|
|
return junkCreator{}, err
|
|
}
|
|
|
|
return jc, nil
|
|
}
|
|
|
|
func Test_junkCreator_createJunkPackets(t *testing.T) {
|
|
jc, err := setUpJunkCreator(t)
|
|
if err != nil {
|
|
return
|
|
}
|
|
t.Run("", func(t *testing.T) {
|
|
got, err := jc.createJunkPackets()
|
|
if err != nil {
|
|
t.Errorf(
|
|
"junkCreator.createJunkPackets() = %v; failed",
|
|
err,
|
|
)
|
|
return
|
|
}
|
|
seen := make(map[string]bool)
|
|
for _, junk := range got {
|
|
key := string(junk)
|
|
if seen[key] {
|
|
t.Errorf(
|
|
"junkCreator.createJunkPackets() = %v, duplicate key: %v",
|
|
got,
|
|
junk,
|
|
)
|
|
return
|
|
}
|
|
seen[key] = true
|
|
}
|
|
})
|
|
}
|
|
|
|
func Test_junkCreator_randomJunkWithSize(t *testing.T) {
|
|
t.Run("", func(t *testing.T) {
|
|
jc, err := setUpJunkCreator(t)
|
|
if err != nil {
|
|
return
|
|
}
|
|
r1, _ := jc.randomJunkWithSize(10)
|
|
r2, _ := jc.randomJunkWithSize(10)
|
|
fmt.Printf("%v\n%v\n", r1, r2)
|
|
if bytes.Equal(r1, r2) {
|
|
t.Errorf("same junks %v", err)
|
|
jc.device.Close()
|
|
return
|
|
}
|
|
})
|
|
}
|
|
|
|
func Test_junkCreator_randomPacketSize(t *testing.T) {
|
|
jc, err := setUpJunkCreator(t)
|
|
if err != nil {
|
|
return
|
|
}
|
|
for range [30]struct{}{} {
|
|
t.Run("", func(t *testing.T) {
|
|
if got := jc.randomPacketSize(); jc.device.aSecCfg.junkPacketMinSize > got ||
|
|
got > jc.device.aSecCfg.junkPacketMaxSize {
|
|
t.Errorf(
|
|
"junkCreator.randomPacketSize() = %v, not between range [%v,%v]",
|
|
got,
|
|
jc.device.aSecCfg.junkPacketMinSize,
|
|
jc.device.aSecCfg.junkPacketMaxSize,
|
|
)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_junkCreator_appendJunk(t *testing.T) {
|
|
jc, err := setUpJunkCreator(t)
|
|
if err != nil {
|
|
return
|
|
}
|
|
t.Run("", func(t *testing.T) {
|
|
s := "apple"
|
|
buffer := bytes.NewBuffer([]byte(s))
|
|
err := jc.appendJunk(buffer, 30)
|
|
if err != nil &&
|
|
buffer.Len() != len(s)+30 {
|
|
t.Errorf("appendWithJunk() size don't match")
|
|
}
|
|
read := make([]byte, 50)
|
|
buffer.Read(read)
|
|
fmt.Println(string(read))
|
|
})
|
|
}
|