package ws import ( "fmt" "log" "testing" "time" . "v5sdk_go/ws/wImpl" "github.com/stretchr/testify/assert" ) func init() { log.SetFlags(log.LstdFlags | log.Llongfile) } func TestPing(t *testing.T) { r := prework_pri(CROSS_ACCOUNT) res, _, _ := r.Ping() assert.True(t, res, true) } func TestWsClient_SubscribeAndUnSubscribe(t *testing.T) { r := prework() var err error var res bool param := map[string]string{} param["channel"] = "opt-summary" param["uly"] = "BTC-USD" start := time.Now() res, _, err = r.Subscribe(param) if res { usedTime := time.Since(start) fmt.Println("订阅成功!", usedTime.String()) } else { fmt.Println("订阅失败!", err) t.Fatal("订阅失败!", err) //return } time.Sleep(60 * time.Second) //等待推送 start = time.Now() res, _, err = r.UnSubscribe(param) if res { usedTime := time.Since(start) fmt.Println("取消订阅成功!", usedTime.String()) } else { fmt.Println("取消订阅失败!", err) t.Fatal("取消订阅失败!", err) } } func TestWsClient_SubscribeAndUnSubscribe_priv(t *testing.T) { r := prework_pri(ISOLATE_ACCOUNT) var err error var res bool var params []map[string]string params = append(params, map[string]string{"channel": "orders", "instType": SPOT, "instId": "BTC-USDT"}) //一个失败的订阅用例 params = append(params, map[string]string{"channel": "positions", "instType": "any"}) for _, v := range params { start := time.Now() var data *ProcessDetail res, data, err = r.Subscribe(v) if res { usedTime := time.Since(start) fmt.Println("订阅成功!", usedTime.String()) PrintDetail(data) } else { fmt.Println("订阅失败!", err) //return } time.Sleep(60 * time.Second) //等待推送 start = time.Now() res, _, err = r.UnSubscribe(v) if res { usedTime := time.Since(start) fmt.Println("取消订阅成功!", usedTime.String()) } else { fmt.Println("取消订阅失败!", err) } } } func TestWsClient_Jrpc(t *testing.T) { //r := prework_pri(ISOLATE_ACCOUNT) r := prework_pri(CROSS_ACCOUNT) var res bool var err error var data *ProcessDetail start := time.Now() var args []map[string]interface{} param := map[string]interface{}{} param["instId"] = "BTC-USDT" param["clOrdId"] = "SIM0dcopy16069997808063455" param["tdMode"] = "cross" param["side"] = "sell" param["ordType"] = "limit" param["px"] = "19333.3" param["sz"] = "0.18605445" param1 := map[string]interface{}{} param1["instId"] = "BTC-USDT" param1["clOrdId"] = "SIM0dcopy16069997808063456" param1["tdMode"] = "cross" param1["side"] = "sell" param1["ordType"] = "limit" param1["px"] = "19334.2" param1["sz"] = "0.03508913" param2 := map[string]interface{}{} param2["instId"] = "BTC-USDT" param2["clOrdId"] = "SIM0dcopy16069997808063457" param2["tdMode"] = "cross" param2["side"] = "sell" param2["ordType"] = "limit" param2["px"] = "19334.8" param2["sz"] = "0.03658186" param3 := map[string]interface{}{} param3["instId"] = "BTC-USDT" param3["clOrdId"] = "SIM0dcopy16069997808063458" param3["tdMode"] = "cross" param3["side"] = "sell" param3["ordType"] = "limit" param3["px"] = "19334.9" param3["sz"] = "0.5" param4 := map[string]interface{}{} param4["instId"] = "BTC-USDT" param4["clOrdId"] = "SIM0dcopy16069997808063459" param4["tdMode"] = "cross" param4["side"] = "sell" param4["ordType"] = "limit" param4["px"] = "19335.2" param4["sz"] = "0.3" param5 := map[string]interface{}{} param5["instId"] = "BTC-USDT" param5["clOrdId"] = "SIM0dcopy16069997808063460" param5["tdMode"] = "cross" param5["side"] = "sell" param5["ordType"] = "limit" param5["px"] = "19335.9" param5["sz"] = "0.051" param6 := map[string]interface{}{} param6["instId"] = "BTC-USDT" param6["clOrdId"] = "SIM0dcopy16069997808063461" param6["tdMode"] = "cross" param6["side"] = "sell" param6["ordType"] = "limit" param6["px"] = "19336.4" param6["sz"] = "1" param7 := map[string]interface{}{} param7["instId"] = "BTC-USDT" param7["clOrdId"] = "SIM0dcopy16069997808063462" param7["tdMode"] = "cross" param7["side"] = "sell" param7["ordType"] = "limit" param7["px"] = "19336.8" param7["sz"] = "0.475" param8 := map[string]interface{}{} param8["instId"] = "BTC-USDT" param8["clOrdId"] = "SIM0dcopy16069997808063463" param8["tdMode"] = "cross" param8["side"] = "sell" param8["ordType"] = "limit" param8["px"] = "19337.3" param8["sz"] = "0.21299357" param9 := map[string]interface{}{} param9["instId"] = "BTC-USDT" param9["clOrdId"] = "SIM0dcopy16069997808063464" param9["tdMode"] = "cross" param9["side"] = "sell" param9["ordType"] = "limit" param9["px"] = "19337.5" param9["sz"] = "0.5" args = append(args, param) args = append(args, param1) args = append(args, param2) args = append(args, param3) args = append(args, param4) args = append(args, param5) args = append(args, param6) args = append(args, param7) args = append(args, param8) args = append(args, param9) res, data, err = r.Jrpc("okexv5wsapi001", "order", args) if res { usedTime := time.Since(start) fmt.Println("下单成功!", usedTime.String()) PrintDetail(data) } else { usedTime := time.Since(start) fmt.Println("下单失败!", usedTime.String(), err) } } /* 测试 添加全局消息回调函数 */ func TestAddMessageHook(t *testing.T) { r := prework_pri(CROSS_ACCOUNT) r.AddMessageHook(func(msg *Msg) error { // 添加你的方法 fmt.Println("这是全局消息自定义MessageHook") fmt.Println("当前数据是", msg) return nil }) select {} } /* 普通推送数据回调函数 */ func TestAddBookedDataHook(t *testing.T) { var r *WsClient /*订阅私有频道*/ { r = prework_pri(CROSS_ACCOUNT) var res bool var err error r.AddBookMsgHook(func(ts time.Time, data MsgData) error { // 添加你的方法 fmt.Println("这是私有自定义AddBookMsgHook") fmt.Println("当前数据是", data) return nil }) param := map[string]string{} param["channel"] = "account" param["ccy"] = "BTC" res, _, err = r.Subscribe(param) if res { fmt.Println("订阅成功!") } else { fmt.Println("订阅失败!", err) t.Fatal("订阅失败!", err) //return } time.Sleep(100 * time.Second) } //订阅公共频道 { r = prework() var res bool var err error r.AddBookMsgHook(func(ts time.Time, data MsgData) error { // 添加你的方法 fmt.Println("这是公共自定义AddBookMsgHook") fmt.Println("当前数据是", data) return nil }) param := map[string]string{} param["channel"] = "instruments" param["instType"] = "FUTURES" res, _, err = r.Subscribe(param) if res { fmt.Println("订阅成功!") } else { fmt.Println("订阅失败!", err) t.Fatal("订阅失败!", err) //return } select {} } } func TestGetInfoFromErrMsg(t *testing.T) { a := assert.New(t) buf := ` "channel:index-tickers,instId:BTC-USDT1 doesn't exist" ` ch := GetInfoFromErrMsg(buf) //t.Log(ch) a.Equal("index-tickers", ch) //assert.True(t,ch == "index-tickers") } /* */ func TestParseMessage(t *testing.T) { r := prework() var evt Event msg := `{"event":"error","msg":"Contract does not exist.","code":"51001"}` evt, _, _ = r.parseMessage([]byte(msg)) assert.True(t, EVENT_ERROR == evt) msg = `{"event":"error","msg":"channel:positions,ccy:BTC doesn't exist","code":"60018"}` evt, _, _ = r.parseMessage([]byte(msg)) assert.True(t, EVENT_BOOK_POSTION == evt) } /* 原始方式 深度订阅 测试 */ func TestSubscribeTBT(t *testing.T) { r := prework() var res bool var err error // 添加你的方法 r.AddDepthHook(func(ts time.Time, data DepthData) error { //fmt.Println("这是自定义AddBookMsgHook") fmt.Println("当前数据是:", data) return nil }) param := map[string]string{} param["channel"] = "books-l2-tbt" //param["channel"] = "books" param["instId"] = "BTC-USD-SWAP" res, _, err = r.Subscribe(param) if res { fmt.Println("订阅成功!") } else { fmt.Println("订阅失败!", err) t.Fatal("订阅失败!", err) //return } time.Sleep(60 * time.Second) } /* */ func TestSubscribeBalAndPos(t *testing.T) { r := prework_pri(CROSS_ACCOUNT) var res bool var err error param := map[string]string{} // 产品信息 param["channel"] = "balance_and_position" res, _, err = r.Subscribe(param) if res { fmt.Println("订阅成功!") } else { fmt.Println("订阅失败!", err) t.Fatal("订阅失败!", err) //return } time.Sleep(60 * time.Second) }