From 66145e87e3d9fe34a030f84ddf75ba788d49c34d Mon Sep 17 00:00:00 2001 From: Tom Arnfeld Date: Tue, 19 Aug 2014 18:40:58 +0100 Subject: [PATCH 1/2] Added tests for desired filter behaviour --- filter_test.go | 159 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) diff --git a/filter_test.go b/filter_test.go index 28efeb2..cdf33b0 100644 --- a/filter_test.go +++ b/filter_test.go @@ -64,6 +64,138 @@ func TestSimpleReject(t *testing.T) { } } +func TestSimpleAcceptFullDomain(t *testing.T) { + filterer := QueryFilterer{acceptFilters: parseFilters([]string{"net:"})} + + msg := generateDNSMessage("discodns.net", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypeANY) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } + + msg = generateDNSMessage("discodns.com", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } + + msg = generateDNSMessage("discodns.com", dns.TypeANY) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } +} + +func TestSimpleRejectFullDomain(t *testing.T) { + filterer := QueryFilterer{rejectFilters: parseFilters([]string{"net:"})} + + msg := generateDNSMessage("discodns.net", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypeANY) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } + + msg = generateDNSMessage("discodns.com", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } + + msg = generateDNSMessage("discodns.com", dns.TypeANY) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } +} + +func TestSimpleAcceptSpecificTypes(t *testing.T) { + filterer := QueryFilterer{acceptFilters: parseFilters([]string{":A"})} + + msg := generateDNSMessage("discodns.net", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypeAAAA) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } +} + +func TestSimpleAcceptMultipleTypes(t *testing.T) { + filterer := QueryFilterer{acceptFilters: parseFilters([]string{":A,PTR"})} + + msg := generateDNSMessage("discodns.net", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypeAAAA) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypePTR) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } +} + +func TestSimpleRejectSpecificTypes(t *testing.T) { + filterer := QueryFilterer{rejectFilters: parseFilters([]string{":A"})} + + msg := generateDNSMessage("discodns.net", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypeAAAA) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } +} + +func TestSimpleRejectMultipleTypes(t *testing.T) { + filterer := QueryFilterer{rejectFilters: parseFilters([]string{":A,PTR"})} + + msg := generateDNSMessage("discodns.net", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypeAAAA) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypePTR) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } +} + func TestMultipleAccept(t *testing.T) { filterer := QueryFilterer{acceptFilters: parseFilters([]string{"net:A", "com:AAAA"})} @@ -92,6 +224,33 @@ func TestMultipleAccept(t *testing.T) { } } +func TestMultipleReject(t *testing.T) { + filterer := QueryFilterer{rejectFilters: parseFilters([]string{"net:A", "com:AAAA"})} + + msg := generateDNSMessage("discodns.net", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } + + msg = generateDNSMessage("discodns.net", dns.TypeAAAA) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } + + msg = generateDNSMessage("discodns.com", dns.TypeAAAA) + if filterer.ShouldAcceptQuery(msg) != false { + t.Error("Expected the query to be rejected") + t.Fatal() + } + + msg = generateDNSMessage("discodns.com", dns.TypeA) + if filterer.ShouldAcceptQuery(msg) != true { + t.Error("Expected the query to be accepted") + t.Fatal() + } +} // generateDNSMessage returns a simple DNS query with a single question, // comprised of the domain and rrType given. From 03706713d643240ccf79765a373f2782b06c0d3f Mon Sep 17 00:00:00 2001 From: Tom Arnfeld Date: Tue, 19 Aug 2014 18:41:28 +0100 Subject: [PATCH 2/2] Fixed failing test around domain-only filtering --- main.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main.go b/main.go index 5245b6d..66b7686 100644 --- a/main.go +++ b/main.go @@ -134,6 +134,10 @@ func parseFilters(filters []string) []QueryFilter { domain := dns.Fqdn(components[0]) types := strings.Split(components[1], ",") + if len(types) == 1 && len(types[0]) == 0 { + types = make([]string, 0) + } + debugMsg("Adding filter with domain '" + domain + "' and types '" + strings.Join(types, ",") + "'") parsedFilters = append(parsedFilters, QueryFilter{domain, types}) }