134 lines
4.3 KiB
Go
134 lines
4.3 KiB
Go
package proxy
|
|
|
|
import (
|
|
"net"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestProxy_Reload_Good(t *testing.T) {
|
|
tempDir := t.TempDir()
|
|
cfg := &Config{
|
|
Mode: "nicehash",
|
|
Bind: []BindAddr{{Host: "127.0.0.1", Port: 3333}},
|
|
Pools: []PoolConfig{{URL: "pool-a:3333", Enabled: true}},
|
|
CustomDiff: 100,
|
|
Workers: WorkersDisabled,
|
|
AccessLogFile: tempDir + "/access-a.log",
|
|
ShareLogFile: tempDir + "/share-a.log",
|
|
}
|
|
proxyValue, errorValue := New(cfg)
|
|
if errorValue != nil {
|
|
t.Fatal(errorValue)
|
|
}
|
|
|
|
miner := &Miner{user: "wallet", agent: "agent", ip: "10.0.0.1"}
|
|
proxyValue.events.Dispatch(Event{Type: EventLogin, Miner: miner})
|
|
proxyValue.events.Dispatch(Event{Type: EventAccept, Miner: miner, Diff: 100, Latency: 10})
|
|
|
|
reloadCfg := &Config{
|
|
Mode: "simple",
|
|
Bind: []BindAddr{{Host: "0.0.0.0", Port: 4444}},
|
|
Pools: []PoolConfig{{URL: "pool-b:4444", Enabled: true}},
|
|
CustomDiff: 250,
|
|
Workers: WorkersByUser,
|
|
AccessLogFile: tempDir + "/access-b.log",
|
|
ShareLogFile: tempDir + "/share-b.log",
|
|
}
|
|
|
|
proxyValue.Reload(reloadCfg)
|
|
|
|
if len(proxyValue.config.Bind) != 1 || proxyValue.config.Bind[0].Port != 3333 {
|
|
t.Fatalf("expected bind addresses to remain unchanged, got %+v", proxyValue.config.Bind)
|
|
}
|
|
if len(proxyValue.config.Pools) != 1 || proxyValue.config.Pools[0].URL != "pool-b:4444" {
|
|
t.Fatalf("expected pools to reload, got %+v", proxyValue.config.Pools)
|
|
}
|
|
if proxyValue.config.CustomDiff != 250 {
|
|
t.Fatalf("expected custom diff to reload, got %d", proxyValue.config.CustomDiff)
|
|
}
|
|
if proxyValue.customDifficulty == nil || proxyValue.customDifficulty.globalDifficulty != 250 {
|
|
t.Fatalf("expected live custom diff to update, got %+v", proxyValue.customDifficulty)
|
|
}
|
|
|
|
proxyValue.events.Dispatch(Event{Type: EventLogin, Miner: miner})
|
|
proxyValue.events.Dispatch(Event{Type: EventAccept, Miner: miner, Diff: 250, Latency: 12})
|
|
|
|
oldAccessLog, errorValue := os.ReadFile(tempDir + "/access-a.log")
|
|
if errorValue != nil {
|
|
t.Fatal(errorValue)
|
|
}
|
|
newAccessLog, errorValue := os.ReadFile(tempDir + "/access-b.log")
|
|
if errorValue != nil {
|
|
t.Fatal(errorValue)
|
|
}
|
|
if strings.Count(string(oldAccessLog), "CONNECT") != 1 || strings.Count(string(newAccessLog), "CONNECT") != 1 {
|
|
t.Fatalf("expected access log writes to move across reload, got old=%q new=%q", oldAccessLog, newAccessLog)
|
|
}
|
|
|
|
oldShareLog, errorValue := os.ReadFile(tempDir + "/share-a.log")
|
|
if errorValue != nil {
|
|
t.Fatal(errorValue)
|
|
}
|
|
newShareLog, errorValue := os.ReadFile(tempDir + "/share-b.log")
|
|
if errorValue != nil {
|
|
t.Fatal(errorValue)
|
|
}
|
|
if strings.Count(string(oldShareLog), "ACCEPT") != 1 || strings.Count(string(newShareLog), "ACCEPT") != 1 {
|
|
t.Fatalf("expected share log writes to move across reload, got old=%q new=%q", oldShareLog, newShareLog)
|
|
}
|
|
}
|
|
|
|
func TestProxy_CurrentMiners_Good(t *testing.T) {
|
|
cfg := &Config{
|
|
Mode: "nicehash",
|
|
Bind: []BindAddr{{Host: "127.0.0.1", Port: 3333}},
|
|
Pools: []PoolConfig{{URL: "pool-a:3333", Enabled: true}},
|
|
Workers: WorkersDisabled,
|
|
}
|
|
firstProxy, errorValue := New(cfg)
|
|
if errorValue != nil {
|
|
t.Fatal(errorValue)
|
|
}
|
|
secondProxy, errorValue := New(cfg)
|
|
if errorValue != nil {
|
|
t.Fatal(errorValue)
|
|
}
|
|
|
|
miner := &Miner{}
|
|
firstProxy.events.Dispatch(Event{Type: EventLogin, Miner: miner})
|
|
if got := firstProxy.CurrentMiners(); got != 1 {
|
|
t.Fatalf("expected first proxy miner count 1, got %d", got)
|
|
}
|
|
if got := secondProxy.CurrentMiners(); got != 0 {
|
|
t.Fatalf("expected second proxy miner count 0, got %d", got)
|
|
}
|
|
|
|
firstProxy.events.Dispatch(Event{Type: EventClose, Miner: miner})
|
|
if got := firstProxy.CurrentMiners(); got != 0 {
|
|
t.Fatalf("expected first proxy miner count to return to 0, got %d", got)
|
|
}
|
|
}
|
|
|
|
func TestProxy_AcceptConn_Good(t *testing.T) {
|
|
cfg := &Config{
|
|
Mode: "nicehash",
|
|
Bind: []BindAddr{{Host: "127.0.0.1", Port: 3333}},
|
|
Pools: []PoolConfig{{URL: "pool-a:3333", Enabled: true}},
|
|
Workers: WorkersDisabled,
|
|
}
|
|
proxyValue, errorValue := New(cfg)
|
|
if errorValue != nil {
|
|
t.Fatal(errorValue)
|
|
}
|
|
|
|
serverConn, clientConn := net.Pipe()
|
|
proxyValue.acceptConn(serverConn, 3333)
|
|
if got := proxyValue.stats.connections.Load(); got != 1 {
|
|
t.Fatalf("expected connection counter to increment on accept, got %d", got)
|
|
}
|
|
|
|
_ = clientConn.Close()
|
|
_ = serverConn.Close()
|
|
}
|