Files

61 lines
1.4 KiB
Go

package web
import (
"bytes"
"io"
"net/http"
"strings"
"testing"
"time"
"pcap-web-tools/internal/pcap"
)
func TestReorderHandler(t *testing.T) {
srv, err := New(Config{MaxUploadBytes: 1 << 20})
if err != nil {
t.Fatal(err)
}
var in bytes.Buffer
w, _ := pcap.NewWriter(&in, pcap.LinkTypeEthernet)
for _, sec := range []int64{3, 1, 2} {
w.WritePacket(time.Unix(sec, 0), []byte{byte(sec)})
}
rec := postUpload(t, srv, "/reorder", "trace.pcap", in.Bytes(), nil)
if rec.Code != http.StatusOK {
t.Fatalf("status %d: %s", rec.Code, rec.Body)
}
if cd := rec.Header().Get("Content-Disposition"); cd != `attachment; filename="trace_reordered.pcap"` {
t.Errorf("Content-Disposition %q", cd)
}
if got := rec.Header().Get("X-Pcap-Out-Of-Order"); got != "2" {
t.Errorf("X-Pcap-Out-Of-Order %q", got)
}
r, err := pcap.NewReader(rec.Body)
if err != nil {
t.Fatal(err)
}
var order []byte
for {
p, err := r.Next()
if err == io.EOF {
break
}
if err != nil {
t.Fatal(err)
}
order = append(order, p[16])
}
if !bytes.Equal(order, []byte{1, 2, 3}) {
t.Errorf("order %v", order)
}
for name, file := range map[string][]byte{"no file": nil, "not pcap": []byte("hello world, not a pcap file")} {
rec := postUpload(t, srv, "/reorder", "x.pcap", file, nil)
if rec.Code != http.StatusBadRequest || !strings.Contains(rec.Body.String(), `class="error"`) {
t.Errorf("%s: status %d", name, rec.Code)
}
}
}