1
0
mirror of https://github.com/openshift/installer.git synced 2026-02-05 15:47:14 +01:00
Files
installer/pkg/agent/validations_test.go
Richard Su ff3b202730 AGENT-967: Improve monitoring output for multi-node
Monitoring output are now batched and displayed every 5 seconds
for each node. This makes the logs easier to read because the logs
for each node are more likely to be grouped together.
2024-11-05 17:36:00 -05:00

315 lines
8.8 KiB
Go

package agent
import (
"io"
"testing"
"github.com/sirupsen/logrus"
"github.com/sirupsen/logrus/hooks/test"
"github.com/stretchr/testify/assert"
)
// ValidationHistory test helpers
const (
testKey string = "test-cluster"
testID string = "test"
testLogPrefix string = "Test: "
validationsInfoSuccess string = "{\"test\":[{\"id\":\"test\",\"status\":\"success\",\"message\":\"The validation succeeded\"}]}"
validationsInfoFailure string = "{\"test\":[{\"id\":\"test\",\"status\":\"failure\",\"message\":\"The validation failed\"}]}"
)
func TestUpdateValidationHistory(t *testing.T) {
tests := []struct {
name string
validationsInfo string
inputHistory map[string]*validationResultHistory
expectedResult map[string]*validationResultHistory
}{
{
name: "success-first-seen",
validationsInfo: validationsInfoSuccess,
inputHistory: map[string]*validationResultHistory{
"test": {
numFailures: 0,
seen: false,
currentStatus: "",
currentMessage: "",
previousStatus: "",
previousMessage: "",
},
},
expectedResult: map[string]*validationResultHistory{
"test": {
numFailures: 0,
seen: true,
currentStatus: "success",
currentMessage: "The validation succeeded",
previousStatus: "",
previousMessage: "",
},
},
},
{
name: "success-no-change",
validationsInfo: validationsInfoSuccess,
inputHistory: map[string]*validationResultHistory{
"test": {
numFailures: 0,
seen: true,
currentStatus: "success",
currentMessage: "The validation succeeded",
previousStatus: "",
previousMessage: "",
},
},
expectedResult: map[string]*validationResultHistory{
"test": {
numFailures: 0,
seen: true,
currentStatus: "success",
currentMessage: "The validation succeeded",
previousStatus: "success",
previousMessage: "The validation succeeded",
},
},
},
{
name: "failure-first-seen",
validationsInfo: validationsInfoFailure,
inputHistory: map[string]*validationResultHistory{
"test": {
numFailures: 0,
seen: false,
currentStatus: "",
currentMessage: "",
previousStatus: "",
previousMessage: "",
},
},
expectedResult: map[string]*validationResultHistory{
"test": {
numFailures: 1,
seen: true,
currentStatus: "failure",
currentMessage: "The validation failed",
previousStatus: "",
previousMessage: "",
},
},
},
{
name: "failure-no-change",
validationsInfo: validationsInfoFailure,
inputHistory: map[string]*validationResultHistory{
"test": {
numFailures: 0,
seen: true,
currentStatus: "failure",
currentMessage: "The validation failed",
previousStatus: "",
previousMessage: "",
},
},
expectedResult: map[string]*validationResultHistory{
"test": {
numFailures: 1,
seen: true,
currentStatus: "failure",
currentMessage: "The validation failed",
previousStatus: "failure",
previousMessage: "The validation failed",
},
},
},
{
name: "success-after-failure",
validationsInfo: validationsInfoSuccess,
inputHistory: map[string]*validationResultHistory{
"test": {
numFailures: 1,
seen: true,
currentStatus: "failure",
currentMessage: "The validation failed",
previousStatus: "failure",
previousMessage: "The validation failed",
},
},
expectedResult: map[string]*validationResultHistory{
"test": {
numFailures: 1,
seen: true,
currentStatus: "success",
currentMessage: "The validation succeeded",
previousStatus: "failure",
previousMessage: "The validation failed",
},
},
},
{
name: "failure-after-success",
validationsInfo: validationsInfoFailure,
inputHistory: map[string]*validationResultHistory{
"test": {
numFailures: 0,
seen: true,
currentStatus: "success",
currentMessage: "The validation succeeded",
previousStatus: "success",
previousMessage: "The validation succeeded",
},
},
expectedResult: map[string]*validationResultHistory{
"test": {
numFailures: 1,
seen: true,
currentStatus: "failure",
currentMessage: "The validation failed",
previousStatus: "success",
previousMessage: "The validation succeeded",
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Test logger
logger := &logrus.Logger{
Out: io.Discard,
Formatter: new(logrus.TextFormatter),
Hooks: make(logrus.LevelHooks),
Level: logrus.DebugLevel,
}
actualResult, err := updateValidationResultHistory(testLogPrefix, tt.validationsInfo, tt.inputHistory, logger, nil)
assert.Equal(t, tt.expectedResult, actualResult)
assert.Nil(t, err)
})
}
}
func TestLogValidationHistory(t *testing.T) {
tests := []struct {
name string
inputHistory *validationResultHistory
expectedResult *logrus.Entry
}{
{
name: "default-case-not-seen",
inputHistory: &validationResultHistory{
numFailures: 0,
seen: false,
currentStatus: "test",
currentMessage: "This is the default validation case",
previousStatus: "",
previousMessage: "",
},
expectedResult: &logrus.Entry{Level: logrus.TraceLevel, Message: "Test: This is the default validation case"},
},
{
name: "default-case-seen",
inputHistory: &validationResultHistory{
numFailures: 0,
seen: true,
currentStatus: "test",
currentMessage: "This is the default validation case",
previousStatus: "",
previousMessage: "",
},
expectedResult: &logrus.Entry{Level: logrus.TraceLevel, Message: "Test: This is the default validation case"},
},
{
name: "success-first-seen",
inputHistory: &validationResultHistory{
numFailures: 0,
seen: false,
currentStatus: "success",
currentMessage: "The validation succeeded",
previousStatus: "",
previousMessage: "",
},
expectedResult: &logrus.Entry{Level: logrus.DebugLevel, Message: "Test: The validation succeeded"},
},
{
name: "success-no-change",
inputHistory: &validationResultHistory{
numFailures: 0,
seen: true,
currentStatus: "success",
currentMessage: "The validation succeeded",
previousStatus: "success",
previousMessage: "The validation succeeded",
},
expectedResult: nil,
},
{
name: "failure-first-seen",
inputHistory: &validationResultHistory{
numFailures: 0,
seen: false,
currentStatus: "failure",
currentMessage: "The validation failed",
previousStatus: "",
previousMessage: "",
},
expectedResult: &logrus.Entry{Level: logrus.WarnLevel, Message: "Test: The validation failed"},
},
{
name: "failure-no-change",
inputHistory: &validationResultHistory{
numFailures: 1,
seen: true,
currentStatus: "failure",
currentMessage: "The validation failed",
previousStatus: "failure",
previousMessage: "The validation failed",
},
expectedResult: nil,
},
{
name: "success-after-failure",
inputHistory: &validationResultHistory{
numFailures: 1,
seen: true,
currentStatus: "success",
currentMessage: "The validation succeeded",
previousStatus: "failure",
previousMessage: "The validation failed",
},
expectedResult: &logrus.Entry{Level: logrus.InfoLevel, Message: "Test: The validation succeeded"},
},
{
name: "failure-after-success",
inputHistory: &validationResultHistory{
numFailures: 1,
seen: true,
currentStatus: "failure",
currentMessage: "The validation failed",
previousStatus: "success",
previousMessage: "The validation succeeded",
},
expectedResult: &logrus.Entry{Level: logrus.WarnLevel, Message: "Test: The validation failed"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Test logger
logger := &logrus.Logger{
Out: io.Discard,
Formatter: new(logrus.TextFormatter),
Hooks: make(logrus.LevelHooks),
Level: logrus.TraceLevel,
}
var hook = test.NewLocal(logger)
logValidationHistory(testLogPrefix, tt.inputHistory, logger, nil)
actualResult := hook.LastEntry()
if actualResult == nil {
assert.Equal(t, tt.expectedResult, actualResult)
} else {
assert.Equal(t, tt.expectedResult.Level, actualResult.Level)
assert.Equal(t, tt.expectedResult.Message, actualResult.Message)
}
})
}
}