Skip to content

Commit b23e472

Browse files
author
Pierre SOUCHAY
committed
move test to the right place
Signed-off-by: Pierre SOUCHAY <pierre.souchay@pelico.io>
1 parent 817175a commit b23e472

File tree

2 files changed

+68
-67
lines changed

2 files changed

+68
-67
lines changed

collector/collector_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@ package collector
1414

1515
import (
1616
"strings"
17+
"testing"
18+
"time"
1719

20+
"github.com/DATA-DOG/go-sqlmock"
1821
"github.com/prometheus/client_golang/prometheus"
1922
dto "github.com/prometheus/client_model/go"
23+
"github.com/prometheus/common/promslog"
2024
)
2125

2226
type labelMap map[string]string
@@ -60,3 +64,67 @@ func sanitizeQuery(q string) string {
6064
q = strings.ReplaceAll(q, "$", "\\$")
6165
return q
6266
}
67+
68+
// We ensure that when the database respond after a long time
69+
// The collection process still occurs in a predictable manner
70+
// Will avoid accumulation of queries on a completely frozen DB
71+
func TestWithConnectionTimeout(t *testing.T) {
72+
73+
timeoutForQuery := time.Duration(100 * time.Millisecond)
74+
75+
db, mock, err := sqlmock.New()
76+
if err != nil {
77+
t.Fatalf("Error opening a stub db connection: %s", err)
78+
}
79+
defer db.Close()
80+
81+
inst := &instance{db: db}
82+
83+
columns := []string{"pg_roles.rolname", "pg_roles.rolconnlimit"}
84+
rows := sqlmock.NewRows(columns).AddRow("role1", 2)
85+
mock.ExpectQuery(pgRolesConnectionLimitsQuery).
86+
WillDelayFor(30 * time.Second).
87+
WillReturnRows(rows)
88+
89+
log_config := promslog.Config{}
90+
91+
logger := promslog.New(&log_config)
92+
93+
c, err := NewPostgresCollector(logger, []string{}, "postgresql://local", []string{}, WithCollectionTimeout(timeoutForQuery.String()))
94+
if err != nil {
95+
t.Fatalf("error creating NewPostgresCollector: %s", err)
96+
}
97+
collector_config := collectorConfig{
98+
logger: logger,
99+
excludeDatabases: []string{},
100+
}
101+
102+
collector, err := NewPGRolesCollector(collector_config)
103+
if err != nil {
104+
t.Fatalf("error creating collector: %s", err)
105+
}
106+
c.Collectors["test"] = collector
107+
c.instance = inst
108+
109+
ch := make(chan prometheus.Metric)
110+
defer close(ch)
111+
112+
go func() {
113+
for {
114+
<-ch
115+
time.Sleep(1 * time.Millisecond)
116+
}
117+
}()
118+
119+
startTime := time.Now()
120+
c.collectFromConnection(inst, ch)
121+
elapsed := time.Since(startTime)
122+
123+
if elapsed <= timeoutForQuery {
124+
t.Errorf("elapsed time was %v, should be bigger than timeout=%v", elapsed, timeoutForQuery)
125+
}
126+
127+
if err := mock.ExpectationsWereMet(); err != nil {
128+
t.Errorf("there were unfulfilled exceptions: %s", err)
129+
}
130+
}

collector/pg_database_test.go

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -15,80 +15,13 @@ package collector
1515
import (
1616
"context"
1717
"testing"
18-
"time"
1918

2019
"github.com/DATA-DOG/go-sqlmock"
2120
"github.com/prometheus/client_golang/prometheus"
22-
2321
dto "github.com/prometheus/client_model/go"
24-
"github.com/prometheus/common/promslog"
2522
"github.com/smartystreets/goconvey/convey"
2623
)
2724

28-
// We ensure that when the database respond after a long time
29-
// The collection process still occurs in a predictable manner
30-
// Will avoid accumulation of queries on a completely frozen DB
31-
func TestPGDatabaseTimeout(t *testing.T) {
32-
33-
timeoutForQuery := time.Duration(100 * time.Millisecond)
34-
35-
db, mock, err := sqlmock.New()
36-
if err != nil {
37-
t.Fatalf("Error opening a stub db connection: %s", err)
38-
}
39-
defer db.Close()
40-
41-
inst := &instance{db: db}
42-
43-
columns := []string{"pg_roles.rolname", "pg_roles.rolconnlimit"}
44-
rows := sqlmock.NewRows(columns).AddRow("role1", 2)
45-
mock.ExpectQuery(pgRolesConnectionLimitsQuery).
46-
WillDelayFor(30 * time.Second).
47-
WillReturnRows(rows)
48-
49-
log_config := promslog.Config{}
50-
51-
logger := promslog.New(&log_config)
52-
53-
c, err := NewPostgresCollector(logger, []string{}, "postgresql://local", []string{}, CollectionTimeout(timeoutForQuery.String()))
54-
if err != nil {
55-
t.Fatalf("error creating NewPostgresCollector: %s", err)
56-
}
57-
collector_config := collectorConfig{
58-
logger: logger,
59-
excludeDatabases: []string{},
60-
}
61-
62-
collector, err := NewPGRolesCollector(collector_config)
63-
if err != nil {
64-
t.Fatalf("error creating collector: %s", err)
65-
}
66-
c.Collectors["test"] = collector
67-
c.instance = inst
68-
69-
ch := make(chan prometheus.Metric)
70-
defer close(ch)
71-
72-
go func() {
73-
for {
74-
<-ch
75-
time.Sleep(1 * time.Millisecond)
76-
}
77-
}()
78-
79-
startTime := time.Now()
80-
c.collectFromConnection(inst, ch)
81-
elapsed := time.Since(startTime)
82-
83-
if elapsed <= timeoutForQuery {
84-
t.Errorf("elapsed time was %v, should be bigger than timeout=%v", elapsed, timeoutForQuery)
85-
}
86-
87-
if err := mock.ExpectationsWereMet(); err != nil {
88-
t.Errorf("there were unfulfilled exceptions: %s", err)
89-
}
90-
}
91-
9225
func TestPGDatabaseCollector(t *testing.T) {
9326
db, mock, err := sqlmock.New()
9427
if err != nil {

0 commit comments

Comments
 (0)