(Feat): Initial Commit
This commit is contained in:
110
internal/api/handlers/common/get_healthy_test.go
Normal file
110
internal/api/handlers/common/get_healthy_test.go
Normal file
@@ -0,0 +1,110 @@
|
||||
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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user