arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/db/utils_test.go
db/utils_test.goRaw
 1package db
 2
 3import (
 4	"math/big"
 5	"os"
 6	"testing"
 7
 8	"github.com/russross/meddler"
 9	"github.com/stretchr/testify/assert"
10	"github.com/stretchr/testify/require"
11)
12
13type foo struct {
14	V int
15}
16
17func TestSliceToSlicePtrs(t *testing.T) {
18	n := 16
19	a := make([]foo, n)
20	for i := 0; i < n; i++ {
21		a[i] = foo{V: i}
22	}
23	b := SliceToSlicePtrs(a).([]*foo)
24	for i := 0; i < len(a); i++ {
25		assert.Equal(t, a[i], *b[i])
26	}
27}
28
29func TestSlicePtrsToSlice(t *testing.T) {
30	n := 16
31	a := make([]*foo, n)
32	for i := 0; i < n; i++ {
33		a[i] = &foo{V: i}
34	}
35	b := SlicePtrsToSlice(a).([]foo)
36	for i := 0; i < len(a); i++ {
37		assert.Equal(t, *a[i], b[i])
38	}
39}
40
41func TestBigInt(t *testing.T) {
42	pass := os.Getenv("POSTGRES_PASS")
43	db, err := InitSQLDB(5432, "localhost", "hermez", pass, "hermez")
44	require.NoError(t, err)
45	defer func() {
46		_, err := db.Exec("DROP TABLE IF EXISTS test_big_int;")
47		require.NoError(t, err)
48		err = db.Close()
49		require.NoError(t, err)
50	}()
51
52	_, err = db.Exec("DROP TABLE IF EXISTS test_big_int;")
53	require.NoError(t, err)
54
55	_, err = db.Exec(`CREATE TABLE test_big_int (
56		item_id SERIAL PRIMARY KEY,
57		value1 DECIMAL(78, 0) NOT NULL,
58		value2 DECIMAL(78, 0),
59		value3 DECIMAL(78, 0)
60	);`)
61	require.NoError(t, err)
62
63	type Entry struct {
64		ItemID int      `meddler:"item_id"`
65		Value1 *big.Int `meddler:"value1,bigint"`
66		Value2 *big.Int `meddler:"value2,bigintnull"`
67		Value3 *big.Int `meddler:"value3,bigintnull"`
68	}
69
70	entry := Entry{ItemID: 1, Value1: big.NewInt(1234567890), Value2: big.NewInt(9876543210), Value3: nil}
71	err = meddler.Insert(db, "test_big_int", &entry)
72	require.NoError(t, err)
73
74	var dbEntry Entry
75	err = meddler.QueryRow(db, &dbEntry, "SELECT * FROM test_big_int WHERE item_id = 1;")
76	require.NoError(t, err)
77	assert.Equal(t, entry, dbEntry)
78}