Files
my-Mt5Bridge/__pycache__/test_all.cpython-312.pyc
T

129 lines
24 KiB
Plaintext
Raw Normal View History

2026-07-08 21:17:02 +08:00
Ë
>+Nj;ã óÖUdZddlZddlZddlZddlZddlmZ ddlZ ddl Z dZ dZ
d Zd
Zd Zd ZdadagZeeed
<dedegefddfdZGdd«Zdededededeeeff
dZdededededeeeff
dZddedededdfdZde fdZ!dZ"e#dk(re"«yy#e$re d«ejd«YŒ£wxYw#e$re d«ejd«YŒÃwxYw) a?
Mt5Bridge end-to-end test.
Usage:
python test_all.py # default remote, read-only + check
python test_all.py --trades # enable trade test (open/close)
python test_all.py --base http://host:p # custom base URL
python test_all.py --symbol XAUUSD # custom symbol
éN)ÚCallablez&missing requests: pip install requestséz6missing websocket-client: pip install websocket-clientzzzzzzÚERRORSÚnameÚfnÚreturnc
óútjjtd|td« |«}t |t «r|d}|r"ttdt«tdz
a yttdt«tdz
a tj|«y#t$rT}ttdtdt|t«tdz
a tj|d|«Yd}~yd}~wt $rn}t#|«j$d|}ttd tdt|t«tdz
a tj|d|«Yd}~yd}~wwxYw)
Nz- Ú éÿÿÿÿÚPASSrÚFAILz ú: ÚERROR)ÚsysÚstdoutÚwriteÚC_BÚC_XÚ
isinstanceÚtupleÚprintÚC_Gr ÚC_Rr
rÚappendÚAssertionErrorÚC_DÚ ExceptionÚtypeÚ__name__)rrÚokÚmsgs ú test_all.pyÚcaser$-sFä‡JJ×Ñœu˜B˜t˜f¤S E¨Ð
‹Tˆä bœ%Ô ØB‘ˆBÙ
Ü ”Sœc˜UÐ A‰I‰Dä ”Sœc˜UÐ A‰IˆDÜ M‰M˜ øÜ ò
Tœ#˜˜b¤  a S¬¨Ð ‰ ˆÜ
˜˜˜b  %ûÜ òa“×" " Q (ˆÜ
Uœ3˜%˜r¤#  s e¬C¨5Ð ‰ ˆÜ
˜˜˜b  Ð&×'ûð (ús+±?B(Á16B(Â( E:Â1A
DÄ E:Ä A$E5Å5E:cózeZdZddededefdZddededzdefd „Zded
edefd Zdedefd Z d
edede
de
fdZ y)ÚBridgeÚbaseÚkeyÚtimeoutcóÌ|jd«|_||_||_t j
«|_|j jjd|i«y)/ú X-API-Key) Úrstripr'r(r)ÚrequestsÚSessionÚheadersÚupdate)Úselfr'r(r)s r#Ú__init__zBridge.__init__IsKØ—K‘K ÓŒ ؈ŒØˆŒ Ü×ŒØ ×ј{¨CÐpathÚparamsrcó®|jj|j|||j¬«}|j «|j «S)N)r7r))r0Úgetr'r)Úraise_for_statusÚjson)r3r6r7Úrs r#r9z
Bridge.getPsBØ F‰FJ‰J˜$Ÿ)™)˜ T +°FÀDÇLÁLˆJÓ Ø ×ÑÔØv‰vxˆr5Úbodycó®|jj|j|||j¬«}|j «|j «S)N)r;r))r0Úpostr'r)r:r;)r3r6r=r<s r#r?z Bridge.postUsBØ F‰FK‰K˜4Ÿ9™9˜+ d VÐ,°4ÀÇÁˆKÓ Ø ×ÑÔØv‰v‹xˆr5có¬|jj|j||j¬«}|j «|j «S)r))r0Údeleter'r)r:r;)r3r6r<s r#rBz
Bridge.deleteZs@Ø F‰FM‰M˜TŸY™Y˜K¨ vп ¹ ˆMÓ Ø ×ÑÔØv‰vxˆr5ÚmethodÚexpectedc óö|jj||j|fd|ji|¤Ž}|j|k(s'Jd|jd|d|j
dd«|jS)Nr)zHTTP z != réÈ)r0Úrequestr'r)Ú status_codeÚtext)r3rCr6rDÚkwr<s r#Ú
expect_statuszBridge.expect_status_s}Ø ˆDF‰FN‰N˜6 d§i¡i [°°Ð#7Ñ ÇÁÐ TÐQSÑ Ø}‰} Ò_¨E°!·-±-°ÀÀXÀJÈbÐQR×QWÑQWÐX\ÐY\ÐQ]ÐP^Ð*_Ó}‰}Ðr5)g.@)N) rÚ
__module__Ú __qualname__ÚstrÚfloatr4Údictr9r?rBÚintrK©r5r#r&r&Hsˆñ2˜2 sð2°Uó˜ð T¨D¡[ð¸Dóð
˜ð Dð¨Tóð
˜ ð
 Cð¨sð¸cðÈCôr5r&r'r(ÚsymbolÚ timeout_seccóddl}|d|d|}|jj||ddœ¬«}|jj||dz¬ «5}t j«|z}t j«|krm|j «} | snZ| j
d
d «jd «} | jd
«rd| ddfcddd«St j«|krŒmddd«y#1swYyxYw)z/Open SSE, wait for first data: line or timeout.rNz/stream/ticks-sse/ú?key=ztext/event-stream)r,ÚAccept)r1érAúutf-8Úignorez
zdata: TééP©) Úurllib.requestrGÚRequestÚurlopenÚtimeÚreadlineÚdecoder-Ú
startswith)
r'r(rSrTÚurllibÚurlÚreqÚrespÚdeadlineÚlines
r#Ú sse_firstrlfãØ
ˆ$ V H¨E°#°Ð
7€CØ
.‰.×
Ñ
 ¸CÐK^Ñ._Ð
