github.com/frankrap/okex-api@v1.0.4/swap_test.go (about)

     1  package okex
     2  
     3  /*
     4   OKEX Swap Rest Api. Unit test
     5   @author Lingting Fu
     6   @date 2018-12-27
     7   @version 1.0.0
     8  */
     9  
    10  import (
    11  	"fmt"
    12  	"os"
    13  	"reflect"
    14  	"testing"
    15  	"time"
    16  
    17  	"github.com/stretchr/testify/assert"
    18  )
    19  
    20  func TestGetSwapInstrumentPosition(t *testing.T) {
    21  	c := NewTestClient()
    22  	sp, err := c.GetSwapPositionByInstrument("BTC-USD-SWAP")
    23  	assert.True(t, err == nil)
    24  	jstr, _ := Struct2JsonString(sp)
    25  	println(jstr)
    26  }
    27  
    28  func TestGetSwapPositions(t *testing.T) {
    29  	c := NewTestClient()
    30  	sp, err := c.GetSwapPositions()
    31  	simpleAssertTrue(sp, err, t, false)
    32  }
    33  
    34  func TestGetSwapAccount(t *testing.T) {
    35  	c := NewTestClient()
    36  	sa, err := c.GetSwapAccount("BTC-USD-SWAP")
    37  	simpleAssertTrue(sa, err, t, false)
    38  }
    39  
    40  type JsonTestType struct {
    41  	Asks [][]interface{} `json:"asks"`
    42  }
    43  
    44  func TestJson(t *testing.T) {
    45  	a := string(`{"asks" : [["411.5","9",4,3]]}`)
    46  	i := JsonTestType{}
    47  	JsonString2Struct(a, &i)
    48  	simpleAssertTrue(i, nil, t, false)
    49  
    50  	str, _ := Struct2JsonString(i)
    51  	println(str)
    52  }
    53  
    54  func TestMap(t *testing.T) {
    55  	m := map[string]string{}
    56  	m["a"] = "1999"
    57  
    58  	r := m["b"]
    59  	assert.True(t, r == "" && len(r) == 0)
    60  
    61  	r2 := m["a"]
    62  	assert.True(t, r2 == "1999")
    63  }
    64  
    65  func TestClient_PublicAPI(t *testing.T) {
    66  	c := NewTestClient()
    67  	instrumentId := "BTC-USD-SWAP"
    68  	histList, err := c.GetSwapHistoricalFundingRateByInstrument(instrumentId, nil)
    69  	fmt.Printf("%+v", err)
    70  	assert.True(t, histList != nil && err == nil)
    71  	fmt.Printf("%+v", histList)
    72  
    73  	r, err := c.GetSwapMarkPriceByInstrument(instrumentId)
    74  	fmt.Printf("Result: %+v, Error: %+v", r, err)
    75  	assert.True(t, r != nil && err == nil)
    76  
    77  	r1, err := c.GetSwapFundingTimeByInstrument(instrumentId)
    78  	fmt.Printf("Result: %+v, Error: %+v", r1, err)
    79  	assert.True(t, r1 != nil && err == nil)
    80  
    81  	r2, err := c.GetSwapAccountsHoldsByInstrument(instrumentId)
    82  	fmt.Printf("Result: %+v, Error: %+v", r2, err)
    83  	assert.True(t, r2 != nil && err == nil)
    84  
    85  	r3, err := c.GetSwapLiquidationByInstrument(instrumentId, "1", nil)
    86  	fmt.Printf("Result: %+v, Error: %+v", r3, err)
    87  	assert.True(t, r3 != nil && err == nil)
    88  
    89  	optionalParams := map[string]string{}
    90  	optionalParams["from"] = "1"
    91  	optionalParams["to"] = "5"
    92  	optionalParams["limit"] = "50"
    93  
    94  	r4, err := c.GetSwapLiquidationByInstrument(instrumentId, "0", optionalParams)
    95  	fmt.Printf("Result: %+v, Error: %+v", r4, err)
    96  	assert.True(t, r4 != nil && err == nil)
    97  
    98  	r5, err := c.GetSwapPriceLimitByInstrument(instrumentId)
    99  	fmt.Printf("Result: %+v, Error: %+v", r5, err)
   100  	assert.True(t, r5 != nil && err == nil)
   101  
   102  	r6, err := c.GetSwapOpenInterestByInstrument(instrumentId)
   103  	fmt.Printf("Result: %+v, Error: %+v", r6, err)
   104  	assert.True(t, r6 != nil && err == nil)
   105  
   106  	r7, err := c.GetSwapIndexByInstrument(instrumentId)
   107  	fmt.Printf("Result: %+v, Error: %+v", r7, err)
   108  	assert.True(t, r7 != nil && err == nil)
   109  
   110  	//lingting.fu. 20190225. No Kline in test enviroment, contact LiWei to solve env problem.
   111  	//r8, err := c.GetSwapCandlesByInstrument(instrumentId, nil)
   112  	//fmt.Printf("Result: %+v, Error: %+v", r8, err)
   113  	//assert.True(t, r8 != nil && err == nil)
   114  
   115  	r9, err := c.GetSwapTradesByInstrument(instrumentId, nil)
   116  	fmt.Printf("Result: %+v, Error: %+v", r9, err)
   117  	assert.True(t, r9 != nil && err == nil)
   118  
   119  	r10, err := c.GetSwapTickerByInstrument(instrumentId)
   120  	fmt.Printf("Result: %+v, Error: %+v", r10, err)
   121  	assert.True(t, r10 != nil && err == nil)
   122  
   123  	r11, err := c.GetSwapInstruments()
   124  	fmt.Printf("Result: %+v, Error: %+v", r11, err)
   125  	assert.True(t, r11 != nil && err == nil)
   126  
   127  	r12, err := c.GetSwapRate()
   128  	fmt.Printf("Result: %+v, Error: %+v", r12, err)
   129  	assert.True(t, r12 != nil && err == nil)
   130  
   131  	r13, err := c.GetSwapInstrumentsTicker()
   132  	simpleAssertTrue(r13, err, t, false)
   133  
   134  	depthParams := map[string]string{}
   135  	depthParams["size"] = "1"
   136  	depthParams["depth"] = "0.01"
   137  	r14, err := c.GetSwapDepthByInstrumentId(instrumentId, depthParams)
   138  	simpleAssertTrue(r14, err, t, false)
   139  
   140  }
   141  
   142  func simpleAssertTrue(result interface{}, err error, t *testing.T, doprint bool) bool {
   143  	if doprint {
   144  		fmt.Fprintf(os.Stderr, "Result: %+v, Error: %+v", result, err)
   145  	}
   146  	assert.True(t, result != nil && err == nil)
   147  	return result != nil && err == nil
   148  }
   149  
   150  func TestClient_PrivateAPI(t *testing.T) {
   151  
   152  	c := NewTestClient()
   153  	instrumentId := "BTC-USD-SWAP"
   154  
   155  	// Fore. 20190225. CleanUp history test order before new test start.
   156  	cleanUpOrders(c, instrumentId)
   157  
   158  	r1, err := c.GetSwapPositionByInstrument(instrumentId)
   159  	simpleAssertTrue(r1, err, t, false)
   160  
   161  	r2, err := c.GetSwapAccounts()
   162  	simpleAssertTrue(r2, err, t, false)
   163  
   164  	r3, err := c.GetSwapAccountsSettingsByInstrument(instrumentId)
   165  	simpleAssertTrue(r3, err, t, false)
   166  
   167  	_, r4, err := c.PostSwapAccountsLeverage(instrumentId, "20", "3")
   168  	simpleAssertTrue(r4, err, t, false)
   169  
   170  	_, r5, err := c.PostSwapAccountsLeverage(instrumentId, "50", "3")
   171  	simpleAssertTrue(r5, err, t, false)
   172  	assert.True(t, int(r5.Code) > 30000)
   173  
   174  	r6, err := c.GetSwapAccountLedger(instrumentId, nil)
   175  	simpleAssertTrue(r6, err, t, false)
   176  
   177  	order := BasePlaceOrderInfo{}
   178  	order.Size = "1"
   179  	order.Type = "1"
   180  	order.MatchPrice = "1"
   181  	order.Price = "100"
   182  	_, r7, err := c.PostSwapOrder(instrumentId, order)
   183  	simpleAssertTrue(r7, err, t, false)
   184  
   185  	order2 := BasePlaceOrderInfo{}
   186  	order2.Size = "1"
   187  	order2.Type = "1"
   188  	order2.MatchPrice = "1"
   189  	order2.Price = "200"
   190  	_, r8, err := c.PostSwapOrders(instrumentId, []*BasePlaceOrderInfo{&order, &order2})
   191  	simpleAssertTrue(r8, err, t, false)
   192  
   193  	r81, err := c.GetSwapOrderByOrderId(instrumentId, r8.OrderInfo[0].OrderId)
   194  	simpleAssertTrue(r81, err, t, false)
   195  
   196  	orderId := r8.OrderInfo[0].OrderId
   197  	_, r9, err := c.PostSwapCancelOrder(instrumentId, orderId)
   198  	simpleAssertTrue(r9, err, t, false)
   199  
   200  	ids := []string{r8.OrderInfo[0].OrderId, r8.OrderInfo[1].OrderId}
   201  	_, r10, err := c.PostSwapBatchCancelOrders(instrumentId, ids)
   202  	simpleAssertTrue(r10, err, t, false)
   203  
   204  	params := map[string]string{}
   205  	params["status"] = "1"
   206  	params["from"] = "1"
   207  	params["to"] = "4"
   208  	params["limit"] = "100"
   209  	r11, err := c.GetSwapOrderByInstrumentId(instrumentId, params)
   210  	simpleAssertTrue(r11, err, t, false)
   211  
   212  	r12, err := c.GetSwapFills(instrumentId, orderId, nil)
   213  	simpleAssertTrue(r12, err, t, false)
   214  }
   215  
   216  func cleanUpOrders(c *Client, instrumentId string) {
   217  	params := NewParams()
   218  	currentPage := 1
   219  	params["status"] = "6"
   220  	params["limit"] = "100"
   221  	params["from"] = Int2String(currentPage)
   222  	orders := []string{}
   223  
   224  	rNotDealed, _ := c.GetSwapOrderByInstrumentId(instrumentId, params)
   225  	for rNotDealed != nil && len(rNotDealed.OrderInfo) > 0 {
   226  		for i := 0; i < len(rNotDealed.OrderInfo); i++ {
   227  			if rNotDealed.OrderInfo[i].OrderId != "" && len(rNotDealed.OrderInfo[i].OrderId) > 0 {
   228  				orders = append(orders, rNotDealed.OrderInfo[i].OrderId)
   229  			}
   230  		}
   231  
   232  		delta := 10
   233  		for i := 0; i < len(orders); i = i + delta {
   234  			upper := i + delta
   235  			if upper > len(orders)-1 {
   236  				upper = len(orders) - 1
   237  			}
   238  			c.PostSwapBatchCancelOrders(instrumentId, orders[i:upper])
   239  			time.Sleep(time.Millisecond * 200)
   240  			println(i, i+delta)
   241  		}
   242  
   243  		currentPage += 1
   244  		params["from"] = Int2String(currentPage)
   245  
   246  		rNotDealed, _ = c.GetSwapOrderByInstrumentId(instrumentId, params)
   247  	}
   248  }
   249  
   250  func TestClient_Err(t *testing.T) {
   251  
   252  	c := NewTestClient()
   253  	c.Config.Endpoint = "http://192.168.80.113:930/"
   254  
   255  	r1, err := c.GetSwapRate()
   256  	assert.True(t, r1 == nil && err != nil)
   257  }
   258  
   259  func TestClient_SwapHistoricalFundingRate(t *testing.T) {
   260  	s := `[
   261    {
   262      "instrument_id": "BTC-USD-SWAP",
   263      "funding_rate": "0.00250000",
   264      "realized_rate": "0.00249999",
   265      "interest_rate": "0.00000000",
   266      "funding_time": "2018-12-17T12:40:26.000Z"
   267    }
   268  ]`
   269  	r := SwapHistoricalFundingRateList{}
   270  	JsonString2Struct(s, &r)
   271  	assert.True(t, r != nil)
   272  	assert.True(t, len(r) >= 1)
   273  }
   274  
   275  func TestClient_reflect(t *testing.T) {
   276  	i := BasePlaceOrderInfo{}
   277  	tp := reflect.TypeOf(i)
   278  	fmt.Println(tp)
   279  }