Skip to content

Commit

Permalink
Merge pull request #30 from duedil-ltd/feature/filter-tests
Browse files Browse the repository at this point in the history
Added tests for desired filter behaviour
  • Loading branch information
tarnfeld committed Aug 19, 2014
2 parents c4c1df5 + 0370671 commit d857ca0
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 0 deletions.
159 changes: 159 additions & 0 deletions filter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"})}

Expand Down Expand Up @@ -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.
Expand Down
4 changes: 4 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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})
}
Expand Down

0 comments on commit d857ca0

Please sign in to comment.