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.
This commit is contained in:
Miek Gieben 2017-01-12 08:13:50 +00:00 committed by GitHub
parent 0c3ad499d8
commit 94c59da577
14 changed files with 46 additions and 32 deletions

View file

@ -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) {
}, },
{ {
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) {
}, },
{ {
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 {
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) }

View file

@ -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) {
} }
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) {
} }
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")

View file

@ -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 {

View file

@ -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)

View file

@ -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)
} }

View file

@ -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)

View file

@ -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)

View file

@ -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 {

View file

@ -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 {

View file

@ -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)

View file

@ -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)

View file

@ -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 (
"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)

View file

@ -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
} }

View file

@ -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)