Implement test of logged socket.io - getDetailedTransaction
This commit is contained in:
parent
124e670257
commit
86c6464e75
@ -98,6 +98,7 @@ func equalAddressHistoryItem(logItem addressHistoryItem, bbItem addressHistoryIt
|
|||||||
if logItem.Tx.Hex != bbItem.Tx.Hex {
|
if logItem.Tx.Hex != bbItem.Tx.Hex {
|
||||||
return errors.Errorf("Different hex bb: %v log: %v", bbItem.Tx.Hex, logItem.Tx.Hex)
|
return errors.Errorf("Different hex bb: %v log: %v", bbItem.Tx.Hex, logItem.Tx.Hex)
|
||||||
}
|
}
|
||||||
|
// Addresses do not match, bb getAddressHistory does not return input addresses
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func verifyGetAddressHistory(t *testing.T, id int, lrs *logRequestResponse, bbResStr string, stat *verifyStats, ws *gosocketio.Client, bbRequest map[string]json.RawMessage) {
|
func verifyGetAddressHistory(t *testing.T, id int, lrs *logRequestResponse, bbResStr string, stat *verifyStats, ws *gosocketio.Client, bbRequest map[string]json.RawMessage) {
|
||||||
@ -149,9 +150,9 @@ func verifyGetAddressHistory(t *testing.T, id int, lrs *logRequestResponse, bbRe
|
|||||||
}
|
}
|
||||||
if !found {
|
if !found {
|
||||||
t.Log("getAddressHistory", id, "addresses", addr, "mismatch ", err)
|
t.Log("getAddressHistory", id, "addresses", addr, "mismatch ", err)
|
||||||
bf, _ := json.Marshal(bbFullResponse.Result)
|
// bf, _ := json.Marshal(bbFullResponse.Result)
|
||||||
bl, _ := json.Marshal(logResponse.Result)
|
// bl, _ := json.Marshal(logResponse.Result)
|
||||||
t.Log("{ \"bf\":", string(bf), ",\"bl\":", string(bl), "}")
|
// t.Log("{ \"bf\":", string(bf), ",\"bl\":", string(bl), "}")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -214,7 +215,7 @@ func verifySendTransaction(t *testing.T, id int, lrs *logRequestResponse, bbResS
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
bbResponseError := resultError{}
|
bbResponseError := resultError{}
|
||||||
err := json.Unmarshal([]byte(bbResStr), bbResponseError)
|
err := json.Unmarshal([]byte(bbResStr), &bbResponseError)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Log(id, ": error unmarshal resultError ", err)
|
t.Log(id, ": error unmarshal resultError ", err)
|
||||||
return
|
return
|
||||||
@ -227,6 +228,87 @@ func verifySendTransaction(t *testing.T, id int, lrs *logRequestResponse, bbResS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func verifyGetDetailedTransaction(t *testing.T, id int, lrs *logRequestResponse, bbResStr string, stat *verifyStats) {
|
||||||
|
bbResponse := resultGetDetailedTransaction{}
|
||||||
|
logResponse := resultGetDetailedTransaction{}
|
||||||
|
if err := unmarshalResponses(t, id, lrs, bbResStr, &bbResponse, &logResponse); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
equalInputs := func() error {
|
||||||
|
if len(bbResponse.Result.Inputs) != len(logResponse.Result.Inputs) {
|
||||||
|
return errors.Errorf("mismatch number of inputs %v %v", len(bbResponse.Result.Inputs), len(logResponse.Result.Inputs))
|
||||||
|
}
|
||||||
|
for i, bbi := range bbResponse.Result.Inputs {
|
||||||
|
li := logResponse.Result.Inputs[i]
|
||||||
|
|
||||||
|
if bbi.OutputIndex != li.OutputIndex ||
|
||||||
|
bbi.Sequence != li.Sequence ||
|
||||||
|
bbi.Satoshis != li.Satoshis {
|
||||||
|
return errors.Errorf("mismatch input %v %v, %v %v, %v %v", bbi.OutputIndex, li.OutputIndex, bbi.Sequence, li.Sequence, bbi.Satoshis, li.Satoshis)
|
||||||
|
}
|
||||||
|
if bbi.Address != nil && li.Address != nil {
|
||||||
|
if *bbi.Address != *li.Address {
|
||||||
|
return errors.Errorf("mismatch input Address %v %v", *bbi.Address, *li.Address)
|
||||||
|
}
|
||||||
|
} else if bbi.Address != li.Address {
|
||||||
|
return errors.Errorf("mismatch input Address %v %v", bbi.Address, li.Address)
|
||||||
|
}
|
||||||
|
if bbi.Script != nil && li.Script != nil {
|
||||||
|
if *bbi.Script != *li.Script {
|
||||||
|
return errors.Errorf("mismatch input Script %v %v", *bbi.Script, *li.Script)
|
||||||
|
}
|
||||||
|
} else if bbi.Script != li.Script {
|
||||||
|
return errors.Errorf("mismatch input Script %v %v", bbi.Script, li.Script)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
equalOutputs := func() error {
|
||||||
|
if len(bbResponse.Result.Outputs) != len(logResponse.Result.Outputs) {
|
||||||
|
return errors.Errorf("mismatch number of outputs %v %v", len(bbResponse.Result.Outputs), len(logResponse.Result.Outputs))
|
||||||
|
}
|
||||||
|
for i, bbo := range bbResponse.Result.Outputs {
|
||||||
|
lo := logResponse.Result.Outputs[i]
|
||||||
|
if bbo.Satoshis != lo.Satoshis {
|
||||||
|
return errors.Errorf("mismatch output Satoshis %v %v", bbo.Satoshis, lo.Satoshis)
|
||||||
|
}
|
||||||
|
if *bbo.Script != *lo.Script {
|
||||||
|
return errors.Errorf("mismatch output Script %v %v", *bbo.Script, *lo.Script)
|
||||||
|
}
|
||||||
|
if *bbo.Address != *lo.Address {
|
||||||
|
return errors.Errorf("mismatch output Address %v %v", *bbo.Address, *lo.Address)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
// the tx in the log could have been still in mempool with height -1
|
||||||
|
if (bbResponse.Result.Height != logResponse.Result.Height && logResponse.Result.Height != -1) ||
|
||||||
|
bbResponse.Result.Hash != logResponse.Result.Hash {
|
||||||
|
t.Log("getDetailedTransaction", id, "mismatch bb:", bbResponse.Result.Hash, bbResponse.Result.Height,
|
||||||
|
"log:", logResponse.Result.Hash, logResponse.Result.Height)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if bbResponse.Result.BlockTimestamp != logResponse.Result.BlockTimestamp {
|
||||||
|
t.Log("getDetailedTransaction", id, "mismatch BlockTimestamp:", bbResponse.Result.BlockTimestamp,
|
||||||
|
"log:", logResponse.Result.BlockTimestamp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if bbResponse.Result.Hex != logResponse.Result.Hex {
|
||||||
|
t.Log("getDetailedTransaction", id, "mismatch Hex:", bbResponse.Result.Hex,
|
||||||
|
"log:", logResponse.Result.Hex)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := equalInputs(); err != nil {
|
||||||
|
t.Log("getDetailedTransaction", id, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := equalOutputs(); err != nil {
|
||||||
|
t.Log("getDetailedTransaction", id, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
stat.SuccessCount++
|
||||||
|
}
|
||||||
|
|
||||||
func verifyMessage(t *testing.T, ws *gosocketio.Client, id int, lrs *logRequestResponse, stats map[string]*verifyStats) {
|
func verifyMessage(t *testing.T, ws *gosocketio.Client, id int, lrs *logRequestResponse, stats map[string]*verifyStats) {
|
||||||
req := make(map[string]json.RawMessage)
|
req := make(map[string]json.RawMessage)
|
||||||
err := json.Unmarshal(lrs.Request, &req)
|
err := json.Unmarshal(lrs.Request, &req)
|
||||||
@ -248,7 +330,6 @@ func verifyMessage(t *testing.T, ws *gosocketio.Client, id int, lrs *logRequestR
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
ts := time.Since(start).Nanoseconds()
|
ts := time.Since(start).Nanoseconds()
|
||||||
// t.Log(id, ",", method, ": response ", res)
|
|
||||||
stat := getStat(method, stats)
|
stat := getStat(method, stats)
|
||||||
stat.Count++
|
stat.Count++
|
||||||
stat.TotalLogNs += lrs.LogElapsedTime
|
stat.TotalLogNs += lrs.LogElapsedTime
|
||||||
@ -259,14 +340,15 @@ func verifyMessage(t *testing.T, ws *gosocketio.Client, id int, lrs *logRequestR
|
|||||||
case "getBlockHeader":
|
case "getBlockHeader":
|
||||||
verifyGetBlockHeader(t, id, lrs, res, stat)
|
verifyGetBlockHeader(t, id, lrs, res, stat)
|
||||||
case "getDetailedTransaction":
|
case "getDetailedTransaction":
|
||||||
|
verifyGetDetailedTransaction(t, id, lrs, res, stat)
|
||||||
case "getInfo":
|
case "getInfo":
|
||||||
verifyGetInfo(t, id, lrs, res, stat)
|
verifyGetInfo(t, id, lrs, res, stat)
|
||||||
case "estimateSmartFee":
|
case "estimateSmartFee":
|
||||||
verifyEstimateSmartFee(t, id, lrs, res, stat)
|
verifyEstimateSmartFee(t, id, lrs, res, stat)
|
||||||
case "sendTransaction":
|
case "sendTransaction":
|
||||||
verifySendTransaction(t, id, lrs, res, stat)
|
verifySendTransaction(t, id, lrs, res, stat)
|
||||||
// case "estimateFee":
|
|
||||||
// case "getAddressTxids":
|
// case "getAddressTxids":
|
||||||
|
// case "estimateFee":
|
||||||
// case "getMempoolEntry":
|
// case "getMempoolEntry":
|
||||||
default:
|
default:
|
||||||
t.Log(id, ",", method, ": unknown/unverified method", method)
|
t.Log(id, ",", method, ": unknown/unverified method", method)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user