diff --git a/pkg/custompluginmonitor/custom_plugin_monitor.go b/pkg/custompluginmonitor/custom_plugin_monitor.go index ea383d7c9..00e060135 100644 --- a/pkg/custompluginmonitor/custom_plugin_monitor.go +++ b/pkg/custompluginmonitor/custom_plugin_monitor.go @@ -317,7 +317,13 @@ func initialConditions(defaults []types.Condition) []types.Condition { conditions := make([]types.Condition, len(defaults)) copy(conditions, defaults) for i := range conditions { - conditions[i].Status = types.False + switch conditions[i].Status { + case types.True, types.False, types.Unknown: + default: + klog.Warningf("Condition %q has invalid initial status %q, defaulting to %q", + conditions[i].Type, conditions[i].Status, types.False) + conditions[i].Status = types.False + } conditions[i].Transition = time.Now() } return conditions diff --git a/pkg/custompluginmonitor/custom_plugin_monitor_test.go b/pkg/custompluginmonitor/custom_plugin_monitor_test.go index 7137e30cb..dd76b5439 100644 --- a/pkg/custompluginmonitor/custom_plugin_monitor_test.go +++ b/pkg/custompluginmonitor/custom_plugin_monitor_test.go @@ -22,6 +22,7 @@ import ( "github.com/stretchr/testify/assert" "k8s.io/node-problem-detector/pkg/problemdaemon" + "k8s.io/node-problem-detector/pkg/types" ) func TestRegistration(t *testing.T) { @@ -29,3 +30,24 @@ func TestRegistration(t *testing.T) { func() { problemdaemon.GetProblemDaemonHandlerOrDie("custom-plugin-monitor") }, "Custom plugin monitor failed to register itself as a problem daemon.") } + +func TestInitialConditions(t *testing.T) { + tests := []struct { + name string + inputStatus types.ConditionStatus + expectedStatus types.ConditionStatus + }{ + {name: "TestTrue", inputStatus: types.True, expectedStatus: types.True}, + {name: "TestFalse", inputStatus: types.False, expectedStatus: types.False}, + {name: "TestUnknown", inputStatus: types.Unknown, expectedStatus: types.Unknown}, + {name: "TestUnset", inputStatus: "", expectedStatus: types.False}, + {name: "TestInvalid", inputStatus: "garbage", expectedStatus: types.False}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + defaults := []types.Condition{{Type: "TestCondition", Status: tt.inputStatus}} + conditions := initialConditions(defaults) + assert.Equal(t, tt.expectedStatus, conditions[0].Status) + }) + } +}