mirror of
https://github.com/fankes/beszel.git
synced 2025-10-19 01:39:34 +08:00
68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
//go:build testing
|
|
// +build testing
|
|
|
|
package health
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"testing/synctest"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestHealth(t *testing.T) {
|
|
// Override healthFile to use a temporary directory for this test.
|
|
originalHealthFile := healthFile
|
|
tmpDir := t.TempDir()
|
|
healthFile = filepath.Join(tmpDir, "beszel_health_test")
|
|
defer func() { healthFile = originalHealthFile }()
|
|
|
|
t.Run("check with no health file", func(t *testing.T) {
|
|
err := Check()
|
|
require.Error(t, err)
|
|
assert.True(t, os.IsNotExist(err), "expected a file-not-exist error, but got: %v", err)
|
|
})
|
|
|
|
t.Run("update and check", func(t *testing.T) {
|
|
err := Update()
|
|
require.NoError(t, err, "Update() failed")
|
|
|
|
err = Check()
|
|
assert.NoError(t, err, "Check() failed immediately after Update()")
|
|
})
|
|
|
|
// This test uses synctest to simulate time passing.
|
|
// NOTE: This test requires GOEXPERIMENT=synctest to run.
|
|
t.Run("check with simulated time", func(t *testing.T) {
|
|
synctest.Test(t, func(t *testing.T) {
|
|
// Update the file to set the initial timestamp.
|
|
require.NoError(t, Update(), "Update() failed inside synctest")
|
|
|
|
// Set the mtime to the current fake time to align the file's timestamp with the simulated clock.
|
|
now := time.Now()
|
|
require.NoError(t, os.Chtimes(healthFile, now, now), "Chtimes failed")
|
|
|
|
// Wait a duration less than the threshold.
|
|
time.Sleep(89 * time.Second)
|
|
synctest.Wait()
|
|
|
|
// The check should still pass.
|
|
assert.NoError(t, Check(), "Check() failed after 89s")
|
|
|
|
// Wait for the total duration to exceed the threshold.
|
|
time.Sleep(5 * time.Second)
|
|
synctest.Wait()
|
|
|
|
// The check should now fail as unhealthy.
|
|
err := Check()
|
|
require.Error(t, err, "Check() should have failed after 91s")
|
|
assert.Equal(t, "unhealthy", err.Error(), "Check() returned wrong error")
|
|
})
|
|
})
|
|
}
|