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  }