-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstorage_test.go
More file actions
109 lines (82 loc) · 2.18 KB
/
storage_test.go
File metadata and controls
109 lines (82 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package gomigration
import (
"github.com/stretchr/testify/assert"
"sync"
"testing"
)
func ExistTable(table string) bool {
exists := false
err := db.Get(&exists, `SELECT EXISTS (
SELECT 1
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = $1
);`, table)
if err != nil {
panic(err)
}
return exists
}
func ExistsId(appName string, id string) bool {
exists := false
err := db.Get(&exists, `SELECT EXISTS (SELECT 1 FROM migration WHERE app_name = $1 AND migration_id = $2)`,
appName, id)
if err != nil {
panic(err)
}
return exists
}
func TestStorageCreateMigrationTable(t *testing.T) {
storage.CreateMigrationTable()
assert.True(t, ExistTable("migration"))
}
func TestStorageDropMigrationTable(t *testing.T) {
storage.CreateMigrationTable()
storage.DropMigrationTable()
assert.False(t, ExistTable("migration"))
}
func TestStorageInsertMigrationTable(t *testing.T) {
storage.DropMigrationTable()
storage.CreateMigrationTable()
transaction := storage.GetTransaction()
defer transaction.Rollback()
transaction.InsertId("teste", "teste")
exists := false
err := transaction.GetTx().Get(&exists, `SELECT EXISTS (SELECT 1 FROM migration WHERE app_name = $1 AND migration_id = $2)`,
"teste", "teste")
if err != nil {
panic(err)
}
assert.True(t, exists)
}
func TestStorageClearMigrationTable(t *testing.T) {
storage.DropMigrationTable()
storage.CreateMigrationTable()
tx := storage.GetTransaction()
tx.InsertId("teste", "teste")
tx.InsertId("teste2", "teste")
tx.InsertId("teste3", "teste")
tx.Commit()
storage.DeleteMigrations("teste")
assert.False(t, ExistsId("teste", "teste"))
assert.True(t, ExistsId("teste2", "teste"))
assert.True(t, ExistsId("teste3", "teste"))
}
func TestStorageMultiInstanceExistsId(t *testing.T) {
wg := sync.WaitGroup{}
storage.DropMigrationTable()
storage.CreateMigrationTable()
tx := storage.GetTransaction()
tx2 := storage.GetTransaction()
tx.InsertId("teste", "teste")
inserted := false
wg.Add(1)
go func() {
inserted = tx2.InsertId("teste", "teste")
wg.Done()
}()
tx.Commit()
tx2.Rollback()
wg.Wait()
assert.False(t, inserted)
}