package stratum import ( "context" "net" "testing" "time" "forge-mesh/internal/config" ) func TestProxyAcceptsConnection(t *testing.T) { ln, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatal(err) } defer ln.Close() accepted := make(chan net.Conn, 1) go func() { conn, err := ln.Accept() if err == nil { accepted <- conn } }() conn, err := net.Dial("tcp", ln.Addr().String()) if err != nil { t.Fatal(err) } defer conn.Close() select { case c := <-accepted: _, _ = conn.Write([]byte(`{"id":1,"method":"mining.subscribe","params":[]}` + "\n")) buf := make([]byte, 256) n, _ := c.Read(buf) if n == 0 { t.Fatal("expected bytes from miner") } c.Close() case <-time.After(2 * time.Second): t.Fatal("accept timeout") } } func TestProxyStartNoUpstream(t *testing.T) { ln, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatal(err) } addr := ln.Addr().String() ln.Close() p := New(config.StratumConfig{XMRListen: addr}) ctx, cancel := context.WithCancel(context.Background()) defer cancel() if err := p.StartContext(ctx); err != nil { t.Fatal(err) } defer p.Stop() conn, err := net.DialTimeout("tcp", addr, time.Second) if err != nil { t.Fatal(err) } defer conn.Close() _, err = conn.Write([]byte(`{"id":1,"method":"mining.subscribe","params":[]}` + "\n")) if err != nil { t.Fatal(err) } }