| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package tools
- import (
- "testing"
- "time"
- "github.com/mark3labs/mcp-go/mcp"
- "fwh-toolbox-server/domain"
- "fwh-toolbox-server/dto"
- faultRecordFile "fwh-toolbox-server/function/FaultRecordFile"
- proto "fwh-toolbox-server/function/FaultRecordProtocol"
- )
- func TestFrTaskState(t *testing.T) {
- cases := []struct {
- status domain.FaultRecordOpStatus
- want mcp.TaskStatus
- isError bool
- }{
- {domain.FaultRecordStatusPending, mcp.TaskStatusWorking, false},
- {domain.FaultRecordStatusUploading, mcp.TaskStatusWorking, false},
- {domain.FaultRecordStatusDone, mcp.TaskStatusCompleted, false},
- {domain.FaultRecordStatusItemFailed, mcp.TaskStatusCompleted, false},
- {domain.FaultRecordStatusCancelled, mcp.TaskStatusCancelled, true},
- {domain.FaultRecordStatusTimeout, mcp.TaskStatusFailed, true},
- {domain.FaultRecordStatusGatewayLocked, mcp.TaskStatusFailed, true},
- {domain.FaultRecordStatusError, mcp.TaskStatusFailed, true},
- }
- for _, c := range cases {
- d := &dto.FaultRecordOpDetail{FaultRecordOpSummary: dto.FaultRecordOpSummary{ID: "op1", Kind: "device_info", Status: string(c.status), CreatedAt: time.Now()}}
- st := frTaskState(d)
- if st.Status != c.want {
- t.Errorf("%s: status = %s,期望 %s", c.status, st.Status, c.want)
- }
- if st.Message == "" {
- t.Errorf("%s: 缺少状态说明", c.status)
- }
- if st.Status.IsTerminal() && (st.Result == nil || st.Result.IsError != c.isError) {
- t.Errorf("%s: 终态结果不符合预期(isError 期望 %v):%+v", c.status, c.isError, st.Result)
- }
- }
- }
- func TestFrRequest(t *testing.T) {
- req, err := frRequest(frDeviceArgs{SN: "G1"}, domain.FaultRecordOpDeviceInfo)
- if err != nil || req.Env != "prod" || req.DeviceType != proto.DeviceTypeAGate || req.GatewaySn != "G1" || req.Kind != "device_info" {
- t.Errorf("默认 aGate、prod:%+v %v", req, err)
- }
- req, err = frRequest(frDeviceArgs{SN: "G1", Env: "test", DeviceKind: proto.DeviceKindAPowerMPPT, DeviceSn: "P1"}, domain.FaultRecordOpParamRead)
- if err != nil || req.DeviceType != proto.DeviceTypeMPPT || req.DeviceSn != "P1" || req.Env != "test" {
- t.Errorf("aPowerMPPT 应映射为 mppt:%+v %v", req, err)
- }
- for _, bad := range []frDeviceArgs{
- {}, // 缺 sn
- {SN: "G1", Env: "dev"}, // 环境不对
- {SN: "G1", DeviceKind: "aPowerPE"}, // 非 aGate 缺 deviceSn
- {SN: "G1", DeviceKind: "dif"}, // 不支持的设备
- } {
- if _, err := frRequest(bad, domain.FaultRecordOpDeviceInfo); err == nil {
- t.Errorf("应拒绝:%+v", bad)
- }
- }
- }
- func TestWaveformSummary(t *testing.T) {
- w := faultRecordFile.Waveform{Points: 4, PrePoints: 2, SampleFrequency: 1000, Channels: []faultRecordFile.WaveformChannel{
- {Number: 0, Meaning: 0x0101, Values: []int16{3, -5, 7, 1}},
- }}
- s := waveformSummary(w)
- ch := s["channels"].([]map[string]any)[0]
- if ch["channel"] != "ch0 0x0101" || ch["min"] != int16(-5) || ch["max"] != int16(7) || ch["atTrigger"] != int16(7) {
- t.Errorf("通道统计不符合预期:%+v", ch)
- }
- if _, hasValues := ch["values"]; hasValues {
- t.Error("概要不应包含逐点数据")
- }
- }
|