Skip to content

Commit

Permalink
Starting to create db config and integration tests
Browse files Browse the repository at this point in the history
 * See #11
  • Loading branch information
Rjected committed Jul 3, 2019
1 parent 5e44acc commit 9e112dc
Show file tree
Hide file tree
Showing 6 changed files with 193 additions and 117 deletions.
25 changes: 4 additions & 21 deletions cmd/fred/fred.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,6 @@ type fredConfig struct {
// support lightning or not to support lightning?
LightningSupport bool `long:"lightning" description:"Whether or not to support lightning on the exchange"`

// database information
DBUsername string `long:"dbuser" description:"database username"`
DBPassword string `long:"dbpassword" description:"database password"`
DBHost string `long:"dbhost" description:"Host for the database connection"`
DBPort uint16 `long:"dbport" description:"Port for the database connection"`

// Auction server options
AuctionTime uint64 `long:"auctiontime" description:"Time it should take to generate a timelock puzzle protected order"`
}
Expand All @@ -91,12 +85,6 @@ var (
// Yes we want lightning
defaultLightningSupport = true

// default database stuff
defaultDBUsername = "opencx"
defaultDBPassword = "testpass"
defaultDBHost = "localhost"
defaultDBPort = uint16(3306)

// default auction options
defaultAuctionTime = uint64(30000)
)
Expand All @@ -120,24 +108,19 @@ func main() {
Litport: defaultLitport,
AuthenticatedRPC: defaultAuthenticatedRPC,
LightningSupport: defaultLightningSupport,
DBUsername: defaultDBUsername,
DBPassword: defaultDBPassword,
DBHost: defaultDBHost,
DBPort: defaultDBPort,
AuctionTime: defaultAuctionTime,
}

// Check and load config params
key := opencxSetup(&conf)

var db *cxdbsql.DB
if db, err = cxdbsql.CreateDBConnection(conf.DBUsername, conf.DBPassword, conf.DBHost, conf.DBPort); err != nil {
logging.Fatalf("Error initializing Database: \n%s", err)
}

// Generate the coin list based on the parameters we know
coinList := generateCoinList(&conf)

// init db
var db *cxdbsql.DB
db = new(cxdbsql.DB)

