github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/store/localcachelayer/layer_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package localcachelayer 5 6 import ( 7 "sync" 8 "testing" 9 10 "github.com/mattermost/mattermost-server/v5/model" 11 "github.com/mattermost/mattermost-server/v5/store" 12 "github.com/mattermost/mattermost-server/v5/store/sqlstore" 13 "github.com/mattermost/mattermost-server/v5/store/storetest" 14 ) 15 16 type storeType struct { 17 Name string 18 SqlSettings *model.SqlSettings 19 SqlSupplier *sqlstore.SqlSupplier 20 Store store.Store 21 } 22 23 var storeTypes []*storeType 24 25 func StoreTest(t *testing.T, f func(*testing.T, store.Store)) { 26 defer func() { 27 if err := recover(); err != nil { 28 tearDownStores() 29 panic(err) 30 } 31 }() 32 for _, st := range storeTypes { 33 st := st 34 t.Run(st.Name, func(t *testing.T) { 35 if testing.Short() { 36 t.SkipNow() 37 } 38 f(t, st.Store) 39 }) 40 } 41 } 42 43 func StoreTestWithSqlSupplier(t *testing.T, f func(*testing.T, store.Store, storetest.SqlSupplier)) { 44 defer func() { 45 if err := recover(); err != nil { 46 tearDownStores() 47 panic(err) 48 } 49 }() 50 for _, st := range storeTypes { 51 st := st 52 t.Run(st.Name, func(t *testing.T) { 53 if testing.Short() { 54 t.SkipNow() 55 } 56 f(t, st.Store, st.SqlSupplier) 57 }) 58 } 59 } 60 61 func initStores() { 62 if testing.Short() { 63 return 64 } 65 storeTypes = append(storeTypes, &storeType{ 66 Name: "LocalCache+MySQL", 67 SqlSettings: storetest.MakeSqlSettings(model.DATABASE_DRIVER_MYSQL), 68 }) 69 storeTypes = append(storeTypes, &storeType{ 70 Name: "LocalCache+PostgreSQL", 71 SqlSettings: storetest.MakeSqlSettings(model.DATABASE_DRIVER_POSTGRES), 72 }) 73 74 defer func() { 75 if err := recover(); err != nil { 76 tearDownStores() 77 panic(err) 78 } 79 }() 80 var wg sync.WaitGroup 81 for _, st := range storeTypes { 82 st := st 83 wg.Add(1) 84 go func() { 85 defer wg.Done() 86 st.SqlSupplier = sqlstore.NewSqlSupplier(*st.SqlSettings, nil) 87 st.Store = NewLocalCacheLayer(st.SqlSupplier, nil, nil, getMockCacheProvider()) 88 st.Store.DropAllTables() 89 st.Store.MarkSystemRanUnitTests() 90 }() 91 } 92 wg.Wait() 93 } 94 95 var tearDownStoresOnce sync.Once 96 97 func tearDownStores() { 98 if testing.Short() { 99 return 100 } 101 tearDownStoresOnce.Do(func() { 102 var wg sync.WaitGroup 103 wg.Add(len(storeTypes)) 104 for _, st := range storeTypes { 105 st := st 106 go func() { 107 if st.Store != nil { 108 st.Store.Close() 109 } 110 if st.SqlSettings != nil { 111 storetest.CleanupSqlSettings(st.SqlSettings) 112 } 113 wg.Done() 114 }() 115 } 116 wg.Wait() 117 }) 118 }