You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.6 KiB

import asyncio
import os
import time
import pytest
import cryptocom.exchange as cro
def test_timeframe():
days_5 = cro.Timeframe.DAYS * 5
result = cro.Timeframe.resolve(days_5)
assert result - int(time.time()) == days_5
assert cro.Timeframe.resolve(cro.Timeframe.NOW) == int(time.time())
def test_api_args(monkeypatch):
with pytest.raises(ValueError):
cro.Account()
with pytest.raises(ValueError):
cro.Account(api_key="123")
with pytest.raises(ValueError):
cro.Account(api_secret="3333")
with pytest.raises(ValueError):
cro.ApiProvider(api_key="123")
with pytest.raises(ValueError):
cro.ApiProvider(api_secret="123")
monkeypatch.setattr(os, "environ", {})
with pytest.raises(ValueError):
cro.Account(from_env=True)
with pytest.raises(ValueError):
cro.ApiProvider(from_env=True)
monkeypatch.setattr(os, "environ", {"CRYPTOCOM_API_KEY": "123"})
with pytest.raises(ValueError):
cro.Account(from_env=True)
with pytest.raises(ValueError):
cro.ApiProvider(from_env=True)
@pytest.mark.asyncio
async def test_wrong_api_response():
api = cro.ApiProvider(from_env=True)
with pytest.raises(cro.ApiError):
await api.get("somepath")
api = cro.ApiProvider(auth_required=False)
with pytest.raises(cro.ApiError):
await api.post("account")
@pytest.mark.asyncio
async def test_api_rate_limits():
api = cro.ApiProvider(from_env=True)
pair = cro.pairs.CRO_USDT
page = 0
page_size = 50
params = {"page_size": page_size, "page": page}
if pair:
params["instrument_name"] = pair.name
start_time = time.time()
tasks = [
api.post("private/get-order-history", {"params": params})
for _ in range(2)
]
await asyncio.gather(*tasks)
finish_time = time.time() - start_time
assert finish_time > 1
start_time = time.time()
tasks = [
api.post("private/get-order-history", {"params": params})
for _ in range(5)
]
await asyncio.gather(*tasks)
finish_time = time.time() - start_time
assert finish_time > 4
start_time = time.time()
tasks = [api.get("public/get-instruments") for _ in range(200)]
await asyncio.gather(*tasks)
finish_time = time.time() - start_time
assert finish_time > 1
start_time = time.time()
tasks = [
api.post("private/get-order-history", {"params": params})
for _ in range(4)
]
await asyncio.gather(*tasks)
finish_time = time.time() - start_time
assert finish_time > 3