Commit 94c59da5 authored by Miek Gieben's avatar Miek Gieben Committed by GitHub

Run tests in parallel (#478)

Create a small speedup running the tests:

PASS
ok  	github.com/miekg/coredns/test	10.329s

PASS
ok  	github.com/miekg/coredns/test	6.079s

Skip the etcd ones. Doing the middleware/*/*_test ones doesn't yield
any speedup as these are still done on a per directory basis.
parent 0c3ad499
...@@ -27,14 +27,14 @@ func TestLoadBalance(t *testing.T) { ...@@ -27,14 +27,14 @@ func TestLoadBalance(t *testing.T) {
}{ }{
{ {
answer: []dns.RR{ answer: []dns.RR{
newCNAME("cname1.region2.skydns.test. 300 IN CNAME cname2.region2.skydns.test."), test.CNAME("cname1.region2.skydns.test. 300 IN CNAME cname2.region2.skydns.test."),
newCNAME("cname2.region2.skydns.test. 300 IN CNAME cname3.region2.skydns.test."), test.CNAME("cname2.region2.skydns.test. 300 IN CNAME cname3.region2.skydns.test."),
newCNAME("cname5.region2.skydns.test. 300 IN CNAME cname6.region2.skydns.test."), test.CNAME("cname5.region2.skydns.test. 300 IN CNAME cname6.region2.skydns.test."),
newCNAME("cname6.region2.skydns.test. 300 IN CNAME endpoint.region2.skydns.test."), test.CNAME("cname6.region2.skydns.test. 300 IN CNAME endpoint.region2.skydns.test."),
newA("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"), test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"),
newMX("mx.region2.skydns.test. 300 IN MX 1 mx1.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 1 mx1.region2.skydns.test."),
newMX("mx.region2.skydns.test. 300 IN MX 2 mx2.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 2 mx2.region2.skydns.test."),
newMX("mx.region2.skydns.test. 300 IN MX 3 mx3.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 3 mx3.region2.skydns.test."),
}, },
cnameAnswer: 4, cnameAnswer: 4,
addressAnswer: 1, addressAnswer: 1,
...@@ -42,9 +42,9 @@ func TestLoadBalance(t *testing.T) { ...@@ -42,9 +42,9 @@ func TestLoadBalance(t *testing.T) {
}, },
{ {
answer: []dns.RR{ answer: []dns.RR{
newA("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"), test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"),
newMX("mx.region2.skydns.test. 300 IN MX 1 mx1.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 1 mx1.region2.skydns.test."),
newCNAME("cname.region2.skydns.test. 300 IN CNAME endpoint.region2.skydns.test."), test.CNAME("cname.region2.skydns.test. 300 IN CNAME endpoint.region2.skydns.test."),
}, },
cnameAnswer: 1, cnameAnswer: 1,
addressAnswer: 1, addressAnswer: 1,
...@@ -52,23 +52,23 @@ func TestLoadBalance(t *testing.T) { ...@@ -52,23 +52,23 @@ func TestLoadBalance(t *testing.T) {
}, },
{ {
answer: []dns.RR{ answer: []dns.RR{
newMX("mx.region2.skydns.test. 300 IN MX 1 mx1.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 1 mx1.region2.skydns.test."),
newA("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"), test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"),
newA("endpoint.region2.skydns.test. 300 IN A 10.240.0.2"), test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.2"),
newMX("mx.region2.skydns.test. 300 IN MX 1 mx2.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 1 mx2.region2.skydns.test."),
newCNAME("cname2.region2.skydns.test. 300 IN CNAME cname3.region2.skydns.test."), test.CNAME("cname2.region2.skydns.test. 300 IN CNAME cname3.region2.skydns.test."),
newA("endpoint.region2.skydns.test. 300 IN A 10.240.0.3"), test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.3"),
newMX("mx.region2.skydns.test. 300 IN MX 1 mx3.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 1 mx3.region2.skydns.test."),
}, },
extra: []dns.RR{ extra: []dns.RR{
newA("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"), test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.1"),
newAAAA("endpoint.region2.skydns.test. 300 IN AAAA ::1"), test.AAAA("endpoint.region2.skydns.test. 300 IN AAAA ::1"),
newMX("mx.region2.skydns.test. 300 IN MX 1 mx1.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 1 mx1.region2.skydns.test."),
newCNAME("cname2.region2.skydns.test. 300 IN CNAME cname3.region2.skydns.test."), test.CNAME("cname2.region2.skydns.test. 300 IN CNAME cname3.region2.skydns.test."),
newMX("mx.region2.skydns.test. 300 IN MX 1 mx2.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 1 mx2.region2.skydns.test."),
newA("endpoint.region2.skydns.test. 300 IN A 10.240.0.3"), test.A("endpoint.region2.skydns.test. 300 IN A 10.240.0.3"),
newAAAA("endpoint.region2.skydns.test. 300 IN AAAA ::2"), test.AAAA("endpoint.region2.skydns.test. 300 IN AAAA ::2"),
newMX("mx.region2.skydns.test. 300 IN MX 1 mx3.region2.skydns.test."), test.MX("mx.region2.skydns.test. 300 IN MX 1 mx3.region2.skydns.test."),
}, },
cnameAnswer: 1, cnameAnswer: 1,
cnameExtra: 1, cnameExtra: 1,
...@@ -166,8 +166,3 @@ func handler() middleware.Handler { ...@@ -166,8 +166,3 @@ func handler() middleware.Handler {
return dns.RcodeSuccess, nil return dns.RcodeSuccess, nil
}) })
} }
func newA(rr string) *dns.A { r, _ := dns.NewRR(rr); return r.(*dns.A) }
func newAAAA(rr string) *dns.AAAA { r, _ := dns.NewRR(rr); return r.(*dns.AAAA) }
func newCNAME(rr string) *dns.CNAME { r, _ := dns.NewRR(rr); return r.(*dns.CNAME) }
func newMX(rr string) *dns.MX { r, _ := dns.NewRR(rr); return r.(*dns.MX) }
...@@ -16,6 +16,7 @@ import ( ...@@ -16,6 +16,7 @@ import (
) )
func TestAuto(t *testing.T) { func TestAuto(t *testing.T) {
t.Parallel()
tmpdir, err := ioutil.TempDir(os.TempDir(), "coredns") tmpdir, err := ioutil.TempDir(os.TempDir(), "coredns")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
...@@ -81,6 +82,7 @@ func TestAuto(t *testing.T) { ...@@ -81,6 +82,7 @@ func TestAuto(t *testing.T) {
} }
func TestAutoNonExistentZone(t *testing.T) { func TestAutoNonExistentZone(t *testing.T) {
t.Parallel()
tmpdir, err := ioutil.TempDir(os.TempDir(), "coredns") tmpdir, err := ioutil.TempDir(os.TempDir(), "coredns")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
...@@ -119,6 +121,7 @@ func TestAutoNonExistentZone(t *testing.T) { ...@@ -119,6 +121,7 @@ func TestAutoNonExistentZone(t *testing.T) {
} }
func TestAutoAXFR(t *testing.T) { func TestAutoAXFR(t *testing.T) {
t.Parallel()
log.SetOutput(ioutil.Discard) log.SetOutput(ioutil.Discard)
tmpdir, err := ioutil.TempDir(os.TempDir(), "coredns") tmpdir, err := ioutil.TempDir(os.TempDir(), "coredns")
......
...@@ -14,6 +14,7 @@ import ( ...@@ -14,6 +14,7 @@ import (
) )
func TestLookupCache(t *testing.T) { func TestLookupCache(t *testing.T) {
t.Parallel()
// Start auth. CoreDNS holding the auth zone. // Start auth. CoreDNS holding the auth zone.
name, rm, err := test.TempFile(".", exampleOrg) name, rm, err := test.TempFile(".", exampleOrg)
if err != nil { if err != nil {
......
...@@ -32,6 +32,7 @@ var dsTestCases = []mtest.Case{ ...@@ -32,6 +32,7 @@ var dsTestCases = []mtest.Case{
} }
func TestLookupDS(t *testing.T) { func TestLookupDS(t *testing.T) {
t.Parallel()
name, rm, err := TempFile(".", miekNL) name, rm, err := TempFile(".", miekNL)
if err != nil { if err != nil {
t.Fatalf("failed to created zone: %s", err) t.Fatalf("failed to created zone: %s", err)
......
...@@ -31,7 +31,7 @@ func etcdMiddleware() *etcd.Etcd { ...@@ -31,7 +31,7 @@ func etcdMiddleware() *etcd.Etcd {
// This test starts two coredns servers (and needs etcd). Configure a stubzones in both (that will loop) and // This test starts two coredns servers (and needs etcd). Configure a stubzones in both (that will loop) and
// will then test if we detect this loop. // will then test if we detect this loop.
func TestEtcdStubForwarding(t *testing.T) { func TestEtcdStubLoop(t *testing.T) {
// TODO(miek) // TODO(miek)
} }
......
...@@ -13,6 +13,7 @@ import ( ...@@ -13,6 +13,7 @@ import (
) )
func TestZoneReload(t *testing.T) { func TestZoneReload(t *testing.T) {
t.Parallel()
log.SetOutput(ioutil.Discard) log.SetOutput(ioutil.Discard)
name, rm, err := TempFile(".", exampleOrg) name, rm, err := TempFile(".", exampleOrg)
......
...@@ -3,6 +3,7 @@ package test ...@@ -3,6 +3,7 @@ package test
import "testing" import "testing"
func TestTempFile(t *testing.T) { func TestTempFile(t *testing.T) {
t.Parallel()
_, f, e := TempFile(".", "test") _, f, e := TempFile(".", "test")
if e != nil { if e != nil {
t.Fatalf("failed to create temp file: %s", e) t.Fatalf("failed to create temp file: %s", e)
......
...@@ -242,6 +242,7 @@ func createTestServer(t *testing.T, corefile string) (*caddy.Instance, string) { ...@@ -242,6 +242,7 @@ func createTestServer(t *testing.T, corefile string) (*caddy.Instance, string) {
} }
func TestKubernetesIntegration(t *testing.T) { func TestKubernetesIntegration(t *testing.T) {
t.Parallel()
corefile := corefile :=
`.:0 { `.:0 {
kubernetes cluster.local 0.0.10.in-addr.arpa { kubernetes cluster.local 0.0.10.in-addr.arpa {
......
...@@ -16,6 +16,8 @@ import ( ...@@ -16,6 +16,8 @@ import (
"github.com/miekg/dns" "github.com/miekg/dns"
) )
// fail when done in parallel
// Start test server that has metrics enabled. Then tear it down again. // Start test server that has metrics enabled. Then tear it down again.
func TestMetricsServer(t *testing.T) { func TestMetricsServer(t *testing.T) {
corefile := `example.org:0 { corefile := `example.org:0 {
......
...@@ -12,6 +12,7 @@ import ( ...@@ -12,6 +12,7 @@ import (
) )
func TestLookupBalanceRewriteCacheDnssec(t *testing.T) { func TestLookupBalanceRewriteCacheDnssec(t *testing.T) {
t.Parallel()
name, rm, err := test.TempFile(".", exampleOrg) name, rm, err := test.TempFile(".", exampleOrg)
if err != nil { if err != nil {
t.Fatalf("failed to created zone: %s", err) t.Fatalf("failed to created zone: %s", err)
......
...@@ -13,6 +13,7 @@ import ( ...@@ -13,6 +13,7 @@ import (
) )
func TestLookupProxy(t *testing.T) { func TestLookupProxy(t *testing.T) {
t.Parallel()
name, rm, err := test.TempFile(".", exampleOrg) name, rm, err := test.TempFile(".", exampleOrg)
if err != nil { if err != nil {
t.Fatalf("failed to created zone: %s", err) t.Fatalf("failed to created zone: %s", err)
......
...@@ -3,6 +3,7 @@ package test ...@@ -3,6 +3,7 @@ package test
import ( import (
"io/ioutil" "io/ioutil"
"log" "log"
"sync"
"github.com/miekg/coredns/core/dnsserver" "github.com/miekg/coredns/core/dnsserver"
...@@ -12,8 +13,12 @@ import ( ...@@ -12,8 +13,12 @@ import (
"github.com/mholt/caddy" "github.com/mholt/caddy"
) )
var mu sync.Mutex
// CoreDNSServer returns a CoreDNS test server. It just takes a normal Corefile as input. // CoreDNSServer returns a CoreDNS test server. It just takes a normal Corefile as input.
func CoreDNSServer(corefile string) (*caddy.Instance, error) { func CoreDNSServer(corefile string) (*caddy.Instance, error) {
mu.Lock()
defer mu.Unlock()
caddy.Quiet = true caddy.Quiet = true
dnsserver.Quiet = true dnsserver.Quiet = true
log.SetOutput(ioutil.Discard) log.SetOutput(ioutil.Discard)
......
...@@ -8,6 +8,7 @@ import ( ...@@ -8,6 +8,7 @@ import (
// Start 2 tests server, server A will proxy to B, server B is an CH server. // Start 2 tests server, server A will proxy to B, server B is an CH server.
func TestProxyToChaosServer(t *testing.T) { func TestProxyToChaosServer(t *testing.T) {
t.Parallel()
corefile := `.:0 { corefile := `.:0 {
chaos CoreDNS-001 miek@miek.nl chaos CoreDNS-001 miek@miek.nl
} }
......
...@@ -13,6 +13,7 @@ import ( ...@@ -13,6 +13,7 @@ import (
) )
func TestLookupWildcard(t *testing.T) { func TestLookupWildcard(t *testing.T) {
t.Parallel()
name, rm, err := test.TempFile(".", exampleOrg) name, rm, err := test.TempFile(".", exampleOrg)
if err != nil { if err != nil {
t.Fatalf("failed to created zone: %s", err) t.Fatalf("failed to created zone: %s", err)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment