Rssmon2/monitor/item_test.go

75 lines
1.7 KiB
Go

package monitor
import (
"encoding/json"
"testing"
"time"
)
func Test_Item(t *testing.T) {
a := NewItem("localhost:12345", time.Second)
b := NewItem("localhost:54321", time.Minute)
if a.Compare(b) != -1 {
t.Errorf("incorrect item comparison")
}
was := b.next
if was == b.increment().next {
t.Errorf("increment didn't apply")
}
}
func Test_ItemCompare(t *testing.T) {
cases := []struct {
inter [2]time.Duration
nexts [2]time.Time
result int
}{
{
nexts: [2]time.Time{time.Unix(0, 0), time.Unix(10, 10)},
result: -1,
},
{
nexts: [2]time.Time{time.Unix(10, 10), time.Unix(0, 0)},
result: 1,
},
{
nexts: [2]time.Time{time.Unix(10, 10), time.Unix(10, 10)},
result: 0,
},
{
nexts: [2]time.Time{time.Unix(0, 0), time.Unix(10, 10)},
result: -1,
},
{
inter: [2]time.Duration{time.Second, time.Minute},
result: -1,
},
{
inter: [2]time.Duration{time.Minute, time.Second},
result: 1,
},
{
inter: [2]time.Duration{time.Second, time.Second},
result: 0,
},
}
for _, c := range cases {
comparison := (&Item{next: c.nexts[0], Interval: Duration{c.inter[0]}}).Compare(&Item{next: c.nexts[1], Interval: Duration{c.inter[1]}})
if comparison != c.result {
t.Errorf("failed to compare %v: got %v, expected %v", c.nexts, comparison, c.result)
}
}
}
func Test_ItemJSON(t *testing.T) {
item := NewItem("any", time.Minute)
var itemB Item
if b, err := json.Marshal(item); err != nil {
t.Fatalf("cannot marshal item: %v", err)
} else if err := json.Unmarshal(b, &itemB); err != nil {
t.Fatalf("cannot unmarshal item: %v", err)
} else if item.next = itemB.next; itemB != *item {
t.Fatalf("unmarshaled item does not match original: %v, expected %v", itemB, *item)
}
}