@@ -41,6 +41,14 @@ type ExchangesE2ESuite struct {
41
41
url string
42
42
}
43
43
44
+ type jsonrpcMessage struct {
45
+ Version string `json:"jsonrpc"`
46
+ ID json.RawMessage `json:"id,omitempty"`
47
+ Method string `json:"method,omitempty"`
48
+ Params json.RawMessage `json:"params,omitempty"`
49
+ Result string `json:"result,omitempty"`
50
+ }
51
+
44
52
func (s * ExchangesE2ESuite ) SetupSuite () {
45
53
smockerHost , exist := os .LookupEnv ("SMOCKER_HOST" )
46
54
s .Require ().True (exist , "SMOCKER_HOST env variable have to be set" )
@@ -102,6 +110,79 @@ func (s *ExchangesE2ESuite) TestBalancer() {
102
110
defer func () { _ = resp .Body .Close () }()
103
111
}
104
112
113
+ func (s * ExchangesE2ESuite ) TestBalancerV2_getLatest () {
114
+ ex := origin .NewExchange ("balancerV2" ).WithSymbol ("STETH/ETH" ).WithPrice (1 )
115
+ // No `pool` field should fail
116
+ err := infestor .NewMocksBuilder ().Reset ().Add (ex ).Deploy (s .api )
117
+ s .Require ().Error (err )
118
+
119
+ // With set rate and price
120
+ price := "0x0000000000000000000000000000000000000000000000000dd22d6848e229b8"
121
+ ex = ex .WithCustom ("rate" , price ).WithCustom ("price" , price )
122
+ err = infestor .NewMocksBuilder ().Debug ().Reset ().Add (ex ).Deploy (s .api )
123
+ s .Require ().NoError (err )
124
+
125
+ url := fmt .Sprintf ("%s/" , s .url )
126
+ reqJSON := `{"method":"eth_call","params":[{"from":null,"to":"0x0000000000000000000000000000000000000000","data":"0xb10be7390000000000000000000000000000000000000000000000000000000000000000"}, "latest"],"id":1,"jsonrpc":"2.0"}`
127
+ jsonStr := []byte (fmt .Sprint (reqJSON ))
128
+ resp , err := http .Post (url , "application/json" , bytes .NewBuffer (jsonStr ))
129
+ s .Require ().NoError (err )
130
+ s .Require ().Equal (http .StatusOK , resp .StatusCode )
131
+
132
+ var response jsonrpcMessage
133
+ err = parseBody (resp , & response )
134
+ s .Require ().NoError (err )
135
+ s .Require ().NotNil (response )
136
+ s .Require ().Equal (price , response .Result )
137
+
138
+ // Test status code
139
+ ex = ex .WithStatusCode (http .StatusNotFound )
140
+ err = infestor .NewMocksBuilder ().Reset ().Add (ex ).Deploy (s .api )
141
+ s .Require ().NoError (err )
142
+
143
+ resp , err = http .Post (url , "application/json" , bytes .NewBuffer (jsonStr ))
144
+ s .Require ().NoError (err )
145
+ s .Require ().Equal (http .StatusNotFound , resp .StatusCode )
146
+ defer func () { _ = resp .Body .Close () }()
147
+ }
148
+
149
+ func (s * ExchangesE2ESuite ) TestBalancerV2_getPriceRateCache () {
150
+ ex := origin .NewExchange ("balancerV2" ).WithSymbol ("STETH/ETH" ).WithPrice (1 )
151
+ // No `pool` field should fail
152
+ err := infestor .NewMocksBuilder ().Reset ().Add (ex ).Deploy (s .api )
153
+ s .Require ().Error (err )
154
+
155
+ // With set rate and price
156
+ rate := "0x0000000000000000000000000000000000000000000000000dd22d6848e229b8"
157
+ ex = ex .WithCustom ("rate" , rate ).WithCustom ("price" , rate )
158
+ err = infestor .NewMocksBuilder ().Debug ().Reset ().Add (ex ).Deploy (s .api )
159
+ s .Require ().NoError (err )
160
+
161
+ url := fmt .Sprintf ("%s/" , s .url )
162
+ reqJSON := `{"method":"eth_call","params":[{"from":null,"to":"0x0000000000000000000000000000000000000000","data":"0xb867ee5a"}, "latest"],"id":1,"jsonrpc":"2.0"}`
163
+ jsonStr := []byte (fmt .Sprint (reqJSON ))
164
+ resp , err := http .Post (url , "application/json" , bytes .NewBuffer (jsonStr ))
165
+ s .Require ().NoError (err )
166
+ s .Require ().Equal (http .StatusOK , resp .StatusCode )
167
+
168
+ var response jsonrpcMessage
169
+ err = parseBody (resp , & response )
170
+ s .Require ().NoError (err )
171
+ s .Require ().NotNil (response )
172
+ fmt .Println (response .Result )
173
+ s .Require ().Equal (rate , response .Result )
174
+
175
+ // Test status code
176
+ ex = ex .WithStatusCode (http .StatusNotFound )
177
+ err = infestor .NewMocksBuilder ().Reset ().Add (ex ).Deploy (s .api )
178
+ s .Require ().NoError (err )
179
+
180
+ resp , err = http .Post (url , "application/json" , bytes .NewBuffer (jsonStr ))
181
+ s .Require ().NoError (err )
182
+ s .Require ().Equal (http .StatusNotFound , resp .StatusCode )
183
+ defer func () { _ = resp .Body .Close () }()
184
+ }
185
+
105
186
func (s * ExchangesE2ESuite ) TestBinance () {
106
187
ex := origin .NewExchange ("binance" ).WithSymbol ("ETH/BTC" ).WithPrice (1 )
107
188
0 commit comments