Ó
`€CØ × Ñ  ¨[¸1©_Ð Ô =ÀÜ—9‘9“; ÑÜi‰i‹k˜HÒ—=‘=“?ˆDÙØØ—;‘;˜w¨ÓÓ@ˆDؘxÔ˜T ! B˜
>Ñ =äi‰ik˜
 ÷
 úsÁA:C4ÃC4Ã4C=có$|jd«rd|ddzn|}|d|d|}tj«|z}tj||dzd|g¬«} |j d «tj«|kr™ |j «\}}|tjjfvr2|jd
d «} d | vsd
| vr6d| ddf |j«S|tjjk(rntj«|krŒ™ |j«y#tj tf$rYŒÝwxYw#t$rYSwxYw#t$rYywxYw# |j«w#t$rYwwxYwxYw)httpÚwséz/stream/ticks/rVrXz X-API-Key: )r)Úheadergð?rYrZz
"type":"tick"z"type":"heartbeat"Tr\r])rerbÚ websocketÚcreate_connectionÚ
settimeoutÚ recv_dataÚWebSocketTimeoutExceptionÚ TimeoutErrorÚABNFÚ OPCODE_TEXTrdÚcloserÚ OPCODE_CLOSE)
r'r(rSrTÚws_urlrjroÚopcodeÚdatarIs
r#Úws_firstrxØ $§¡°Ô 7ˆT˜HŠ_¸T€F؈x~ f X¨U°3°%Ð
8€FÜy‰y{˜(€HÜ × $Ñ $ V°[À1±_Ø/:¸3¸%Ð-@Ð,Aô
C€BðØ
Üi‰i‹k˜HÒ
Ø!Ÿ|™|›~‘ ˜ðœ)Ÿ.™.×—{{ 7¨HÓ5Ø" *Ð.BÀdÑ.JØ  c r ˜ Ø H‰Hœ9Ÿ>™>×ôi‰i‹k˜HÓ Ø H‰HŒJð øô×Ð
Ùð
ûôò Ù ð ûŒyò Ø Ø ð ûð Ø H‰HJøÜò Ù ð ýs~Á(E-ÂD0Â=E-ÃEÃ(5E-ÄEÄ0E Å E-Å E Å E-Å EÅEÅ E*Å)E*Å-FÅ/FÅ?FÆ F Æ FÆ F Æ FÚbcóî t|j|j||«\}}|rttd|dt
«yy#t $r%}ttd|dt
«Yd}~yd}~wwxYw)Nz( [WS warm-up ok, MT5 should have added z
to Watch]z [WS warm-up failed (ignore): Ú])rr'r(rrrr)r€rSrTr Ú_r!s r#Úwarmupr„swð@ܘŸ §¡¨° Ó<‰ˆˆAÙ
Ü ”SAÀ&ÀÈÔTWÐSXÐ  øä ò@Ü
Ð4°Q°C°q¼¸Ð?ûð@úsAAÁ A4ÁA/Á/A4cót|j|j«Š|jŠt «t t
dt «t d|j«t d«t d|jrdnd«t «tdˆfd«td ˆfd
«t td t «td ¬
«tdzˆˆfd«tdzdzˆˆfd«tdˆˆfd«tdˆˆfd«tdˆˆfd«tdˆˆfd«tdˆfd«tdˆfd«tdˆfd „«td!ˆˆfd"„«d#dl }d$|j«jdd%Štd&‰ˆˆfd'„«td(‰ˆˆfd)„«td*ˆfd+„«td,‰ˆˆfd-„«td.‰zd/zˆˆfd0„«td1‰d2ˆˆfd3„«td4‰d2ˆˆfd5„«|jrkt «t t
d6t «t «td7ˆˆfd8„«td9ˆfd:„«td;ˆfd<„«td=ˆˆfd>„«n"t «t td?t «t «t t
d@t «t dAttt «t rt"nt}t dB|t t «t$r;t «t t"dCt «t$D]}t dD|«Œt «t d#k(rd#SdES)FNz=== Mt5Bridge E2E test ===z Base : z Symbol : z Trades : z enabled (will place real orders)zdisabled (--trades to enable)z1. GET /healthcóLjd«x}|ddk(xr|ddufS)Nz/healthÚstatusÚhealthyÚ
mt5_connectedT)r9©r<r€s €r#Ú<lambda>zrun.<locals>.<lambda>ªs4ø€Ø
U‰U
ÐˆØ ˆ(‰  Ò? Q Ñ%7¸4Ð%?ñ&r5z2. GET /accountc
ó¤jd«x}|ddx}td|dd|dd|d d
|d «|ddkDxr|d dk\fS) Nz/accountr~rz login=Úloginz server=Úserverz balance=Úbalancez
currency=Úcurrency©r9r)r<Úar€s €r#rzrun.<locals>.<lambda>¯sxø€Ø
U‰U
ЈØ
ˆv‰Yq‰\ЈÜ
˜!˜G™*˜ X¨a°©k¨]¸)ÀAÀiÁLÀ>ÐQ[Ð\]Ð^hÑ\iÐ[jÐ ˆ'‰
Q‰Ò,˜1˜Y™<¨1Ñ'r5z-- warm-up (WS) --r[©rTz3. GET /symbols/c
óªjd«x}|ddx}td|dd|dd|d d
|d «|ddkDxr|d dkDfS) Nú /symbols/r~rú bid=Úbidú ask=Úaskz digits=Údigitsz point=Úpointr)r<r0r€Úsyms €€r#rzrun.<locals>.<lambda>»syø€Ø
U‰UY˜s˜
%ˆØ
ˆv‰Yq‰\ЈÜ
˜˜%™ q¨¡x j°¸¸8¹¸
ÀWÈQÈwÉZÈLÐ ˆ%‰1‰ Ò˜8™ q™ñ .r5z4. GET /symbols/ú/tickc ó¦jdd«x}|ddx}td|dd|dd |d
«|ddkDxr |d|dk\fS) Nr•rr~rrr—r˜r™z time=rbr)r<Útr€s €€r#rzrun.<locals>.<lambda>Âsvø€Ø
U‰UY˜s˜e 
*ˆØ
ˆv‰Yq‰\ЈÜ
˜˜%™ q¨¡x j°°q¸±y°kÐ ˆ%‰1‰ Ò˜5™ Q u¡XÑ8r5z&5. GET /rates/from-pos (H1, count=5)c
ó–jdddddœ«x}td|dd|d dd
d |d d d
«|ddk(fS)
Nz/rates/from-posÚ TIMEFRAME_H1rrX)rSÚ timeframeÚ start_posÚcountú count=r¤ú first=r~rbz last=r r©r<r€s €€r#rzrun.<locals>.<lambda>Êswø€Ø
U‰UÐÀ>Ø45Àñ'CóDð Dˆä
˜!˜G™*˜ W¨Q¨v©Y°q©\¸&Ñ-AÐ,BÀ&ÈÈ6ÉÐSUÉÐW]ÑI^ÐH_Ð ˆ'‰
a‰ñ <r5z16. GET /rates/from-date (cross-day 7-7~7-8, H1)có~jdddddœ«x}td|dd|d d
d «|dd
kDfS) /rates/from-dater¡ú
2026-07-07ú
2026-07-08©rSÚ date_fromÚdate_tor¥r~rrbrs €€r#rzrun.<locals>.<lambda>Ñsbø€Ø
U‰UÐ%°#ÀNØ4@È\ñ([ó\ð \ˆä
˜!˜G™*˜ W¨Q¨v©Y°q©\¸&Ñ-AÐ,BÐ ˆ'‰
Q‰ñ Gr5z06b. GET /rates/from-date (same day 7-7~7-7, M1)cóhjdddddœ«x}td|dd«|ddkDfS) Nr©Ú TIMEFRAME_M1rªz (bug fix: should be > 0)rrs €€r#rzrun.<locals>.<lambda>ØsQø€Ø
U‰UÐ%°#ÀNØ4@È\ñ([ó\ð \ˆä
˜!˜G™*˜Ð%>Ð ˆ'‰
Q‰ñ Fr5z;6c. GET /rates/from-date (date_from > date_to, expect 400)c
óPjdddddddœ¬«td «d
fS) GETr©iú
2026-07-01r¬)r7z status=400 okT)rKr)r€s€€r#rzrun.<locals>.<lambda>ßs@ø€Ø ˜Ð1°3Ø*-¸NØ-9Àlñ Tð ó Uô Ð Ó ñ Qr5z7. GET /positionscóNjd«x}td|d«dfS)