Skip to content

Commit 642be6a

Browse files
authored
Merge pull request #96 from darcys22/dev
Dev
2 parents 9651f9f + 7d85f82 commit 642be6a

28 files changed

+489
-240
lines changed

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ clean:
1919
rm -rf release/
2020
rm -rf cert/
2121

22+
lint:
23+
GO111MODULE=on go run utils/ci.go lint
24+
2225
travis:
2326
GO111MODULE=on go run utils/ci.go install
2427
GO111MODULE=on go run utils/ci.go test -coverage $$TEST_PACKAGES

godbledger/cmd/config.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,10 @@ func MakeConfig(cli *cli.Context) (error, *LedgerConfig) {
7373
return err, nil
7474
}
7575
logrus.SetLevel(level)
76-
if len(cli.String("config")) > 0 {
77-
config.ConfigFile = cli.String("config")
76+
setConfig(cli, config)
77+
if config.DataDirectory != DefaultDataDir() {
78+
config.ConfigFile = config.DataDirectory + "/config.toml"
79+
config.DatabaseLocation = config.DataDirectory + "/ledgerdata/ledger.db"
7880
}
7981
err = InitConfig(config)
8082
if err != nil {

godbledger/cmd/flags.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func setConfig(ctx *cli.Context, cfg *LedgerConfig) {
109109
cfg.ConfigFile = ctx.String(ConfigFileFlag.Name)
110110
}
111111
if ctx.IsSet(DataDirFlag.Name) {
112-
cfg.ConfigFile = ctx.String(DataDirFlag.Name)
112+
cfg.DataDirectory = ctx.String(DataDirFlag.Name)
113113
}
114114
if ctx.IsSet(RPCHost.Name) {
115115
cfg.Host = ctx.String(RPCHost.Name)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package core
2+
3+
import (
4+
"math/big"
5+
"testing"
6+
"time"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func init() {
12+
}
13+
14+
func TestTransaction(t *testing.T) {
15+
user, err := NewUser("Tester")
16+
assert.NoError(t, err)
17+
18+
txn, err := NewTransaction(user)
19+
assert.NoError(t, err)
20+
21+
cash, err := NewAccount("1", "cash")
22+
assert.NoError(t, err)
23+
income, err := NewAccount("2", "income")
24+
assert.NoError(t, err)
25+
aud, err := NewCurrency("AUD", 2)
26+
assert.NoError(t, err)
27+
28+
amountDR := big.NewInt(10)
29+
30+
spl1, err := NewSplit(time.Now(), []byte("Cash Income"), []*Account{cash}, aud, amountDR)
31+
assert.NoError(t, err)
32+
33+
err = txn.AppendSplit(spl1)
34+
assert.NoError(t, err)
35+
36+
amountCR := big.NewInt(-10)
37+
spl2, err := NewSplit(time.Now(), []byte("Cash Income"), []*Account{income}, aud, amountCR)
38+
assert.NoError(t, err)
39+
40+
err = txn.AppendSplit(spl2)
41+
assert.NoError(t, err)
42+
43+
total, txnBalances := txn.Balance()
44+
assert.True(t, txnBalances)
45+
assert.Equal(t, total.Cmp(big.NewInt(0)), 0)
46+
47+
assert.Equal(t, txn.Splits[0].Amount, amountDR)
48+
assert.Equal(t, txn.Splits[0].Accounts[0].Name, "cash")
49+
assert.Equal(t, txn.Splits[1].Amount, amountCR)
50+
assert.Equal(t, txn.Splits[1].Accounts[0].Name, "income")
51+
52+
//func ReverseTransaction(originalTxn *Transaction, usr *User) (*Transaction, error) {
53+
reversedTxn, err := ReverseTransaction(txn, user)
54+
assert.NoError(t, err)
55+
56+
total, txnBalances = reversedTxn.Balance()
57+
assert.True(t, txnBalances)
58+
assert.Equal(t, total.Cmp(big.NewInt(0)), 0)
59+
60+
assert.Equal(t, reversedTxn.Splits[0].Amount, amountCR)
61+
assert.Equal(t, reversedTxn.Splits[0].Accounts[0].Name, "cash")
62+
assert.Equal(t, reversedTxn.Splits[1].Amount, amountDR)
63+
assert.Equal(t, reversedTxn.Splits[1].Accounts[0].Name, "income")
64+
65+
}

godbledger/ledger/ledger.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ func New(ctx *cli.Context, cfg *cmd.LedgerConfig) (*Ledger, error) {
4242
}
4343
log.WithField("path", dbPath).Debug("Checking db path")
4444
if ctx.Bool(cmd.ClearDB.Name) {
45+
log.Info("Clearing SQLite3 DB")
4546
if err := sqlite3db.ClearDB(dbPath); err != nil {
4647
return nil, err
4748
}

godbledger/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,13 @@ func main() {
6868
}
6969
app.Version = version.Version
7070
app.Commands = []*cli.Command{
71-
// See config.go
71+
// See cmd/config.go
7272
cmd.DumpConfigCommand,
7373
cmd.InitConfigCommand,
7474
}
7575

7676
app.Flags = []cli.Flag{
77+
// See cmd/flags.go
7778
cmd.VerbosityFlag,
7879
cmd.DataDirFlag,
7980
cmd.ClearDB,

godbledger/node/node.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"syscall"
88

99
"github.com/sirupsen/logrus"
10-
//"github.com/urfave/cli"
1110
"github.com/urfave/cli/v2"
1211

1312
"github.com/darcys22/godbledger/godbledger/core"

godbledger/node/node_test.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package node
2+
3+
import (
4+
"context"
5+
"crypto/rand"
6+
"flag"
7+
"fmt"
8+
"io/ioutil"
9+
"math/big"
10+
"os"
11+
"path/filepath"
12+
"testing"
13+
"time"
14+
15+
"github.com/stretchr/testify/assert"
16+
17+
"github.com/darcys22/godbledger/godbledger/cmd"
18+
"github.com/darcys22/godbledger/godbledger/ledger"
19+
"github.com/darcys22/godbledger/shared"
20+
21+
"github.com/sirupsen/logrus"
22+
logTest "github.com/sirupsen/logrus/hooks/test"
23+
"github.com/urfave/cli/v2"
24+
)
25+
26+
const (
27+
maxPollingWaitTime = 1 * time.Second
28+
)
29+
30+
func init() {
31+
logrus.SetLevel(logrus.DebugLevel)
32+
logrus.SetOutput(ioutil.Discard)
33+
}
34+
35+
// Test that godbledger node can close.
36+
func TestNodeClose_OK(t *testing.T) {
37+
hook := logTest.NewGlobal()
38+
39+
app := cli.App{}
40+
set := flag.NewFlagSet("test", 0)
41+
set.String("config", "", "doc")
42+
43+
ctx := cli.NewContext(&app, set, nil)
44+
45+
node, err := New(ctx)
46+
assert.NoError(t, err)
47+
48+
node.Close()
49+
50+
shared.LogsContain(t.Fatalf, hook, "Stopping ledger node", true)
51+
}
52+
53+
// TestClearDB tests clearing the database
54+
func TestClearDB(t *testing.T) {
55+
hook := logTest.NewGlobal()
56+
57+
randPath, err := rand.Int(rand.Reader, big.NewInt(1000000))
58+
assert.NoError(t, err, "Could not generate random number for file path")
59+
tmp := filepath.Join(os.TempDir(), fmt.Sprintf("datadirtest%d", randPath))
60+
assert.NoError(t, os.RemoveAll(tmp))
61+
62+
app := cli.App{}
63+
set := flag.NewFlagSet("test", 0)
64+
set.Bool(cmd.ClearDB.Name, true, "")
65+
66+
ctx := cli.NewContext(&app, set, nil)
67+
assert.NoError(t, err)
68+
err, cfg := cmd.MakeConfig(ctx)
69+
assert.NoError(t, err)
70+
cfg.DatabaseType = "memorydb"
71+
cfg.DataDirectory = tmp
72+
73+
node, err := New(ctx)
74+
assert.NoError(t, err)
75+
76+
ledger, err := ledger.New(ctx, cfg)
77+
assert.NoError(t, err)
78+
79+
node.Register(ledger)
80+
go node.Start()
81+
d := time.Now().Add(maxPollingWaitTime)
82+
contextWithDeadline, cancel := context.WithDeadline(context.Background(), d)
83+
defer cancel()
84+
<-contextWithDeadline.Done()
85+
shared.LogsContain(t.Fatalf, hook, "Clearing SQLite3 DB", true)
86+
//case <-contextWithDeadline.Done():
87+
88+
node.Close()
89+
assert.NoError(t, os.RemoveAll(tmp))
90+
}

godbledger/rpc/service_test.go

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package rpc
2+
3+
import (
4+
"context"
5+
"errors"
6+
"flag"
7+
"io/ioutil"
8+
"testing"
9+
10+
"github.com/darcys22/godbledger/godbledger/cmd"
11+
"github.com/darcys22/godbledger/godbledger/ledger"
12+
"github.com/darcys22/godbledger/shared"
13+
14+
"github.com/sirupsen/logrus"
15+
logTest "github.com/sirupsen/logrus/hooks/test"
16+
"github.com/stretchr/testify/assert"
17+
"github.com/urfave/cli/v2"
18+
)
19+
20+
func init() {
21+
logrus.SetLevel(logrus.DebugLevel)
22+
logrus.SetOutput(ioutil.Discard)
23+
}
24+
25+
func TestLifecycle_OK(t *testing.T) {
26+
hook := logTest.NewGlobal()
27+
28+
set := flag.NewFlagSet("test", 0)
29+
set.String("config", "", "doc")
30+
ctx := cli.NewContext(nil, set, nil)
31+
err, cfg := cmd.MakeConfig(ctx)
32+
assert.NoError(t, err)
33+
34+
cfg.DatabaseType = "memorydb"
35+
cfg.Host = "127.0.0.1"
36+
cfg.RPCPort = "7348"
37+
cfg.CACert = "bob.crt"
38+
cfg.Cert = "alice.crt"
39+
cfg.Key = "alice.key"
40+
41+
ledger, err := ledger.New(ctx, cfg)
42+
assert.NoError(t, err)
43+
44+
rpcService := NewRPCService(context.Background(), &Config{
45+
Host: cfg.Host,
46+
Port: cfg.RPCPort,
47+
CACertFlag: cfg.CACert,
48+
CertFlag: cfg.Cert,
49+
KeyFlag: cfg.Key,
50+
}, ledger)
51+
52+
rpcService.Start()
53+
54+
shared.LogsContain(t.Fatalf, hook, "GRPC Listening on port", true)
55+
assert.NoError(t, rpcService.Stop())
56+
}
57+
58+
func TestStatus_CredentialError(t *testing.T) {
59+
credentialErr := errors.New("credentialError")
60+
s := &Service{credentialError: credentialErr}
61+
62+
assert.Contains(t, s.credentialError.Error(), s.Status().Error())
63+
}
64+
65+
func TestRPC_InsecureEndpoint(t *testing.T) {
66+
hook := logTest.NewGlobal()
67+
68+
set := flag.NewFlagSet("test", 0)
69+
set.String("config", "", "doc")
70+
ctx := cli.NewContext(nil, set, nil)
71+
err, cfg := cmd.MakeConfig(ctx)
72+
assert.NoError(t, err)
73+
74+
cfg.DatabaseType = "memorydb"
75+
cfg.Host = "127.0.0.1"
76+
cfg.RPCPort = "7777"
77+
78+
ledger, err := ledger.New(ctx, cfg)
79+
assert.NoError(t, err)
80+
81+
rpcService := NewRPCService(context.Background(), &Config{
82+
Host: cfg.Host,
83+
Port: cfg.RPCPort,
84+
}, ledger)
85+
86+
rpcService.Start()
87+
88+
shared.LogsContain(t.Fatalf, hook, "GRPC Listening on port", true)
89+
shared.LogsContain(t.Fatalf, hook, "You are using an insecure gRPC server", true)
90+
assert.NoError(t, rpcService.Stop())
91+
}

godbledger/version/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222

2323
const (
2424
VersionMajor = 0 // Major version component of the current release
25-
VersionMinor = 4 // Minor version component of the current release
25+
VersionMinor = 5 // Minor version component of the current release
2626
VersionPatch = 0 // Patch version component of the current release
2727
VersionMeta = "alpha" // Version metadata to append to the version string
2828
)

0 commit comments

Comments
 (0)