decred.org/dcrdex@v1.0.5/tatanka/chain/utxo/btc_live_test.go (about) 1 //go:build harness 2 3 package utxo 4 5 import ( 6 "context" 7 "encoding/json" 8 "fmt" 9 "os/user" 10 "path/filepath" 11 "testing" 12 "time" 13 14 "decred.org/dcrdex/dex" 15 dexbtc "decred.org/dcrdex/dex/networks/btc" 16 "decred.org/dcrdex/tatanka/chain" 17 ) 18 19 func TestSimnetBTC(t *testing.T) { 20 simnetAlphaHarnessConfig := &BitcoinConfigFile{ 21 RPCConfig: dexbtc.RPCConfig{ 22 RPCUser: "user", 23 RPCPass: "pass", 24 RPCBind: "127.0.0.1", 25 RPCPort: 20556, 26 }, 27 } 28 ctx, cancel := context.WithCancel(context.Background()) 29 defer cancel() 30 rawCfg, _ := json.Marshal(simnetAlphaHarnessConfig) 31 c := prepareSimnetChain(t, ctx, NewBitcoin, rawCfg) 32 33 q := &query{ 34 Method: "getchaintxstats", 35 Args: []json.RawMessage{[]byte("5")}, 36 } 37 rawQuery, _ := json.Marshal(q) 38 rawRes, err := c.Query(ctx, chain.Query(rawQuery)) 39 if err != nil { 40 t.Fatalf("Query error: %v", err) 41 } 42 43 var res struct { 44 Blocks uint `json:"window_block_count"` 45 } 46 if err := json.Unmarshal(rawRes, &res); err != nil { 47 t.Fatalf("Query unmarshal error: %v", err) 48 } 49 50 if res.Blocks != 5 { 51 t.Fatalf("Unexpected query results") 52 } 53 } 54 func TestSimnetDCR(t *testing.T) { 55 usr, _ := user.Current() 56 dextestDir := filepath.Join(usr.HomeDir, "dextest") 57 rpcPath := filepath.Join(dextestDir, "dcr", "alpha", "rpc.cert") 58 simnetAlphaHarnessConfig := &DecredConfigFile{ 59 RPCUser: "user", 60 RPCPass: "pass", 61 RPCListen: "127.0.0.1:19561", 62 RPCCert: rpcPath, 63 } 64 rawCfg, _ := json.Marshal(simnetAlphaHarnessConfig) 65 ctx, cancel := context.WithCancel(context.Background()) 66 defer cancel() 67 c := prepareSimnetChain(t, ctx, NewDecred, rawCfg) 68 69 q := &query{ 70 Method: "getvoteinfo", 71 Args: []json.RawMessage{[]byte("4")}, 72 } 73 rawQuery, _ := json.Marshal(q) 74 rawRes, err := c.Query(ctx, chain.Query(rawQuery)) 75 if err != nil { 76 t.Fatalf("Query error: %v", err) 77 } 78 79 var res struct { 80 Agendas []struct { 81 ID string `json:"id"` 82 } `json:"agendas"` 83 } 84 if err := json.Unmarshal(rawRes, &res); err != nil { 85 t.Fatalf("Query unmarshal error: %v", err) 86 } 87 88 if len(res.Agendas) != 1 || res.Agendas[0].ID != "maxblocksize" { 89 t.Fatalf("Unexpected query results") 90 } 91 } 92 93 func prepareSimnetChain(t *testing.T, ctx context.Context, newChain chain.ChainConstructor, rawCfg json.RawMessage) chain.Chain { 94 feeMonitorTick = time.Second 95 96 c, err := newChain(rawCfg, dex.StdOutLogger("T", dex.LevelTrace), dex.Simnet) 97 if err != nil { 98 t.Fatalf("NewBTC error: %v", err) 99 } 100 101 cm := dex.NewConnectionMaster(c) 102 if err := cm.ConnectOnce(ctx); err != nil { 103 t.Fatalf("Connect error: %v", err) 104 } 105 106 fmt.Println("Waiting for fee update") 107 select { 108 case fees := <-c.FeeChannel(): 109 fmt.Println("Fees received over fee channel =", fees) 110 case <-time.After(time.Second * 30): 111 t.Fatalf("No fee update seen. Is the miner running?") 112 } 113 114 return c 115 }