-
Notifications
You must be signed in to change notification settings - Fork 9
/
test_connnection.go
92 lines (80 loc) · 3.05 KB
/
test_connnection.go
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
package storage
import (
"fmt"
"github.com/madappgang/identifo/v2/model"
"github.com/madappgang/identifo/v2/storage/boltdb"
"github.com/madappgang/identifo/v2/storage/dynamodb"
"github.com/madappgang/identifo/v2/storage/fs"
"github.com/madappgang/identifo/v2/storage/mem"
"github.com/madappgang/identifo/v2/storage/mongo"
"github.com/madappgang/identifo/v2/storage/s3"
)
var spaFileStorageExpectedFiles = []string{"index.html"}
func NewConnectionTester(settings model.TestConnection) (model.ConnectionTester, error) {
switch settings.Type {
case model.TTDatabase:
if settings.Database == nil {
return nil, fmt.Errorf("empty connection settings for testing type %s", settings.Type)
}
return NewDatabaseConnectionTester(*settings.Database), nil
case model.TTKeyStorage:
if settings.KeyStorage == nil {
return nil, fmt.Errorf("empty connection settings for testing type %s", settings.Type)
}
return NewKeyStorageConnectionTester(*settings.KeyStorage), nil
case model.TTSPAFileStorage:
if settings.FileStorage == nil {
return nil, fmt.Errorf("empty file storage settings for testing type %s", settings.Type)
}
return NewFileStorageConnectionTester(*settings.FileStorage, spaFileStorageExpectedFiles), nil
case model.TTEmailTemplateStorage:
if settings.FileStorage == nil {
return nil, fmt.Errorf("empty file storage settings for testing type %s", settings.Type)
}
return NewFileStorageConnectionTester(*settings.FileStorage, model.AllEmailTemplatesFileNames()), nil
}
return nil, fmt.Errorf("unknown settings type fro testing: %v", settings.Type)
}
func NewDatabaseConnectionTester(settings model.DatabaseSettings) model.ConnectionTester {
switch settings.Type {
case model.DBTypeBoltDB:
return boltdb.NewConnectionTester(settings.BoltDB)
case model.DBTypeMongoDB:
return mongo.NewConnectionTester(settings.Mongo)
case model.DBTypeDynamoDB:
return dynamodb.NewConnectionTester(settings.Dynamo)
case model.DBTypeFake:
fallthrough
case model.DBTypeMem:
return mem.NewConnectionTester()
}
return nil
}
func NewKeyStorageConnectionTester(settings model.FileStorageSettings) model.ConnectionTester {
switch settings.Type {
case model.FileStorageTypeLocal:
return fs.NewKeyStorageConnectionTester(settings.Local)
case model.FileStorageTypeS3:
return s3.NewKeyStorageConnectionTester(settings.S3)
}
return nil
}
func NewFileStorageConnectionTester(settings model.FileStorageSettings, expectedFiles []string) model.ConnectionTester {
switch settings.Type {
case model.FileStorageTypeNone, model.FileStorageTypeDefault:
return AlwaysHappyConnectionTester{}
case model.FileStorageTypeLocal:
return fs.NewFSConnectionTester(settings.Local, expectedFiles)
case model.FileStorageTypeS3:
return s3.NewFileStorageConnectionTester(settings.S3, expectedFiles)
}
return nil
}
type AlwaysFailedConnectionTester struct{}
func (ct AlwaysFailedConnectionTester) Connect() error {
return fmt.Errorf("unsupported connection type")
}
type AlwaysHappyConnectionTester struct{}
func (ct AlwaysHappyConnectionTester) Connect() error {
return nil
}