diff options
author | Valentin Popov <valentin@popov.link> | 2025-06-04 11:08:19 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-04 11:08:19 +0300 |
commit | 7240595478fedec02e9e47c704976cf56a66d3e8 (patch) | |
tree | 300165d4ecf00fed03d33b36863370384cbdc7ce /mt4/client_test.go | |
parent | 76dc648f33a9f96e68d5c9000032c2b986bd5a3d (diff) | |
download | go-metatrader4-7240595478fedec02e9e47c704976cf56a66d3e8.tar.xz go-metatrader4-7240595478fedec02e9e47c704976cf56a66d3e8.zip |
First version
Diffstat (limited to 'mt4/client_test.go')
-rw-r--r-- | mt4/client_test.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/mt4/client_test.go b/mt4/client_test.go new file mode 100644 index 0000000..9644c9a --- /dev/null +++ b/mt4/client_test.go @@ -0,0 +1,45 @@ +package mt4 + +import ( + "context" + "net" + "strings" + "testing" + "time" + + ic "go.popov.link/metatrader4/internal/conn" + "go.popov.link/metatrader4/internal/proto" +) + +// mockServer returns net.Pipe connections with server writing resp to client. +func mockServer(response string) (net.Conn, net.Conn) { + server, client := net.Pipe() + go func() { + defer server.Close() + buf := make([]byte, 1024) + server.Read(buf) // read request ignoring + server.Write([]byte(response)) + }() + return client, server +} + +func TestClientExecute(t *testing.T) { + reqParams := map[string]string{"A": "1"} + encoded, err := proto.EncodeParams(reqParams) + if err != nil { + t.Fatalf("encode params: %v", err) + } + resp := encoded + clientConn, _ := mockServer(resp) + + c := &Client{addr: "", port: 0, autoClose: true, readTimeout: time.Second, writeTimeout: time.Second, dialTimeout: time.Second} + c.c = ic.FromNetConn(clientConn) + + res, err := c.Execute(context.Background(), "CMD", reqParams) + if err != nil { + t.Fatalf("execute: %v", err) + } + if !strings.Contains(res, "1") { + t.Fatalf("unexpected response %q", res) + } +} |