diff --git a/event/nats/nats_test.go b/event/nats/nats_test.go index 2e3feb3..f202e7c 100644 --- a/event/nats/nats_test.go +++ b/event/nats/nats_test.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "fmt" + "math" "strconv" "testing" "time" @@ -18,7 +19,7 @@ import ( storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" "git.grassecon.net/grassrootseconomics/sarafu-api/models" "git.grassecon.net/grassrootseconomics/sarafu-vise-events/lookup" - "git.grassecon.net/grassrootseconomics/sarafu-vise-events/event" +// "git.grassecon.net/grassrootseconomics/sarafu-vise-events/event" "git.grassecon.net/grassrootseconomics/common/hex" "git.grassecon.net/grassrootseconomics/sarafu-vise-events/internal/testutil" ) @@ -182,7 +183,10 @@ func TestHandleMsg(t *testing.T) { if err != nil { t.Fatal(err) } - if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) { + fmts := fmt.Sprintf("%%1.%df", tokenDecimals) + expect := fmt.Sprintf(fmts, float64(tokenBalance) / math.Pow(10, tokenDecimals)) + //if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) { + if !bytes.Equal(v, []byte(expect)) { t.Fatalf("expected '%d', got %s", tokenBalance, v) } @@ -194,14 +198,14 @@ func TestHandleMsg(t *testing.T) { t.Fatal("no transaction data") } - userDb.SetPrefix(event.DATATYPE_USERSUB) - userDb.SetSession(testutil.AliceSession) - k := append([]byte("vouchers"), []byte("sym")...) - v, err = userDb.Get(ctx, k) - if err != nil { - t.Fatal(err) - } - if !bytes.Contains(v, []byte(fmt.Sprintf("1:%s", tokenSymbol))) { - t.Fatalf("expected '1:%s', got %s", tokenSymbol, v) - } +// userDb.SetPrefix(event.DATATYPE_USERSUB) +// userDb.SetSession(testutil.AliceSession) +// k := append([]byte("vouchers"), []byte("sym")...) +// v, err = userDb.Get(ctx, k) +// if err != nil { +// t.Fatal(err) +// } +// if !bytes.Contains(v, []byte(fmt.Sprintf("1:%s", tokenSymbol))) { +// t.Fatalf("expected '1:%s', got %s", tokenSymbol, v) +// } } diff --git a/event/token.go b/event/token.go index d758322..f7b4e80 100644 --- a/event/token.go +++ b/event/token.go @@ -75,29 +75,38 @@ func updateTokenList(ctx context.Context, userStore *store.UserDataStore, identi // TODO: make sure subprefixdb is thread safe when using gdbm // TODO: why is address session here unless explicitly set - userStore.Db.SetSession(identity.SessionId) - userStore.Db.SetPrefix(DATATYPE_USERSUB) + //userStore.Db.SetPrefix(DATATYPE_USERSUB) + pfxDb := toPrefixDb(userStore, identity.SessionId) - k := append([]byte("vouchers"), []byte("sym")...) - err = userStore.Db.Put(ctx, k, []byte(metadata.Symbols)) - if err != nil { - return err - } - logg.TraceCtxf(ctx, "processvoucher", "key", k) - k = append([]byte("vouchers"), []byte("bal")...) - err = userStore.Db.Put(ctx, k, []byte(metadata.Balances)) + //k := append([]byte("vouchers"), []byte("sym")...) + //err = userStore.Db.Put(ctx, k, []byte(metadata.Symbols)) + typ := storedb.ToBytes(storedb.DATA_VOUCHER_SYMBOLS) + err = pfxDb.Put(ctx, typ, []byte(metadata.Symbols)) if err != nil { return err } - k = append([]byte("vouchers"), []byte("deci")...) - err = userStore.Db.Put(ctx, k, []byte(metadata.Decimals)) + + //k = append([]byte("vouchers"), []byte("bal")...) + //err = userStore.Db.Put(ctx, k, []byte(metadata.Balances)) + typ = storedb.ToBytes(storedb.DATA_VOUCHER_BALANCES) + err = pfxDb.Put(ctx, typ, []byte(metadata.Balances)) if err != nil { return err } - k = append([]byte("vouchers"), []byte("addr")...) - err = userStore.Db.Put(ctx, k, []byte(metadata.Addresses)) + //k = append([]byte("vouchers"), []byte("deci")...) + //err = userStore.Db.Put(ctx, k, []byte(metadata.Decimals)) + typ = storedb.ToBytes(storedb.DATA_VOUCHER_DECIMALS) + err = pfxDb.Put(ctx, typ, []byte(metadata.Decimals)) + if err != nil { + return err + } + + //k = append([]byte("vouchers"), []byte("addr")...) + //err = userStore.Db.Put(ctx, k, []byte(metadata.Addresses)) + typ = storedb.ToBytes(storedb.DATA_VOUCHER_ADDRESSES) + err = pfxDb.Put(ctx, typ, []byte(metadata.Addresses)) if err != nil { return err } @@ -107,7 +116,8 @@ func updateTokenList(ctx context.Context, userStore *store.UserDataStore, identi // set default token to given symbol. func updateDefaultToken(ctx context.Context, userStore *store.UserDataStore, identity lookup.Identity, activeSym string) error { - pfxDb := store.StoreToPrefixDb(userStore, []byte("vouchers")) + //pfxDb := store.StoreToPrefixDb(userStore, []byte("vouchers")) + pfxDb := toPrefixDb(userStore, identity.SessionId) // TODO: the activeSym input should instead be newline separated list? tokenData, err := store.GetVoucherData(ctx, pfxDb, activeSym) if err != nil { @@ -151,7 +161,6 @@ func updateToken(ctx context.Context, userStore *store.UserDataStore, identity l return err } } - logg.Debugf("barfoo") err = updateDefaultToken(ctx, userStore, identity, string(activeSym)) if err != nil { @@ -255,3 +264,9 @@ func handleTokenMint(ctx context.Context, userStore *store.UserDataStore, ev *ev } return nil } + +func toPrefixDb(userStore *store.UserDataStore, sessionId string) storedb.PrefixDb { + userStore.Db.SetSession(sessionId) + prefix := storedb.ToBytes(db.DATATYPE_USERDATA) + return store.StoreToPrefixDb(userStore, prefix) +} diff --git a/event/token_test.go b/event/token_test.go index a6a34d3..b0f2995 100644 --- a/event/token_test.go +++ b/event/token_test.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "fmt" + "math" "strconv" "testing" "time" @@ -12,6 +13,7 @@ import ( "git.defalsify.org/vise.git/db" memdb "git.defalsify.org/vise.git/db/mem" "git.grassecon.net/grassrootseconomics/sarafu-vise-events/config" + "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application" "git.grassecon.net/grassrootseconomics/sarafu-api/models" "git.grassecon.net/grassrootseconomics/sarafu-vise/store" storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" @@ -114,8 +116,11 @@ func TestTokenTransfer(t *testing.T) { if err != nil { t.Fatal(err) } - if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) { - t.Fatalf("expected '%d', got %s", tokenBalance, v) + //if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) { + fmts := fmt.Sprintf("%%1.%df", tokenDecimals) + expect := fmt.Sprintf(fmts, float64(tokenBalance) / math.Pow(10, tokenDecimals)) + if !bytes.Equal(v, []byte(expect)) { + t.Fatalf("expected '%s', got %s", expect, v) } v, err = userStore.ReadEntry(ctx, testutil.AliceSession, storedb.DATA_TRANSACTIONS) @@ -126,16 +131,22 @@ func TestTokenTransfer(t *testing.T) { t.Fatal("no transaction data") } - userDb.SetPrefix(DATATYPE_USERSUB) - userDb.SetSession(testutil.AliceSession) - k := append([]byte("vouchers"), []byte("sym")...) - v, err = userDb.Get(ctx, k) + mh, err := application.NewMenuHandlers(nil, userStore, nil, nil, nil) if err != nil { t.Fatal(err) } - if !bytes.Contains(v, []byte(fmt.Sprintf("1:%s", tokenSymbol))) { - t.Fatalf("expected '1:%s', got %s", tokenSymbol, v) - } + _ = mh + +// userDb.SetPrefix(DATATYPE_USERSUB) +// userDb.SetSession(testutil.AliceSession) +// k := append([]byte("vouchers"), []byte("sym")...) +// v, err = userDb.Get(ctx, k) +// if err != nil { +// t.Fatal(err) +// } +// if !bytes.Contains(v, []byte(fmt.Sprintf("1:%s", tokenSymbol))) { +// t.Fatalf("expected '1:%s', got %s", tokenSymbol, v) +// } } func TestTokenMint(t *testing.T) { @@ -217,7 +228,10 @@ func TestTokenMint(t *testing.T) { if err != nil { t.Fatal(err) } - if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) { + fmts := fmt.Sprintf("%%1.%df", tokenDecimals) + expect := fmt.Sprintf(fmts, float64(tokenBalance) / math.Pow(10, tokenDecimals)) + //if !bytes.Equal(v, []byte(strconv.Itoa(tokenBalance))) { + if !bytes.Equal(v, []byte(expect)) { t.Fatalf("expected '%d', got %s", tokenBalance, v) } @@ -229,14 +243,14 @@ func TestTokenMint(t *testing.T) { t.Fatal("no transaction data") } - userDb.SetPrefix(DATATYPE_USERSUB) - userDb.SetSession(testutil.AliceSession) - k := append([]byte("vouchers"), []byte("sym")...) - v, err = userDb.Get(ctx, k) - if err != nil { - t.Fatal(err) - } - if !bytes.Contains(v, []byte(fmt.Sprintf("1:%s", tokenSymbol))) { - t.Fatalf("expected '1:%s', got %s", tokenSymbol, v) - } +// userDb.SetPrefix(DATATYPE_USERSUB) +// userDb.SetSession(testutil.AliceSession) +// k := append([]byte("vouchers"), []byte("sym")...) +// v, err = userDb.Get(ctx, k) +// if err != nil { +// t.Fatal(err) +// } +// if !bytes.Contains(v, []byte(fmt.Sprintf("1:%s", tokenSymbol))) { +// t.Fatalf("expected '1:%s', got %s", tokenSymbol, v) +// } }