111 lines
3.9 KiB
Go
111 lines
3.9 KiB
Go
package common_test
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
"time"
|
|
|
|
"allaboutapps.dev/aw/go-starter/internal/api"
|
|
"allaboutapps.dev/aw/go-starter/internal/test"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGetHealthySuccess(t *testing.T) {
|
|
test.WithTestServer(t, func(s *api.Server) {
|
|
// explicitly set touchfile that no other test has (so we can explicitly remove it beforehand.)
|
|
s.Config.Management.ProbeWriteableTouchfile = ".healthy-test"
|
|
|
|
for _, writeablePath := range s.Config.Management.ProbeWriteablePathsAbs {
|
|
os.Remove(path.Join(writeablePath, s.Config.Management.ProbeWriteableTouchfile))
|
|
|
|
// also remove after test completion.
|
|
defer os.Remove(path.Join(writeablePath, s.Config.Management.ProbeWriteableTouchfile))
|
|
}
|
|
|
|
res := test.PerformRequest(t, s, "GET", "/-/healthy?mgmt-secret="+s.Config.Management.Secret, nil, nil)
|
|
require.Equal(t, http.StatusOK, res.Result().StatusCode)
|
|
require.Contains(t, res.Body.String(), "seq_health=1")
|
|
|
|
firstTouchTime := make([]time.Time, len(s.Config.Management.ProbeWriteablePathsAbs))
|
|
|
|
// expect a new touchfiles were written
|
|
for i, writeablePath := range s.Config.Management.ProbeWriteablePathsAbs {
|
|
filePath := path.Join(writeablePath, s.Config.Management.ProbeWriteableTouchfile)
|
|
stat, err := os.Stat(filePath)
|
|
require.NoErrorf(t, err, "Expected to have %v", filePath)
|
|
firstTouchTime[i] = stat.ModTime()
|
|
}
|
|
|
|
res = test.PerformRequest(t, s, "GET", "/-/healthy?mgmt-secret="+s.Config.Management.Secret, nil, nil)
|
|
require.Equal(t, http.StatusOK, res.Result().StatusCode)
|
|
require.Contains(t, res.Body.String(), "seq_health=2")
|
|
|
|
// expect touchfiles modTime was updated
|
|
for i, writeablePath := range s.Config.Management.ProbeWriteablePathsAbs {
|
|
filePath := path.Join(writeablePath, s.Config.Management.ProbeWriteableTouchfile)
|
|
stat, err := os.Stat(filePath)
|
|
require.NoErrorf(t, err, "Expected to have %v", filePath)
|
|
|
|
assert.NotEqual(t, firstTouchTime[i], stat.ModTime())
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestGetHealthyNoAuth(t *testing.T) {
|
|
test.WithTestServer(t, func(s *api.Server) {
|
|
res := test.PerformRequest(t, s, "GET", "/-/healthy", nil, nil)
|
|
require.Equal(t, http.StatusBadRequest, res.Result().StatusCode)
|
|
})
|
|
}
|
|
|
|
func TestGetHealthyWrongAuth(t *testing.T) {
|
|
test.WithTestServer(t, func(s *api.Server) {
|
|
res := test.PerformRequest(t, s, "GET", "/-/healthy?mgmt-secret=i-have-no-idea-about-the-pass", nil, nil)
|
|
require.Equal(t, http.StatusUnauthorized, res.Result().StatusCode)
|
|
})
|
|
}
|
|
|
|
func TestGetHealthyDBPingError(t *testing.T) {
|
|
test.WithTestServer(t, func(s *api.Server) {
|
|
// forcefully close the DB
|
|
s.DB.Close()
|
|
|
|
res := test.PerformRequest(t, s, "GET", "/-/healthy?mgmt-secret="+s.Config.Management.Secret, nil, nil)
|
|
require.Equal(t, 521, res.Result().StatusCode)
|
|
})
|
|
}
|
|
|
|
func TestGetHealthyDBSeqError(t *testing.T) {
|
|
test.WithTestServer(t, func(s *api.Server) {
|
|
// forcefully remove the sequence
|
|
if _, err := s.DB.Exec("DROP SEQUENCE seq_health;"); err != nil {
|
|
t.Fatal(err, "was unable to drop sequence seq_health")
|
|
}
|
|
|
|
res := test.PerformRequest(t, s, "GET", "/-/healthy?mgmt-secret="+s.Config.Management.Secret, nil, nil)
|
|
require.Equal(t, 521, res.Result().StatusCode)
|
|
})
|
|
}
|
|
|
|
func TestGetHealthyMountError(t *testing.T) {
|
|
test.WithTestServer(t, func(s *api.Server) {
|
|
s.Config.Management.ProbeWriteablePathsAbs = []string{"/this/path/does/not/exist"}
|
|
|
|
res := test.PerformRequest(t, s, "GET", "/-/healthy?mgmt-secret="+s.Config.Management.Secret, nil, nil)
|
|
require.Equal(t, 521, res.Result().StatusCode)
|
|
})
|
|
}
|
|
|
|
func TestGetHealthyNotReady(t *testing.T) {
|
|
test.WithTestServer(t, func(s *api.Server) {
|
|
// forcefully remove an initialized component to check if ready state works
|
|
s.Mailer = nil
|
|
|
|
res := test.PerformRequest(t, s, "GET", "/-/healthy?mgmt-secret="+s.Config.Management.Secret, nil, nil)
|
|
require.Equal(t, 521, res.Result().StatusCode)
|
|
})
|
|
}
|