diff --git a/models/alarms_test.go b/models/alarms_test.go index 8b7aedcb73650a339c7d95b1736eb6ccbc2477df..04386f30d275b8790bfff375858e4fb43fc97273 100644 --- a/models/alarms_test.go +++ b/models/alarms_test.go @@ -7,26 +7,147 @@ */ package models -import "testing" +import ( + "fmt" + "testing" -func TestAlarmsGet(t *testing.T) { - result := AlarmsGet() - if result["action"] != true { - t.Fatal("Get alarm failed") + "gitee.com/openeuler/ha-api/utils" + "github.com/chai2010/gettext-go" + "github.com/stretchr/testify/assert" +) + +func TestAlarmsGet_Success(t *testing.T) { + // 备份并替换 RunCommand + originalRunCommand := utils.RunCommand + defer func() { utils.RunCommand = originalRunCommand }() + + // 模拟返回有效 XML + utils.RunCommand = func(cmd string) ([]byte, error) { + xml := ` + + + + + + + + + + + + + + + + ` + return []byte(xml), nil } + + response := AlarmsGet() + + // 验证结果 + assert.True(t, response.Action) + assert.True(t, response.Data.Flag) // switCh=on 应映射为 true + assert.Equal(t, "test@example.com", response.Data.Sender) + assert.Equal(t, "smtp.example.com", response.Data.Smtp) + assert.Equal(t, 587.0, response.Data.Port) + assert.Equal(t, []string{"user1@example.com", "user2@example.com"}, response.Data.Receiver) } -func TestAlarmsSet(t *testing.T) { - alarmData := map[string]interface{}{ - "flag": true, - "smtp": "smtp.163.com", - "port": 25, - "sender": "testUser@163.com", - "password": "testPasswd", +func TestAlarmsGet_CommandError(t *testing.T) { + originalRunCommand := utils.RunCommand + defer func() { utils.RunCommand = originalRunCommand }() + + // 模拟命令返回错误 + utils.RunCommand = func(cmd string) ([]byte, error) { + return nil, fmt.Errorf("command failed") } - alarmData["receiver"] = []string{"test@163.com", "test2@163.com"} - result := AlarmsSet(alarmData) - if result["action"] != true { - t.Fatal("Set alarm failed") + + response := AlarmsGet() + + // 即使出错,Action 仍为 true(根据代码逻辑) + assert.True(t, response.Action) + assert.Empty(t, response.Data.Sender) // 数据应为默认零值 +} + +func TestAlarmsGet_PasswordDecryptError(t *testing.T) { + originalRunCommand := utils.RunCommand + defer func() { utils.RunCommand = originalRunCommand }() + + // 模拟 XML 返回加密密码,但解密失败 + utils.RunCommand = func(cmd string) ([]byte, error) { + if cmd == utils.CmdCibQueryConfig { + xml := ` + + + + + + + + + + ` + return []byte(xml), nil + } else if cmd == "/usr/bin/pwd_decode encrypted_pwd" { + return []byte("the parameter is less\n"), nil // 解密失败 + } + return nil, nil } + + response := AlarmsGet() + + assert.True(t, response.Action) + assert.Equal(t, "", response.Data.Password) // 解密失败时 password 应为空 +} + +func TestAlarmsSet_Success(t *testing.T) { + originalRunCommand := utils.RunCommand + defer func() { utils.RunCommand = originalRunCommand }() + + // 记录实际执行的命令 + var executedCommands []string + utils.RunCommand = func(cmd string) ([]byte, error) { + executedCommands = append(executedCommands, cmd) + return []byte("success"), nil + } + + data := AlarmData{ + Flag: true, + Sender: "admin@example.com", + Smtp: "smtp.example.com", + Password: "secret", + Port: 465, + Receiver: []string{"user1@example.com", "user2@example.com"}, + } + + result := AlarmsSet(data) + + // 验证返回结果 + assert.True(t, result["action"].(bool)) +} + +func TestAlarmsSet_CommandFailure(t *testing.T) { + originalRunCommand := utils.RunCommand + defer func() { utils.RunCommand = originalRunCommand }() + + utils.RunCommand = func(cmd string) ([]byte, error) { + return nil, fmt.Errorf("permission denied") + } + + data := AlarmData{Sender: "test@example.com"} + result := AlarmsSet(data) + + assert.False(t, result["action"].(bool)) + assert.Equal(t, gettext.Gettext("Set alarm failed"), result["error"]) +} + +func TestIsDataEmpty(t *testing.T) { + // 空数据 + emptyData := AlarmData{} + assert.True(t, isDataEmpty(emptyData)) + + // 非空数据 + nonEmptyData := AlarmData{Sender: "test@example.com"} + assert.False(t, isDataEmpty(nonEmptyData)) }