Skip to content

Commit 38380c0

Browse files
committedNov 15, 2023
chore(pkg/middlewares): use settings for cache and filter constructors (future proofing for compatibility)
1 parent e07c215 commit 38380c0

File tree

9 files changed

+93
-14
lines changed

9 files changed

+93
-14
lines changed
 

‎examples/doh-server/main.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ func main() {
2222
if err != nil {
2323
log.Fatal(err)
2424
}
25-
cacheMiddleware := cachemiddleware.New(cache)
25+
26+
cacheMiddleware, err := cachemiddleware.New(cachemiddleware.Settings{Cache: cache})
27+
if err != nil {
28+
log.Fatal(err)
29+
}
2630

2731
server, err := doh.NewServer(doh.ServerSettings{
2832
Middlewares: []doh.Middleware{cacheMiddleware},

‎examples/dot-server/main.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ func main() {
2222
if err != nil {
2323
log.Fatal(err)
2424
}
25-
cacheMiddleware := cachemiddleware.New(cache)
25+
26+
cacheMiddleware, err := cachemiddleware.New(cachemiddleware.Settings{Cache: cache})
27+
if err != nil {
28+
log.Fatal(err)
29+
}
2630

2731
server, err := dot.NewServer(dot.ServerSettings{
2832
Middlewares: []dot.Middleware{cacheMiddleware},

‎internal/setup/dns.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,19 @@ func DNS(userSettings settings.Settings, //nolint:ireturn
2020
server Service, err error) {
2121
var middlewares []Middleware
2222

23-
middlewares = append(middlewares, cachemiddleware.New(cache))
23+
cacheMiddleware, err := cachemiddleware.New(cachemiddleware.Settings{Cache: cache})
24+
if err != nil {
25+
return nil, fmt.Errorf("creating cache middleware: %w", err)
26+
}
27+
middlewares = append(middlewares, cacheMiddleware)
28+
29+
filterMiddleware, err := filtermiddleware.New(filtermiddleware.Settings{Filter: filter})
30+
if err != nil {
31+
return nil, fmt.Errorf("creating filter middleware: %w", err)
32+
}
2433
// Note the filter middleware must be wrapping the cache middleware
2534
// to catch filtered responses found from the cache.
26-
middlewares = append(middlewares, filtermiddleware.New(filter))
35+
middlewares = append(middlewares, filterMiddleware)
2736

2837
commonPrometheus := prometheus.Settings{
2938
Prefix: *userSettings.Metrics.Prometheus.Subsystem,

‎pkg/doh/integration_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,8 @@ func Test_Server_Mocks(t *testing.T) {
219219
cache.EXPECT().Add(
220220
mockhelp.NewMatcherRequest(expectedRequestAAAA),
221221
mockhelp.NewMatcherResponse(expectedResponseAAAA))
222-
cacheMiddleware := cachemiddleware.New(cache)
222+
cacheMiddleware, err := cachemiddleware.New(cachemiddleware.Settings{Cache: cache})
223+
require.NoError(t, err)
223224

224225
filter := NewMockfilter(ctrl)
225226
filter.EXPECT().
@@ -234,7 +235,8 @@ func Test_Server_Mocks(t *testing.T) {
234235
filter.EXPECT().
235236
FilterResponse(mockhelp.NewMatcherResponse(expectedResponseAAAA)).
236237
Return(false)
237-
filterMiddleware := filtermiddleware.New(filter)
238+
filterMiddleware, err := filtermiddleware.New(filtermiddleware.Settings{Filter: filter})
239+
require.NoError(t, err)
238240

239241
logger := NewMockLogger(ctrl)
240242
logger.EXPECT().Info(mockhelp.NewMatcherRegex("DNS server listening on .*:[1-9][0-9]{0,4}"))

‎pkg/dot/integration_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,8 @@ func Test_Server_Mocks(t *testing.T) {
215215
cache.EXPECT().Add(
216216
mockhelp.NewMatcherRequest(expectedRequestAAAA),
217217
mockhelp.NewMatcherResponse(expectedResponseAAAA))
218-
cacheMiddleware := cachemiddleware.New(cache)
218+
cacheMiddleware, err := cachemiddleware.New(cachemiddleware.Settings{Cache: cache})
219+
require.NoError(t, err)
219220

220221
filter := NewMockfilter(ctrl)
221222
filter.EXPECT().
@@ -230,7 +231,8 @@ func Test_Server_Mocks(t *testing.T) {
230231
filter.EXPECT().
231232
FilterResponse(mockhelp.NewMatcherResponse(expectedResponseAAAA)).
232233
Return(false)
233-
filterMiddleware := filtermiddleware.New(filter)
234+
filterMiddleware, err := filtermiddleware.New(filtermiddleware.Settings{Filter: filter})
235+
require.NoError(t, err)
234236

235237
logger := NewMockLogger(ctrl)
236238
logger.EXPECT().Info(mockhelp.NewMatcherRegex("DNS server listening on .*:[1-9][0-9]{0,4}"))

‎pkg/middlewares/cache/middleware.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cache
22

33
import (
4+
"fmt"
5+
46
"github.com/miekg/dns"
57
"github.com/qdm12/dns/v2/internal/stateful"
68
)
@@ -9,10 +11,15 @@ type Middleware struct {
911
cache Cache
1012
}
1113

12-
func New(cache Cache) *Middleware {
13-
return &Middleware{
14-
cache: cache,
14+
func New(settings Settings) (middleware *Middleware, err error) {
15+
err = settings.Validate()
16+
if err != nil {
17+
return nil, fmt.Errorf("settings validation: %w", err)
1518
}
19+
20+
return &Middleware{
21+
cache: settings.Cache,
22+
}, nil
1623
}
1724

1825
func (m *Middleware) Wrap(next dns.Handler) dns.Handler { //nolint:ireturn

‎pkg/middlewares/cache/settings.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package cache
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
)
7+
8+
type Settings struct {
9+
Cache Cache
10+
}
11+
12+
var (
13+
ErrCacheMustBeSet = errors.New("cache must be set")
14+
)
15+
16+
func (s *Settings) Validate() (err error) {
17+
if s.Cache == nil {
18+
return fmt.Errorf("%w", ErrCacheMustBeSet)
19+
}
20+
21+
return nil
22+
}

‎pkg/middlewares/filter/middleware.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package filter
22

33
import (
4+
"fmt"
5+
46
"github.com/miekg/dns"
57
"github.com/qdm12/dns/v2/internal/stateful"
68
)
@@ -9,10 +11,15 @@ type Middleware struct {
911
filter Filter
1012
}
1113

12-
func New(filter Filter) *Middleware {
13-
return &Middleware{
14-
filter: filter,
14+
func New(settings Settings) (middleware *Middleware, err error) {
15+
err = settings.Validate()
16+
if err != nil {
17+
return nil, fmt.Errorf("settings validation: %w", err)
1518
}
19+
20+
return &Middleware{
21+
filter: settings.Filter,
22+
}, nil
1623
}
1724

1825
func (m *Middleware) Wrap(next dns.Handler) dns.Handler { //nolint:ireturn

‎pkg/middlewares/filter/settings.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package filter
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
)
7+
8+
type Settings struct {
9+
Filter Filter
10+
}
11+
12+
var (
13+
ErrFilterMustBeSet = errors.New("filter must be set")
14+
)
15+
16+
func (s *Settings) Validate() (err error) {
17+
if s.Filter == nil {
18+
return fmt.Errorf("%w", ErrFilterMustBeSet)
19+
}
20+
21+
return nil
22+
}

0 commit comments

Comments
 (0)
Please sign in to comment.