275 lines
3.7 KiB
Go
275 lines
3.7 KiB
Go
package common
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
)
|
|
|
|
func TestPacketFromBytes(t *testing.T) {
|
|
sid := [8]byte{255, 255, 255, 255, 255, 255, 255, 255}
|
|
data := []byte{1, 0, 1}
|
|
dataLength := len(data)
|
|
|
|
expect := Packet{
|
|
Flag: Request,
|
|
Sync: 0,
|
|
Data: data,
|
|
Sid: sid,
|
|
DataLength: uint32(dataLength),
|
|
}
|
|
|
|
bytes := []byte{0, 0, 0, 0, 0, 1, 0, 1}
|
|
|
|
pck := PacketFromBytes(bytes, uint32(dataLength), sid)
|
|
|
|
if !cmp.Equal(pck, expect) {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestPacketToBytes(t *testing.T) {
|
|
p := Packet{
|
|
Flag: Request,
|
|
Sync: 0,
|
|
Data: []byte{101, 10, 1},
|
|
Sid: [8]byte{255, 255, 255, 255, 255, 255, 255, 255},
|
|
DataLength: 3,
|
|
}
|
|
|
|
expect := []byte{0, 0, 0, 0, 0, 101, 10, 1}
|
|
|
|
bytes := p.ToBytes()
|
|
|
|
if !cmp.Equal(bytes, expect) {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestSymetricSecurePacket(t *testing.T) {
|
|
expect := Packet{
|
|
Flag: Request,
|
|
Sync: 0,
|
|
Data: []byte{101, 10, 1},
|
|
Sid: [8]byte{255, 255, 255, 255, 255, 255, 255, 255},
|
|
DataLength: 3,
|
|
}
|
|
|
|
key := [32]byte{
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
}
|
|
|
|
secPck := NewSymmetricSecurePacket(key, &expect)
|
|
|
|
packet, err := secPck.ExtractPacket(key)
|
|
if err != nil {
|
|
t.Fail()
|
|
}
|
|
|
|
if !cmp.Equal(packet, expect) {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestSecurePacketFromBytes(t *testing.T) {
|
|
bytes := []byte{
|
|
// Nonce
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
// Sid
|
|
255, 255, 255, 255, 255, 255, 255, 255,
|
|
// Length
|
|
3, 0, 0, 0,
|
|
// Data
|
|
101, 10, 1,
|
|
}
|
|
|
|
expect := SecurePacket{
|
|
Nonce: [24]byte{
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
},
|
|
Sid: [8]byte{255, 255, 255, 255, 255, 255, 255, 255},
|
|
DataLength: 3,
|
|
EncryptedData: []byte{101, 10, 1},
|
|
}
|
|
|
|
secPck, err := SecurePacketFromBytes(bytes)
|
|
|
|
if err != nil {
|
|
t.Fail()
|
|
}
|
|
|
|
if !cmp.Equal(secPck, expect) {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestSecurePacketToBytes(t *testing.T) {
|
|
expect := []byte{
|
|
// Nonce
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
// Sid
|
|
255, 255, 255, 255, 255, 255, 255, 255,
|
|
// Length
|
|
3, 0, 0, 0,
|
|
// Data
|
|
101, 10, 1,
|
|
}
|
|
|
|
secPck := SecurePacket{
|
|
Nonce: [24]byte{
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
},
|
|
Sid: [8]byte{255, 255, 255, 255, 255, 255, 255, 255},
|
|
DataLength: 3,
|
|
EncryptedData: []byte{101, 10, 1},
|
|
}
|
|
|
|
bytes := secPck.ToBytes()
|
|
|
|
if !cmp.Equal(bytes, expect) {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestGetUint32Payload_Positive(t *testing.T) {
|
|
pck := Packet{
|
|
Flag: Ack,
|
|
Data: []byte{40, 0, 0, 0},
|
|
DataLength: 4,
|
|
}
|
|
|
|
var expect uint32 = 40
|
|
|
|
payload, err := pck.GetUint32Payload()
|
|
if err != nil {
|
|
t.Fail()
|
|
}
|
|
|
|
if payload != expect {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestGetUint32Payload_Negative(t *testing.T) {
|
|
pck := Packet{
|
|
Flag: Request,
|
|
Data: []byte{40, 0, 0, 0},
|
|
DataLength: 4,
|
|
}
|
|
|
|
_, err := pck.GetUint32Payload()
|
|
if err == nil {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestGetFilePath_Positive(t *testing.T) {
|
|
expect := "Hello World!"
|
|
b := []byte(expect)
|
|
|
|
pck := Packet{
|
|
Flag: Request,
|
|
Data: b,
|
|
DataLength: uint32(len(b)),
|
|
}
|
|
|
|
payload, err := pck.GetFilePath()
|
|
if err != nil {
|
|
t.Fail()
|
|
}
|
|
|
|
if payload != expect {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestGetFilePath_Negative(t *testing.T) {
|
|
pck := Packet{
|
|
Flag: Ack,
|
|
Data: []byte{40, 0, 0, 0},
|
|
DataLength: 4,
|
|
}
|
|
|
|
_, err := pck.GetFilePath()
|
|
if err == nil {
|
|
t.Fail()
|
|
}
|
|
}
|