decred.org/dcrdex@v1.0.3/client/db/bolt/testdata/v5gen/v5.db.gen.go (about)

     1  // This code is available on the terms of the project LICENSE.md file,
     2  // also available online at https://blueoakcouncil.org/license/1.0.0.
     3  
     4  // This file should compiled from the commit the file was introduced, otherwise
     5  // it may not compile due to API changes, or may not create the database with
     6  // the correct old version.  This file should not be updated for API changes.
     7  
     8  package main
     9  
    10  import (
    11  	"compress/gzip"
    12  	"fmt"
    13  	"io"
    14  	"math/rand"
    15  	"os"
    16  
    17  	"decred.org/dcrdex/client/db"
    18  	"decred.org/dcrdex/client/db/bolt"
    19  	"decred.org/dcrdex/dex"
    20  	"decred.org/dcrdex/dex/order"
    21  	"decred.org/dcrdex/dex/order/test"
    22  )
    23  
    24  const dbname = "v5.db"
    25  
    26  func main() {
    27  	err := setup()
    28  	if err != nil {
    29  		fmt.Fprintf(os.Stderr, "setup: %v\n", err)
    30  		os.Exit(1)
    31  	}
    32  	err = compress()
    33  	if err != nil {
    34  		fmt.Fprintf(os.Stderr, "compress: %v\n", err)
    35  		os.Exit(1)
    36  	}
    37  }
    38  
    39  func setup() error {
    40  	db, err := bolt.NewDB(dbname, dex.StdOutLogger("db_TEST", dex.LevelOff))
    41  	if err != nil {
    42  		return err
    43  	}
    44  	bdb, ok := db.(*bolt.BoltDB)
    45  	if !ok {
    46  		return fmt.Errorf("database is not a BoltDB")
    47  	}
    48  	defer bdb.DB.Close()
    49  	return mockData(db)
    50  }
    51  
    52  func mockData(tdb db.DB) error {
    53  	// Create matches and log IDs.
    54  	saveMatchAndLogID := func(desc string, modifyMatch func(*db.MetaMatch) bool) error {
    55  		match := &db.MetaMatch{
    56  			UserMatch: &order.UserMatch{
    57  				MatchID: test.RandomMatchID(),
    58  				Address: "adsf", // not a cancel order match by default
    59  			},
    60  			MetaData: &db.MatchMetaData{
    61  				DEX:   "somedex.ltd",
    62  				Base:  42,
    63  				Quote: 0,
    64  			},
    65  		}
    66  		active := modifyMatch(match)
    67  		if err := tdb.UpdateMatch(match); err != nil {
    68  			return err
    69  		}
    70  		// "matchID-String": active-Bool, // desc-String
    71  		fmt.Printf("\t%q: %t, // %s\n", match.MatchID.String(), active, desc)
    72  		return nil
    73  	}
    74  
    75  	// Active match, status < MatchComplete, not revoked, not refunded.
    76  	err := saveMatchAndLogID("status < MatchComplete, not revoked, not refunded", func(match *db.MetaMatch) bool {
    77  		match.Status = order.MatchStatus(rand.Intn(4))
    78  		return true // active
    79  	})
    80  	if err != nil {
    81  		return err
    82  	}
    83  
    84  	// Inactive match, status < MatchComplete, revoked but requires no further action.
    85  	err = saveMatchAndLogID("status < MatchComplete, revoked", func(match *db.MetaMatch) bool {
    86  		match.Status = order.MatchStatus(rand.Intn(4))
    87  		match.MetaData.Proof.SelfRevoked = true
    88  		return false // retired
    89  	})
    90  	if err != nil {
    91  		return err
    92  	}
    93  
    94  	// Active match, status == MakerSwapCast, revoked but requires maker auto-refund.
    95  	err = saveMatchAndLogID("status == MakerSwapCast, side Maker, revoked, requires refund", func(match *db.MetaMatch) bool {
    96  		match.Status = order.MakerSwapCast
    97  		match.Side = order.Maker
    98  		match.MetaData.Proof.ServerRevoked = true
    99  		// match.MetaData.Proof.RefundCoin = []byte{0}
   100  		return true // active
   101  	})
   102  	if err != nil {
   103  		return err
   104  	}
   105  
   106  	// Inactive match, status == TakerSwapCast, revoked and refunded (requires no further action).
   107  	err = saveMatchAndLogID("status == TakerSwapCast, side Maker, revoked, refunded", func(match *db.MetaMatch) bool {
   108  		match.Status = order.TakerSwapCast
   109  		match.Side = order.Maker
   110  		match.MetaData.Proof.SelfRevoked = true
   111  		match.MetaData.Proof.RefundCoin = []byte{0}
   112  		return false // retired
   113  	})
   114  	if err != nil {
   115  		return err
   116  	}
   117  
   118  	// Active match, status == MatchComplete, no RedeemSig.
   119  	err = saveMatchAndLogID("status == MatchComplete, no RedeemSig", func(match *db.MetaMatch) bool {
   120  		match.Status = order.MatchComplete
   121  		match.MetaData.Proof.Auth.InitSig = []byte{0}
   122  		return true // active
   123  	})
   124  	if err != nil {
   125  		return err
   126  	}
   127  
   128  	// Inactive match, status == MatchComplete, RedeemSig set.
   129  	err = saveMatchAndLogID("status == MatchComplete, RedeemSig set", func(match *db.MetaMatch) bool {
   130  		match.Status = order.MatchComplete
   131  		match.MetaData.Proof.Auth.InitSig = []byte{0} // make sure it's RedeemSig that retires this one
   132  		match.MetaData.Proof.Auth.RedeemSig = []byte{1}
   133  		return false // retired
   134  	})
   135  	if err != nil {
   136  		return err
   137  	}
   138  
   139  	// cancel order match
   140  	err = saveMatchAndLogID("cancel order match", func(match *db.MetaMatch) bool {
   141  		match.Status = order.MatchComplete
   142  		// match.MetaData.Proof.Auth.InitSig not set (cancel order match)
   143  		match.Address = "" // cancel order match
   144  		return false       // retired
   145  	})
   146  	if err != nil {
   147  		return err
   148  	}
   149  
   150  	return nil
   151  }
   152  
   153  func compress() error {
   154  	db, err := os.Open(dbname)
   155  	if err != nil {
   156  		return err
   157  	}
   158  	defer os.Remove(dbname)
   159  	defer db.Close()
   160  	dbgz, err := os.Create(dbname + ".gz")
   161  	if err != nil {
   162  		return err
   163  	}
   164  	defer dbgz.Close()
   165  	gz := gzip.NewWriter(dbgz)
   166  	_, err = io.Copy(gz, db)
   167  	if err != nil {
   168  		return err
   169  	}
   170  	return gz.Close()
   171  }