Skip to content

Commit

Permalink
internal/daemon: speed up multi-worker tests (#5370)
Browse files Browse the repository at this point in the history
Instead of sleeping, we can poll for the desired state. Also,
run shutdowns in parallel.
  • Loading branch information
johanbrandhorst authored Dec 17, 2024
1 parent b2bcd8f commit 862a30c
Showing 1 changed file with 52 additions and 15 deletions.
67 changes: 52 additions & 15 deletions internal/daemon/worker/testing.go
Original file line number Diff line number Diff line change
Expand Up @@ -456,9 +456,6 @@ func NewTestMultihopWorkers(t testing.TB,
})
t.Cleanup(kmsWorker.Shutdown)

// Give time for it to be inserted into the database
time.Sleep(2 * time.Second)

// names should not be set when using pki workers
pkiWorkerConf, err := config.DevWorker()
require.NoError(err)
Expand All @@ -476,9 +473,6 @@ func NewTestMultihopWorkers(t testing.TB,
})
t.Cleanup(pkiWorker.Shutdown)

// Give time for it to be inserted into the database
time.Sleep(2 * time.Second)

// Get a server repo and worker auth repo
serversRepo, err := serversRepoFn()
require.NoError(err)
Expand Down Expand Up @@ -513,9 +507,6 @@ func NewTestMultihopWorkers(t testing.TB,
})
t.Cleanup(childPkiWorker.Shutdown)

// Give time for it to be inserted into the database
time.Sleep(2 * time.Second)

// Perform initial authentication of worker to controller
reqBytes, err = base58.FastBase58Decoding(childPkiWorker.Worker().WorkerAuthRegistrationRequest)
require.NoError(err)
Expand Down Expand Up @@ -548,16 +539,62 @@ func NewTestMultihopWorkers(t testing.TB,
WorkerAuthDebuggingEnabled: enableAuthDebugging,
DisableAutoStart: true,
})
t.Cleanup(childKmsWorker.Shutdown)
childKmsWorker.w.conf.WorkerAuthStorageKms = nil

err = childKmsWorker.w.Start()
t.Cleanup(childKmsWorker.Shutdown)
if err != nil {
t.Fatal(err)
}
require.NoError(err)

// Sleep so that workers can startup and connect.
time.Sleep(12 * time.Second)
t.Log("Waiting for workers to start up")
require.Eventually(
func() bool {
t.Log("Checking worker status")
workers, err := serversRepo.ListWorkers(controllerContext, []string{"global"})
if err != nil {
return false
}
if len(workers) != 4 {
return false
}
for _, w := range workers {
if w.LastStatusTime == nil {
return false
}
}
return true
},
30*time.Second,
time.Second,
)
t.Log("All workers have started")

t.Cleanup(func() {
// Run shutdowns in parallel, they each take multiple seconds
// Note: this duplicates the shutdowns above, but since shutdowns
// are idempotent, that's OK. This is the first time we can safely run them
// all in parallel.
t.Log("Shutting down workers")
wg := &sync.WaitGroup{}
wg.Add(4)
go func() {
defer wg.Done()
kmsWorker.Shutdown()
}()
go func() {
defer wg.Done()
pkiWorker.Shutdown()
}()
go func() {
defer wg.Done()
childPkiWorker.Shutdown()
}()
go func() {
defer wg.Done()
childKmsWorker.Shutdown()
}()
wg.Wait()
t.Log("Workers shut down")
})

return kmsWorker, pkiWorker, childPkiWorker, childKmsWorker
}
Expand Down

0 comments on commit 862a30c

Please sign in to comment.