|
|
|
package server
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/hex"
|
|
|
|
"fmt"
|
|
|
|
"net"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"../model"
|
|
|
|
)
|
|
|
|
|
|
|
|
/*
|
|
|
|
Send data to server
|
|
|
|
*/
|
|
|
|
func sendData(conf *model.ServerConfig, data []byte, dur chan<- int64) error {
|
|
|
|
//simulate client
|
|
|
|
stTime := time.Now()
|
|
|
|
|
|
|
|
addr := fmt.Sprintf("%s:%d", conf.IP, conf.Port)
|
|
|
|
conn, err := net.Dial("tcp", addr)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("Error: ", err)
|
|
|
|
dur <- -1
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
defer conn.Close()
|
|
|
|
|
|
|
|
nw, err := conn.Write(data)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("Write error: %+v\n", err)
|
|
|
|
dur <- -1
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
fmt.Println("Packet writen = ", nw)
|
|
|
|
//sleep awhile
|
|
|
|
//time.Sleep(time.Second)
|
|
|
|
|
|
|
|
//read response
|
|
|
|
rep := make([]byte, 20)
|
|
|
|
nr, err := conn.Read(rep)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("Read error: %+v\n", err)
|
|
|
|
dur <- -1
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
fmt.Println("Response -> ", rep[:nr])
|
|
|
|
dur <- time.Now().Sub(stTime).Nanoseconds()
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func TestInvalid(t *testing.T) {
|
|
|
|
//config
|
|
|
|
conf := model.ServerConfig{IP: "127.0.0.1", Port: 4000}
|
|
|
|
|
|
|
|
//test failed data
|
|
|
|
dur := make(chan int64, 1)
|
|
|
|
data3 := []byte{0x08, 0x00, 0x01, 0x02}
|
|
|
|
sendData(&conf, data3, dur)
|
|
|
|
<-dur
|
|
|
|
}
|
|
|
|
|
|
|
|
//start sending data
|
|
|
|
func TestRuptelaReceiver(t *testing.T) {
|
|
|
|
|
|
|
|
//send data
|
|
|
|
data1, _ := hex.DecodeString(
|
|
|
|
"007900000b1a2a5585c30100024e9c036900000f101733208ff45e07b31b570a001009090605011b1a020003001c01ad01021d338e1600000" +
|
|
|
|
"2960000601a41014bc16d004e9c038400000f104fdf20900d20075103b00a001308090605011b1a020003001c01ad01021d33b11600000296" +
|
|
|
|
"0000601a41014bc1ea0028f9")
|
|
|
|
|
|
|
|
data2, _ := hex.DecodeString(
|
|
|
|
"033500000C076B5C208F01011E5268CEF20000196E3A3A0AEF3E934F3E2D780000000007000000005268CEFD0000196E3A3A0AEF3E934F3" +
|
|
|
|
"E2D780000000007000000005268CF080000196E3A3A0AEF3E934F3E2D780000000007000000005268CF130000196E3A3A0AEF3E934F3E2D7" +
|
|
|
|
"80000000007000000005268CF1E0000196E3A3A0AEF3E934F3E2D780000000007000000005268CF290000196E3A3A0AEF3E934F3E2D78000" +
|
|
|
|
"0000007000000005268CF340000196E3A3A0AEF3E934F3E2D780000000007000000005268CF3F0000196E3A3A0AEF3E934F3E2D780000000" +
|
|
|
|
"007000000005268CF4A0000196E3A3A0AEF3E934F3E2D780000000007000000005268CF550000196E3A3A0AEF3E934F3E2D7800000000070" +
|
|
|
|
"00000005268CF600000196E3A3A0AEF3E934F3E2D780000000007000000005268CF6B0000196E3A3A0AEF3E934F3E2D78000000000700000" +
|
|
|
|
"0005268CF730000196E36630AEF42CE4F6D0BF40400022208000000005268CF7E0000196E36B60AEF42BE4F6D0BF400000000070000000052" +
|
|
|
|
"68CF890000196E36B60AEF42BE4F6D0BF40000000007000000005268CF940000196E36B60AEF42BE4F6D0BF40000000007000000005268CF" +
|
|
|
|
"9F0000196E36B60AEF42BE4F6D0BF40000000007000000005268CFAA0000196E36B60AEF42BE4F6D0BF40000000007000000005268CFB50" +
|
|
|
|
"000196E36B60AEF42BE4F6D0BF40000000007000000005268CFC00000196E36B60AEF42BE4F6D0BF40000000007000000005268CFCB00001" +
|
|
|
|
"96E36B60AEF42BE4F6D0BF40000000007000000005268CFD60000196E36B60AEF42BE4F6D0BF40000000007000000005268CFD70000196E" +
|
|
|
|
"3C710AEF5EFF4F690BF40400011708000000005268CFE20000196E3B980AEF601A4F690BF40000000007000000005268CFED0000196E3B980" +
|
|
|
|
"AEF601A4F690BF40000000007000000005268CFF80000196E3B980AEF601A4F690BF40000000007000000005268D0030000196E3B980AEF60" +
|
|
|
|
"1A4F690BF40000000007000000005268D00E0000196E3B980AEF601A4F690BF40000000007000000005268D0190000196E3B980AEF601A4F6" +
|
|
|
|
"90BF40000000007000000005268D0240000196E3B980AEF601A4F690BF400000000070000000046E2")
|
|
|
|
|
|
|
|
data3, _ := hex.DecodeString(
|
|
|
|
"0011000315A07F44865A0E01000053EA01DF65AD6D")
|
|
|
|
|
|
|
|
const NTEST = 1
|
|
|
|
conf := model.ServerConfig{IP: "127.0.0.1", Port: 4000}
|
|
|
|
ch := make(chan int64, NTEST*3)
|
|
|
|
|
|
|
|
n := 0
|
|
|
|
for i := 0; i < NTEST; i++ {
|
|
|
|
go sendData(&conf, data1, ch)
|
|
|
|
n++
|
|
|
|
go sendData(&conf, data2, ch)
|
|
|
|
n++
|
|
|
|
|
|
|
|
go sendData(&conf, data3, ch)
|
|
|
|
n++
|
|
|
|
}
|
|
|
|
|
|
|
|
var ma int64 = 0
|
|
|
|
var mi int64 = 10000000000000
|
|
|
|
var tot float64 = 0
|
|
|
|
|
|
|
|
var ti int64
|
|
|
|
for i := 0; i < NTEST*2; i++ {
|
|
|
|
ti = <-ch
|
|
|
|
if ti < 0 {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if ti < mi {
|
|
|
|
mi = ti
|
|
|
|
}
|
|
|
|
|
|
|
|
if ti > ma {
|
|
|
|
ma = ti
|
|
|
|
}
|
|
|
|
|
|
|
|
tot += float64(ti)
|
|
|
|
}
|
|
|
|
|
|
|
|
const MILIS = 1000000
|
|
|
|
avg := tot / (NTEST * 2)
|
|
|
|
fmt.Printf("Total time = %+v ms, avg = %+v ms, mi = %+v ms, ma = %+v ms\n",
|
|
|
|
tot/MILIS, avg/MILIS, float64(mi)/MILIS, float64(ma)/MILIS)
|
|
|
|
|
|
|
|
}
|