decred.org/dcrwallet/v3@v3.1.0/wallet/udb/testdata/v24.db.go (about)

     1  // Copyright (c) 2021 The Decred developers
     2  // Use of this source code is governed by an ISC
     3  // license that can be found in the LICENSE file.
     4  
     5  // This file should be compiled from the commit the file was introduced,
     6  // otherwise it may not compile due to API changes, or may not create the
     7  // database with the correct old version.  This file should not be updated for
     8  // API changes.
     9  
    10  // V24 test database layout and v25 upgrade test plan
    11  //
    12  // importVotingAccount is the 25th version of the database. This version
    13  // indicates that importing a new account type has been enabled. This
    14  // account facilitates voting using a special account where the private
    15  // key from indexes of the internal branch are shared with a vsp. The
    16  // new type is not recognized by previous wallet versions. This version
    17  // only updates the db version number so that previous versions will
    18  // error on startup.
    19  //
    20  // This test only creates an empty v24 database.
    21  
    22  package main
    23  
    24  import (
    25  	"compress/gzip"
    26  	"context"
    27  	"fmt"
    28  	"io"
    29  	"os"
    30  	"time"
    31  
    32  	_ "decred.org/dcrwallet/v3/wallet/internal/bdb"
    33  	"decred.org/dcrwallet/v3/wallet/udb"
    34  	"decred.org/dcrwallet/v3/wallet/walletdb"
    35  	"github.com/decred/dcrd/chaincfg/v3"
    36  )
    37  
    38  const dbname = "v24.db"
    39  
    40  var (
    41  	epoch    time.Time
    42  	pubPass  = []byte("public")
    43  	privPass = []byte("private")
    44  )
    45  
    46  var params = chaincfg.TestNet3Params()
    47  
    48  func main() {
    49  	ctx, cancel := context.WithCancel(context.Background())
    50  	defer cancel()
    51  	err := setup(ctx)
    52  	if err != nil {
    53  		fmt.Fprintf(os.Stderr, "setup: %v\n", err)
    54  		os.Exit(1)
    55  	}
    56  	err = compress()
    57  	if err != nil {
    58  		fmt.Fprintf(os.Stderr, "compress: %v\n", err)
    59  		os.Exit(1)
    60  	}
    61  }
    62  
    63  func setup(ctx context.Context) error {
    64  	db, err := walletdb.Create("bdb", dbname)
    65  	if err != nil {
    66  		return err
    67  	}
    68  	defer db.Close()
    69  	var seed [32]byte
    70  	if err = udb.Initialize(ctx, db, params, seed[:], pubPass, privPass); err != nil {
    71  		return err
    72  	}
    73  	return nil
    74  }
    75  
    76  func compress() error {
    77  	db, err := os.Open(dbname)
    78  	if err != nil {
    79  		return err
    80  	}
    81  	defer os.Remove(dbname)
    82  	defer db.Close()
    83  	dbgz, err := os.Create(dbname + ".gz")
    84  	if err != nil {
    85  		return err
    86  	}
    87  	defer dbgz.Close()
    88  	gz := gzip.NewWriter(dbgz)
    89  	_, err = io.Copy(gz, db)
    90  	if err != nil {
    91  		return err
    92  	}
    93  	return gz.Close()
    94  }