package table
import (
"bytes"
"strings"
"testing"
"time"
"github.com/mercemay/portr/internal/check"
"github.com/mercemay/portr/internal/check/result"
"github.com/mercemay/portr/internal/config/target"
)
func sampleReport() check.Report {
return check.Report{
Started: time.Unix(1645000000, 0),
Finished: time.Unix(1645000001, 0),
Results: []result.Result{
result.Success(target.Target{Host: "a", Port: 22, Name: "ssh"}, 7*time.Millisecond, 1),
result.Failure(target.Target{Host: "b", Port: 80}, nil, 0, 2),
},
}
}
func TestWrite_columns(t *testing.T) {
var buf bytes.Buffer
if err := New().Write(&buf, sampleReport()); err != nil {
t.Fatalf("Write: %v", err)
}
out := buf.String()
if !strings.Contains(out, "NAME") || !strings.Contains(out, "STATUS") {
t.Errorf("missing header: %s", out)
}
if !strings.Contains(out, "ssh") || !strings.Contains(out, "open") {
t.Errorf("missing row: %s", out)
}
if !strings.Contains(out, "1 open, 1 closed") {
t.Errorf("missing summary: %s", out)
}
}
func TestFormatLatency(t *testing.T) {
cases := map[time.Duration]string{
0: "-",
500 * time.Microsecond: "500us",
3 * time.Millisecond: "3ms",
250 * time.Millisecond: "250ms",
}
for in, want := range cases {
if got := formatLatency(in); got != want {
t.Errorf("formatLatency(%v) = %q, want %q", in, got, want)
}
}
}