Skip to content

Commit 3c89945

Browse files
committed
engine: speed up the tests
these tests are covering a lot of subtle async interactions on a main event loop. we can parallelize them to run that event loop multiple times! on my old mac, the tests went from ~35s to ~6s Signed-off-by: Nick Santos <nicholas.j.santos@gmail.com>
1 parent 51c2088 commit 3c89945

3 files changed

Lines changed: 128 additions & 3 deletions

File tree

internal/engine/buildcontroller_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
)
2828

2929
func TestBuildControllerLocalResource(t *testing.T) {
30+
t.Parallel()
3031
f := newTestFixture(t)
3132

3233
dep := f.JoinPath("stuff.json")
@@ -55,6 +56,7 @@ func TestBuildControllerLocalResource(t *testing.T) {
5556
}
5657

5758
func TestBuildControllerManualTriggerBuildReasonInit(t *testing.T) {
59+
t.Parallel()
5860
for _, tc := range []struct {
5961
name string
6062
triggerMode model.TriggerMode
@@ -63,6 +65,7 @@ func TestBuildControllerManualTriggerBuildReasonInit(t *testing.T) {
6365
{"manual with auto init", model.TriggerModeManualWithAutoInit},
6466
} {
6567
t.Run(tc.name, func(t *testing.T) {
68+
t.Parallel()
6669
f := newTestFixture(t)
6770
mName := model.ManifestName("foobar")
6871
manifest := f.newManifest(mName.String()).WithTriggerMode(tc.triggerMode)
@@ -84,6 +87,7 @@ func TestBuildControllerManualTriggerBuildReasonInit(t *testing.T) {
8487
}
8588

8689
func TestTriggerModes(t *testing.T) {
90+
t.Parallel()
8791
for _, tc := range []struct {
8892
name string
8993
triggerMode model.TriggerMode
@@ -96,6 +100,7 @@ func TestTriggerModes(t *testing.T) {
96100
{name: "fully manual", triggerMode: model.TriggerModeManual, expectInitialBuild: false, expectBuildWhenFilesChange: false},
97101
} {
98102
t.Run(tc.name, func(t *testing.T) {
103+
t.Parallel()
99104
f := newTestFixture(t)
100105

101106
manifest := f.simpleManifestWithTriggerMode("foobar", tc.triggerMode)
@@ -129,6 +134,7 @@ func TestTriggerModes(t *testing.T) {
129134
}
130135

131136
func TestBuildControllerImageBuildTrigger(t *testing.T) {
137+
t.Parallel()
132138
for _, tc := range []struct {
133139
name string
134140
triggerMode model.TriggerMode
@@ -143,6 +149,7 @@ func TestBuildControllerImageBuildTrigger(t *testing.T) {
143149
{name: "auto with manual init without change", triggerMode: model.TriggerModeAutoWithManualInit, filesChanged: false, expectedImageBuild: true},
144150
} {
145151
t.Run(tc.name, func(t *testing.T) {
152+
t.Parallel()
146153
f := newTestFixture(t)
147154
mName := model.ManifestName("foobar")
148155

@@ -187,6 +194,7 @@ func TestBuildControllerImageBuildTrigger(t *testing.T) {
187194
}
188195

189196
func TestBuildQueueOrdering(t *testing.T) {
197+
t.Parallel()
190198
f := newTestFixture(t)
191199

192200
m1 := f.newManifestWithRef("manifest1", container.MustParseNamed("manifest1")).
@@ -241,6 +249,7 @@ func TestBuildQueueOrdering(t *testing.T) {
241249
}
242250

243251
func TestBuildQueueAndAutobuildOrdering(t *testing.T) {
252+
t.Parallel()
244253
f := newTestFixture(t)
245254

246255
// changes to this dir. will register with our manual manifests
@@ -303,6 +312,7 @@ func TestBuildQueueAndAutobuildOrdering(t *testing.T) {
303312

304313
// any manifests without image targets should be deployed before any manifests WITH image targets
305314
func TestBuildControllerNoBuildManifestsFirst(t *testing.T) {
315+
t.Parallel()
306316
f := newTestFixture(t)
307317

308318
manifests := make([]model.Manifest, 10)
@@ -341,6 +351,7 @@ func TestBuildControllerNoBuildManifestsFirst(t *testing.T) {
341351
}
342352

343353
func TestBuildControllerUnresourcedYAMLFirst(t *testing.T) {
354+
t.Parallel()
344355
f := newTestFixture(t)
345356

346357
manifests := []model.Manifest{
@@ -371,6 +382,7 @@ func TestBuildControllerUnresourcedYAMLFirst(t *testing.T) {
371382
}
372383

373384
func TestBuildControllerRespectDockerComposeOrder(t *testing.T) {
385+
t.Parallel()
374386
f := newTestFixture(t)
375387

376388
sancho := NewSanchoLiveUpdateDCManifest(f)
@@ -399,6 +411,7 @@ func TestBuildControllerRespectDockerComposeOrder(t *testing.T) {
399411
}
400412

401413
func TestBuildControllerLocalResourcesBeforeClusterResources(t *testing.T) {
414+
t.Parallel()
402415
f := newTestFixture(t)
403416

404417
manifests := []model.Manifest{
@@ -440,6 +453,7 @@ func TestBuildControllerLocalResourcesBeforeClusterResources(t *testing.T) {
440453
}
441454

442455
func TestBuildControllerResourceDeps(t *testing.T) {
456+
t.Parallel()
443457
f := newTestFixture(t)
444458

445459
depGraph := map[string][]string{
@@ -497,6 +511,7 @@ func TestBuildControllerResourceDeps(t *testing.T) {
497511
// normally, local builds go before k8s builds
498512
// if the local build depends on the k8s build, the k8s build should go first
499513
func TestBuildControllerResourceDepTrumpsLocalResourcePriority(t *testing.T) {
514+
t.Parallel()
500515
f := newTestFixture(t)
501516

502517
k8sManifest := f.newManifest("foo")
@@ -525,6 +540,7 @@ func TestBuildControllerResourceDepTrumpsLocalResourcePriority(t *testing.T) {
525540

526541
// bar depends on foo, we build foo three times before marking it ready, and make sure bar waits
527542
func TestBuildControllerResourceDepTrumpsInitialBuild(t *testing.T) {
543+
t.Parallel()
528544
if runtime.GOOS == "windows" {
529545
t.Skip("flaky on windows")
530546
}
@@ -560,6 +576,7 @@ func TestBuildControllerResourceDepTrumpsInitialBuild(t *testing.T) {
560576

561577
// bar depends on foo. make sure bar waits on foo even as foo fails
562578
func TestBuildControllerResourceDepTrumpsPendingBuild(t *testing.T) {
579+
t.Parallel()
563580
if runtime.GOOS == "windows" {
564581
t.Skip("flaky on windows")
565582
}
@@ -593,6 +610,7 @@ func TestBuildControllerResourceDepTrumpsPendingBuild(t *testing.T) {
593610
}
594611

595612
func TestBuildControllerWontBuildManifestIfNoSlotsAvailable(t *testing.T) {
613+
t.Parallel()
596614
f := newTestFixture(t)
597615
f.b.completeBuildsManually = true
598616
f.setMaxParallelUpdates(2)
@@ -628,6 +646,7 @@ func TestBuildControllerWontBuildManifestIfNoSlotsAvailable(t *testing.T) {
628646
// are in progress (e.g. if there are 5 builds in progress and user sets
629647
// maxParallelUpdates=3, nothing should explode.)
630648
func TestCurrentlyBuildingMayExceedMaxParallelUpdates(t *testing.T) {
649+
t.Parallel()
631650
f := newTestFixture(t)
632651
f.b.completeBuildsManually = true
633652
f.setMaxParallelUpdates(3)
@@ -682,6 +701,7 @@ func TestCurrentlyBuildingMayExceedMaxParallelUpdates(t *testing.T) {
682701
}
683702

684703
func TestDontStartBuildIfControllerAndEngineUnsynced(t *testing.T) {
704+
t.Parallel()
685705
f := newTestFixture(t)
686706

687707
f.b.completeBuildsManually = true
@@ -719,6 +739,7 @@ func TestDontStartBuildIfControllerAndEngineUnsynced(t *testing.T) {
719739
}
720740

721741
func TestErrorHandlingWithMultipleBuilds(t *testing.T) {
742+
t.Parallel()
722743
if runtime.GOOS == "windows" {
723744
t.Skip("TODO(nick): fix this")
724745
}
@@ -768,6 +789,7 @@ func TestErrorHandlingWithMultipleBuilds(t *testing.T) {
768789
}
769790

770791
func TestManifestsWithSameTwoImages(t *testing.T) {
792+
t.Parallel()
771793
f := newTestFixture(t)
772794
m1, m2 := NewManifestsWithSameTwoImages(f)
773795
f.Start([]model.Manifest{m1, m2})
@@ -815,6 +837,7 @@ func TestManifestsWithSameTwoImages(t *testing.T) {
815837
}
816838

817839
func TestManifestsWithTwoCommonAncestors(t *testing.T) {
840+
t.Parallel()
818841
f := newTestFixture(t)
819842
m1, m2 := NewManifestsWithTwoCommonAncestors(f)
820843
f.Start([]model.Manifest{m1, m2})
@@ -871,6 +894,7 @@ func TestManifestsWithTwoCommonAncestors(t *testing.T) {
871894
}
872895

873896
func TestLocalDependsOnNonWorkloadK8s(t *testing.T) {
897+
t.Parallel()
874898
f := newTestFixture(t)
875899

876900
local1 := manifestbuilder.New(f, "local").
@@ -897,6 +921,7 @@ func TestLocalDependsOnNonWorkloadK8s(t *testing.T) {
897921
}
898922

899923
func TestManifestsWithCommonAncestorAndTrigger(t *testing.T) {
924+
t.Parallel()
900925
f := newTestFixture(t)
901926
m1, m2 := NewManifestsWithCommonAncestor(f)
902927
f.Start([]model.Manifest{m1, m2})
@@ -924,6 +949,7 @@ func TestManifestsWithCommonAncestorAndTrigger(t *testing.T) {
924949
}
925950

926951
func TestDisablingCancelsBuild(t *testing.T) {
952+
t.Parallel()
927953
f := newTestFixture(t)
928954
manifest := manifestbuilder.New(f, "local").
929955
WithLocalResource("sleep 10000", nil).
@@ -948,6 +974,7 @@ func TestDisablingCancelsBuild(t *testing.T) {
948974
}
949975

950976
func TestCancelButton(t *testing.T) {
977+
t.Parallel()
951978
f := newTestFixture(t)
952979
f.b.completeBuildsManually = true
953980
f.useRealTiltfileLoader()
@@ -975,6 +1002,7 @@ local_resource('local', 'sleep 10000')
9751002
}
9761003

9771004
func TestCancelButtonClickedBeforeBuild(t *testing.T) {
1005+
t.Parallel()
9781006
f := newTestFixture(t)
9791007
f.b.completeBuildsManually = true
9801008
f.useRealTiltfileLoader()
@@ -1014,6 +1042,7 @@ local_resource('local', 'sleep 10000')
10141042
}
10151043

10161044
func TestBuildControllerK8sFileDependencies(t *testing.T) {
1045+
t.Parallel()
10171046
f := newTestFixture(t)
10181047

10191048
kt := k8s.MustTarget("fe", testyaml.SanchoYAML).

internal/engine/main_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package engine
2+
3+
import (
4+
"io"
5+
"os"
6+
"testing"
7+
8+
"github.com/tilt-dev/tilt/internal/controllers"
9+
)
10+
11+
func TestMain(m *testing.M) {
12+
controllers.InitKlog(io.Discard)
13+
os.Exit(m.Run())
14+
}

0 commit comments

Comments
 (0)