Skip to content

Commit 65505ba

Browse files
authored
add test for redis and sql datasource (#352)
1 parent c51457d commit 65505ba

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed

pkg/gofr/datasource/redis/health_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,19 @@ func TestRedis_HealthHandlerError(t *testing.T) {
4040
Details: map[string]interface{}{"error": "section (Stats) is not supported", "host": s.Host() + ":" + s.Port()},
4141
}, health)
4242
}
43+
44+
func TestRedisHealth_WithoutRedis(t *testing.T) {
45+
client := Redis{
46+
Client: nil,
47+
logger: testutil.NewMockLogger(testutil.ERRORLOG),
48+
config: &Config{
49+
HostName: "localhost",
50+
Port: 2003,
51+
},
52+
}
53+
54+
health := client.HealthCheck()
55+
56+
assert.Equal(t, health.Status, datasource.StatusDown)
57+
assert.Equal(t, health.Details["error"], "redis not connected")
58+
}

pkg/gofr/datasource/redis/redis_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,33 @@ import (
1313
"gofr.dev/pkg/gofr/testutil"
1414
)
1515

16+
func Test_NewClient_HostNameMissing(t *testing.T) {
17+
ctrl := gomock.NewController(t)
18+
defer ctrl.Finish()
19+
20+
mockLogger := testutil.NewMockLogger(testutil.ERRORLOG)
21+
mockMetrics := NewMockMetrics(ctrl)
22+
mockConfig := testutil.NewMockConfig(map[string]string{"REDIS_HOST": ""})
23+
24+
client := NewClient(mockConfig, mockLogger, mockMetrics)
25+
assert.Nil(t, client, "Test_NewClient_HostNameMissing Failed! Expected redis client to be nil")
26+
}
27+
28+
func Test_NewClient_InvalidPort(t *testing.T) {
29+
ctrl := gomock.NewController(t)
30+
defer ctrl.Finish()
31+
32+
mockLogger := testutil.NewMockLogger(testutil.ERRORLOG)
33+
mockMetrics := NewMockMetrics(ctrl)
34+
mockConfig := testutil.NewMockConfig(map[string]string{"REDIS_HOST": "localhost",
35+
"REDIS_PORT": "&&^%%^&*"})
36+
37+
mockMetrics.EXPECT().RecordHistogram(gomock.Any(), "app_redis_stats", gomock.Any(), "type", "ping")
38+
39+
client := NewClient(mockConfig, mockLogger, mockMetrics)
40+
assert.Nil(t, client.Client, "Test_NewClient_InvalidPort Failed! Expected redis client to be nil")
41+
}
42+
1643
func TestRedis_QueryLogging(t *testing.T) {
1744
ctrl := gomock.NewController(t)
1845
defer ctrl.Finish()

pkg/gofr/datasource/sql/sql_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,77 @@
11
package sql
22

33
import (
4+
"strings"
45
"testing"
56

7+
"go.uber.org/mock/gomock"
8+
69
"github.com/stretchr/testify/assert"
710

811
"gofr.dev/pkg/gofr/testutil"
912
)
1013

14+
func TestNewSQL_ErrorCase(t *testing.T) {
15+
ctrl := gomock.NewController(t)
16+
17+
expectedLog := "could not connect with 'testuser' user to database 'localhost:3306' error"
18+
19+
mockConfig := testutil.NewMockConfig(map[string]string{
20+
"DB_DIALECT": "mysql",
21+
"DB_HOST": "localhost",
22+
"DB_USER": "testuser",
23+
"DB_PASSWORD": "testpassword",
24+
"DB_PORT": "3306",
25+
"DB_NAME": "testdb",
26+
})
27+
28+
testLogs := testutil.StderrOutputForFunc(func() {
29+
mockLogger := testutil.NewMockLogger(testutil.ERRORLOG)
30+
mockMetrics := NewMockMetrics(ctrl)
31+
32+
NewSQL(mockConfig, mockLogger, mockMetrics)
33+
})
34+
35+
if !strings.Contains(testLogs, expectedLog) {
36+
t.Errorf("TestNewSQL_ErrorCase Failed! Expcted error log doesn't match actual.")
37+
}
38+
}
39+
40+
func TestNewSQL_InvalidDialect(t *testing.T) {
41+
ctrl := gomock.NewController(t)
42+
43+
mockConfig := testutil.NewMockConfig(map[string]string{
44+
"DB_DIALECT": "abc",
45+
"DB_HOST": "localhost",
46+
})
47+
48+
testLogs := testutil.StderrOutputForFunc(func() {
49+
mockLogger := testutil.NewMockLogger(testutil.ERRORLOG)
50+
mockMetrics := NewMockMetrics(ctrl)
51+
52+
NewSQL(mockConfig, mockLogger, mockMetrics)
53+
})
54+
55+
if !strings.Contains(testLogs, errUnsupportedDialect.Error()) {
56+
t.Errorf("TestNewSQL_ErrorCase Failed! Expcted error log doesn't match actual.")
57+
}
58+
}
59+
60+
func TestNewSQL_InvalidConfig(t *testing.T) {
61+
ctrl := gomock.NewController(t)
62+
63+
mockConfig := testutil.NewMockConfig(map[string]string{
64+
"DB_DIALECT": "",
65+
})
66+
67+
mockLogger := testutil.NewMockLogger(testutil.ERRORLOG)
68+
mockMetrics := NewMockMetrics(ctrl)
69+
70+
db := NewSQL(mockConfig, mockLogger, mockMetrics)
71+
72+
assert.Nil(t, db, "TestNewSQL_InvalidConfig. expected db to be nil.")
73+
}
74+
1175
func TestSQL_GetDBConfig(t *testing.T) {
1276
mockConfig := testutil.NewMockConfig(map[string]string{
1377
"DB_DIALECT": "mysql",

0 commit comments

Comments
 (0)