github.com/decred/dcrlnd@v0.7.6/channeldb/migration20/migration_test.go (about)

     1  package migration20
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/decred/dcrlnd/channeldb/migtest"
     7  	"github.com/decred/dcrlnd/kvdb"
     8  )
     9  
    10  var (
    11  	hexStr = migtest.Hex
    12  
    13  	nodeID      = hexStr("031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce")
    14  	chainHash   = hexStr("81b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce9")
    15  	outpoint1   = hexStr("81b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce90fb463ad")
    16  	commitKey1  = hexStr("6368616e2d636f6d6d69746d656e742d6b657900")
    17  	commitment1 = hexStr("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023280000000000000bb828996f0422464389000000000000138801000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070431dc001b0162ffffffff0100f2052a01000000434104d64bdfd09eb1c5fe295abdeb1dca4281be988e2da0b6c1c6a59dc226c28624e18175e851c96b973d81b01cc31f047834bc06d6d6edf620d184241a6aed8b63a6ac0500000047010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100014730450221008ce2bc69281ce27da07e6683571319d18e949ddfa2965fb6caa1bf0314f882d70220299105481d63e0f4bc2a88121167221b6700d72a0ead154c03be696a292d24ae81b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce9000000000000000a000000010000000001096f6e696f6e626c6f6200000000000000000000000000000000")
    18  	commitKey2  = hexStr("6368616e2d636f6d6d69746d656e742d6b657901")
    19  	commitment2 = hexStr("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb800000000000023286342a17ec61d66b3000000000000138801000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070431dc001b0162ffffffff0100f2052a01000000434104d64bdfd09eb1c5fe295abdeb1dca4281be988e2da0b6c1c6a59dc226c28624e18175e851c96b973d81b01cc31f047834bc06d6d6edf620d184241a6aed8b63a6ac0500000047010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100014730450221008ce2bc69281ce27da07e6683571319d18e949ddfa2965fb6caa1bf0314f882d70220299105481d63e0f4bc2a88121167221b6700d72a0ead154c03be696a292d24ae81b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce9000000000000000a000000010000000000096f6e696f6e626c6f6200000000000000000000000000000000")
    20  	chanInfo    = hexStr("1081b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce981b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce90fb463ad6fb5ae2162a7a98e01010000000064000400031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce00000000000027100000000000000008000000000000000201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070431dc001b0162ffffffff0100f2052a01000000434104d64bdfd09eb1c5fe295abdeb1dca4281be988e2da0b6c1c6a59dc226c28624e18175e851c96b973d81b01cc31f047834bc06d6d6edf620d184241a6aed8b63a6ac0500000041bc5221edd86a320d13a74909313ec348a942f50a648bb159bb2f3362169465c3a4f6d0000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce1eeeb7a89ae233c330b2e1eec7b8115c343083544c79ea954d38071b259e6703c8e5996c000000000000000901031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000010000000801031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000030000000701031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000040000000601031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000020000000501031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce")
    21  	frozenInfo  = hexStr("00000064")
    22  	revState    = hexStr("031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce81b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce9010000ffffffffffff537f9d8d5794fb14d5be766c16d3569466fd94186d89dbc48ce34909ef7a604d0000fffffffffffe031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce")
    23  
    24  	// openChannel is the data in the open channel bucket in database
    25  	// version 16 format.
    26  	openChannel = map[string]interface{}{
    27  		nodeID: map[string]interface{}{
    28  			chainHash: map[string]interface{}{
    29  				outpoint1: map[string]interface{}{
    30  					commitKey1:             commitment1,
    31  					commitKey2:             commitment2,
    32  					"chan-info-key":        chanInfo,
    33  					"frozen-chans":         frozenInfo,
    34  					"revocation-state-key": revState,
    35  				},
    36  			},
    37  		},
    38  	}
    39  
    40  	outpoint2     = hexStr("81b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce952d6c6c7")
    41  	outpoint2Info = hexStr("81b637d8fcd2c6da6859e6963113a1170de793e4b725b84d1e0b4cf99ec58ce952d6c6c700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000000000000000001f40000000000002710000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce1a1e52008bd73aae77799e9e90cc5c154fbb11704005ce08717d115a04942e89aee57f81000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce000000000000000001031df11fcf521bf537579cd91c192b28343adcd04970817bcd68a3ca43648effce0102bcd89759e0688feed099ea7ed37ceb4fb808e4af814fe1986e3d30107aa3069f00")
    42  
    43  	// closedChannel is the data in the closed channel bucket in database
    44  	// version 16 format.
    45  	closedChannel = map[string]interface{}{
    46  		outpoint2: outpoint2Info,
    47  	}
    48  
    49  	// outpointData is used to create the outpoint bucket from scratch since
    50  	// migration19 creates it.
    51  	outpointData = map[string]interface{}{}
    52  
    53  	// The tlv streams in string form for both an outpointOpen and outpointClosed
    54  	// indexStatus.
    55  	tlvOutpointOpen   = hexStr("000100")
    56  	tlvOutpointClosed = hexStr("000101")
    57  
    58  	// post is the expected data in the outpoint bucket after migration.
    59  	post = map[string]interface{}{
    60  		outpoint1: tlvOutpointOpen,
    61  		outpoint2: tlvOutpointClosed,
    62  	}
    63  )
    64  
    65  // TestMigrateOutpointIndex asserts that the database is properly migrated to
    66  // contain an outpoint index.
    67  func TestMigrateOutpointIndex(t *testing.T) {
    68  	// Prime the database with both the openChannel and closedChannel data.
    69  	// We also create the outpointBucket since migration19 creates it and
    70  	// migration20 assumes it exists.
    71  	before := func(tx kvdb.RwTx) error {
    72  		err := migtest.RestoreDB(tx, openChanBucket, openChannel)
    73  		if err != nil {
    74  			return err
    75  		}
    76  
    77  		err = migtest.RestoreDB(tx, closedChannelBucket, closedChannel)
    78  		if err != nil {
    79  			return err
    80  		}
    81  
    82  		return migtest.RestoreDB(tx, outpointBucket, outpointData)
    83  	}
    84  
    85  	// Make sure that the openChanBucket and closedChannelBuckets are untouched
    86  	// and that the outpoint index is populated correctly.
    87  	after := func(tx kvdb.RwTx) error {
    88  		err := migtest.VerifyDB(tx, openChanBucket, openChannel)
    89  		if err != nil {
    90  			return err
    91  		}
    92  
    93  		err = migtest.VerifyDB(tx, closedChannelBucket, closedChannel)
    94  		if err != nil {
    95  			return err
    96  		}
    97  
    98  		return migtest.VerifyDB(tx, outpointBucket, post)
    99  	}
   100  
   101  	migtest.ApplyMigration(t, before, after, MigrateOutpointIndex, false)
   102  }