129 lines
2.8 KiB
Go
129 lines
2.8 KiB
Go
package proxy
|
|
|
|
import (
|
|
"bufio"
|
|
"encoding/json"
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestMiner_Login_Good(t *testing.T) {
|
|
serverConn, clientConn := net.Pipe()
|
|
defer clientConn.Close()
|
|
|
|
miner := NewMiner(serverConn, 3333, nil)
|
|
miner.Start()
|
|
defer miner.Close()
|
|
|
|
encoder := json.NewEncoder(clientConn)
|
|
if err := encoder.Encode(map[string]interface{}{
|
|
"id": 1,
|
|
"jsonrpc": "2.0",
|
|
"method": "login",
|
|
"params": map[string]interface{}{
|
|
"login": "wallet",
|
|
"pass": "x",
|
|
"agent": "xmrig",
|
|
},
|
|
}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
clientConn.SetReadDeadline(time.Now().Add(time.Second))
|
|
line, err := bufio.NewReader(clientConn).ReadBytes('\n')
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var response map[string]interface{}
|
|
if err := json.Unmarshal(line, &response); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if response["jsonrpc"] != "2.0" {
|
|
t.Fatalf("unexpected response: %#v", response)
|
|
}
|
|
|
|
result := response["result"].(map[string]interface{})
|
|
if result["status"] != "OK" || result["id"] == "" {
|
|
t.Fatalf("unexpected login response: %#v", response)
|
|
}
|
|
}
|
|
|
|
func TestMiner_Keepalived_Bad(t *testing.T) {
|
|
serverConn, clientConn := net.Pipe()
|
|
defer clientConn.Close()
|
|
|
|
miner := NewMiner(serverConn, 3333, nil)
|
|
miner.Start()
|
|
defer miner.Close()
|
|
|
|
encoder := json.NewEncoder(clientConn)
|
|
if err := encoder.Encode(map[string]interface{}{
|
|
"id": 2,
|
|
"jsonrpc": "2.0",
|
|
"method": "keepalived",
|
|
}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
clientConn.SetReadDeadline(time.Now().Add(time.Second))
|
|
line, err := bufio.NewReader(clientConn).ReadBytes('\n')
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var response map[string]interface{}
|
|
if err := json.Unmarshal(line, &response); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
result := response["result"].(map[string]interface{})
|
|
if result["status"] != "KEEPALIVED" {
|
|
t.Fatalf("unexpected keepalived response: %#v", response)
|
|
}
|
|
}
|
|
|
|
func TestMiner_Submit_Ugly(t *testing.T) {
|
|
serverConn, clientConn := net.Pipe()
|
|
defer clientConn.Close()
|
|
|
|
miner := NewMiner(serverConn, 3333, nil)
|
|
miner.Start()
|
|
defer miner.Close()
|
|
|
|
miner.SetRPCID("session")
|
|
miner.SetState(MinerStateReady)
|
|
|
|
encoder := json.NewEncoder(clientConn)
|
|
if err := encoder.Encode(map[string]interface{}{
|
|
"id": 3,
|
|
"jsonrpc": "2.0",
|
|
"method": "submit",
|
|
"params": map[string]interface{}{
|
|
"id": "session",
|
|
"job_id": "job-1",
|
|
"nonce": "ABC123",
|
|
"result": "abc",
|
|
"algo": "cn/r",
|
|
},
|
|
}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
clientConn.SetReadDeadline(time.Now().Add(time.Second))
|
|
line, err := bufio.NewReader(clientConn).ReadBytes('\n')
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var response map[string]interface{}
|
|
if err := json.Unmarshal(line, &response); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if response["error"] == nil {
|
|
t.Fatalf("expected invalid nonce error, got %#v", response)
|
|
}
|
|
}
|