github.com/futurehomeno/fimpgo@v1.14.0/sync_client_test.go (about) 1 package fimpgo 2 3 import ( 4 "sync/atomic" 5 "testing" 6 "time" 7 8 log "github.com/sirupsen/logrus" 9 ) 10 11 func TestSyncClient_Connect(t *testing.T) { 12 log.SetLevel(log.DebugLevel) 13 mqtt := NewMqttTransport("tcp://localhost:1883", "fimpgotest", "", "", true, 1, 1) 14 err := mqtt.Start() 15 t.Log("Connected") 16 if err != nil { 17 t.Error("Error connecting to broker ", err) 18 } 19 inboundChan := make(MessageCh, 20) 20 // starting responder 21 go func(msgChanS MessageCh) { 22 for msg := range msgChanS { 23 if msg.Payload.Type == "cmd.sensor.get_report" { 24 t.Log("Responde . New message. uid = ", msg.Payload.UID) 25 responseMsg := NewFloatMessage("evt.sensor.report", "temp_sensor", float64(40.0), nil, nil, msg.Payload) 26 t.Log("Correlation id = ", responseMsg.CorrelationID) 27 mqtt.PublishToTopic("pt:j1/mt:evt/rt:app/rn:testapp/ad:1", responseMsg) 28 } 29 } 30 }(inboundChan) 31 32 mqtt.Subscribe("pt:j1/mt:cmd/rt:app/rn:testapp/ad:1") 33 mqtt.RegisterChannel("test", inboundChan) 34 35 // Actual test 36 syncClient := NewSyncClientV2(nil, 20, 20) 37 syncClient.Connect("tcp://localhost:1883", "fimpgotest2", "", "", true, 1, 1) 38 syncClient.AddSubscription("pt:j1/mt:evt/rt:app/rn:testapp/ad:1") 39 var counter int32 40 iterations := 1000 41 for it := 0; it < iterations; it++ { 42 i := it 43 go func() { 44 log.Debug("Iteration = ", i) 45 msg := NewFloatMessage("cmd.sensor.get_report", "temp_sensor", float64(35.5), nil, nil, nil) 46 response, err := syncClient.SendFimp("pt:j1/mt:cmd/rt:app/rn:testapp/ad:1", msg, 10) 47 if err != nil { 48 t.Error("Error", err) 49 t.Fail() 50 } 51 val, _ := response.GetFloatValue() 52 if val != 40.0 { 53 t.Error("Wong result") 54 t.Fail() 55 } 56 atomic.AddInt32(&counter, 1) 57 log.Debug("Iteration Done = ", i) 58 }() 59 } 60 61 for int32(iterations) > counter { 62 time.Sleep(1 * time.Second) 63 } 64 65 syncClient.Stop() 66 if counter != int32(iterations) { 67 t.Error("Wong counter value") 68 t.Fail() 69 } 70 t.Log("SyncClientConnect test - OK") 71 72 } 73 74 func TestSyncClient_SendFimp(t *testing.T) { 75 log.SetLevel(log.DebugLevel) 76 mqtt := NewMqttTransport("tcp://localhost:1883", "fimpgotest", "", "", true, 1, 1) 77 err := mqtt.Start() 78 t.Log("Connected") 79 if err != nil { 80 t.Error("Error connecting to broker ", err) 81 } 82 inboundChan := make(MessageCh) 83 // starting responder 84 go func(msgChanS MessageCh) { 85 for msg := range msgChanS { 86 if msg.Payload.Type == "cmd.sensor.get_report" { 87 t.Log("Responde . New message. uid = ", msg.Payload.UID) 88 adr := Address{MsgType: MsgTypeEvt, ResourceType: ResourceTypeApp, ResourceName: "testapp", ResourceAddress: "1"} 89 responseMsg := NewFloatMessage("evt.sensor.report", "temp_sensor", float64(40.0), nil, nil, msg.Payload) 90 t.Log("Correlation id = ", responseMsg.CorrelationID) 91 mqtt.Publish(&adr, responseMsg) 92 } 93 94 } 95 96 }(inboundChan) 97 mqtt.RegisterChannel("test", inboundChan) 98 // Actual test 99 syncClient := NewSyncClient(mqtt) 100 syncClient.AddSubscription("#") 101 counter := 0 102 for i := 0; i < 5; i++ { 103 t.Log("Iteration = ", i) 104 adr := Address{MsgType: MsgTypeCmd, ResourceType: ResourceTypeApp, ResourceName: "testapp", ResourceAddress: "1"} 105 msg := NewFloatMessage("cmd.sensor.get_report", "temp_sensor", float64(35.5), nil, nil, nil) 106 response, err := syncClient.SendFimp(adr.Serialize(), msg, 5) 107 if err != nil { 108 t.Error("Error", err) 109 t.Fail() 110 } 111 val, _ := response.GetFloatValue() 112 if val != 40.0 { 113 t.Error("Wong result") 114 t.Fail() 115 } 116 counter++ 117 118 } 119 syncClient.Stop() 120 if counter != 5 { 121 t.Error("Wong counter value") 122 t.Fail() 123 } 124 t.Log("SyncClient test - OK") 125 } 126 127 func TestSyncClient_SendFimpWithTopicResponse(t *testing.T) { 128 log.SetLevel(log.DebugLevel) 129 mqtt := NewMqttTransport("tcp://localhost:1883", "fimpgotest", "", "", true, 1, 1) 130 err := mqtt.Start() 131 t.Log("Connected") 132 if err != nil { 133 t.Error("Error connecting to broker ", err) 134 } 135 inboundChan := make(MessageCh) 136 // starting message responder 137 go func(msgChanS MessageCh) { 138 for msg := range msgChanS { 139 if msg.Payload.Type == "cmd.sensor.get_report" { 140 t.Log("Responde . New message. uid = ", msg.Payload.UID) 141 adr := Address{MsgType: MsgTypeEvt, ResourceType: ResourceTypeApp, ResourceName: "testapp", ResourceAddress: "1"} 142 responseMsg := NewFloatMessage("evt.sensor.report", "temp_sensor", float64(40.0), nil, nil, nil) 143 t.Log("Correlation id = ", responseMsg.CorrelationID) 144 mqtt.Publish(&adr, responseMsg) 145 } 146 147 } 148 149 }(inboundChan) 150 mqtt.RegisterChannel("test", inboundChan) 151 // Actual test 152 syncClient := NewSyncClient(mqtt) 153 syncClient.AddSubscription("#") 154 counter := 0 155 for i := 0; i < 5; i++ { 156 t.Log("Iteration = ", i) 157 reqAddr := Address{MsgType: MsgTypeCmd, ResourceType: ResourceTypeApp, ResourceName: "testapp", ResourceAddress: "1"} 158 respAddr := Address{MsgType: MsgTypeEvt, ResourceType: ResourceTypeApp, ResourceName: "testapp", ResourceAddress: "1"} 159 160 msg := NewFloatMessage("cmd.sensor.get_report", "temp_sensor", float64(35.5), nil, nil, nil) 161 response, err := syncClient.SendFimpWithTopicResponse(reqAddr.Serialize(), msg, respAddr.Serialize(), "temp_sensor", "evt.sensor.report", 5) 162 if err != nil { 163 t.Error("Error", err) 164 t.Fail() 165 } 166 val, _ := response.GetFloatValue() 167 if val != 40.0 { 168 t.Error("Wong result") 169 t.Fail() 170 } 171 counter++ 172 173 } 174 syncClient.Stop() 175 if counter != 5 { 176 t.Error("Wong counter value") 177 t.Fail() 178 } 179 t.Log("SyncClient test - OK") 180 181 }