blocky/config/qtype_set_test.go

61 lines
1.7 KiB
Go
Raw Normal View History

refactor: configuration rework (usage and printing) (#920) * refactor: make `config.Duration` a struct with `time.Duration` embed Allows directly calling `time.Duration` methods. * refactor(HostsFileResolver): don't copy individual config items The idea is to make adding configuration options easier, and searching for references straight forward. * refactor: move config printing to struct and use a logger Using a logger allows using multiple levels so the whole configuration can be printed in trace/verbose mode, but only important parts are shown by default. * squash: rename `Cast` to `ToDuration` * squash: revert `Duration` to a simple wrapper ("new type" pattern) * squash: `Duration.IsZero` tests * squash: refactor resolvers to rely on their config directly if possible * squash: implement `IsEnabled` and `LogValues` for all resolvers * refactor: use go-enum `--values` to simplify getting all log fields * refactor: simplify `QType` unmarshaling * squash: rename `ValueLogger` to `Configurable` * squash: rename `UpstreamConfig` to `ParallelBestConfig` * squash: rename `RewriteConfig` to `RewriterConfig` * squash: config tests * squash: resolver tests * squash: add `ForEach` test and improve `Chain` ones * squash: simplify implementing `config.Configurable` * squash: minor changes for better coverage * squash: more `UnmarshalYAML` -> `UnmarshalText` * refactor: move `config.Upstream` into own file * refactor: add `Resolver.Type` method * squash: add `log` method to `typed` to use `Resolover.Type` as prefix * squash: tweak startup config logging * squash: add `LogResolverConfig` tests * squash: make sure all options of type `Duration` use `%s`
2023-03-12 22:14:10 +01:00
package config
import (
"github.com/miekg/dns"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("QTypeSet", func() {
Describe("NewQTypeSet", func() {
It("should insert given qTypes", func() {
set := NewQTypeSet(dns.Type(dns.TypeA))
Expect(set).Should(HaveKey(QType(dns.TypeA)))
Expect(set.Contains(dns.Type(dns.TypeA))).Should(BeTrue())
Expect(set).ShouldNot(HaveKey(QType(dns.TypeAAAA)))
Expect(set.Contains(dns.Type(dns.TypeAAAA))).ShouldNot(BeTrue())
})
})
Describe("Insert", func() {
It("should insert given qTypes", func() {
set := NewQTypeSet()
Expect(set).ShouldNot(HaveKey(QType(dns.TypeAAAA)))
Expect(set.Contains(dns.Type(dns.TypeAAAA))).ShouldNot(BeTrue())
set.Insert(dns.Type(dns.TypeAAAA))
Expect(set).Should(HaveKey(QType(dns.TypeAAAA)))
Expect(set.Contains(dns.Type(dns.TypeAAAA))).Should(BeTrue())
})
})
})
var _ = Describe("QType", func() {
Describe("UnmarshalText", func() {
It("Should parse existing DNS type as string", func() {
t := QType(0)
err := t.UnmarshalText([]byte("AAAA"))
Expect(err).Should(Succeed())
Expect(t).Should(Equal(QType(dns.TypeAAAA)))
Expect(t.String()).Should(Equal("AAAA"))
})
It("should fail if DNS type does not exist", func() {
t := QType(0)
err := t.UnmarshalText([]byte("WRONGTYPE"))
Expect(err).Should(HaveOccurred())
Expect(err.Error()).Should(ContainSubstring("unknown DNS query type: 'WRONGTYPE'"))
})
It("should fail if wrong YAML format", func() {
d := QType(0)
err := d.UnmarshalText([]byte("some err"))
Expect(err).Should(HaveOccurred())
Expect(err.Error()).Should(ContainSubstring("unknown DNS query type: 'some err'"))
})
})
})