-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathiec104_test.go
87 lines (74 loc) · 2 KB
/
iec104_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package tests
import (
"fmt"
"github.com/wendy512/go-iecp5/asdu"
"github.com/wendy512/iec104/client"
"github.com/wendy512/iec104/server"
"sync"
"testing"
"time"
)
func TestClient(t *testing.T) {
srv := startServer()
settings := client.NewSettings()
settings.LogCfg = &client.LogCfg{Enable: true}
c := client.New(settings, &clientCall{})
wg := sync.WaitGroup{}
wg.Add(1)
c.SetOnConnectHandler(func(c *client.Client) {
// 连接成功以后做的操作
fmt.Printf("connected %s iec104 server\n", settings.Host)
})
// server active确认后回调
c.SetServerActiveHandler(func(c *client.Client) {
//// 发送总召唤
if err := c.SendInterrogationCmd(commonAddr); err != nil {
t.Errorf("send interrogation cmd error %v\n", err)
t.FailNow()
}
// 累积量召唤
if err := c.SendCounterInterrogationCmd(commonAddr); err != nil {
t.Errorf("send counter interrogation cmd error %v\n", err)
t.FailNow()
}
// read cmd
if err := c.SendReadCmd(commonAddr, 100); err != nil {
t.Errorf("send counter interrogation cmd error %v\n", err)
t.FailNow()
}
// 时钟同步
if err := c.SendClockSynchronizationCmd(commonAddr, time.Now()); err != nil {
t.Errorf("send clock sync cmd error %v\n", err)
t.FailNow()
}
// test cmd
if err := c.SendTestCmd(commonAddr); err != nil {
t.Errorf("send test cmd error %v\n", err)
t.FailNow()
}
// 单点控制
if err := c.SendCmd(commonAddr, asdu.C_SC_NA_1, asdu.InfoObjAddr(1000), false); err != nil {
t.Errorf("send single cmd error %v\n", err)
t.FailNow()
}
// 测试等待回复,不能结束太快
time.Sleep(time.Second * 10)
wg.Done()
})
// Connect后会发送server active
if err := c.Connect(); err != nil {
t.Errorf("client connect error %v\n", err)
t.FailNow()
}
wg.Wait()
if err := c.Close(); err != nil {
t.Errorf("close error %v\n", err)
t.FailNow()
}
srv.Stop()
}
func startServer() *server.Server {
s := server.New(server.NewSettings(), &myServerHandler{})
s.Start()
return s
}