modelRT/model/measurement_data_object_ini...

111 lines
3.6 KiB
Go
Raw Normal View History

package model
import (
"testing"
"modelRT/orm"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestBuildMeasurementDataObjectHashesCreatesAllTokenForms(t *testing.T) {
record := measurementInitializationRecordForTest()
hashes, err := buildMeasurementDataObjectHashes([]MeasurementInitializationRecord{record})
require.NoError(t, err)
require.Len(t, hashes, 3)
fullToken := "grid000.zone000.station000.220kV_xuefulu1.CTA.bay.IA_rms"
fourPartToken := "220kV_xuefulu1.CTA.bay.IA_rms"
twoPartToken := "220kV_xuefulu1.IA_rms"
assert.Equal(t, fullToken, hashes[0].Key)
assert.Equal(t, fourPartToken, hashes[1].Key)
assert.Equal(t, twoPartToken, hashes[2].Key)
fields := hashes[0].Fields
assert.NotContains(t, fields, "value")
assert.Equal(t, int16(1), fields["mode"])
assert.Equal(t, "MEASUREMENT", fields["meta"])
assert.Equal(t, "TM", fields["type"])
assert.Equal(t, twoPartToken, fields["name"])
assert.Equal(t, "A相保护电流有效值", fields["description"])
assert.Equal(t, fullToken, fields["id"])
assert.Equal(t, 1, fields["size"])
assert.Equal(t, `{"io_address":{"channel":"TM1","device":"CTA","dtype":1,"option":"rms","station":"001"},"type":1}`, fields["data_source"])
assert.Equal(t, `{}`, fields["event_plan"])
assert.Equal(t, `{"ct":{"index":0,"polarity":1,"ratio":1250}}`, fields["binding"])
assert.Equal(t, fields, hashes[1].Fields)
assert.Equal(t, fields, hashes[2].Fields)
}
func TestBuildMeasurementDataObjectHashesRejectsAmbiguousShortToken(t *testing.T) {
first := measurementInitializationRecordForTest()
second := first
second.GridTag = "grid001"
second.ZoneTag = "zone001"
second.StationTag = "station001"
second.ComponentUUID = "component-uuid-2"
second.ComponentTag = "CTB"
second.MeasurementID = 2
_, err := buildMeasurementDataObjectHashes([]MeasurementInitializationRecord{first, second})
require.Error(t, err)
assert.Contains(t, err.Error(), "ambiguous measurement token")
assert.Contains(t, err.Error(), "220kV_xuefulu1.IA_rms")
}
func TestBuildMeasurementDataObjectHashesRejectsUnsupportedMeasurementType(t *testing.T) {
record := measurementInitializationRecordForTest()
record.MeasurementType = 5
_, err := buildMeasurementDataObjectHashes([]MeasurementInitializationRecord{record})
require.Error(t, err)
assert.Contains(t, err.Error(), "derive type")
assert.Contains(t, err.Error(), "unsupported measurement type 5")
}
func TestBuildMeasurementDataObjectHashesRejectsInvalidWindowSize(t *testing.T) {
record := measurementInitializationRecordForTest()
record.MeasurementSize = 0
_, err := buildMeasurementDataObjectHashes([]MeasurementInitializationRecord{record})
require.Error(t, err)
assert.Contains(t, err.Error(), "window size must be greater than 0")
}
func measurementInitializationRecordForTest() MeasurementInitializationRecord {
return MeasurementInitializationRecord{
GridTag: "grid000",
ZoneTag: "zone000",
StationTag: "station000",
ComponentUUID: "component-uuid-1",
ComponentNSPath: "220kV_xuefulu1",
ComponentTag: "CTA",
MeasurementID: 1,
MeasurementTag: "IA_rms",
MeasurementName: "A相保护电流有效值",
MeasurementType: 0,
MeasurementMode: 1,
MeasurementSize: 1,
MeasurementDataSource: orm.JSONMap{
"type": float64(1),
"io_address": map[string]any{
"station": "001",
"device": "CTA",
"channel": "TM1",
"dtype": float64(1),
"option": "rms",
},
},
MeasurementEventPlan: orm.JSONMap{},
MeasurementBinding: orm.JSONMap{
"ct": map[string]any{
"index": float64(0),
"ratio": float64(1250),
"polarity": float64(1),
},
},
}
}