2025-01-12 00:01:08 +00:00
|
|
|
package sfp
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
//ChatGPT Generated Code to test the Encode and Decode functions
|
|
|
|
|
|
|
|
func TestEncodeDecodeCustomPacket(t *testing.T) {
|
|
|
|
// Define a sample packet
|
|
|
|
originalPacket := SimpleFinancePackage{
|
|
|
|
Key: [8]byte{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'},
|
|
|
|
Operation: 1,
|
|
|
|
Asset: 2,
|
|
|
|
Price: 1234.56,
|
|
|
|
Volume: 7890.12,
|
2025-01-22 21:24:33 +00:00
|
|
|
Expire: 946684801,
|
2025-01-12 00:01:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Encode the packet
|
|
|
|
encoded, err := EncodeSimpleFinanacePackage(originalPacket)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Encoding failed: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check the encoded length
|
2025-01-22 21:24:33 +00:00
|
|
|
if len(encoded) != 37 {
|
|
|
|
t.Fatalf("Encoded data has incorrect length: got %d, want 37", len(encoded))
|
2025-01-12 00:01:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Decode the packet
|
|
|
|
decodedPacket, err := ParseSimpleFinanacePackage(encoded)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Decoding failed: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Compare the original and decoded packets
|
|
|
|
if !bytes.Equal(originalPacket.Key[:], decodedPacket.Key[:]) {
|
|
|
|
t.Errorf("Key mismatch: got %v, want %v", decodedPacket.Key, originalPacket.Key)
|
|
|
|
}
|
|
|
|
if originalPacket.Operation != decodedPacket.Operation {
|
|
|
|
t.Errorf("Operation mismatch: got %d, want %d", decodedPacket.Operation, originalPacket.Operation)
|
|
|
|
}
|
|
|
|
if originalPacket.Asset != decodedPacket.Asset {
|
|
|
|
t.Errorf("Asset mismatch: got %d, want %d", decodedPacket.Asset, originalPacket.Asset)
|
|
|
|
}
|
|
|
|
if originalPacket.Price != decodedPacket.Price {
|
|
|
|
t.Errorf("Price mismatch: got %f, want %f", decodedPacket.Price, originalPacket.Price)
|
|
|
|
}
|
|
|
|
if originalPacket.Volume != decodedPacket.Volume {
|
|
|
|
t.Errorf("Volume mismatch: got %f, want %f", decodedPacket.Volume, originalPacket.Volume)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestInvalidPacketSizes(t *testing.T) {
|
|
|
|
// Test with too small a packet
|
|
|
|
smallPacket := make([]byte, 10)
|
|
|
|
_, err := ParseSimpleFinanacePackage(smallPacket)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("Expected error for small packet, got nil")
|
|
|
|
}
|
|
|
|
|
|
|
|
// Test with too large a packet
|
|
|
|
largePacket := make([]byte, 30)
|
|
|
|
_, err = ParseSimpleFinanacePackage(largePacket)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("Expected error for large packet, got nil")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestInvalidPacketValues(t *testing.T) {
|
|
|
|
// Create a valid packet and modify its fields
|
|
|
|
validPacket := SimpleFinancePackage{
|
|
|
|
Key: [8]byte{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'},
|
|
|
|
Operation: 1,
|
|
|
|
Asset: 2,
|
|
|
|
Price: 1234.56,
|
|
|
|
Volume: 7890.12,
|
2025-01-22 21:24:33 +00:00
|
|
|
Expire: 946684801,
|
2025-01-12 00:01:08 +00:00
|
|
|
}
|
|
|
|
encoded, _ := EncodeSimpleFinanacePackage(validPacket)
|
|
|
|
|
|
|
|
// Modify encoded data to introduce errors
|
|
|
|
encoded[9] = 255 // Invalid operation value
|
|
|
|
|
|
|
|
_, err := ParseSimpleFinanacePackage(encoded)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("Expected error for invalid operation value, got nil")
|
|
|
|
}
|
|
|
|
|
|
|
|
// Modify price to a negative value
|
|
|
|
copy(encoded[10:], []byte{255, 255, 255, 255, 255, 255, 255, 255}) // Represents -1 in float64 (Big-Endian)
|
|
|
|
_, err = ParseSimpleFinanacePackage(encoded)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("Expected error for negative price, got nil")
|
|
|
|
}
|
|
|
|
}
|