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))
}