From dce24d1d4775fc1ff64fee33f1fde82dbf6abb18 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Thu, 13 Jun 2019 17:36:09 -0700 Subject: [PATCH] watchtower/wtdb+wtserver: pass properly sized blob in unit tests --- watchtower/wtdb/tower_db_test.go | 60 +++++++++++++++++++++---- watchtower/wtserver/server_test.go | 71 ++++++++++++++++-------------- 2 files changed, 88 insertions(+), 43 deletions(-) diff --git a/watchtower/wtdb/tower_db_test.go b/watchtower/wtdb/tower_db_test.go index 57a95c4f..a1f75abb 100644 --- a/watchtower/wtdb/tower_db_test.go +++ b/watchtower/wtdb/tower_db_test.go @@ -1,6 +1,7 @@ package wtdb_test import ( + "bytes" "encoding/binary" "io/ioutil" "os" @@ -16,6 +17,10 @@ import ( "github.com/lightningnetwork/lnd/watchtower/wtpolicy" ) +var ( + testBlob = make([]byte, blob.Size(blob.TypeAltruistCommit)) +) + // dbInit is a closure used to initialize a watchtower.DB instance and its // cleanup function. type dbInit func(*testing.T) (watchtower.DB, func()) @@ -137,6 +142,9 @@ func testInsertSession(h *towerDBHarness) { session := &wtdb.SessionInfo{ ID: id, Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 100, }, RewardAddress: []byte{0x01, 0x02, 0x03}, @@ -155,8 +163,9 @@ func testInsertSession(h *towerDBHarness) { // Insert a state update to fully commit the session parameters. update := &wtdb.SessionStateUpdate{ - ID: id, - SeqNum: 1, + ID: id, + SeqNum: 1, + EncryptedBlob: testBlob, } h.insertUpdate(update, nil) @@ -176,6 +185,9 @@ func testMultipleMatches(h *towerDBHarness) { session := &wtdb.SessionInfo{ ID: id, Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -183,9 +195,10 @@ func testMultipleMatches(h *towerDBHarness) { h.insertSession(session, nil) update := &wtdb.SessionStateUpdate{ - ID: id, - SeqNum: 1, - Hint: hint, // Use same hint to cause multiple matches + ID: id, + SeqNum: 1, + Hint: hint, // Use same hint to cause multiple matches + EncryptedBlob: testBlob, } h.insertUpdate(update, nil) } @@ -267,6 +280,9 @@ func testDeleteSession(h *towerDBHarness) { session0 := &wtdb.SessionInfo{ ID: *id0, Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -285,6 +301,9 @@ func testDeleteSession(h *towerDBHarness) { session1 := &wtdb.SessionInfo{ ID: *id1, Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -297,13 +316,13 @@ func testDeleteSession(h *towerDBHarness) { ID: *id0, Hint: hint, SeqNum: 1, - EncryptedBlob: []byte{}, + EncryptedBlob: testBlob, } update1 := &wtdb.SessionStateUpdate{ ID: *id1, Hint: hint, SeqNum: 1, - EncryptedBlob: []byte{}, + EncryptedBlob: testBlob, } // Insert both updates should succeed. @@ -414,7 +433,7 @@ func runStateUpdateTest(test stateUpdateTest) func(*towerDBHarness) { var stateUpdateNoSession = stateUpdateTest{ session: nil, updates: []*wtdb.SessionStateUpdate{ - {ID: *id(0), SeqNum: 1, LastApplied: 0}, + updateFromInt(id(0), 1, 0), }, updateErrs: []error{ wtdb.ErrSessionNotFound, @@ -425,6 +444,9 @@ var stateUpdateExhaustSession = stateUpdateTest{ session: &wtdb.SessionInfo{ ID: *id(0), Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -444,6 +466,9 @@ var stateUpdateSeqNumEqualLastApplied = stateUpdateTest{ session: &wtdb.SessionInfo{ ID: *id(0), Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -463,6 +488,9 @@ var stateUpdateSeqNumLTLastApplied = stateUpdateTest{ session: &wtdb.SessionInfo{ ID: *id(0), Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -481,6 +509,9 @@ var stateUpdateSeqNumZeroInvalid = stateUpdateTest{ session: &wtdb.SessionInfo{ ID: *id(0), Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -497,6 +528,9 @@ var stateUpdateSkipSeqNum = stateUpdateTest{ session: &wtdb.SessionInfo{ ID: *id(0), Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -513,6 +547,9 @@ var stateUpdateRevertSeqNum = stateUpdateTest{ session: &wtdb.SessionInfo{ ID: *id(0), Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -531,6 +568,9 @@ var stateUpdateRevertLastApplied = stateUpdateTest{ session: &wtdb.SessionInfo{ ID: *id(0), Policy: wtpolicy.Policy{ + TxPolicy: wtpolicy.TxPolicy{ + BlobType: blob.TypeAltruistCommit, + }, MaxUpdates: 3, }, RewardAddress: []byte{}, @@ -710,12 +750,14 @@ func updateFromInt(id *wtdb.SessionID, i int, copy(hint[:4], id[:4]) binary.BigEndian.PutUint16(hint[4:6], uint16(i)) + blobSize := blob.Size(blob.TypeAltruistCommit) + return &wtdb.SessionStateUpdate{ ID: *id, Hint: hint, SeqNum: uint16(i), LastApplied: lastApplied, - EncryptedBlob: []byte{byte(i)}, + EncryptedBlob: bytes.Repeat([]byte{byte(i)}, blobSize), } } diff --git a/watchtower/wtserver/server_test.go b/watchtower/wtserver/server_test.go index 63f537b9..a6a087f0 100644 --- a/watchtower/wtserver/server_test.go +++ b/watchtower/wtserver/server_test.go @@ -27,6 +27,8 @@ var ( addrScript, _ = txscript.PayToAddrScript(addr) testnetChainHash = *chaincfg.TestNet3Params.GenesisHash + + testBlob = make([]byte, blob.Size(blob.TypeAltruistCommit)) ) // randPubKey generates a new secp keypair, and returns the public key. @@ -300,8 +302,9 @@ func testServerCreateSession(t *testing.T, i int, test createSessionTestCase) { peer = wtmock.NewMockPeer(localPub, peerPub, nil, 0) connect(t, s, peer, test.initMsg, timeoutDuration) update := &wtwire.StateUpdate{ - SeqNum: 1, - IsComplete: 1, + SeqNum: 1, + IsComplete: 1, + EncryptedBlob: testBlob, } sendMsg(t, update, peer, timeoutDuration) @@ -323,8 +326,8 @@ func testServerCreateSession(t *testing.T, i int, test createSessionTestCase) { // Ensure that the server's reply matches our expected response for a // duplicate send. if !reflect.DeepEqual(reply, test.expDupReply) { - t.Fatalf("[test %d] expected reply %v, got %d", - i, test.expReply, reply) + t.Fatalf("[test %d] expected reply %v, got %v", + i, test.expDupReply, reply) } // Finally, check that the server tore down the connection. @@ -355,10 +358,10 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 1, LastApplied: 0}, - {SeqNum: 2, LastApplied: 1}, - {SeqNum: 3, LastApplied: 2}, - {SeqNum: 3, LastApplied: 3}, + {SeqNum: 1, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 2, LastApplied: 1, EncryptedBlob: testBlob}, + {SeqNum: 3, LastApplied: 2, EncryptedBlob: testBlob}, + {SeqNum: 3, LastApplied: 3, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ {Code: wtwire.CodeOK, LastApplied: 1}, @@ -385,7 +388,7 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 2, LastApplied: 0}, + {SeqNum: 2, LastApplied: 0, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ { @@ -409,9 +412,9 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 1, LastApplied: 0}, - {SeqNum: 2, LastApplied: 0}, - {SeqNum: 1, LastApplied: 0}, + {SeqNum: 1, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 2, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 1, LastApplied: 0, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ {Code: wtwire.CodeOK, LastApplied: 1}, @@ -437,10 +440,10 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 1, LastApplied: 0}, - {SeqNum: 2, LastApplied: 1}, - {SeqNum: 3, LastApplied: 2}, - {SeqNum: 4, LastApplied: 1}, + {SeqNum: 1, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 2, LastApplied: 1, EncryptedBlob: testBlob}, + {SeqNum: 3, LastApplied: 2, EncryptedBlob: testBlob}, + {SeqNum: 4, LastApplied: 1, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ {Code: wtwire.CodeOK, LastApplied: 1}, @@ -465,11 +468,11 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 1, LastApplied: 0}, - {SeqNum: 2, LastApplied: 1}, + {SeqNum: 1, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 2, LastApplied: 1, EncryptedBlob: testBlob}, nil, // Wait for read timeout to drop conn, then reconnect. - {SeqNum: 3, LastApplied: 2}, - {SeqNum: 4, LastApplied: 3}, + {SeqNum: 3, LastApplied: 2, EncryptedBlob: testBlob}, + {SeqNum: 4, LastApplied: 3, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ {Code: wtwire.CodeOK, LastApplied: 1}, @@ -495,11 +498,11 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 1, LastApplied: 0}, - {SeqNum: 2, LastApplied: 0}, + {SeqNum: 1, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 2, LastApplied: 0, EncryptedBlob: testBlob}, nil, // Wait for read timeout to drop conn, then reconnect. - {SeqNum: 3, LastApplied: 0}, - {SeqNum: 4, LastApplied: 3}, + {SeqNum: 3, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 4, LastApplied: 3, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ {Code: wtwire.CodeOK, LastApplied: 1}, @@ -525,12 +528,12 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 1, LastApplied: 0}, - {SeqNum: 2, LastApplied: 0}, + {SeqNum: 1, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 2, LastApplied: 0, EncryptedBlob: testBlob}, nil, // Wait for read timeout to drop conn, then reconnect. - {SeqNum: 2, LastApplied: 0}, - {SeqNum: 3, LastApplied: 0}, - {SeqNum: 4, LastApplied: 3}, + {SeqNum: 2, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 3, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 4, LastApplied: 3, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ {Code: wtwire.CodeOK, LastApplied: 1}, @@ -556,10 +559,10 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 1, LastApplied: 0}, - {SeqNum: 2, LastApplied: 1}, - {SeqNum: 3, LastApplied: 2}, - {SeqNum: 4, LastApplied: 3}, + {SeqNum: 1, LastApplied: 0, EncryptedBlob: testBlob}, + {SeqNum: 2, LastApplied: 1, EncryptedBlob: testBlob}, + {SeqNum: 3, LastApplied: 2, EncryptedBlob: testBlob}, + {SeqNum: 4, LastApplied: 3, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ {Code: wtwire.CodeOK, LastApplied: 1}, @@ -586,7 +589,7 @@ var stateUpdateTests = []stateUpdateTestCase{ SweepFeeRate: 1, }, updates: []*wtwire.StateUpdate{ - {SeqNum: 0, LastApplied: 0}, + {SeqNum: 0, LastApplied: 0, EncryptedBlob: testBlob}, }, replies: []*wtwire.StateUpdateReply{ {