// Setup DB Client
if err = db.SetupClient(coinList); err != nil {
log.Fatalf("Error setting up sql client: \n%s", err)
Expand Down
26 changes: 4 additions & 22 deletions cmd/opencxd/opencxd.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type opencxConfig struct {

// stuff for files and directories
LogFilename string `long:"logFilename" description:"Filename for output log file"`
OpencxHomeDir string `long:"dir" description:"Location of the root directory relative to home directory"`
OpencxHomeDir string `long:"dir" description:"Location of the root directory for opencxd"`

// stuff for ports
Rpcport uint16 `short:"p" long:"rpcport" description:"Set RPC port to connect to"`
Expand Down Expand Up @@ -61,12 +61,6 @@ type opencxConfig struct {

// support lightning or not to support lightning?
LightningSupport bool `long:"lightning" description:"Whether or not to support lightning on the exchange"`

// database information
DBUsername string `long:"dbuser" description:"database username"`
DBPassword string `long:"dbpassword" description:"database password"`
DBHost string `long:"dbhost" description:"Host for the database connection"`
DBPort uint16 `long:"dbport" description:"Port for the database connection"`
}

var (
Expand All @@ -86,12 +80,6 @@ var (

// Yes we want lightning
defaultLightningSupport = true

// default database stuff
defaultDBUsername = "opencx"
defaultDBPassword = "testpass"
defaultDBHost = "localhost"
defaultDBPort = uint16(3306)
)

// newConfigParser returns a new command line flags parser.
Expand All @@ -113,23 +101,17 @@ func main() {
Litport: defaultLitport,
AuthenticatedRPC: defaultAuthenticatedRPC,
LightningSupport: defaultLightningSupport,
DBUsername: defaultDBUsername,
DBPassword: defaultDBPassword,
DBHost: defaultDBHost,
DBPort: defaultDBPort,
}

// Check and load config params
key := opencxSetup(&conf)

var db *cxdbsql.DB
if db, err = cxdbsql.CreateDBConnection(conf.DBUsername, conf.DBPassword, conf.DBHost, conf.DBPort); err != nil {
logging.Fatalf("Error initializing Database: \n%s", err)
}

// Generate the coin list based on the parameters we know
coinList := generateCoinList(&conf)

var db *cxdbsql.DB
db = new(cxdbsql.DB)

// Setup DB Client
if err = db.SetupClient(coinList); err != nil {
log.Fatalf("Error setting up sql client: \n%s", err)
Expand Down
12 changes: 3 additions & 9 deletions cxbenchmark/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,24 +104,18 @@ func registerClient(client *benchclient.BenchClient) (err error) {
}

// createFullServer creates a server after starting the database with a bunch of parameters
func createFullServer(dbuser string, dbpass string, dbhost string, dbport uint16, coinList []*coinparam.Params, serverhost string, serverport uint16, privkey *koblitz.PrivateKey, authrpc bool) (ocxServer *cxserver.OpencxServer, offChan chan bool, err error) {
func createFullServer(coinList []*coinparam.Params, serverhost string, serverport uint16, privkey *koblitz.PrivateKey, authrpc bool) (ocxServer *cxserver.OpencxServer, offChan chan bool, err error) {

// Create db connection
var db *cxdbsql.DB
if db, err = cxdbsql.CreateDBConnection(dbuser, dbpass, dbhost, dbport); err != nil {
err = fmt.Errorf("Error initializing Database: \n%s", err)
return
}
db = new(cxdbsql.DB)

// Setup DB Client
if err = db.SetupClient(coinList); err != nil {
err = fmt.Errorf("Error setting up sql client: \n%s", err)
return
}

// first add closeDB to the stack of things we're deferring until we're out of the scope of this function
// functionCloser(closeFunc, db.DBHandler.Close)

// Anyways, here's where we set the server
ocxServer = cxserver.InitServer(db, "", serverport, coinList)

Expand Down Expand Up @@ -188,7 +182,7 @@ func functionCloser(original func() error, additionalCloser func() error) {

// createDefaultParamServerWithKey creates a server with a bunch of default params minus privkey and authrpc
func createDefaultParamServerWithKey(privkey *koblitz.PrivateKey, authrpc bool) (server *cxserver.OpencxServer, offChan chan bool, err error) {
return createFullServer("opencx", "testpass", "localhost", uint16(3306), []*coinparam.Params{&coinparam.RegressionNetParams, &coinparam.VertcoinRegTestParams, &coinparam.LiteRegNetParams}, "localhost", uint16(12346), privkey, authrpc)
return createFullServer([]*coinparam.Params{&coinparam.RegressionNetParams, &coinparam.VertcoinRegTestParams, &coinparam.LiteRegNetParams}, "localhost", uint16(12346), privkey, authrpc)
}

// prepareBalances adds tons of money to both accounts
Expand Down
20 changes: 4 additions & 16 deletions cxdb/cxdbsql/auctionqueries_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,7 @@ func constCoinParams() (params []*coinparam.Params) {
func createOpencxUser() (err error) {

var dbconn *DB
if dbconn, err = CreateDBConnection(rootUser, rootPass, defaultHost, defaultPort); err != nil {
err = fmt.Errorf("Error creating db connection to create testing user: %s", err)
return
}
dbconn = new(DB)

// create open string for db
openString := fmt.Sprintf("%s:%s@%s(%s)/", dbconn.dbUsername, dbconn.dbPassword, dbconn.dbAddr.Network(), dbconn.dbAddr.String())
Expand Down Expand Up @@ -90,10 +87,7 @@ func TestPlaceAuctionGoodParams(t *testing.T) {
}

var dbConn *DB
if dbConn, err = CreateDBConnection(testingUser, testingPass, defaultHost, defaultPort); err != nil {
t.Skipf("Could not create db connection for test (error), so skipping: %s", err)
return
}
dbConn = new(DB)

if err = dbConn.SetupClient(constCoinParams()); err != nil {
t.Errorf("Error setting up db client for test: %s", err)
Expand All @@ -117,10 +111,7 @@ func TestPlaceAuctionBadParams(t *testing.T) {
}

var dbConn *DB
if dbConn, err = CreateDBConnection(testingUser, testingPass, defaultHost, defaultPort); err != nil {
t.Skipf("Could not create db connection for test (error), so skipping: %s", err)
return
}
dbConn = new(DB)

if err = dbConn.SetupClient([]*coinparam.Params{}); err != nil {
t.Errorf("Error setting up db client for test: %s", err)
Expand All @@ -144,10 +135,7 @@ func TestPlaceAuctionOrderbookChanges(t *testing.T) {
}

var dbConn *DB
if dbConn, err = CreateDBConnection(testingUser, testingPass, defaultHost, defaultPort); err != nil {
t.Skipf("Could not create db connection for test (error), so skipping: %s", err)
return
}
dbConn = new(DB)

if err = dbConn.SetupClient(constCoinParams()); err != nil {
t.Errorf("Error setting up db client for test: %s", err)
Expand Down
152 changes: 103 additions & 49 deletions cxdb/cxdbsql/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,34 +20,53 @@ type dbsqlConfig struct {
// Filename of config file where this stuff can be set as well
ConfigFile string

// database information
// database home dir
DBHomeDir string `long:"dir" description:"Location of the root directory for the sql db info and config"`

// database info required to establish connection
DBUsername string `long:"dbuser" description:"database username"`
DBPassword string `long:"dbpassword" description:"database password"`
DBHost string `long:"dbhost" description:"Host for the database connection"`
DBPort uint16 `long:"dbport" description:"Port for the database connection"`

// database schema names
BalanceSchemaName string `long:"balanceschema" description:"Name of balance schema"`
DepositSchemaName string `long:"depositschema" description:"Name of deposit schema"`
PendingDepositSchemaName string `long:"penddepschema" description:"Name of pending deposit schema"`
PuzzleSchemaName string `long:"puzzleschema" description:"Name of schema for puzzle orderbooks"`
AuctionSchemaName string `long:"auctionschema" description:"Name of schema for auction ID"`
AuctionOrderSchemaName string `long:"auctionorderschema" description:"Name of schema for auction orderbook"`
OrderSchemaName string `long:"orderschema" description:"Name of schema for limit orderbook"`
PeerSchemaName string `long:"peerschema" description:"Name of schema for peer storage"`

// database table names
PuzzleTableName string `long:"puzzletable" description:"Name of table for puzzle orderbooks"`
AuctionOrderTableName string `long:"auctionordertable" description:"Name of table for auction orders"`
PeerTableName string `long:"peertable" description:"Name of table for peer storage"`
}

// Let these be turned into config things at some point
var (
defaultConfigFilename = "sqldb.conf"
defaultDBHomeDirName = os.Getenv("HOME") + "/.opencx/"
defaultHomeDir = os.Getenv("HOME")
defaultDBPort = uint16(12345)
defaultDBHost = "localhost"
defaultAuthenticatedRPC = true
defaultConfigFilename = "sqldb.conf"
defaultHomeDir = os.Getenv("HOME")
defaultDBHomeDirName = defaultHomeDir + "/.opencx/db/"
defaultDBPort = uint16(3306)
defaultDBHost = "localhost"
defaultDBUser = "opencx"
defaultDBPass = "testpass"

// definitely move this to a config file
balanceSchema = "balances"
depositSchema = "deposit"
pendingDepositSchema = "pending_deposits"
puzzleSchema = "puzzle"
puzzleTable = "puzzles"
auctionSchema = "auctions"
auctionOrderSchema = "auctionorder"
auctionOrderTable = "auctionorders"
orderSchema = "orders"
peerSchema = "peers"
peerTableName = "opencxpeers"
defaultBalanceSchema = "balances"
defaultDepositSchema = "deposit"
defaultPendingDepositSchema = "pending_deposits"
defaultPuzzleSchema = "puzzle"
defaultPuzzleTable = "puzzles"
defaultAuctionSchema = "auctions"
defaultAuctionOrderSchema = "auctionorder"
defaultAuctionOrderTable = "auctionorders"
defaultOrderSchema = "orders"
defaultPeerSchema = "peers"
defaultPeerTable = "opencxpeers"
)

// newConfigParser returns a new command line flags parser.
Expand Down Expand Up @@ -136,36 +155,77 @@ func (db *DB) GetPairs() (pairArray []*match.Pair) {
return
}

// CreateDBConnection initializes the db so the client is ready to be set up. We use TCP by default
func CreateDBConnection(username string, password string, host string, port uint16) (dbconn *DB, err error) {
var dbAddr net.Addr
if dbAddr, err = net.ResolveTCPAddr("tcp", net.JoinHostPort(host, fmt.Sprintf("%d", port))); err != nil {
err = fmt.Errorf("Error resolving database address: \n%s", err)
return
}
func (db *DB) SetOptionsFromConfig(conf *dbsqlConfig) {

dbconn = &DB{
dbAddr: dbAddr,
dbUsername: username,
dbPassword: password,
}
return
}

// SetupClient sets up the mysql client and driver
func (db *DB) SetupClient(coinList []*coinparam.Params) (err error) {
db.gPriceMap = make(map[string]float64)
db.balanceSchema = balanceSchema
db.depositSchema = depositSchema
db.pendingDepositSchema = pendingDepositSchema
db.orderSchema = orderSchema
db.peerSchema = peerSchema
db.peerTableName = peerTableName
db.puzzleSchema = puzzleSchema
db.puzzleTable = puzzleTable
db.auctionSchema = auctionSchema
db.auctionOrderSchema = auctionOrderSchema
db.auctionOrderTable = auctionOrderTable

// Set defaults
conf := dbsqlConfig{
// home dir
DBHomeDir: defaultDBHomeDirName,

// user / pass / net stuff
DBUsername: defaultDBUser,
DBPassword: defaultDBPass,
DBHost: defaultDBHost,
DBPort: defaultDBPort,

// schemas
BalanceSchemaName: defaultBalanceSchema,
DepositSchemaName: defaultDepositSchema,
PendingDepositSchemaName: defaultPendingDepositSchema,
PuzzleSchemaName: defaultPuzzleSchema,
AuctionSchemaName: defaultAuctionSchema,
AuctionOrderSchemaName: defaultAuctionOrderSchema,
OrderSchemaName: defaultOrderSchema,
PeerSchemaName: defaultPeerSchema,

// tables
PuzzleTableName: defaultPuzzleTable,
AuctionOrderTableName: defaultAuctionOrderTable,
PeerTableName: defaultPeerTable,
}

// create and parse config file
dbConfigSetup(&conf)

*db = DB{
dbUsername: conf.DBUsername,
dbPassword: conf.DBPassword,

// schemas
balanceSchema: conf.BalanceSchemaName,
depositSchema: conf.DepositSchemaName,
pendingDepositSchema: conf.PendingDepositSchemaName,
orderSchema: conf.OrderSchemaName,
peerSchema: conf.PeerSchemaName,
puzzleSchema: conf.PuzzleSchemaName,
auctionSchema: conf.AuctionSchemaName,
auctionOrderSchema: conf.AuctionOrderSchemaName,

// tables
puzzleTable: conf.PuzzleTableName,
auctionOrderTable: conf.AuctionOrderTableName,
peerTableName: conf.PeerTableName,

// Initialize price map and mutex
gPriceMap: make(map[string]float64),
priceMapMtx: new(sync.Mutex),

// Set the coinlist based on the param we passed in
coinList: coinList,
}

// Resolve address for host and port, then set that as the network address
if db.dbAddr, err = net.ResolveTCPAddr("tcp", net.JoinHostPort(conf.DBHost, fmt.Sprintf("%d", conf.DBPort))); err != nil {
err = fmt.Errorf("Error resolving database address: \n%s", err)
return
}

// Create users and schemas and assign permissions to opencx
if err = db.rootInitSchemas(); err != nil {
err = fmt.Errorf("Root could not initialize schemas: \n%s", err)
Expand All @@ -175,22 +235,16 @@ func (db *DB) SetupClient(coinList []*coinparam.Params) (err error) {
// open db handle
openString := fmt.Sprintf("%s:%s@%s(%s)/", db.dbUsername, db.dbPassword, db.dbAddr.Network(), db.dbAddr.String())

var dbHandle *sql.DB
if dbHandle, err = sql.Open("mysql", openString); err != nil {
if db.DBHandler, err = sql.Open("mysql", openString); err != nil {
err = fmt.Errorf("Error opening database: \n%s", err)
return
}

db.DBHandler = dbHandle
db.coinList = coinList

// Get all the pairs
if db.pairsArray, err = match.GenerateAssetPairs(coinList); err != nil {
return
}

// DEBUGGING

// Get all the assets
for i, asset := range db.coinList {
logging.Debugf("Asset %d: %s\n", i, asset.Name)
Expand Down
Loading

0 comments on commit 9e112dc

Please sign in to comment.