[MM-65830] Fix mmctl system status exit code for health check failures (#33970) (#34069)

Automatic Merge
Этот коммит содержится в:
Mattermost Build
2025-10-06 14:43:38 +03:00
коммит произвёл GitHub
родитель 9dd2c6f54f
Коммит 4b56488fcb
3 изменённых файлов: 144 добавлений и 6 удалений

Просмотреть файл

@@ -180,7 +180,31 @@ func (s *MmctlUnitTestSuite) TestServerVersionCmd() {
}
func (s *MmctlUnitTestSuite) TestServerStatusCmd() {
s.Run("Print server status", func() {
s.Run("Print server status - all healthy", func() {
printer.Clean()
expectedStatus := map[string]string{
"status": model.StatusOk,
"database_status": model.StatusOk,
"filestore_status": model.StatusOk,
}
s.client.
EXPECT().
GetPingWithOptions(context.TODO(), model.SystemPingOptions{
FullStatus: true,
RESTSemantics: true,
}).
Return(expectedStatus, &model.Response{}, nil).
Times(1)
err := systemStatusCmdF(s.client, &cobra.Command{}, []string{})
s.Require().Nil(err)
s.Require().Len(printer.GetErrorLines(), 0)
s.Require().Len(printer.GetLines(), 1)
s.Require().Equal(printer.GetLines()[0], expectedStatus)
})
s.Run("Status fields missing - should succeed", func() {
printer.Clean()
expectedStatus := map[string]string{"status": "OK"}
@@ -217,6 +241,104 @@ func (s *MmctlUnitTestSuite) TestServerStatusCmd() {
s.Require().Len(printer.GetErrorLines(), 0)
s.Require().Len(printer.GetLines(), 0)
})
s.Run("Empty string database status is ignored", func() {
printer.Clean()
emptyDbStatus := map[string]string{
"status": model.StatusOk,
"database_status": "",
"filestore_status": model.StatusOk,
}
s.client.
EXPECT().
GetPingWithOptions(context.TODO(), model.SystemPingOptions{
FullStatus: true,
RESTSemantics: true,
}).
Return(emptyDbStatus, &model.Response{}, nil).
Times(1)
err := systemStatusCmdF(s.client, &cobra.Command{}, []string{})
s.Require().Nil(err)
s.Require().Len(printer.GetErrorLines(), 0)
s.Require().Len(printer.GetLines(), 1)
})
s.Run("Unhealthy server status should return true", func() {
printer.Clean()
unhealthyStatus := map[string]string{
"status": model.StatusUnhealthy,
"database_status": model.StatusOk,
"filestore_status": model.StatusOk,
}
s.client.
EXPECT().
GetPingWithOptions(context.TODO(), model.SystemPingOptions{
FullStatus: true,
RESTSemantics: true,
}).
Return(unhealthyStatus, &model.Response{}, nil).
Times(1)
err := systemStatusCmdF(s.client, &cobra.Command{}, []string{})
s.Require().Error(err)
s.Require().Contains(err.Error(), "server status is unhealthy")
s.Require().Len(printer.GetErrorLines(), 0)
s.Require().Len(printer.GetLines(), 1)
s.Require().Equal(printer.GetLines()[0], unhealthyStatus)
})
s.Run("Unhealthy database status should return true", func() {
printer.Clean()
unhealthyStatus := map[string]string{
"status": model.StatusOk,
"database_status": model.StatusUnhealthy,
"filestore_status": model.StatusOk,
}
s.client.
EXPECT().
GetPingWithOptions(context.TODO(), model.SystemPingOptions{
FullStatus: true,
RESTSemantics: true,
}).
Return(unhealthyStatus, &model.Response{}, nil).
Times(1)
err := systemStatusCmdF(s.client, &cobra.Command{}, []string{})
s.Require().Error(err)
s.Require().Contains(err.Error(), "database status is unhealthy")
s.Require().Len(printer.GetErrorLines(), 0)
s.Require().Len(printer.GetLines(), 1)
s.Require().Equal(printer.GetLines()[0], unhealthyStatus)
})
s.Run("Unhealthy filestore status should return true", func() {
printer.Clean()
unhealthyStatus := map[string]string{
"status": model.StatusOk,
"database_status": model.StatusOk,
"filestore_status": model.StatusUnhealthy,
}
s.client.
EXPECT().
GetPingWithOptions(context.TODO(), model.SystemPingOptions{
FullStatus: true,
RESTSemantics: true,
}).
Return(unhealthyStatus, &model.Response{}, nil).
Times(1)
err := systemStatusCmdF(s.client, &cobra.Command{}, []string{})
s.Require().Error(err)
s.Require().Contains(err.Error(), "filestore status is unhealthy")
s.Require().Len(printer.GetErrorLines(), 0)
s.Require().Len(printer.GetLines(), 1)
s.Require().Equal(printer.GetLines()[0], unhealthyStatus)
})
}
func (s *MmctlUnitTestSuite) TestSupportPacketCmdF() {