-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmiddleware_test.go
61 lines (48 loc) · 1.58 KB
/
middleware_test.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
/*
Copyright © 2024 Acronis International GmbH.
Released under MIT license.
*/
package dbrutil
import (
"context"
"database/sql"
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/acronis/go-appkit/retry"
"github.com/gocraft/dbr/v2"
"github.com/stretchr/testify/require"
)
// the simplest mock for http.Handler
type middlewareMock struct{}
func (mock *middlewareMock) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
}
// Test that middleware uses external factory function for creating DB sessions.
func TestTxRunnerMiddlewareUsesSessionFactory(t *testing.T) {
dbConn := openAndSeedDB(t)
defer func() {
require.NoError(t, dbConn.Close())
}()
passed := false
sut := func(conn *dbr.Connection, opts *sql.TxOptions, log dbr.EventReceiver) TxRunner {
require.NotNil(t, conn)
require.NotNil(t, opts)
require.NotNil(t, log)
require.False(t, passed)
passed = true
return NewRetryableTxRunner(conn, opts, log, retry.NewExponentialBackoffPolicy(10*time.Millisecond, 3))
}
next := &middlewareMock{}
opts := TxRunnerMiddlewareOpts{NewTxRunner: sut}
middleware := TxRunnerMiddlewareWithOpts(dbConn, sql.LevelDefault, opts)(next)
require.NotNil(t, middleware)
ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
defer cancel()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, "/", nil)
require.NoError(t, err)
resp := httptest.NewRecorder()
defer require.NoError(t, resp.Result().Body.Close())
middleware.ServeHTTP(resp, req)
require.True(t, passed, "Implementation of middleware.ServeHTTP must use opts.NewSession!")
}