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