dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/event_test.go (about) 1 // 2 // Copyright (C) 2020-2021 IOTech Ltd 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 6 package dtos 7 8 import ( 9 "fmt" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 14 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common" 15 dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common" 16 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/models" 17 18 "github.com/stretchr/testify/assert" 19 ) 20 21 var valid = models.Event{ 22 Id: TestUUID, 23 DeviceName: TestDeviceName, 24 ProfileName: TestDeviceProfileName, 25 SourceName: TestSourceName, 26 Origin: TestTimestamp, 27 Tags: map[string]interface{}{ 28 "GatewayID": "Houston-0001", 29 "latitude": map[string]interface{}{ 30 "degrees": 25.0, 31 "minute": 1.0, 32 "second": 26.6268000000062, 33 }, 34 "longitude": map[string]interface{}{ 35 "degree": 121.0, 36 "minute": 31.0, 37 "second": 19.600799999980154, 38 }, 39 }, 40 } 41 42 var expectedDTO = Event{ 43 Versionable: dtoCommon.Versionable{ApiVersion: common.ApiVersion}, 44 Id: TestUUID, 45 DeviceName: TestDeviceName, 46 ProfileName: TestDeviceProfileName, 47 SourceName: TestSourceName, 48 Origin: TestTimestamp, 49 Tags: map[string]interface{}{ 50 "GatewayID": "Houston-0001", 51 "latitude": map[string]interface{}{ 52 "degrees": 25.0, 53 "minute": 1.0, 54 "second": 26.6268000000062, 55 }, 56 "longitude": map[string]interface{}{ 57 "degree": 121.0, 58 "minute": 31.0, 59 "second": 19.600799999980154, 60 }, 61 }, 62 } 63 64 func TestFromEventModelToDTO(t *testing.T) { 65 tests := []struct { 66 name string 67 event models.Event 68 }{ 69 {"success to convert from event model to DTO ", valid}, 70 } 71 for _, tt := range tests { 72 t.Run(tt.name, func(t *testing.T) { 73 result := FromEventModelToDTO(tt.event) 74 assert.Equal(t, expectedDTO, result, "FromEventModelToDTO did not result in expected Event DTO.") 75 }) 76 } 77 } 78 79 func TestEvent_ToXML(t *testing.T) { 80 var expectedDTO = Event{ 81 Versionable: dtoCommon.Versionable{ApiVersion: common.ApiVersion}, 82 Id: TestUUID, 83 DeviceName: TestDeviceName, 84 ProfileName: TestDeviceProfileName, 85 SourceName: TestSourceName, 86 Origin: TestTimestamp, 87 Tags: map[string]interface{}{ 88 "GatewayID": "Houston-0001", 89 "Latitude": "29.630771", 90 "Longitude": "-95.377603", 91 }, 92 } 93 // Since the order in map is random we have to verify the individual items exists without depending on order 94 contains := []string{ 95 "<Event><ApiVersion>v3</ApiVersion><Id>7a1707f0-166f-4c4b-bc9d-1d54c74e0137</Id><DeviceName>TestDevice</DeviceName><ProfileName>TestDeviceProfileName</ProfileName><SourceName>TestSourceName</SourceName><Origin>1594963842</Origin><Tags>", 96 "<GatewayID>Houston-0001</GatewayID>", 97 "<Latitude>29.630771</Latitude>", 98 "<Longitude>-95.377603</Longitude>", 99 "</Tags></Event>", 100 } 101 actual, _ := expectedDTO.ToXML() 102 for _, item := range contains { 103 assert.Contains(t, actual, item, fmt.Sprintf("Missing item '%s'", item)) 104 } 105 } 106 107 func TestNewEvent(t *testing.T) { 108 expectedApiVersion := common.ApiVersion 109 expectedDeviceName := TestDeviceName 110 expectedProfileName := TestDeviceProfileName 111 expectedSourceName := TestSourceName 112 113 actual := NewEvent(expectedProfileName, expectedDeviceName, expectedSourceName) 114 115 assert.Equal(t, expectedApiVersion, actual.ApiVersion) 116 assert.NotEmpty(t, actual.Id) 117 assert.Equal(t, expectedSourceName, actual.SourceName) 118 assert.Equal(t, expectedProfileName, actual.ProfileName) 119 assert.Equal(t, expectedDeviceName, actual.DeviceName) 120 assert.Zero(t, len(actual.Readings)) 121 assert.NotZero(t, actual.Origin) 122 } 123 124 func TestEvent_AddSimpleReading(t *testing.T) { 125 expectedDeviceName := TestDeviceName 126 expectedProfileName := TestDeviceProfileName 127 expectedSourceName := TestSourceName 128 expectedReadingDetails := []struct { 129 inputValue interface{} 130 resourceName string 131 valueType string 132 value string 133 }{ 134 {int32(12345), "myInt32", common.ValueTypeInt32, "12345"}, 135 {float32(12345.4567), "myFloat32", common.ValueTypeFloat32, "1.234546e+04"}, 136 {[]bool{false, true, false}, "myBoolArray", common.ValueTypeBoolArray, "[false, true, false]"}, 137 } 138 expectedReadingsCount := len(expectedReadingDetails) 139 140 target := NewEvent(expectedProfileName, expectedDeviceName, expectedSourceName) 141 for _, expected := range expectedReadingDetails { 142 err := target.AddSimpleReading(expected.resourceName, expected.valueType, expected.inputValue) 143 require.NoError(t, err) 144 } 145 146 require.Equal(t, expectedReadingsCount, len(target.Readings)) 147 148 for index, actual := range target.Readings { 149 assert.NotEmpty(t, actual.Id) 150 assert.Equal(t, expectedProfileName, actual.ProfileName) 151 assert.Equal(t, expectedDeviceName, actual.DeviceName) 152 assert.Equal(t, expectedReadingDetails[index].resourceName, actual.ResourceName) 153 assert.Equal(t, expectedReadingDetails[index].valueType, actual.ValueType) 154 assert.Equal(t, expectedReadingDetails[index].value, actual.Value) 155 assert.NotZero(t, actual.Origin) 156 } 157 } 158 159 func TestEvent_AddBinaryReading(t *testing.T) { 160 expectedDeviceName := TestDeviceName 161 expectedProfileName := TestDeviceProfileName 162 expectedSourceName := TestSourceName 163 expectedResourceName := TestDeviceResourceName 164 expectedValueType := common.ValueTypeBinary 165 expectedValue := []byte("Hello World") 166 expectedMediaType := "application/text" 167 expectedReadingsCount := 1 168 169 target := NewEvent(expectedProfileName, expectedDeviceName, expectedSourceName) 170 target.AddBinaryReading(expectedResourceName, expectedValue, expectedMediaType) 171 172 require.Equal(t, expectedReadingsCount, len(target.Readings)) 173 actual := target.Readings[0] 174 assert.NotEmpty(t, actual.Id) 175 assert.Equal(t, expectedProfileName, actual.ProfileName) 176 assert.Equal(t, expectedDeviceName, actual.DeviceName) 177 assert.Equal(t, expectedResourceName, actual.ResourceName) 178 assert.Equal(t, expectedValueType, actual.ValueType) 179 assert.Equal(t, expectedValue, actual.BinaryValue) 180 assert.NotZero(t, actual.Origin) 181 } 182 183 func TestEvent_AddObjectReading(t *testing.T) { 184 expectedDeviceName := TestDeviceName 185 expectedProfileName := TestDeviceProfileName 186 expectedSourceName := TestSourceName 187 expectedResourceName := TestDeviceResourceName 188 expectedValueType := common.ValueTypeObject 189 expectedValue := map[string]interface{}{ 190 "Attr1": "yyz", 191 "Attr2": -45, 192 "Attr3": []interface{}{255, 1, 0}, 193 } 194 expectedReadingsCount := 1 195 196 target := NewEvent(expectedProfileName, expectedDeviceName, expectedSourceName) 197 target.AddObjectReading(expectedResourceName, expectedValue) 198 199 require.Equal(t, expectedReadingsCount, len(target.Readings)) 200 actual := target.Readings[0] 201 assert.NotEmpty(t, actual.Id) 202 assert.Equal(t, expectedProfileName, actual.ProfileName) 203 assert.Equal(t, expectedDeviceName, actual.DeviceName) 204 assert.Equal(t, expectedResourceName, actual.ResourceName) 205 assert.Equal(t, expectedValueType, actual.ValueType) 206 assert.Equal(t, expectedValue, actual.ObjectValue) 207 assert.NotZero(t, actual.Origin) 208 }