package json
import (
"bytes"
stdjson "encoding/json"
"testing"
"time"
"github.com/mercemay/portr/internal/check"
"github.com/mercemay/portr/internal/check/result"
"github.com/mercemay/portr/internal/config/target"
)
func TestWrite_roundtrip(t *testing.T) {
rep := check.Report{
Started: time.Unix(1645000000, 0).UTC(),
Finished: time.Unix(1645000001, 0).UTC(),
Results: []result.Result{
result.Success(target.Target{Host: "h", Port: 22}, 5*time.Millisecond, 1),
result.Failure(target.Target{Host: "h", Port: 80}, nil, 0, 2),
},
}
var buf bytes.Buffer
if err := New(false).Write(&buf, rep); err != nil {
t.Fatalf("Write: %v", err)
}
var got struct {
Open int `json:"open"`
Closed int `json:"closed"`
Results []struct {
Open bool `json:"open"`
} `json:"results"`
}
if err := stdjson.Unmarshal(buf.Bytes(), &got); err != nil {
t.Fatalf("unmarshal: %v", err)
}
if got.Open != 1 || got.Closed != 1 {
t.Errorf("open=%d closed=%d, want 1/1", got.Open, got.Closed)
}
if len(got.Results) != 2 {
t.Errorf("results len=%d, want 2", len(got.Results))
}
}
func TestWrite_pretty(t *testing.T) {
var buf bytes.Buffer
_ = New(true).Write(&buf, check.Report{})
if !bytes.Contains(buf.Bytes(), []byte(" ")) {
t.Errorf("pretty output missing indent: %s", buf.String())
}
}