Skip to content

Commit b2a7055

Browse files
committed
test(transport): add integration test for handleSniffer
1 parent f33bcc3 commit b2a7055

1 file changed

Lines changed: 42 additions & 1 deletion

File tree

backend/pkg/transport/transport_test.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,23 @@ import (
77
"fmt"
88
"io"
99
"net"
10+
"os"
1011
"strings"
1112
"sync"
1213
"testing"
1314
"time"
1415

1516
"github.com/HyperloopUPV-H8/h9-backend/pkg/abstraction"
17+
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/network/sniffer"
1618
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/network/tcp"
1719
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/network/tftp"
18-
tftpv3 "github.com/pin/tftp/v3"
1920
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/network/udp"
2021
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/packet/data"
2122
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/presentation"
23+
"github.com/google/gopacket/layers"
24+
"github.com/google/gopacket/pcap"
25+
"github.com/google/gopacket/pcapgo"
26+
tftpv3 "github.com/pin/tftp/v3"
2227
"github.com/rs/zerolog"
2328
)
2429

@@ -1065,6 +1070,42 @@ func TestHandleFileWriteRead_ErrorPath(t *testing.T) {
10651070
}
10661071
}
10671072

1073+
func TestHandleSniffer_Dispatches(t *testing.T) {
1074+
tr, api := createTestTransport(t)
1075+
1076+
// empty pcap (header only) to drive HandleSniffer through EOF path
1077+
tmp, err := os.CreateTemp("", "sniffer*.pcap")
1078+
if err != nil {
1079+
t.Fatalf("failed to create temp file: %v", err)
1080+
}
1081+
writer := pcapgo.NewWriter(tmp)
1082+
if err := writer.WriteFileHeader(65535, layers.LinkTypeEthernet); err != nil {
1083+
t.Fatalf("write header failed: %v", err)
1084+
}
1085+
tmp.Close()
1086+
1087+
handle, err := pcap.OpenOffline(tmp.Name())
1088+
if err != nil {
1089+
t.Fatalf("failed to open pcap: %v", err)
1090+
}
1091+
sn := sniffer.New(handle, nil, defaultLogger())
1092+
1093+
done := make(chan struct{})
1094+
go func() {
1095+
tr.HandleSniffer(sn)
1096+
close(done)
1097+
}()
1098+
1099+
select {
1100+
case <-done:
1101+
case <-time.After(2 * time.Second):
1102+
t.Fatalf("HandleSniffer did not return on EOF")
1103+
}
1104+
1105+
// No notifications expected; just ensure no panic/block.
1106+
_ = api
1107+
}
1108+
10681109
// Helper function to mimic errors.As behavior
10691110
func ErrorAs(err error, target interface{}) bool {
10701111
switch target := target.(type) {

0 commit comments

Comments
 (0)