mirror of https://github.com/0xERR0R/blocky.git
test: fix flaky test(537) - second hunt (#610)
* go test -> ginkgo * removed flake-attempts as suggested * added FlakeAttempts to flaky test definition * as net.DNSError qualifies as net.Error check and correct the response * fix in downloader.go resolves flaky tests * unwrap maybe? * excluede DownloadFile from funlen linter * use eventually on io operations in file_writer_test * file_writer_test flaky fixes * fix linter errors * Serve test reversed go routine * matcher fix * serve test rework 2 * DeferCleanup tmp files * fixed some flakiness in resolver tests * go mod tidy * fixed linter errors * JustAfterEach -> DeferCleanup * changed close to defer * moved unwrap from downloader to test * fix linter error * propper cleanup in "should return error" Co-authored-by: Dimitri Herzog <dimitri.herzog@gmail.com>
This commit is contained in:
parent
e4445f05f6
commit
51ef9ea77f
|
@ -1,11 +1,10 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/0xERR0R/blocky/config"
|
||||
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
var _ = Describe("Serve command", func() {
|
||||
|
@ -21,13 +20,18 @@ var _ = Describe("Serve command", func() {
|
|||
|
||||
isConfigMandatory = false
|
||||
|
||||
grClosure := make(chan interface{})
|
||||
|
||||
go func() {
|
||||
_ = startServer(newServeCommand(), []string{})
|
||||
defer GinkgoRecover()
|
||||
|
||||
err := startServer(newServeCommand(), []string{})
|
||||
Expect(err).Should(HaveOccurred())
|
||||
|
||||
close(grClosure)
|
||||
}()
|
||||
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
|
||||
done <- true
|
||||
Eventually(grClosure).Should(BeClosed())
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"io/ioutil"
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
|
@ -51,14 +52,15 @@ var _ = Describe("Config", func() {
|
|||
It("should return error", func() {
|
||||
|
||||
dir, err := ioutil.TempDir("", "blocky")
|
||||
defer os.Remove(dir)
|
||||
Expect(err).Should(Succeed())
|
||||
err = os.Chdir(dir)
|
||||
Expect(err).Should(Succeed())
|
||||
err = ioutil.WriteFile("config.yml", []byte("malformed_config"), 0600)
|
||||
DeferCleanup(os.RemoveAll, dir)
|
||||
|
||||
cfgFile := filepath.Join(dir, "config.yml")
|
||||
|
||||
err = ioutil.WriteFile(cfgFile, []byte("malformed_config"), 0600)
|
||||
Expect(err).Should(Succeed())
|
||||
|
||||
_, err = LoadConfig("config.yml", true)
|
||||
_, err = LoadConfig(cfgFile, true)
|
||||
Expect(err).Should(HaveOccurred())
|
||||
Expect(err.Error()).Should(ContainSubstring("wrong file structure"))
|
||||
})
|
||||
|
|
23
go.mod
23
go.mod
|
@ -21,7 +21,7 @@ require (
|
|||
github.com/spf13/cobra v1.5.0
|
||||
github.com/stretchr/testify v1.8.0
|
||||
github.com/x-cray/logrus-prefixed-formatter v0.5.2
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4
|
||||
golang.org/x/net v0.0.0-20220728211354-c7608f3a8462
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
gorm.io/driver/mysql v1.3.5
|
||||
gorm.io/driver/sqlite v1.3.6
|
||||
|
@ -59,23 +59,22 @@ require (
|
|||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.12 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.14 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/prometheus/client_model v0.2.0 // indirect
|
||||
github.com/prometheus/common v0.32.1 // indirect
|
||||
github.com/prometheus/procfs v0.7.3 // indirect
|
||||
github.com/prometheus/common v0.37.0 // indirect
|
||||
github.com/prometheus/procfs v0.8.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/stretchr/objx v0.4.0 // indirect
|
||||
github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 // indirect
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 // indirect
|
||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
|
||||
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/tools v0.1.10 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||
google.golang.org/protobuf v1.28.0 // indirect
|
||||
golang.org/x/tools v0.1.12 // indirect
|
||||
google.golang.org/protobuf v1.28.1 // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
|
50
go.sum
50
go.sum
|
@ -90,14 +90,17 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
|
|||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||
github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
||||
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
|
||||
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
|
||||
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
|
||||
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
|
||||
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
|
||||
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
|
@ -152,6 +155,7 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
|
|||
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
|
@ -263,8 +267,9 @@ github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9
|
|||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0=
|
||||
github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
github.com/mattn/go-sqlite3 v1.14.14 h1:qZgc/Rwetq+MtyE18WhzjokPD93dNqLGNT3QJuLvBGw=
|
||||
github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
|
||||
|
@ -297,6 +302,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
|
|||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
||||
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
|
||||
github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
|
||||
github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34=
|
||||
github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
|
@ -307,14 +313,16 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T
|
|||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
|
||||
github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
|
||||
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
|
||||
github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE=
|
||||
github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
|
||||
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo=
|
||||
github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
|
||||
github.com/robertkrimen/godocdown v0.0.0-20130622164427-0bfa04905481/go.mod h1:C9WhFzY47SzYBIvzFqSvHIR6ROgDo4TtdTuRaOMjF/s=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
||||
|
@ -355,8 +363,9 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 h1:k/gmLsJDWwWqbLCur2yWnJzwQEKRcAHXo6seXGuSwWw=
|
||||
github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA=
|
||||
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 h1:5mLPGnFdSsevFRFc9q3yYbBkB6tsm4aCwwQV/j1JQAQ=
|
||||
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
|
||||
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
|
||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||
|
@ -386,8 +395,8 @@ golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWP
|
|||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
|
||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
|
@ -419,8 +428,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
|
|||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
|
@ -455,14 +464,17 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
|
|||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA=
|
||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220728211354-c7608f3a8462 h1:UreQrH7DbFXSi9ZFox6FNT3WBooWmdANpU+IfkT1T4I=
|
||||
golang.org/x/net v0.0.0-20220728211354-c7608f3a8462/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
@ -472,8 +484,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
|
@ -525,13 +537,16 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211107104306-e0b2ad06fe42/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=
|
||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc=
|
||||
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
@ -591,14 +606,13 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
|
|||
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
|
||||
golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=
|
||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
||||
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
||||
|
@ -675,8 +689,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
|||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
||||
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
|
|
@ -183,9 +183,10 @@ var _ = Describe("Downloader", func() {
|
|||
It("Should perform a retry until max retry attempt count is reached and return TransientError", func() {
|
||||
reader, err := sut.DownloadFile(server.URL)
|
||||
Expect(err).Should(HaveOccurred())
|
||||
var transientErr *TransientError
|
||||
Expect(errors.As(err, &transientErr)).To(BeTrue())
|
||||
Expect(transientErr.Unwrap().Error()).Should(ContainSubstring("Timeout"))
|
||||
|
||||
err2 := unwrapTransientErr(err)
|
||||
|
||||
Expect(err2.Error()).Should(ContainSubstring("Timeout"))
|
||||
Expect(reader).Should(BeNil())
|
||||
|
||||
// failed download event was emitted 3 times
|
||||
|
@ -200,11 +201,14 @@ var _ = Describe("Downloader", func() {
|
|||
WithAttempts(3),
|
||||
WithCooldown(time.Millisecond))
|
||||
})
|
||||
It("Should perform a retry until max retry attempt count is reached and return DNSError", FlakeAttempts(5), func() {
|
||||
It("Should perform a retry until max retry attempt count is reached and return DNSError", func() {
|
||||
reader, err := sut.DownloadFile("http://some.domain.which.does.not.exist")
|
||||
Expect(err).Should(HaveOccurred())
|
||||
|
||||
err2 := unwrapTransientErr(err)
|
||||
|
||||
var dnsError *net.DNSError
|
||||
Expect(errors.As(err, &dnsError)).To(BeTrue(), "received error %w", err)
|
||||
Expect(errors.As(err2, &dnsError)).To(BeTrue(), "received error %w", err)
|
||||
Expect(reader).Should(BeNil())
|
||||
|
||||
// failed download event was emitted 3 times
|
||||
|
@ -215,3 +219,12 @@ var _ = Describe("Downloader", func() {
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
func unwrapTransientErr(origErr error) error {
|
||||
var transientErr *TransientError
|
||||
if errors.As(origErr, &transientErr) {
|
||||
return transientErr.Unwrap()
|
||||
}
|
||||
|
||||
return origErr
|
||||
}
|
||||
|
|
|
@ -59,14 +59,13 @@ func (d *FileWriter) Write(entry *LogEntry) {
|
|||
"can't create/open file", err)
|
||||
|
||||
if err == nil {
|
||||
defer file.Close()
|
||||
writer := createCsvWriter(file)
|
||||
|
||||
err := writer.Write(createQueryLogRow(entry))
|
||||
util.LogOnErrorWithEntry(log.PrefixedLog(loggerPrefixFileWriter).WithField("file_name", writePath),
|
||||
"can't write to file", err)
|
||||
writer.Flush()
|
||||
|
||||
_ = file.Close()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,14 +21,16 @@ import (
|
|||
)
|
||||
|
||||
var _ = Describe("FileWriter", func() {
|
||||
var tmpDir string
|
||||
var err error
|
||||
BeforeEach(func() {
|
||||
var (
|
||||
tmpDir string
|
||||
err error
|
||||
writer *FileWriter
|
||||
)
|
||||
|
||||
JustBeforeEach(func() {
|
||||
tmpDir, err = ioutil.TempDir("", "fileWriter")
|
||||
Expect(err).Should(Succeed())
|
||||
})
|
||||
AfterEach(func() {
|
||||
_ = os.RemoveAll(tmpDir)
|
||||
DeferCleanup(func() { os.RemoveAll(tmpDir) })
|
||||
})
|
||||
|
||||
Describe("CSV writer", func() {
|
||||
|
@ -40,9 +42,10 @@ var _ = Describe("FileWriter", func() {
|
|||
})
|
||||
When("New log entry was created", func() {
|
||||
It("should be logged in one file", func() {
|
||||
tmpDir, err = ioutil.TempDir("", "queryLoggingResolver")
|
||||
writer, err = NewCSVWriter(tmpDir, false, 0)
|
||||
|
||||
Expect(err).Should(Succeed())
|
||||
writer, _ := NewCSVWriter(tmpDir, false, 0)
|
||||
|
||||
res, err := util.NewMsgWithAnswer("example.com", 123, dns.Type(dns.TypeA), "123.124.122.122")
|
||||
|
||||
Expect(err).Should(Succeed())
|
||||
|
@ -81,15 +84,16 @@ var _ = Describe("FileWriter", func() {
|
|||
})
|
||||
})
|
||||
|
||||
csvLines := readCsv(filepath.Join(tmpDir, fmt.Sprintf("%s_ALL.log", time.Now().Format("2006-01-02"))))
|
||||
Expect(csvLines).Should(HaveLen(2))
|
||||
|
||||
Eventually(func(g Gomega) int {
|
||||
return len(readCsv(filepath.Join(tmpDir, fmt.Sprintf("%s_ALL.log", time.Now().Format("2006-01-02")))))
|
||||
}).Should(Equal(2))
|
||||
})
|
||||
|
||||
It("should be logged in separate files per client", func() {
|
||||
tmpDir, err = ioutil.TempDir("", "queryLoggingResolver")
|
||||
writer, err = NewCSVWriter(tmpDir, true, 0)
|
||||
|
||||
Expect(err).Should(Succeed())
|
||||
writer, _ := NewCSVWriter(tmpDir, true, 0)
|
||||
|
||||
res, err := util.NewMsgWithAnswer("example.com", 123, dns.Type(dns.TypeA), "123.124.122.122")
|
||||
|
||||
Expect(err).Should(Succeed())
|
||||
|
@ -128,19 +132,22 @@ var _ = Describe("FileWriter", func() {
|
|||
})
|
||||
})
|
||||
|
||||
csvLines := readCsv(filepath.Join(tmpDir, fmt.Sprintf("%s_client1.log", time.Now().Format("2006-01-02"))))
|
||||
Expect(csvLines).Should(HaveLen(1))
|
||||
Eventually(func(g Gomega) int {
|
||||
return len(readCsv(filepath.Join(tmpDir, fmt.Sprintf("%s_client1.log", time.Now().Format("2006-01-02")))))
|
||||
}).Should(Equal(1))
|
||||
|
||||
csvLines = readCsv(filepath.Join(tmpDir, fmt.Sprintf("%s_client2.log", time.Now().Format("2006-01-02"))))
|
||||
Expect(csvLines).Should(HaveLen(1))
|
||||
Eventually(func(g Gomega) int {
|
||||
return len(readCsv(filepath.Join(tmpDir, fmt.Sprintf("%s_client2.log", time.Now().Format("2006-01-02")))))
|
||||
}).Should(Equal(1))
|
||||
|
||||
})
|
||||
})
|
||||
When("Cleanup is called", func() {
|
||||
It("should delete old files", func() {
|
||||
tmpDir, err = ioutil.TempDir("", "queryLoggingResolver")
|
||||
writer, err = NewCSVWriter(tmpDir, false, 1)
|
||||
|
||||
Expect(err).Should(Succeed())
|
||||
writer, _ := NewCSVWriter(tmpDir, false, 1)
|
||||
|
||||
res, err := util.NewMsgWithAnswer("example.com", 123, dns.Type(dns.TypeA), "123.124.122.122")
|
||||
|
||||
Expect(err).Should(Succeed())
|
||||
|
@ -178,14 +185,21 @@ var _ = Describe("FileWriter", func() {
|
|||
})
|
||||
})
|
||||
|
||||
files, err := ioutil.ReadDir(tmpDir)
|
||||
Expect(err).Should(Succeed())
|
||||
Expect(files).Should(HaveLen(2))
|
||||
writer.CleanUp()
|
||||
Eventually(func(g Gomega) int {
|
||||
files, err := ioutil.ReadDir(tmpDir)
|
||||
g.Expect(err).Should(Succeed())
|
||||
|
||||
files, err = ioutil.ReadDir(tmpDir)
|
||||
Expect(err).Should(Succeed())
|
||||
Expect(files).Should(HaveLen(1))
|
||||
return len(files)
|
||||
}, "20s", "1s").Should(Equal(2))
|
||||
|
||||
go writer.CleanUp()
|
||||
|
||||
Eventually(func(g Gomega) int {
|
||||
files, err := ioutil.ReadDir(tmpDir)
|
||||
g.Expect(err).Should(Succeed())
|
||||
|
||||
return len(files)
|
||||
}, "20s", "1s").Should(Equal(1))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -24,12 +24,17 @@ var group1File, group2File, defaultGroupFile *os.File
|
|||
|
||||
var _ = BeforeSuite(func() {
|
||||
group1File = TempFile("DOMAIN1.com")
|
||||
DeferCleanup(os.Remove, group1File.Name())
|
||||
|
||||
group2File = TempFile("blocked2.com")
|
||||
DeferCleanup(os.Remove, group2File.Name())
|
||||
|
||||
defaultGroupFile = TempFile(
|
||||
`blocked3.com
|
||||
123.145.123.145
|
||||
2001:db8:85a3:08d3::370:7344
|
||||
badcnamedomain.com`)
|
||||
DeferCleanup(os.Remove, defaultGroupFile.Name())
|
||||
})
|
||||
|
||||
var _ = AfterSuite(func() {
|
||||
|
|
|
@ -30,7 +30,7 @@ type SlowMockWriter struct {
|
|||
func (m *SlowMockWriter) Write(entry *querylog.LogEntry) {
|
||||
m.entries = append(m.entries, entry)
|
||||
|
||||
time.Sleep(time.Millisecond)
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
|
||||
func (m *SlowMockWriter) CleanUp() {
|
||||
|
@ -51,21 +51,18 @@ var _ = Describe("QueryLoggingResolver", func() {
|
|||
mockAnswer = new(dns.Msg)
|
||||
tmpDir, err = ioutil.TempDir("", "queryLoggingResolver")
|
||||
Expect(err).Should(Succeed())
|
||||
DeferCleanup(os.RemoveAll, tmpDir)
|
||||
})
|
||||
|
||||
JustBeforeEach(func() {
|
||||
sut = NewQueryLoggingResolver(sutConfig).(*QueryLoggingResolver)
|
||||
DeferCleanup(func() { close(sut.logChan) })
|
||||
m = &MockResolver{}
|
||||
m.On("Resolve", mock.Anything).Return(&Response{Res: mockAnswer, Reason: "reason"}, nil)
|
||||
sut.Next(m)
|
||||
})
|
||||
AfterEach(func() {
|
||||
Expect(err).Should(Succeed())
|
||||
_ = os.RemoveAll(tmpDir)
|
||||
})
|
||||
|
||||
Describe("Process request", func() {
|
||||
|
||||
When("Resolver has no configuration", func() {
|
||||
BeforeEach(func() {
|
||||
sutConfig = config.QueryLogConfig{
|
||||
|
@ -196,16 +193,13 @@ var _ = Describe("QueryLoggingResolver", func() {
|
|||
mockWriter := &SlowMockWriter{}
|
||||
sut.writer = mockWriter
|
||||
|
||||
// run 10000 requests
|
||||
for i := 0; i < 10000; i++ {
|
||||
resp, err = sut.Resolve(newRequestWithClient("example.com.", dns.Type(dns.TypeA), "192.168.178.25", "client1"))
|
||||
Expect(err).Should(Succeed())
|
||||
}
|
||||
Eventually(func() int {
|
||||
_, ierr := sut.Resolve(newRequestWithClient("example.com.", dns.Type(dns.TypeA), "192.168.178.25", "client1"))
|
||||
Expect(ierr).Should(Succeed())
|
||||
|
||||
// log channel is full
|
||||
Expect(sut.logChan).Should(Not(BeEmpty()))
|
||||
return len(sut.logChan)
|
||||
}, "20s", "1µs").Should(Equal(cap(sut.logChan)))
|
||||
})
|
||||
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -229,81 +223,86 @@ var _ = Describe("QueryLoggingResolver", func() {
|
|||
|
||||
Describe("Clean up of query log directory", func() {
|
||||
When("fallback logger is enabled, log retention is enabled", func() {
|
||||
It("should do nothing", func() {
|
||||
|
||||
sut := NewQueryLoggingResolver(config.QueryLogConfig{
|
||||
BeforeEach(func() {
|
||||
sutConfig = config.QueryLogConfig{
|
||||
LogRetentionDays: 7,
|
||||
Type: config.QueryLogTypeConsole,
|
||||
CreationAttempts: 1,
|
||||
CreationCooldown: config.Duration(time.Millisecond),
|
||||
}).(*QueryLoggingResolver)
|
||||
|
||||
}
|
||||
})
|
||||
It("should do nothing", func() {
|
||||
sut.doCleanUp()
|
||||
})
|
||||
})
|
||||
When("log directory contains old files", func() {
|
||||
BeforeEach(func() {
|
||||
sutConfig = config.QueryLogConfig{
|
||||
Target: tmpDir,
|
||||
Type: config.QueryLogTypeCsv,
|
||||
LogRetentionDays: 7,
|
||||
CreationAttempts: 1,
|
||||
CreationCooldown: config.Duration(time.Millisecond),
|
||||
}
|
||||
})
|
||||
It("should remove files older than defined log retention", func() {
|
||||
|
||||
// create 2 files, 7 and 8 days old
|
||||
dateBefore7Days := time.Now().AddDate(0, 0, -7)
|
||||
dateBefore8Days := time.Now().AddDate(0, 0, -8)
|
||||
|
||||
f1, err := os.Create(filepath.Join(tmpDir, fmt.Sprintf("%s-test.log", dateBefore7Days.Format("2006-01-02"))))
|
||||
Expect(err).Should(Succeed())
|
||||
f1Name := f1.Name()
|
||||
f1.Close()
|
||||
|
||||
f2, err := os.Create(filepath.Join(tmpDir, fmt.Sprintf("%s-test.log", dateBefore8Days.Format("2006-01-02"))))
|
||||
Expect(err).Should(Succeed())
|
||||
f2Name := f2.Name()
|
||||
f2.Close()
|
||||
|
||||
sut := NewQueryLoggingResolver(config.QueryLogConfig{
|
||||
Target: tmpDir,
|
||||
Type: config.QueryLogTypeCsv,
|
||||
LogRetentionDays: 7,
|
||||
CreationAttempts: 1,
|
||||
CreationCooldown: config.Duration(time.Millisecond),
|
||||
})
|
||||
sut.doCleanUp()
|
||||
|
||||
sut.(*QueryLoggingResolver).doCleanUp()
|
||||
Eventually(func(g Gomega) {
|
||||
// file 1 exist
|
||||
_, ierr1 := os.Stat(f1Name)
|
||||
g.Expect(ierr1).Should(Succeed())
|
||||
|
||||
// file 1 exist
|
||||
_, err = os.Stat(f1.Name())
|
||||
Expect(err).Should(Succeed())
|
||||
|
||||
// file 2 was deleted
|
||||
_, err = os.Stat(f2.Name())
|
||||
Expect(err).Should(HaveOccurred())
|
||||
Expect(os.IsNotExist(err)).Should(BeTrue())
|
||||
// file 2 was deleted
|
||||
_, ierr2 := os.Stat(f2Name)
|
||||
g.Expect(ierr2).Should(HaveOccurred())
|
||||
g.Expect(os.IsNotExist(ierr2)).Should(BeTrue())
|
||||
}).Should(Succeed())
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
var _ = Describe("Wrong target configuration", func() {
|
||||
When("mysql database path is wrong", func() {
|
||||
It("should use fallback", func() {
|
||||
sutConfig := config.QueryLogConfig{
|
||||
Target: "dummy",
|
||||
Type: config.QueryLogTypeMysql,
|
||||
CreationAttempts: 1,
|
||||
CreationCooldown: config.Duration(time.Millisecond),
|
||||
}
|
||||
resolver := NewQueryLoggingResolver(sutConfig)
|
||||
loggingResolver := resolver.(*QueryLoggingResolver)
|
||||
Expect(loggingResolver.logType).Should(Equal(config.QueryLogTypeConsole))
|
||||
Describe("Wrong target configuration", func() {
|
||||
When("mysql database path is wrong", func() {
|
||||
BeforeEach(func() {
|
||||
sutConfig = config.QueryLogConfig{
|
||||
Target: "dummy",
|
||||
Type: config.QueryLogTypeMysql,
|
||||
CreationAttempts: 1,
|
||||
CreationCooldown: config.Duration(time.Millisecond),
|
||||
}
|
||||
})
|
||||
It("should use fallback", func() {
|
||||
Expect(sut.logType).Should(Equal(config.QueryLogTypeConsole))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
When("postgresql database path is wrong", func() {
|
||||
It("should use fallback", func() {
|
||||
sutConfig := config.QueryLogConfig{
|
||||
Target: "dummy",
|
||||
Type: config.QueryLogTypePostgresql,
|
||||
CreationAttempts: 1,
|
||||
CreationCooldown: config.Duration(time.Millisecond),
|
||||
}
|
||||
resolver := NewQueryLoggingResolver(sutConfig)
|
||||
loggingResolver := resolver.(*QueryLoggingResolver)
|
||||
Expect(loggingResolver.logType).Should(Equal(config.QueryLogTypeConsole))
|
||||
When("postgresql database path is wrong", func() {
|
||||
BeforeEach(func() {
|
||||
sutConfig = config.QueryLogConfig{
|
||||
Target: "dummy",
|
||||
Type: config.QueryLogTypePostgresql,
|
||||
CreationAttempts: 1,
|
||||
CreationCooldown: config.Duration(time.Millisecond),
|
||||
}
|
||||
})
|
||||
It("should use fallback", func() {
|
||||
Expect(sut.logType).Should(Equal(config.QueryLogTypeConsole))
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
@ -315,6 +314,7 @@ func readCsv(file string) ([][]string, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer csvFile.Close()
|
||||
|
||||
reader := csv.NewReader(bufio.NewReader(csvFile))
|
||||
reader.Comma = '\t'
|
||||
|
|
Loading…
Reference in New Issue