Files
uptimemonitor/test/uptime_test.go
2025-08-01 18:01:55 +02:00

111 lines
2.5 KiB
Go

package test
import (
"testing"
"uptimemonitor"
)
func TestUptime(t *testing.T) {
t.Run("uptime is empty when there are no checks", func(t *testing.T) {
tc := NewTestCase(t)
defer tc.Close()
m, _ := tc.Store.CreateMonitor(t.Context(), uptimemonitor.Monitor{
Url: "http://example.com",
})
tc.AssertEqual(m.Uptime, float32(0))
tc.AssertEqual(m.AvgResponseTimeMs, int64(0))
})
t.Run("uptime is computed when check is created", func(t *testing.T) {
tc := NewTestCase(t)
defer tc.Close()
tc.Store.CreateMonitor(t.Context(), uptimemonitor.Monitor{
Url: "http://example.com",
})
tc.Store.CreateCheck(t.Context(), uptimemonitor.Check{
MonitorID: 1,
StatusCode: 200,
ResponseTimeMs: 100,
})
m, _ := tc.Store.GetMonitorByID(t.Context(), 1)
tc.AssertEqual(m.N, int64(1))
tc.AssertEqual(m.Uptime, float32(100))
tc.AssertEqual(m.AvgResponseTimeMs, int64(100))
})
t.Run("it works with multiple checks", func(t *testing.T) {
tc := NewTestCase(t)
defer tc.Close()
tc.Store.CreateMonitor(t.Context(), uptimemonitor.Monitor{
Url: "http://example.com",
})
tc.Store.CreateCheck(t.Context(), uptimemonitor.Check{
MonitorID: 1,
StatusCode: 200,
ResponseTimeMs: 100,
})
tc.Store.CreateCheck(t.Context(), uptimemonitor.Check{
MonitorID: 1,
StatusCode: 200,
ResponseTimeMs: 200,
})
m, _ := tc.Store.GetMonitorByID(t.Context(), 1)
tc.AssertEqual(m.N, int64(2))
tc.AssertEqual(m.Uptime, float32(100))
tc.AssertEqual(m.AvgResponseTimeMs, int64(150))
})
t.Run("uptime is updated", func(t *testing.T) {
tc := NewTestCase(t)
defer tc.Close()
tc.Store.CreateMonitor(t.Context(), uptimemonitor.Monitor{
Url: "http://example.com",
})
tc.Store.CreateCheck(t.Context(), uptimemonitor.Check{
MonitorID: 1,
StatusCode: 404,
ResponseTimeMs: 100,
})
m, _ := tc.Store.GetMonitorByID(t.Context(), 1)
tc.AssertEqual(m.N, int64(1))
tc.AssertEqual(m.Uptime, float32(0))
tc.Store.CreateCheck(t.Context(), uptimemonitor.Check{
MonitorID: 1,
StatusCode: 200,
ResponseTimeMs: 100,
})
m, _ = tc.Store.GetMonitorByID(t.Context(), 1)
tc.AssertEqual(m.N, int64(2))
tc.AssertEqual(m.Uptime, float32(50))
tc.Store.CreateCheck(t.Context(), uptimemonitor.Check{
MonitorID: 1,
StatusCode: 500,
ResponseTimeMs: 100,
})
m, _ = tc.Store.GetMonitorByID(t.Context(), 1)
tc.AssertEqual(m.N, int64(3))
tc.AssertEqual(m.Uptime, float32(33.3))
})
}