61 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|