This repository has been archived on 2025-10-15. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Uftp/internal/common/packets_test.go
2023-12-08 20:39:52 +01:00

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()
}
}