
    E#ir]                        S SK JrJrJrJrJrJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"   " S S5      r#g)    )"AuthenticationErrorNotSupportedInvalidProxySettingsExchangeNotAvailableOperationFailedOnMaintenanceget_cli_arg_valueget_root_diris_syncdump
json_parsejson_stringifyconvert_asciiio_file_existsio_file_readio_dir_readcall_methodcall_method_sync call_exchange_method_dynamically%call_exchange_method_dynamically_syncget_root_exceptionexception_messageexit_scriptget_exchange_propset_exchange_propinit_exchangeget_test_files_syncget_test_filesset_fetch_responseis_null_valuecloseget_env_varsget_langget_extc                   r   \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrSrSr/ r0 r0 r0 r0 r0 rSrSrSrS rS rS rS rS	 rS
 rS r S r!S r"S r#/ S4S jr$S r%S r&S r'S r(SRS jr)SSS jr*SSS jr+SRS jr,S r-S r.S r/S r0S r1SRS jr2S r3S  r4SRS! jr5S" r6S# r7STS$ jr8STS% jr9SRS& jr:S' r;S( r<S) r=S* r>S+ r?S, r@SRS- jrASRS. jrBSRS/ jrCS0 rDSUS1 jrESUS2 jrFSUS3 jrGS4 rHS5 rIS6 rJS7 rKS8 rLS9 rMS: rNS; rOS< rPS= rQS> rRS? rSS@ rTSA rUSB rVSC rWSD rXSE rYSF rZSG r[SH r\SI r]SJ r^SK r_SL r`SM raSN rbSO rcSP rdSQreg)VtestMainClass   F proxiesc                    [        S5      =(       d    [        S5      U l        [        S5      U l        [        S5      =(       d    [        S5      U l        [        S5      U l        [        S5      U l        [        S5      U l        [        S	5      U l        [        S
5      U l        [        S5      U l	        [        S5      U l
        [        S5      U l        [        5       U l        [        5       U l        g )Nz--responseTestsz
--responsez	--idTestsz--requestTestsz	--requestz--infoz	--verbosez--debugz	--privatez--privateOnlyz	--sandboxz
--loadKeysz--ws)r	   response_testsid_testsrequest_testsinfoverbosedebugprivate_testprivate_test_onlysandbox	load_keysws_testsr#   langr$   ext)selfs    N/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/test/tests_sync.pyparse_cli_args_and_props&testMainClass.parse_cli_args_and_props   s    /0ABeFWXdFe)+6./?@bDUVaDb%h/	(5&y1
-k:!2?!C(5*<8)&1J	9    c                 h     U R                  XU5        g ! [         a  n[        S5        UeS nAff = f)N[TEST_FAILURE])
init_inner	Exceptionr   )r8   exchange_idsymbol_argvmethod_argves        r9   inittestMainClass.init,   s3    	OOKkB 	!"G	s    
1,1c                    U R                  5         U R                  (       a4  U R                  (       a#  U R                  X5        U R	                  X5        gU R                  (       a  U R	                  X5        gU R                  (       a  U R                  X5        gU R
                  (       a  U R                  5         gSn[        US-   U-   S-   S-   U R                  UUUU R                  [        S5      S.U5        U R                  U R                  SSS.n[        XU R                  5      nUR                  (       a&  [        U R                  S	S
5      5        [!        S5        U R#                  U5        [%        ['        U R(                  R+                  5       5      5      S:  d   S5       eU R-                  U5        U R/                  U5        U R1                  Xb5        [!        S5        g )NT
r(   z[INFO] TESTING 
--useProxy)exchangesymbolmethodisWsuseProxy0u  )r/   r0   enableRateLimittimeoutz[INFO] skipping alias   r   zTest files were not loaded)r:   r-   r+   run_static_request_testsrun_static_response_testsr,   run_broker_id_testsr   r7   r5   r	   r/   r0   r   aliasadd_paddingr   import_fileslenlist
test_fileskeysexpand_settings check_if_specific_test_is_chosen
start_test)r8   rA   rB   rC   new_lineexchange_argsrJ   s          r9   r?   testMainClass.init_inner3   s   %%'$"5"5))+C**;D**;D))+C==$$&X]X%*->>#!!MM),7K
 	 ||ZZ#	
 !T]]K>>!!"92>?N(#4,,./014R6RR4X&--k:.Ar<   c                 |   Ub  [        U R                  R                  5       5      nUR                  S5      n[	        U5      S:  au  [        S[	        U5      5       H[  nX$   n[        S[	        U5      5       H;  nX6   nUR                  SS5      nXW:X  d  M   U R                  R                  U5        M=     M]     g g g )N,   r   z()r(   )	rZ   r[   r\   splitrY   rangereplaceonly_specific_testsappend)r8   rC   test_file_namespossible_method_namesitest_file_namejmethod_names           r9   r^   .testMainClass.check_if_specific_test_is_chosen[   s    ""4??#7#7#9:O$/$5$5c$:!()Q.q#o"67A%4%7N"1c*?&@A&;&>&1&9&9$&C)8 44;;NK	 B 8 / #r<   c                     [        UR                  R                  5       5      nUR                  S5        [	        5       (       a  [        X R                  5      U l        g[        X R                  5      U l        g)NloadMarketsT)	rZ   hasr\   rj   r   r   r5   r[   r   )r8   rJ   
propertiess      r9   rX   testMainClass.import_filesh   sX    (,,++-.
-(991*mmLDO  -ZGDOr<   c                 `   UR                   n[        US5      n[        UR                  5       5      n[	        S[        U5      5       Hd  nXE   nX6   nU(       d  M  [        X5      b  M"  US-   U-   nUR                  5       n	[        5       n
X;   a  X   OS nU(       d  MX  [        XU5        Mf     g )NrequiredCredentialsr   _)	idr   rZ   r\   rg   rY   upperr"   r   )r8   rJ   rA   	req_credsobjkeysrm   
credentialis_requiredfull_keycredential_env_nameenv_varscredential_values               r9   load_credentials_from_env'testMainClass.load_credentials_from_envq   s    kk%h0JK	y~~'(q#g,'A J#/K{0FN&,z9&.nn&6#'>EXEd8#@ko ##%h<LM (r<   c                 d   UR                   n[        5       S-   n[        5       S-   n[        U5      n[        U5      n0 nU(       a  [        U5      n0 nU(       a  [        U5      nUR	                  Xx5      n	UR                  X0 5      n
U
(       a  [        U
R                  5       5      n[        S[        U5      5       H\  nX   nX   (       d  M  S n[        X   [        5      (       a!  [        X0 5      nUR	                  XU   5      nOX   n[        XU5        M^     U R                  (       a  U R                  U5        [        5       S-   n[        U5      nUR                  UU0 5      U l        U R                   nUR                  US5      nUb  UR#                  U5      Ul        ['        S5      (       a\  UR)                  US5      Ul        UR)                  US5      Ul        UR)                  US	5      Ul        UR)                  US
5      Ul        UR                  US0 5      U l        0 U l        g )Nz	keys.jsonzkeys.local.jsonr   zskip-tests.jsonrQ   rI   	httpProxy
httpsProxywsProxywssProxyskipMethods)rz   r
   r   r   deep_extend
safe_valuerZ   r\   rg   rY   
isinstancedictr   r   r4   r   skipped_settings_for_exchangeparse_to_intrQ   r	   safe_string
http_proxyhttps_proxyws_proxy	wss_proxyskipped_methodschecked_public_tests)r8   rJ   rA   keys_global
keys_localkeys_global_existskeys_local_existsglobal_settingslocal_settingsall_settingsexchange_settingssetting_keysrm   keyfinal_valueexistingskipped_fileskipped_settingsr   rQ   s                       r9   r]   testMainClass.expand_settings   s   kk"n{2!^&77
+K8*:6*;7O)*5N++OL$//2N 1 6 6 89L1c,/0"o$))"&K!"3"8$??#4XB#G&.&:&:8WZE[&\&7&<%h[A 1 >>**84#~(99'5-5-@-@AQS^`b-c*(,(J(J%%%&CYO'44W=H\**"*"6"67TVa"bH#+#7#78UWc#dH  ( 4 45RT] ^H!)!5!56SU_!`H'223PR_acd$&!r<   c                 n    Sn[        U5      nX$-
  S-
  nUS:  a  [        SU5       H  nUS-  nM
     X-   $ )Nr(   r    )rY   rg   )r8   messagesizeresmessage_lengthmissing_spacerm   s          r9   rW   testMainClass.add_padding   sG    W-111m,s
 -}r<   c                    SU;   a  U R                   S:X  a  SUR                  S'   SU;   a  U R                   S:X  a  gU R                  X!5      nUS:H  nUS:H  nXR                  :H  nUS	:H  n	U(       d  XR                  ;   a  U(       d  gS n
XR
                  ;   =(       a    UR
                  U   nU(       d<  [        U R                  5      S
:  a#  UR                  XR                  5      (       d  Sn
OHU(       d  U(       d  U(       d
  U	(       d  Sn
O)[        U[        5      (       a  Sn
OXR                  ;  a  Sn
U(       a  UR                  S5        UR                  nU
(       a.  U R                  (       a  [        U R!                  U
S5      X5        gU R                  (       a4  SUR#                  U5      -   S-   n[        U R!                  SS5      XU5        [%        5       (       a  ['        U R                  XXS5        O[)        U R                  XXS5        U R                  (       a  [        U R!                  SS5      X5        U(       a  SU R                  U'   g)N	OrderBookcsFchecksumphpTrs   fetchCurrenciesfeaturesr   z[INFO] IGNORED_TESTz[INFO] UNSUPPORTED_TESTz[INFO] SKIPPED_TESTz[INFO] UNIMPLEMENTED_TESTrR   ()z[INFO] TESTINGz[INFO] TESTING DONE)r7   options	get_skipsproxy_test_file_namer   rt   rY   ri   in_arrayr   strr[   load_marketsrz   r.   r   rW   jsonr   r   r   )r8   rp   rJ   args	is_publicskipped_properties_for_methodis_load_marketsis_fetch_currenciesis_proxy_testis_feature_testskip_messagesupported_by_exchangenameargs_stringifieds                 r9   test_methodtestMainClass.test_method   s   +%$((d*:+0HZ(+%$((e*;(,x(M%&-7*.??$(A(AA&*4k-F-FFPc!,!< [(,,{B[C(@(@$AA$EhN_N_`k  nF  nF  OG  OG0L )>}]l4L5s;;0L06L!!$'{{yyT%%lB7K99"X]]4%883>!!"2B7L\]99T__kEbi@]d99!!"7<dP59D%%k2r<   c                 f   0 nX"S-   U R                   -   /n[        S[        U5      5       Hi  nXE   nX`R                  ;   d  M  [	        U R                  U   [
        5      (       a  U R                  U   s  $ UR                  X0R                  U   5      nMk     / SQ/ SQ/ SQ/ SQSS// S	QS
S/S.n[        UR                  5       5      n[        S[        U5      5       H  nX   n	Xy   n
UR                  X*5      (       d  M#  XR                  ;   a3  [	        U R                  U	   [
        5      (       a  U R                  U	   s  $ UR                  U R                  U	0 5      nUR                  X;5      nM     SU;   a  SU;  a  US   US'   SU;   a  SU;  a  US   US'   SU;   a  SU;  a  US   US'   U$ )N.r   )fetchOrderBookfetchOrderBooksfetchL2OrderBookwatchOrderBookwatchOrderBookForSymbols)fetchTickerfetchTickerswatchTickerwatchTickers)fetchTradeswatchTradeswatchTradesForSymbols)
fetchOHLCV
watchOHLCVwatchOHLCVForSymbolsfetchLedgerfetchLedgerEntry)fetchDepositsWithdrawalsfetchDepositsfetchWithdrawalsfetchDepositWithdrawFeefetchDepositWithdrawFees)	orderBooktickertradeohlcvledgerdepositWithdrawdepositWithdrawFee	timestampdatetimebidask
baseVolumequoteVolume)r7   rg   rY   r   r   r   r   rZ   r\   r   	safe_dict)r8   rJ   rp   final_skipsmethod_namesrm   m_nameobject_skipsobject_namesobject_nameobject_methodsextra_skipss               r9   r   testMainClass.get_skips   s   #3%6%ABq#l+,A!_F---d226:C@@//77"*"6"6{DXDXY_D`"aK - ATLI$&89`#<>X"Y
 L--/0q#l+,A&/K)6N  ==#7#77jI]I]^iIjlo>p>p//<<&001E1E{TVW&22;L - ;&{1J&1+&>K
#[ 5K+?!,U!3KK'-;2N)4\)BK&r<   c                 >   SnUR                  U5      n[        SU5       H  n U R                  XX45          g   g! [         Ga  n[	        U5      n	US:H  n
[        U	[        5      n[        U	[        5      n[        U	[        5      nU(       a  XuS-
  :X  a  [        U	[        5      n[        U	[        5      nS nS nU
(       a  SnU(       a  SnOSnOU(       a  U(       d  SnSnOSnSnU(       a  SOSn[        US	S
UR                  X[        U	5      5        Us S nAs  $ UR                  US-   S-  5         S nAGM  U
(       a(  [        SS[        U	5      UR                  X5         S nA  gU(       a8  U R                  (       a!  [        S[        U	5      UR                  X5         S nA  gU(       a@  U(       a9  U R                  (       a"  [        SS[        U	5      UR                  X5         S nA  g[        S[        U	5      UR                  X5         S nA  gS nAff = f)N   r   Trs   re   Fr>   [TEST_WARNING]zHMethod could not be tested due to a repeated Network/Availability issuesz |   zExchange can not load marketsz[INFO] NOT_SUPPORTED[INFO]z(Authentication problem for public method)r   rg   r   r@   r   r   r   r   r   r   r   r   rz   r   sleepr.   )r8   rp   rJ   r   r   max_retriesr   rm   exrD   r   is_auth_erroris_not_supportedis_operation_failedis_on_maintenanceis_exchange_not_availableshould_failret_success	fail_types                      r9   	test_safetestMainClass.test_safe  s    #==.q+&A=%  H '~ w  :%&r*#.-#?!+A/B!C$.q,$? '1!_'E#&!O+-7=-I)5?CW5X1&*&***/K0.3.2  9AR.2.3 /4.28C$4IY	Y(rty  |D  |G  |G  IT  hy  z{  h|  }** !A~66 '-/NPabcPdfnfqfqs~  R$ (99 !79J19Mx{{\gz# ]99 +UWhijWkmumxmx  {F  Y#-/@/CX[[R]p$u:%s;   ;HCHHH;)H*9H)AH0!HHc                 ^   / / U/U/U/U/U/U// / / / S.nU R                   (       a  U/U/U/U/U/U/U//U/U//S.	nUR                  U5      nUS   nU R                   (       d1  U(       a  / US'   O$U/US'   U/US'   U/US'   U/US'   U/US	'   U/US
'   X0l        U R                  XS5        g)N)r   r   r   r   fetchLastPricesr   r   r   r   fetchBidsAsksfetchStatus	fetchTime)	r   r   r   r   watchBidsAsksr   r   r   r   spotr   fetchFundingRatesfetchFundingRatefetchFundingRateHistoryfetchIndexOHLCVfetchMarkOHLCVfetchPremiumIndexOHLCVT)r5   marketpublic_tests	run_tests)r8   rJ   rK   testsr  is_spots         r9   run_public_teststestMainClass.run_public_tests[  s   !"8#H &x!("8%h!
 ==%h)/ &x!'"(#)(.4XJ &x+1(
E (.}}+-'(.4X)*-3H()4:8/0,28'(+1(&'39(./!x-r<   c           	      T   [        UR                  5       5      n/ n[        S[        U5      5       H,  nXF   nX'   nUR	                  U R                  XqX5      5        M.     Un	/ n
[        S[        U5      5       H%  nXF   nX   nU(       a  M  U
R	                  U5        M'     U(       a  SOSn[        U
5      (       a,  SR                  U
5      n[        SUR                  USU-   5        U R                  (       a.  [        U R                  SU-   S-   UR                  -   S	5      5        g
)Nr   PUBLIC_TESTSPRIVATE_TESTSz, r>   zFailed methods : z[INFO] END r   rR   T)rZ   r\   rg   rY   rj   r  joinr   rz   r.   rW   )r8   rJ   r  is_public_test
test_namespromisesrm   	test_name	test_argsresultsfailed_methodstest_returned_valuetest_prefix_stringerrors_strings                 r9   r  testMainClass.run_tests  s
   %**,'
q#j/*A"I(IOODNN9	Z[ + q#j/*A"I")*&&%%i0	 +
 0>^?~ IIn5M!8;;0BDWZgDgh99!!-2D"Ds"JX[["XZ\]^r<   c                     U R                  SU/ S5      nU(       d  g[        UR                  5      n[        SUS5        g)Nrs   TFz[INFO:MAIN] Exchange loadedsymbols)r  rY   r2  r   )r8   rJ   resultexchange_symbols_lengths       r9   load_exchangetestMainClass.load_exchange  s>    xTB"%h&6&6"7*,CYOr<   c                 ~   S nUR                  U R                  S5      nUR                  U R                  S5      nU(       a	  U(       a  U$ U(       d	  U(       a  U$ [        S[        U5      5       HI  nX7   nUR	                  UR
                  U5      n	U	c  M(  UR	                  U	S5      n
U
(       d  U
b  MF  Un  U$    U$ )NpreferredSpotSymbolpreferredSwapSymbolr   active)r   r   rg   rY   r   markets)r8   rJ   r  r2  rK   preferred_spot_symbolpreferred_swap_symbolrm   sr  r:  s              r9   get_test_symboltestMainClass.get_test_symbol  s     ( 4 4T5W5WYn o ( 4 4T5W5WYn o,((2((q#g,'A
A(()9)91=F!!,,VX>fnF ( r<   Nc                     Uc  / SQnUS   n[        S[        U5      5       H  nX$   UR                  ;   d  M  X$   s  $    U$ )N)	BTCETHXRPLTCBCHEOSBNBBSVUSDTr   )rg   rY   
currencies)r8   rJ   codescoderm   s        r9   get_exchange_codetestMainClass.get_exchange_code  sH    =TEQxq#e*%Ax8...x & r<   c                    0 nUR                   n[        UR                  5       5      n[        S[	        U5      5       HA  nXV   nXG   nU(       a  US   (       a	  XUS   '   M%  U(       a  M.  US   (       a  M:  XUS   '   MC     U$ )Nr   r  rK   )r;  rZ   r\   rg   rY   )	r8   rJ   r  r   r;  r\   rm   r   r  s	            r9   get_markets_from_exchange'testMainClass.get_markets_from_exchange  s|    ""GLLN#q#d)$A'C\Fv(.F8$%T&..(.F8$% % 
r<   c                    U R                  X5      n/ SQn/ SQn/ SQnU(       a  UOUnU R                  XU5      nUc  [        S[        U5      5       Hk  n	XI   n
UR	                  USU
5      nUR                  US5      n[        UR                  5       5      n[        U5      nU(       d  MY  U R                  XU5      n  O   UcY  UR	                  USS5      n/ n[        S[        U5      5       H  n	UR                  X   S   5        M     U R                  XU5      nUc7  [        UR                  5       5      n[        U5      nUS:  a  US   nUb  US   nU$ )	N)rB  rC  rD  rE  rH  DASHDOGEETCTRXrJ  USDCUSDGUSDEURTUSDCNYJPYBRL)BTC/USDTBTC/USDCzBTC/USDzBTC/CNYzBTC/EURzBTC/AUDzBTC/BRLzBTC/JPYzETH/USDTETH/USDCzETH/USDzETH/CNYzETH/EURzETH/AUDzETH/BRLzETH/JPYzEUR/USDTzEUR/USDzEUR/USDCzUSDT/EURzUSD/EURzUSDC/EURzBTC/ETHzETH/BTC)BTC/USDT:USDTBTC/USDC:USDCzBTC/USD:USDzETH/USDT:USDTzETH/USDC:USDCzETH/USD:USDBTC/USD:BTCzETH/USD:ETHr   baserK   r:  T)
rQ  r?  rg   rY   	filter_byindex_byrZ   r\   rj   values)r8   rJ   r  current_type_marketsrL  spot_symbolsswap_symbolstarget_symbolsrK   rm   current_codemarkets_array_for_current_codeindexed_mktssymbols_array_for_current_codesymbols_lengthactive_marketsactive_symbolsri  values_lengthfirsts                       r9   get_valid_symboltestMainClass.get_valid_symbol  st   #==hM U h X)-<%%hnE>1c%j)$x191C1CDXZ`bn1o.'001OQYZ15l6G6G6I1J.!$%C!D!>!11(B`aF * >%//0DhPTUNN1c.12%%n&7&AB 3))(.IF>.5578FKMq q	$"8_Fr<   c                    S nS nUb!  UR                  U5      nUS   (       a  UnOOUnOLUR                  S   (       a  U R                  US5      nUR                  S   (       a  U R                  US5      nUb  [        SU5        Ub  [        SU5        U R                  (       d  UR                  S   (       a?  Ub<  U R
                  (       a  [        S5        SUR                  S'   U R                  X5        UR                  S   (       a?  Ub<  U R
                  (       a  [        S	5        SUR                  S'   U R                  X5        U R                  (       d  U R                  (       an  UR                  S   (       a#  Ub   SUR                  S'   U R                  X5        UR                  S   (       a#  Ub   SUR                  S'   U R                  X5        g)
Nr  TswapFz![INFO:MAIN] Selected SPOT SYMBOL:z![INFO:MAIN] Selected SWAP SYMBOL:z[INFO] ### SPOT TESTS ###defaultTypez[INFO] ### SWAP TESTS ###)
r  rt   rw  r   r2   r.   r   r   r1   run_private_tests)r8   rJ   provided_symbolspot_symbolswap_symbolr  s         r9   test_exchangetestMainClass.test_exchange  s   &___5Ff~--||F#"33HdC||F#"33HeD"4kB"4kB%%||F#(?994528  /%%h<||F#(?994528  /%%h< 6 6||F#(?28  /&&x=||F#(?28  /&&x=r<   c                 p   UR                  S5      (       d  [        SS5        gU R                  U5      n0 S/ _S/ _S/ _S/ _S	/ _S
/ _SU/_SU/_SU/_SU/_SU//_SU/_SU/_SU/_SU/_SX2/_SU/_U/U/U/U/U/U/U/U/U/U/S.
En[        S5      (       a  U/US'   U R                  (       a  U/U/U/U/U/S.nUR                  U5      nUS   nU R                  (       d=  U(       a  / US'   O0U/US'   U/US'   U/US'   U/US'   U/US '   U/US!'   U/US"'   U/US#'   U R                  XS5        g )$NFz[INFO] Skipping private testszKeys not foundTsignInfetchBalancefetchAccountsfetchTransactionFeesfetchTradingFeesr  fetchOrdersfetchOpenOrdersfetchClosedOrdersfetchMyTradesfetchLeverageTiersr   fetchTransactionsr   r   fetchBorrowInterestcancelAllOrders)
fetchCanceledOrdersfetchMarginModesfetchPositionfetchDepositcreateDepositAddressfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchBorrowRateHistoryr   z--fundedTestscreateOrder)watchBalancewatchMyTradeswatchOrderswatchPositionwatchPositionsr  r   fetchPositionsr  fetchPositionRisksetPositionModesetMarginModefetchOpenInterestHistoryr  fetchFundingHistory)check_required_credentialsr   rN  r	   r5   r  r  )r8   rJ   rK   rM  r  r  r  s          r9   r|  testMainClass.run_private_tests  s6   2259902BC%%h/
b
B
 R
 #B	

 
 2
 F8
 x
  &
 fX
 !F8*
 D6
  $
 dV
 
  "D>!
" x#
$ %+8!'$X!F%)F$(6&*V/3f'+f!%7
: _--$*8E- ==!%"( &x"(#)(E (.}}+-'( ,2(&'*0o&.4X)*,28'(*0o&5;H014:8/006x+,x.r<   c                 X   U R                   nU R                  S:X  a  [        5       (       a  gSnS n[        SU5       H  n U R	                  X!/ S5          g   Ub"  SU-   S-   [        U5      -   n[        SU-   5        g! [
         a!  nUnUR                  US-  5         S nAMg  S nAff = f)	NpyTr   r   r   z[TEST_FAILURE] Failed z : r   )	r   r7   r   rg   r   r@   r  r   r   )r8   rJ   proxy_test_namer  	exceptionro   rD   error_messages           r9   test_proxiestestMainClass.test_proxies\  s    3388t			q+&A)  BE '  4FNQbclQmmM !M12  )	q4x(()s   A>>
B)B$$B)c                 
   UR                   S:X  a  UR                  b  UR                  S:X  d   S5       eUR                  S   S   S:X  d   SUR                  S   S   -   5       eSUR                  S	   S
   ;   d#   S[	        UR                  S	   S
   5      -   5       eg UR                   S:X  aU  UR                  S:X  d   SUR                  -   5       eUR                  S   S   S:X  d   SUR                  S   S   -   5       eg g )Nbinancer(   z$binance.com hostname should be emptyapipubliczhttps://api.binance.com/api/v3z/https://api.binance.com/api/v3 does not match: zlending/union/accountsapigetz8SAPI should contain the endpoint lending/union/account, 	binanceusz
binance.usz#binance.us hostname does not match zhttps://api.binance.us/api/v3z.https://api.binance.us/api/v3 does not match: )rz   hostnameurlsr  r   )r8   rJ   s     r9   check_constructortestMainClass.check_constructort  s   ;;)#$$,0A0AR0GoIooG=='15UU  j  XI  LT  LY  LY  Z_  L`  ai  Lj  Xj  jU+x||F/CE/JJ  v  NH  KY  Zb  Zf  Zf  gm  Zn  ot  Zu  Kv  Nv  vJ[[K'$$4o6[^f^o^o6oo4=='15TT  h  WG  JR  JW  JW  X]  J^  _g  Jh  Wh  hT (r<   c                 4   UR                   S:w  a  gSUl        UR                  S5      nUS   nUS   n[        UR	                  5       5      n[        U5      S:  d   S5       e[        UR                  5       5      n[        U5      S:  d   S	5       eSUl        g)
Nr  FTr`  r.   responseHeadersr   z$Response headers should not be emptyz+Response headers values should not be empty)rz   return_response_headersfetch_tickerrZ   r\   rY   ri  )r8   rJ   r   r.   headersheaders_keysheader_valuess          r9   test_return_response_headers*testMainClass.test_return_response_headers~  s    ;;)#+/(&&z2f~()GLLN+< 1$L&LL$W^^-.=!A%T'TT%+0(r<   c                    UR                   (       a  gU R                  U5        U R                  (       d  [        US5      (       a  UR	                  S5         U R                  U5      nU(       d  [        5       (       d  [        U5        gU R                  X5        [        5       (       d  [        U5        g g ! [         a!  n[        5       (       d  [        U5        UeS nAff = f)NTr3   )
rV   r  r3   r   set_sandbox_moder5  r   r!   r  r@   )r8   rJ   rK   r3  rD   s        r9   r_   testMainClass.start_test  s    >>x(<<,XyAA%%d+	''1Fyy(O
 x099h  	99hG	s   2B8 +B8 8
C#CC#c                     [        U5      n[        U5      nUnUb  SU-   S-   nUSU-   S-   U-   -  nU(       d   U5       eg )N[]z computed: z	 stored: )r   )	r8   condr   calculated_outputstored_outputr   calculated_stringstored_stringr  s	            r9   assert_static_error!testMainClass.assert_static_error  sX     ++<=&}5?#IOM6DGXXX"]"tr<   c                 B    [        5       S-   U-   S-   n[        U5      nU$ )Nz./ts/src/test/static/markets/.jsonr
   r   r8   rz   filenamecontents       r9   load_markets_from_file$testMainClass.load_markets_from_file  s*    
  >$CCbH7Rx(r<   c                 B    [        5       S-   U-   S-   n[        U5      nU$ )Nz ./ts/src/test/static/currencies/r  r  r  s       r9   load_currencies_from_file'testMainClass.load_currencies_from_file  s(    >$FFKgUx(r<   c                    0 nU(       a5  X-   S-   n[        U5      (       d  [        SU-   5        g [        U5      X2'   U$ [        U5      n[	        S[        U5      5       H*  nXV   nUR                  SS5      n[        X-   5      n	XU'   M,     U$ )Nr  z[WARN] tests not found: r   r(   )r   r   r   r   rg   rY   rh   )
r8   foldertarget_exchanger3  pathfilesrm   fileexchange_namer  s
             r9   load_static_datatestMainClass.load_static_data  s    +g5D!$''/$67&24&8F#MF#q#e*%A8D LL"5M"6=1G$+=!	 &
 r<   c                     Uc  g UR                  S5      nSn[        S[        U5      5       HM  nUS:  d  M  X$   nUR                  S5      S:  a   UR                  S5      nUS-  nX6S   -  n  U$ US-  nX5-  nMO     U$ )N/r(   r      ?)rf   rg   rY   find)r8   url	url_partsr   rm   currentcurrent_partss          r9   remove_hostnamefrom_url%testMainClass.remove_hostnamefrom_url  s    ;IIcN	q#i.)A1u#,<<$r)$+MM#$6M3JC++C 
 s
 * 
r<   c                 D   0 nUR                  S5      n[        S[        U5      5       Hs  nX4   nUR                  S5      n[        U5      nUS:w  a  M+  US   nUS   n	U	b7  U	R                  S5      (       d  U	R                  S5      (       a  [	        U	5      n	XU'   Mu     U$ )N&r   =r  re   r  {)rf   rg   rY   
startswithr   )
r8   r  r3  partsrm   part	key_valuekeys_lengthr   values
             r9   urlencoded_to_dict testMainClass.urlencoded_to_dict  s    		#q#e*%A8D

3Ii.KaA,CaLE!)9)9#)>)>EDTDTUXDYDY"5)3K & r<   c           	         [        U5      (       a  [        U5      (       a  gU(       d  U(       d  g[        U[        5      (       a  [        U[        5      (       a  [        UR	                  5       5      n[        UR	                  5       5      n[        U5      n	[        U5      n
U R                  X:H  SXC5        [        S[        U5      5       Hf  nX{   nUR                  X5      (       a  M  UR                  X5      (       d  U R                  SSU-   XC5        XL   nX<   nU R                  XXX\5        Mh     g[        U[        5      (       az  [        U[        5      (       ae  [        U5      n[        U5      nU R                  UU:H  SXC5        [        S[        U5      5       H  nXK   nX;   nU R                  XUUU5        M!     g[        U5      (       a  S OUn[        U5      (       a  S OUnU(       a  [        U5      OSnU(       a  [        U5      OSnSU-   S-   U-   nU(       a(  U R                  S	:w  a  U R                  UU:H  UXCU5        g[        U[        5      n[        U[        5      n[        U[        5      n[        U[        5      nUS L nUS L nUU:H  =(       a    UU:H  =(       a    UU:H  nU R                  US
XCU5        U=(       d    UnU=(       d    Un U=(       d    Un!U(       d  U (       d  U!(       a  U R                  S	:X  d  U R                  S:X  a}  Sn" UR                  U5        Sn"U"(       a6  U R                  UR                  U5      UR                  U5      :H  UXCU5        gU R                  [        U5      [        U5      :H  UXCU5        gU R                  [        U5      [        U5      :H  UXCU5        gU R                  S	:X  aL  UR!                  U5      n$UR!                  U5      n%U R                  [        U$5      [        U%5      :H  UXCU5        gUR                  U5      n&UR                  U5      n'U R                  U&U':H  UXCU5        g! [         a  n#Sn" S n#A#GN9S n#A#ff = f)NTzoutput length mismatchr   Fzoutput key missing: 	undefinedzoutput value mismatch: != C#zoutput type mismatchGO)r    r   r   rZ   r\   rY   r  rg   r   assert_new_and_stored_outputr   r6   boolparse_to_numericr@   r   number_to_string)(r8   rJ   	skip_keys
new_outputr  strict_type_checkasserting_keystored_output_keysnew_output_keysstored_keys_lengthnew_keys_lengthrm   r   stored_value	new_valuestored_array_lengthnew_array_lengthstored_itemnew_itemsanitized_new_outputsanitized_stored_outputnew_output_stringstored_output_stringmessage_erroris_computed_boolis_stored_boolis_computed_stringis_stored_stringis_computed_undefinedis_stored_undefinedshould_be_same
is_boolean	is_stringis_undefined	is_numberrD   stringified_new_outputstringified_stored_outputnumeric_new_outputnumeric_stored_outputs(                                           r9   "assert_new_and_stored_output_inner0testMainClass.assert_new_and_stored_output_inner  s   $$})E)E-}d++*Z2N2N!%m&8&8&:!;":??#45O!$%7!8!/2O$$%7%JLdfs  A1c"456(+$$S44 ))#??,,U4JS4PR_l,1&O	11(y`qw 7H w t,,*Z2N2N"%m"4":$$%8<L%LNfhu  C1c-01+.%=11(xQ\^op 2n c -:*,E,E4J /<]/K/KdR_#=Q$8 9WbCZ3'>#?`k 47HH6QThhM dii4&7 (()=AX)XZgiv  ER  SR O %//CT$J ",-Dd"K&01Es&K"$./F$L )=)E%'>$'F#"2n"D  "fK]aqKq  "f  yN  Re  ye((9OQ^lyz-?
.B2B	4K8Kl		T)tyyD/@$)	.$556JK(,I % 44X5N5NOc5dhp  iB  iB  CZ  i[  6[  ]j  ly  GT  U#' 44]CT5UYfg{Y|5|  L  N[  iv  w#'00?P1QUbcwUx1x  {H  JW  er  s#yyD(191J1JK_1`.4<4M4MNe4f1005K1LPSTmPn1np}  @M  [h  i
  .6-F-FGX-Y*080I0IJ^0_-001CG\1\^kmz  IV  W+  ) .(-I.s   #Q 
Q4'Q//Q4c                     Sn U R                  XX4XV5      nU$ ! [         aR  nU R                  (       a:  U R                  U5      S-   S-   U R                  U5      -   S-   n	[	        SU	-   5        UeS nAff = f)NTz(calculated)r  z(stored)z[TEST_FAILURE_DETAIL])r&  r@   r.   var_to_stringr   )
r8   rJ   r  r  r  r  r  r   rD   r  s
             r9   r   *testMainClass.assert_new_and_stored_outputG  s    	99(zj{  LC 
  	yy $ 2 2: > ORX X[_[m[mn{[| |  @J  !J,}<=G		s    
A5AA00A5c                 V    S nUc  SnU$ [        U5      (       a  SnU$ [        U5      nU$ )Nr  null)r    r   )r8   obj
new_strings      r9   r)  testMainClass.var_to_stringR  sE    
;$J
 	 3J  (,Jr<   c                    XE:w  a7  U R                  U5      nU R                  U5      n	U R                  X:H  SX5        Uc  Uc  Ub  Ub  UR                  S5      n
UR                  S5      nUR                  U
S5      nUR                  US5      nUc  Uc  gU R	                  U5      nU R	                  U5      nU R                  XX5        gUS:X  aG  UbD  UbA  [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        U5      nOUS:X  a)  Ub&  Ub#  U R	                  U5      nU R	                  U5      nOkUS:X  ae  UR                  S5      (       d  UR                  S	5      (       a  [        U5      n[        U5      nO"U R	                  U5      nU R	                  U5      nU R                  XXv5        g)
Nzurl mismatchr  re   Tr   
urlencodedbothr  r  )
r  r  rf   r   r  r   r   r   r   r  )r8   rJ   typer  
stored_urlrequest_urlr  r  
first_pathsecond_pathstored_url_partsnew_url_partsstored_url_querynew_url_querystored_url_paramsnew_url_paramss                   r9   assert_static_request_output*testMainClass.assert_static_request_output\  s   $55jAJ66{CK$$Z%>PZh !
(:&[-D#-#3#3C#8  + 1 1# 6#+#6#67G#K  ( 3 3M1 E$,=3H  $($;$;<L$M!!%!8!8!G11(~i6>}8z?U--- *= 9*c**'
3
\!}'@zG] 33MBM00<JV^'',,0H0H0M0M *= 9'
3
 $ 7 7 F!44Z@
))(zYr<   c                 *    U R                  XX4S5        g )NF)r   )r8   rJ   r  computed_resultstored_results        r9   assert_static_response_output+testMainClass.assert_static_response_output  s    ))(_der<   c                     Uc  g / n[        S[        U5      5       H;  nX   n[        U5      (       a  UR                  S 5        M*  UR                  U5        M=     U$ )Nr   )rg   rY   r    rj   )r8   input	new_inputrm   r  s        r9   sanitize_data_input!testMainClass.sanitize_data_input  sZ    =	q#e*%AhGW%%  &  ) & r<   c           	         S nS nU R                   (       a  [        SUSUS   5         [        5       (       d  [        XU R	                  US   5      5        O[        XU R	                  US   5      5          UR                  US5      n	U R                  XXSS   XyU5        g! [         a9  n[        U[        5      (       d  UeUR                  nUR                  n S nANiS nAff = f! [         ae  nSU l        SU R                  -   S	-   S-   UR                  -   S
-   S-   U-   S
-   S-   US   -   S
-   [!        U5      -   n
[        SU
-   5         S nAgS nAff = f)Nz[INFO] STATIC REQUEST TEST::descriptionrF  outputr  Tr  ][STATIC_REQUEST]r  r>   )r.   r   r   r   rH  r   r@   r   r   last_request_bodylast_request_urlr   r>  request_tests_failedr6   rz   r   )r8   rJ   rL   datar3  r  rM  r5  rD   call_outputr  s              r9   test_request_statically%testMainClass.test_request_statically  s   99.T-=PQ		49904C[C[\`ah\iCjk5hH`H`aefmanHop	3"--dH=K--hieVapvw
   	4q"677//F"33K		4  	3(,D%$))O.AACG(++UX[[^aadjjmppsvvy}  L  zM  M  PS  S  Vg  hi  Vj  jM!M122		3s6   -B  B  6)C&  
C#*/CC#&
E0AEEc                 h   UR                  US5      n[        XS   5      nU R                  (       a  [        SUSUS   5         [	        5       (       d1  [        XU R                  US   5      5      nU R                  XcXu5        O1[        XU R                  US   5      5      nU R                  XcX5         [        US 5        g! [         ae  n	SU l
        SU R                  -   S	-   S-   UR                  -   S
-   S-   U-   S
-   S-   US   -   S
-   [        U	5      -   n
[        SU
-   5         S n	A	NwS n	A	ff = f)NparsedResponsehttpResponsez[INFO] STATIC RESPONSE TEST:rK  rL  rF  Tr  z][STATIC_RESPONSE]r  r>   )r   r   r.   r   r   r   rH  rC  r   r@   response_tests_failedr6   rz   r   )r8   rJ   rL   r  rR  expected_resultmocked_exchangeunified_resultunified_result_syncrD   r  s              r9   test_response_statically&testMainClass.test_response_statically  sr   "--d4DE,XN7KL99/d=>QR
	399!A(TXTlTlmqrymzT{!|22?~o&KH^b^v^vw{  }D  xE  _F  'G#22?Obt
 	8T*  	3)-D&$))O.BBSH8;;VY\\_bbekknqqtwwz~  @M  {N  N  QT  T  Wh  ij  Wk  kM!M122	3s   ?C 0C 
D1AD,,D1c                     U R                  U5      nU R                  U5      n[        U0 SU_SU_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SSSS.SSS./_SSSSS0 S ._5      nX4l        U$ )!Nr;  rK  rP   F	rateLimitre   r   zhttp://fake:8080r   apiKeyr   secretsecretsecretpasswordwalletAddresswallet
privateKeyB0xff3bdd43534543d421f05aec535965b5050ad6ac15345435345435453495e771uidtokenlogin	accountId12345accounts	myAccountrJ  )rz   rM  rX  r   Tl   I5 )enableUnifiedAccountenableUnifiedMarginaccessTokenexpiresleverageBrackets)r  r  r   rK  )r8   r  r;  rK  rJ   s        r9   init_offline_exchange#testMainClass.init_offline_exchange  s8   --m<33MB
  1
w1
*1
 u1
 	1

 +1
 ,1
 e1
 n1
 
1
 X1
 ^1
 51
 W1
 W1
 1
  
 !1
. (,',&*$&/1
 > )r<   c           	         U R                  U5      nUR                  US0 5      nUR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US5      n	U	(       a  [        U	5      Ul        UR                  US5      n
U
(       a  Xl	        UR                  U5        UR                  US0 5      n[        UR                  5       5      n[        S[        U5      5       GHz  nX   nX   n[        S[        U5      5       GHT  nUU   nUR                   nUR                  US0 5      nUR                  UR#                  UU5      5        UR                  US	5      nUb  UU:w  a  Mf  UR%                  US
S5      nU(       a  M  UR                  US
S5      nUS:w  a  M  UR%                  USS5      nU(       a  U R&                  S:X  a  M  UR%                  USS5      nU(       a  U R&                  S:X  a  M  UR                  US5      nUR                  US/ 5      nU R)                  XNUUU5        UR+                  UR#                  U0 5      5      Ul        GMW     GM}     [-        5       (       d  [/        U5        g)Nr   rb  rc  rh  rf  ro  methodsr   rL  disabledFr(   
disabledCSr  
disabledGOr  
outputTypeskipKeysT)rv  r   r   r   rb  rc  rh  rf  	safe_listro  extend_exchange_optionsr   rZ   r\   rg   rY   r   r   	safe_boolr6   rT  convert_to_safe_dictionaryr   r!   )r8   r  exchange_datar)  rJ   global_optionsapi_keyrc  private_keywallet_addressro  ry  methods_namesrm   rL   r+  ro   r3  old_exchange_optionstest_exchange_optionsrL  is_disableddisabled_stringis_disabled_c_sharpis_disabled_gor3  r  s                              r9    test_exchange_request_statically.testMainClass.test_exchange_request_statically  s   --m<!++M9bI&&}h?!'lHO%%mX>!&kHO**=,G"%k"2H!--m_M%(%8H"%%mZ@ (((8%%mYCW\\^,q#m,-A"%FoG1c'l+ '/'7'7$(0(;(;FIr(R%001E1EFZ\q1rs&11&-H)	[0H&00UK"*"6"6vz2"N"b(&.&8&8u&U#&DII,=!)!3!3FL%!P!tyyD'8++M<H$//z2N	,,XvtYW#+#F#FxG[G[\prtGu#v 3 , .: yy(Or<   c                 \   U R                  U5      nUR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US0 5      n	UR                  US0 5      n
UR                  U
5        [        U	R                  5       5      n[        S[        U5      5       GHs  nX   nX   n[        S[        U5      5       GHM  nX   nUR                  US5      nUR                  nUR                  US0 5      nUR                  UR                  UU5      5        UR                  US	S
5      nU(       a  Mv  UR                  USS
5      nU(       a  U R                   S:X  a  M  UR                  USS
5      nU(       a  U R                   S:X  a  M  Ub  UU:w  a  M  UR                  USS
5      nU(       a  U R                   S:X  a  GM  UR                  US/ 5      nU R#                  XMUU5        UR                  UR                  U0 5      5        GMP     GMv     [%        5       (       d  ['        U5        g)Nrb  rc  rh  rf  ry  r   r   rL  rz  Fr{  r  disabledPHPPHPr|  r  r~  T)rv  r   r   rb  rc  rh  rf  r   r  rZ   r\   rg   rY   r   r   r  r6   r^  r   r!   )r8   r  r  r)  rJ   r  rc  r  r  ry  r   r  rm   rL   r+  ro   r3  rL  r  r  r  r  is_disabled_phpr  r  s                            r9   !test_exchange_response_statically/testMainClass.test_exchange_response_statically  s_   --m<&&}h?!'lHO%%mX>!&kHO**=,G"%k"2H!--m_M%(%8H"%%mYC%%mYC((1W\\^,q#m,-A"%FoG1c'l+ &11&-H'/'7'7$(0(;(;FIr(R%001E1EFZ\q1rs&00UK&.&8&8u&U#&DII,="*"4"4V]E"R"		U(:)	[0H!)!3!3FL%!P!tyyD'8$//z2N	--h	6R 001E1EFZ\^1_`3 , .: yy(Or<   c                     Ub  gSnUS   n[        UR                  5       5      n[        S[        U5      5       H'  nXg   nXX   n	[        U	5      n
UR	                  XJ5      nM)     U$ )Nre   r   ry  )rZ   r\   rg   rY   sum)r8   rJ   r  r)  r  ry  r  rm   rL   r+  results_lengths              r9   !get_number_of_tests_from_exchange/testMainClass.get_number_of_tests_from_exchangeT  sm     	*W\\^,q#m,-A"%FoG \N,,s3C	 .
 
r<   c                    [        S0 5      nUR                  USS5      nU(       a"  U R                  S:X  a  [        SU-   S-   5        gUR                  USS5      nU(       a"  U R                  S	:X  a  [        SU-   S
-   5        gUR                  USS5      nU(       a"  U R                  S:X  a  [        SU-   S-   5        gUR                  USS5      nU(       a"  U R                  S:X  a  [        SU-   S-   5        gg)NExchange
disabledPyFPYz[TEST_WARNING] Exchange z is disabled in pythonTr  r  z is disabled in phpr{  r  z is disabled in c#r|  r  z is disabled in go)r   r  r6   r   )r8   r  r  rJ   is_disabled_pyr  r  r  s           r9   check_if_exchange_is_disabled+testMainClass.check_if_exchange_is_disableda  s     R0!++M<OtyyD0+m;>VVW",,]M5Q		U 2+m;>SST&00eTDII$5+m;>RRS!++M<OtyyD0+m;>RRSr<   c                 (    U R                  SX5        g)NrequestTrun_static_tests)r8   r  r)  s      r9   rS   &testMainClass.run_static_request_testsu  s    iDr<   c                    [        5       S-   U-   S-   nU R                  XB5      nUc  g[        UR                  5       5      n[	        S0 5      n/ nSn	U(       a  [        SU-   5        U(       a  [        SU-   5        [        S[        U5      5       H  n
Xj   nX[   nU R                  X5      nU(       a  M%  U R                  X|U5      nUR                  X5      n	US:X  a#  UR                  U R                  XU5      5        Mq  UR                  U R                  XU5      5        M      U  U R                  (       d  U R                   (       a  ['        S5        g [)        5       (       a  SOSnS	U R"                  -   S-   U-   S-   [+        U	5      -   S-   U-   S-   n[        SU-   5        g ! [         aK  nUS:X  a  SU l        OSU l        S	U R"                  -   S
-   [%        U5      -   n[        SU-   5         S nANS nAff = f)Nz./ts/src/test/static/r  Tr  r   z[INFO:MAIN] Exchange to test: z[INFO:MAIN] Testing only: r  r  rN  r>   re   z[SYNC]r(   r  z[TEST_SUCCESS] z static z tests passed.r   )r
   r  rZ   r\   r   r   rg   rY   r  r  r  rj   r  r  r@   rQ  rY  r6   r   r   r   r   )r8   r3  r  r)  r  static_data	exchangesrJ   r(  r  rm   r  r  rz  number_of_testsrD   r  prefixsuccess_messages                      r9   r  testMainClass.run_static_testsy  s   "99D@3F++FD))+,	 R01OCD-	9:q#i.)A%LM'6M99-WH"DDX^ghO,,s4Cy  E Emdm no F F}en op *	3 $$(B(BN")))X"F!DIIo3f<?PPSVWZS[[^hhkoo  sC  COO+,  	3y ,0)-1*$))O.AADUVWDXXM!M122	3s   (F' '
G<1AG77G<c                 (    U R                  SX5        g)NresponseTr  )r8   r  tests      r9   rT   'testMainClass.run_static_response_tests  s     	j->r<   c                    U R                  5       U R                  5       U R                  5       U R                  5       U R	                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R!                  5       U R#                  5       U R%                  5       U R'                  5       U R)                  5       U R+                  5       U R-                  5       U R/                  5       U R1                  5       U R3                  5       U R5                  5       U R7                  5       /nU  SU R8                  -   S-   n[;        SU-   5        [=        S5        g)Nr  z&][TEST_SUCCESS] brokerId tests passed.r   r   T)test_binancetest_okxtest_cryptocom
test_bybittest_kucointest_kucoinfuturestest_bitget	test_mexctest_htxtest_wootest_bitmarttest_coinex
test_bingxtest_phemextest_blofintest_coinbaseinternationaltest_coinbase_advancedtest_woofi_pro
test_oxfuntest_xttest_paradextest_hashkeytest_coincatch	test_defxtest_cryptomustest_derivetest_mode_tradetest_backpackr6   r   r   )r8   r(  r  s      r9   rU   !testMainClass.run_broker_id_tests  s    %%'$:M:M:OQUQ`Q`Qbdhdtdtdvx|  yP  yP  yR  TX  Td  Td  Tf  hl  hv  hv  hx  z~  zG  zG  zI  KO  KX  KX  KZ  \`  \m  \m  \o  qu  qA  qA  qC  EI  ET  ET  EV  X\  Xh  Xh  Xj  lp  l|  l|  l~  @D  @_  @_  @a  cg  c~  c~  c@  BF  BU  BU  BW  Y]  Yh  Yh  Yj  lp  lx  lx  lz  |@  |M  |M  |O  QU  Qb  Qb  Qd  fj  fy  fy  f{  }A  }K  }K  }M  OS  Ob  Ob  Od  fj  fv  fv  fx  z~  zN	  zN	  zP	  R	V	  R	d	  R	d	  R	f	  g				/,TTX'(Ar<   c                    U R                  S5      nSnSnSnS n UR                  SSSSS	5        US
   n[        U5      nUR                  U5      (       d   SU-   S-   U-   5       eS n	 UR                  SSSSS	5        S n
 UR                  SSSSS	5        U	S
   n[        U5      nUR                  U5      (       d   SU-   S-   U-   5       eU
S
   nUR                  U5      (       d   SU-   S-   U-   5       eS n SSSSSS.SSSSS./nUR                  U5        US   n[        S[        U5      5       H3  nUU   nUS
   nUR                  U5      (       a  M%   SU-   S-   U-   5       e   [        5       (       d  [        U5        g! [         a&  nU R                  UR                  5      n S nAGNS nAff = f! [         a&  nU R                  UR                  5      n	 S nAGNfS nAff = f! [         a&  nU R                  UR                  5      n
 S nAGNS nAff = f! [         a&  nU R                  UR                  5      n S nAGN0S nAff = f)Nr  z
x-TKT5PX2Fz
x-cvBPrNm9z
x-xcKtGhcur`  limitbuyre    N  newClientOrderIdzbinance - spot clientOrderId: z does not start with spotIdrc  re  zbinance - swap clientOrderId: z does not start with swapIdz%binance - swap clientOrderIdInverse: selli )rK   r3  sideamountpricer  )rK   r3  r  r  batchOrdersr   z&binance createOrders - clientOrderId: T)rv  create_orderr@   r  rO  r   r  create_ordersrg   rY   r   r!   )r8   rJ   spot_idswap_idinverse_swap_idspot_order_requestrD   client_order_idspot_id_stringswap_order_requestswap_inverse_order_requestclient_order_id_swapswap_id_stringclient_order_id_inversecreate_orders_requestordersbatch_ordersrm   r  current_client_order_ids                       r9   r  testMainClass.test_binance  s"   --i8&!	U!!*guaG --?@W)).99  	_;[^m;m  qN  <N  Q_  <_  	_9!	U!!/7E1eL &*"	]!!-%EJ  22DEW#..~>>  	i@`cw@w  {X  AX  [i  Ai  	i>"<=O"P&11/BB  	xDk  oF  EF  If  Ef  ix  Ex  	xB $	X 	F ""6* -];q#l+,A"1oG&-.@&A#*55nEE  {Go  sJ  HJ  Mj  Hj  m{  H{  {E - yy(O]  	U!%!8!89S9S!T	U  	U!%!8!89S9S!T	U
  	])-)@)@A[A[)\&	]0  	X$($;$;H<V<V$W!	Xs_   F )F9 G, : H 
F6F11F69
G)G$$G),
H6HH
I)I

Ic                    U R                  S5      nSnS n UR                  SSSSS5        US   S	   n[        U5      nUR                  U5      (       d   S
U-   S-   U-   5       eUS   S   nXr:X  d   SU-   S-   U-   5       eS n UR                  SSSSS5        US   S	   n	U	R                  U5      (       d   SU	-   S-   U-   5       eUS   S   n
X:X  d   SU-   S-   U
-   5       e[        5       (       d  [        U5        g! [         a  n[        UR                  5      n S nANS nAff = f! [         a  n[        UR                  5      n S nANS nAff = f)Nokx6b9ad766b55dBCDEr`  r  r  re   r  r   clOrdIdzokx - spot clientOrderId:  does not start with id: tagz
okx - id: z different from spot tag: rc  zokx - swap clientOrderId:  different from swap tag: T	rv  r  r@   r   rO  r   r  r   r!   )r8   rJ   rz   r  rD   r  	id_stringspot_tagr  r  swap_tags              r9   r  testMainClass.test_okx  s   --e4!	H!!*guaG -Q/	:G	)))44  	O6RUd6d  hC  7C  FO  7O  	O4%a(/~Z|b03OORZZZ~!	H!!/7E1eL  2!4Y?#..y99  	Y;WZn;n  rM  <M  PY  <Y  	Y9%a(/~Z|b03OORZZZ~yy(O%  	H!+H,F,F!G	H  	H!+H,F,F!G	Hs/   D  D,  
D)
D$$D),
E6EEc                 @   U R                  S5      nSnUR                  5         S n UR                  SSSSS5        US   S	   nXR:X  d   S
U-   S-   U-   5       e[        5       (       d  [        U5        g! [         a  n[	        UR
                  5      n S nAN\S nAff = f)N	cryptocomCCXTr`  r  r  re   r  params	broker_idzcryptocom - id:  different from  broker_id: T)rv  r   r  r@   r   rO  r   r!   r8   rJ   rz   r  rD   r  s         r9   r  testMainClass.test_cryptocom  s    --k:	=!!*guaG H%k2	d 2R 7:X X[d ddyy(O  	= !;!;<G	=s   A4 4
B>BBc                 4   U R                  S5      nS nSnUR                  S   U:X  d   S5       e UR                  SSSSS	5        US
   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [         a  nUR                  n S nANLS nAff = f)Nbybitr  brokerIdid not in optionsr`  r  r  re   r  Refererzbybit - id:  not in headers.Trv  r   r  r@   last_request_headersr   r!   r8   rJ   req_headersrz   rD   s        r9   r  testMainClass.test_bybit  s    --g6
+r1F3FF1	8!!*guaG 9%+U^b-@CU-UU+yy(O  	8"77K	8s   A7 7
BBBc                    U R                  S5      nS nUR                  S   S   S   nUR                  S   S   S   nUS:X  d   SU-   S-   5       eUS	:X  d   S
U-   S-   5       e UR                  SSSSS5        SnUS   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [         a  nUR                  n S nANNS nAff = f)Nkucoinpartnerr  rz   r   ccxtzkucoin - id:  not in optionsz$9e58cc35-5b5e-4133-92ec-166e3f077cb8zkucoin - key:  not in options.r`  r  r  re   r  KC-API-PARTNERr  Tr  )r8   rJ   r
  r  spot_keyrD   rz   s          r9   r  testMainClass.test_kucoin$  s    --h7""9-f5d;##I.v6u=& O/G";>O"OO AAsCSV^C^asCssA	8!!*guaG +,2]Ob4HK]4]]2yy(O  	8"77K	8s   %B- -
C7CCc                    U R                  S5      nS nSnUR                  S   S   S   nUR                  S   S   S   nXC:X  d   SU-   S-   5       eUS	:X  d   S
U-   S-   5       e UR                  SSSSS5        US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [         a  nUR                  n S nANLS nAff = f)Nkucoinfuturesccxtfuturesr  futurerz   r   zkucoinfutures - id: r  z$1b327198-f30c-4f14-a0ac-918871282f15zkucoinfutures - key: rc  r  r  re   r  r  r  Tr  )r8   rJ   r
  rz   	future_id
future_keyrD   s          r9   r   testMainClass.test_kucoinfutures6  s    --o>$$Y/9$?	%%i0:5A
W 6 BEW WWCC~E\_iEil~E~~C	8!!/7E1eL +,2d4JR4ORd4dd2yy(O  	8"77K	8s   &B, ,
C6CCc                 @   U R                  S5      nS nSnUR                  S   U:X  d   SU-   S-   5       e UR                  SSSS	S
5        US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [         a  nUR                  n S nANLS nAff = f)Nbitgetp4svebrokerzbitget - id: r  r`  r  r  re   r  X-CHANNEL-API-CODEr  Tr  r	  s        r9   r  testMainClass.test_bitgetG  s    --h7)R/Y21EHY1YY/	8!!*guaG /0B6a"8LOa8aa6yy(O  	8"77K	8   A= =
BBBc                 `   U R                  S5      nS nSnUR                  S   U:X  d   SU-   S-   5       eUR                  5          UR                  SSSS	S
5        US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [         a  nUR
                  n S nANLS nAff = f)Nmexcr  r  zmexc - id: r  r`  r  r  re   r  sourcer  Trv  r   r   r  r@   r  r   r!   r	  s        r9   r  testMainClass.test_mexcU  s    --f5)R/W1CFW1WW/	8!!*guaG 8$*SMB,>AS,SS*yy(O  	8"77K	8   B 
B-B((B-c                    U R                  S5      nSnS n UR                  SSSSS5        US   n[        U5      nUR                  U5      (       d   S	U-   S
-   U-   5       eS n UR                  SSSSS5        S n UR                  SSSSS5        US   n	U	R                  U5      (       d   SU	-   S
-   U-   5       eUS   n
U
R                  U5      (       d   SU
-   S
-   U-   5       e[        5       (       d  [        U5        g! [         a  n[        UR                  5      n S nANS nAff = f! [         a  n[        UR                  5      n S nANS nAff = f! [         a  n[        UR                  5      n S nANS nAff = f)Nhtx
AA03022abcr`  r  r  re   r  zclient-order-idzhtx - spot clientOrderId r  rc  re  channel_codezhtx - swap channel_code z htx - swap inverse channel_code Tr  )r8   rJ   rz   r  rD   r  r  r  r  r  r  s              r9   r  testMainClass.test_htxd  s   --e4!	H!!*guaG -->?G	)))44  	N6QTc6c  gB  7B  EN  7N  	N4!	H!!/7E1eL &*"	P!!-%EJ  2.A#..y99  	W;UXl;l  pK  <K  NW  <W  	W9"<^"L&11)<<  	e>`cz>z  ~Y  ?Y  \e  ?e  	e<yy(O-  	H!+H,F,F!G	H  	H!+H,F,F!G	H
  	P)3H4N4N)O&	PsG   D %D/ =E 
D,D''D,/
E9EE
F%E??Fc           	      6   U R                  S5      nSnS n UR                  SSSSS5        US   n[        U5      nUR                  U5      (       d   S	U-   S
-   U-   5       eS n UR                  SSSSSSS05        US   nUR                  U5      (       d   SU-   S
-   U-   5       e[        5       (       d  [        U5        g! [         a  n[        UR                  5      n S nANS nAff = f! [         a  n[        UR                  5      n S nANS nAff = f)Nwooz$bc830de7-50f3-460b-9ee0-f430f83f9dadr`  r  r  re   r  r  zwoo - broker_id: r  rc  	stopPricerO   r  zwoo - brokerId: Tr  )	r8   rJ   rz   r  rD   r  r  stop_order_requestclient_order_id_stops	            r9   r  testMainClass.test_woo  sU   --e43!	H!!*guaG '{3	G	##I..y0Ci0ORm0mpy0yy.!	H!!/7E1eUN 
  2*=#..y99  	O;MPd;d  hC  <C  FO  <O  	O9yy(O#  	H!+H,F,F!G	H  	H!+H,F,F!G	Hs/   C %C/ 
C,C''C,/
D9DDc                 `   U R                  S5      nS nSnUR                  S   U:X  d   SU-   S-   5       eUR                  5          UR                  SSSS	S
5        US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [         a  nUR
                  n S nANLS nAff = f)NbitmartCCXTxBitmart000r  zbitmart - id: r  r`  r  r  re   r  zX-BM-BROKER-ID not in headersTr&  r	  s        r9   r  testMainClass.test_bitmart  s    --i8
+r1\3Cb3HK\3\\1	8!!*guaG +,2]4Dr4IL]4]]2yy(O  	8"77K	8r(  c                    U R                  S5      nSnUR                  S   U:X  d   SU-   S-   5       eS n UR                  SSSS	S
5        US   n[        U5      nUR                  U5      (       d   SU-   S-   U-   5       e[        5       (       d  [        U5        g! [         a  n[	        UR
                  5      n S nANuS nAff = f)Ncoinexzx-167673045r  zcoinex - id: r  r`  r  r  re   r  	client_idzcoinex - clientOrderId: r  T)
rv  r   r  r@   r   rO  r   r  r   r!   )r8   rJ   rz   r  rD   r  r  s          r9   r  testMainClass.test_coinex  s    --h7
+r1[?R3GJ[3[[1!	H!!*guaG -[9G	)))44  	M6PSb6b  fA  7A  DM  7M  	M4yy(O  	H!+H,F,F!G	Hs   B 
C'CCc                 @   U R                  S5      nS nSnUR                  S   U:X  d   SU-   S-   5       e UR                  SSSS	S
5        US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [         a  nUR                  n S nANLS nAff = f)Nbingxr  r  zbingx - id: r  r`  r  r  re   r  zX-SOURCE-KEYr  Tr  r	  s        r9   r  testMainClass.test_bingx  s    --g6)R/X"1DGX1XX/	8!!*guaG >*b0Z.22EHZ2ZZ0yy(O  	8"77K	8r"  c                 R   U R                  S5      nSnS n UR                  SSSSS5        US   n[        U5      nUR                  U5      (       d   S	U-   S
-   U-   5       e[        5       (       d  [        U5        g! [         a  n[        UR                  5      n S nANuS nAff = f)Nphemex
CCXT123456r`  r  r  re   r  clOrdIDzphemex - clOrdID: r  Tr  )r8   rJ   rz   r  rD   r  r  s          r9   r  testMainClass.test_phemex  s    --h7	=!!*guaG "),G	)))44  	G6J_6\_z6z  ~G  7G  	G4yy(O  	= !;!;<G	=s   A= =
B&B!!B&c                 P   U R                  S5      nSnS n UR                  SSSS5        US   n[        U5      nUR                  U5      (       d   SU-   S	-   U-   5       e[        5       (       d  [        U5        g
! [         a  n[        UR                  5      n S nANuS nAff = f)Nblofinec6dd3a7dd982d0bzLTC/USDT:USDTr  r  re   r  zblofin - brokerId: r  Tr  )r8   rJ   rz   r  rD   r  r  s          r9   r  testMainClass.test_blofin  s    --h7	=!!/8UAF J'	G	##I..{0E	0QTo0or{0{{.yy(O  	= !;!;<G	=s   A< <
B%B  B%c                    U R                  S5      nSUR                  S'   SnUR                  S   U:X  d   S5       eS n UR                  SSS	S
S5        US   nUR                  [        U5      5      (       d   S5       e[        5       (       d  [        U5        g! [         a  n[	        UR
                  5      n S nANjS nAff = f)Ncoinbaseinternationalrandom	portfolionfqkvdjpr  r  rd  r  r  re   r  r  $clientOrderId does not start with idT
rv  r   r  r@   r   rO  r  r   r   r!   r8   rJ   rz   r  rD   r  s         r9   r  (testMainClass.test_coinbaseinternational  s    --.EF(0%
+r1F3FF1	=!!/7E1eL ""34))#b'22Z4ZZ2yy(O  	= !;!;<G	=s    B 
C%B??Cc                 p   U R                  S5      nSnUR                  S   U:X  d   S5       eS n UR                  SSSSS	5        US
   nUR                  [        U5      5      (       d   S5       e[        5       (       d  [        U5        g! [         a  n[	        UR
                  5      n S nANjS nAff = f)Ncoinbaser  r  r  ra  r  r  re   r  r  rN  TrO  rP  s         r9   r  $testMainClass.test_coinbase_advanced	  s    --j9
+r1F3FF1	=!!*guaG ""34))#b'22Z4ZZ2yy(O  	= !;!;<G	=s   B 
B5B00B5c                 H   U R                  S5      nSUl        SnUR                  5         S n UR                  SSSSS5        US	   nXR:X  d   S
U-   S-   U-   5       e[        5       (       d  [        U5        g! [         a  n[        UR                  5      n S nANYS nAff = f)Nwoofipro+secretsecretsecretsecretsecretsecretsecretsr  rd  r  r  re   r  	order_tagzwoofipro - id: r  T	rv  rc  r   r  r@   r   rO  r   r!   r  s         r9   r  testMainClass.test_woofi_pro  s    --j9G	=!!/7E1eL K(	c 1B 69W WZc ccyy(O  	= !;!;<G	=   A8 8
B!BB!c                 L   U R                  S5      nSUl        SnUR                  5         S n UR                  SSSSS5        US	   nUS
   nUS   nXr:X  d"   S[        U5      -   S-   [        U5      -   5       eg! [         a  n[        UR                  5      n S nAN[S nAff = f)NoxfunrW  r   z
BTC/USD:OXr  r  re   r  r  r   r%  zoxfun - id: r  T)rv  rc  r   r  r@   r   rO  r   )r8   rJ   rz   r  rD   r  rv  r  s           r9   r  testMainClass.test_oxfun(  s    --g6G	=!!,5I "q	(O	jR 8;Y Y\_`i\j jj  	= !;!;<G	=s   A: :
B#BB#c                    U R                  S5      nSnS n UR                  SSSSS5        US   nXR:X  d   S	U-   S
-   U-   5       eS n UR                  SSSSS5        US   nXr:X  d   S	U-   S
-   U-   5       e[        5       (       d  [        U5        g! [         a  n[        UR                  5      n S nANS nAff = f! [         a  n[        UR                  5      n S nANS nAff = f)Nxtr  r`  r  r  re   r  mediaz	xt - id: r  rc  clientMediaTrv  r  r@   r   rO  r   r!   )r8   rJ   rz   r  rD   
spot_mediar  
swap_medias           r9   r  testMainClass.test_xt8  s   --d3!	H!!*guaG (0
]r!14P!PS]!]]!	H!!/7E1eL (6
]r!14P!PS]!]]yy(O  	H!+H,F,F!G	H  	H!+H,F,F!G	Hs/   B 	B? 
B<B77B<?
C(	C##C(c                    U R                  S5      nSUl        SUl        SUR                  S'   SSSS	S
SSSSSSSSSSSS./SSSSS.UR                  S'   S nSnUR                  S   U:X  d   SU-   S -   5       eUR	                  5          UR                  S!S"S#S$S%5        US&   U:X  d   SU-   S'-   5       e[        5       (       d  [        U5        g(! [         a  nUR                  n S nANLS nAff = f))Nparadex*0xc751489d24a33172541ea451bc253d7a9e98c781@c33b1eb4b53108bf52e10f636d8c1236c04c33a712357ba3543ab45f48a5cb0brk  	authTokenz(https://potc-testnet-sepolia.starknet.ioz5https://pathfinder.api.testnet.paradex.trade/rpc/v0_7PRIVATE_SN_POTC_SEPOLIAz&https://voyager.testnet.paradex.trade/A0x286003f7c7bfc3f94e8f0af48b48302e7aee2fb13c23b141479ba00832ef2c6   A0x3530cc4759d78042f1b543bf797f5f3d647cde0388c33734cf91b7f7b9314a9A0x41cb0280ebadaa75f996d8d92c6f265f6d040bb3ba442e5f86a554f1765244eA0x2c6a867917ef858d6b193a0ff9e62b46d0dc760366920d631715d58baeaca1fz	TEST USDCrX     *0x29A873159D5e14AcBd63913D4A7E2df04570c666*0x8586e05adc0C35aa11609023d4Ae6075Cb813b4CA0x6f373b346561036d98ea10fb3e60d2f459c872b1933b50b21fe6ef4fda3b75eA0x46e9237f5408b5f899e72125dd69bd55485a287aaf24663d3ebe00d237fc7ef)r   rK   decimalsl1_token_addressl1_bridge_addressl2_token_addressl2_bridge_address*0x582CC5d9b509391232cd544cDF9da036e55833Af*0x11bACdFbBcd3Febe5e8CEAa75E0Ef6444d9B45FB11155111z0.2)starknet_gateway_urlstarknet_fullnode_rpc_urlstarknet_chain_idblock_explorer_urlparaclear_addressparaclear_decimalsparaclear_account_proxy_hashparaclear_account_hashoracle_addressbridged_tokensl1_core_contract_addressl1_operator_addressl1_chain_idliquidation_feesystemConfigr  r  zparadex - id: r  zBTC/USD:USDCr  r  re   r  zPARADEX-PARTNERr7  T)
rv  rf  rh  r   r   r  r@   r  r   r!   r	  s        r9   r  testMainClass.test_paradexM  s?   --i8!M`(/%$N)`!:"J!d"#,o&iaDE[\   )U#O%$-,
(0 )R/Z1AB1FIZ1ZZ/	8!!.'5!UK ,-3^5E5JM^5^^3yy(O  	8"77K	8s   C 
C1C,,C1c                     U R                  S5      nS nSn UR                  SSSSS5        US   U:X  d   S	U-   S
-   5       e[	        5       (       d  [        U5        g! [         a  nUR                  n S nANLS nAff = f)Nhashkey10000700011r`  r  r  re   r  zINPUT-SOURCEzhashkey - id: r  Trv  r  r@   r  r   r!   r	  s        r9   r  testMainClass.test_hashkeyw  s    --i8	8!!*guaG >*b0\2BR2GJ\2\\0yy(O  	8"77K	8   A 
A='A88A=c                     U R                  S5      nS nSn UR                  SSSSS5        US   U:X  d   S	U-   S
-   5       e[	        5       (       d  [        U5        g! [         a  nUR                  n S nANLS nAff = f)N	coincatch47cfyr`  r  r  re   r  r   zcoincatch - id: r  Tr  r	  s        r9   r  testMainClass.test_coincatch  s    --k:	8!!*guaG /0B6d8JR8ORd8dd6yy(O  	8"77K	8r  c                     U R                  S5      nS n UR                  SSSSS5        SnUS   U:X  d   S	U-   S
-   5       e[	        5       (       d  [        U5        g! [         a  nUR                  n S nANNS nAff = f)NdefxzDOGE/USDC:USDCr  r  d   re   r  zX-DEFX-SOURCEzdefx - id: r  Tr  )r8   rJ   r
  rD   rz   s        r9   r  testMainClass.test_defx  s    --f5	8!!"2GUCK ?+r1Z=23EHZ3ZZ1yy(O  	8"77K	8s   A 
A='A88A=c                    U R                  S5      nS n UR                  SSSSS5        SnUS   U:X  d   S	U-   S
-   5       e[        5       (       d  [        U5        g! [         a  n[        UR                  5      n S nANWS nAff = f)N	cryptomusr`  r  r  re   r  r  r  zcryptomus - tag:  not in request.Trc  )r8   rJ   r  rD   r  s        r9   r  testMainClass.test_cryptomus  s    --k:	=!!*gvq%H u~$T&9C&?BT&TT$yy(O  	= !;!;<G	=s   A 
B'BBc                 |   U R                  S5      nSnUR                  S   U:X  d   SU-   S-   5       eS n SSSS.nSUl        S	Ul        UR	                  S
SSSSU5        US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [
         a  n[        UR                  5      n S nANUS nAff = f)Nderive*0x0ad42b8e602c2d3d475ae52d678cf63d84ab2749rz   zderive - id: r  i  
   )subaccount_idmax_feederiveWalletAddressB0x7b77bb7b20e92bbb85f2a22b330b896959229a5790e35f2f290922de3fb22ad5z	LBTC/USDCr  r  g{Gz?i  referral_codezderive - referral_code: r  T)
rv  r   rf  rh  r  r@   r   rO  r   r!   )r8   rJ   rz   r  r  rD   s         r9   r  testMainClass.test_derive  s    --h79%+U_r-ADU-UU+
	=!%'SF
 &RH""fH!!+wdFS '2-c/IB/NQc/cc-yy(O  	= !;!;<G	=s   *B 
B;B66B;c                 H   U R                  S5      nSUl        SnUR                  5         S n UR                  SSSSS5        US	   nXR:X  d   S
U-   S-   U-   5       e[        5       (       d  [        U5        g! [         a  n[        UR                  5      n S nANYS nAff = f)N	modetraderW  CCXTMODErd  r  r  re   r  rX  zmodetrade - id: r  TrY  r  s         r9   r  testMainClass.test_mode_trade  s    --k:G	=!!/7E1eL K(	d 2R 7:X X[d ddyy(O  	= !;!;<G	=r[  c                    U R                  S5      nSUl        SUl        S nSn UR                  SSSSS	5        US
   U:X  d   SU-   S-   5       e[        5       (       d  [        U5        g! [         a  nUR
                  n S nANLS nAff = f)Nbackpackz,Jcj3vxDMAIrx0G5YYfydzS/le/owoQ+VSS164zC1RXo=z,sRkC124Iazob0QYvaFj9dm63MXEVY48lDNt+/GVDVAU=1400rb  r  r  re   i  zX-Broker-Idzbackpack - id: r  T)rv  rb  rc  r  r@   r  r   r!   r	  s        r9   r  testMainClass.test_backpack  s    --j9HH	8!!*guaF =)R/\1BR1GJ\1\\/yy(O  	8"77K	8s   A+ +
B5BB)r   r0   r7   r,   r.   r6   r4   r1   r2   r  r-   rQ  r+   rY  r3   r   r   r[   r/   r5   )N)T)TN)NN)f__name__
__module____qualname____firstlineno__r,   rQ  rY  r-   r5   r+   r.   r/   r0   r1   r2   r4   r3   ri   r   r   r   r[   r  r7   r6   r   r:   rE   r?   r^   rX   r   r]   rW   r   r   r  r   r  r5  r?  rN  rQ  rw  r  r|  r  r  r  r_   r  r  r  r  r  r  r&  r   r)  r>  rC  rH  rT  r^  rv  r  r  r  r  rS   r  rT   rU   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __static_attributes__ r<   r9   r&   r&      s   H !MHNDGELIG$&!OJL
CD$&PLN,'\-^)V 57% GR)V2$ D%NB/H0h4
#
$$"Pd	&Pf0&%N7r3j('-R	6p4$">4 >   *(T* r<   r&   N)$tests_helpersr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r  r<   r9   <module>r     sG    O	  O	  O	  O	  O	  O	  O	  O	  O	\ \r<   