mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
feat: add auto-locking/deleting workspace based on template config (#8240)
This commit is contained in:
@ -21,7 +21,6 @@ import (
|
||||
"github.com/coder/coder/codersdk"
|
||||
"github.com/coder/coder/provisioner/echo"
|
||||
"github.com/coder/coder/provisionersdk/proto"
|
||||
"github.com/coder/coder/testutil"
|
||||
)
|
||||
|
||||
func TestExecutorAutostartOK(t *testing.T) {
|
||||
@ -651,8 +650,9 @@ func TestExecutorAutostartTemplateDisabled(t *testing.T) {
|
||||
assert.Len(t, stats.Transitions, 0)
|
||||
}
|
||||
|
||||
// TesetExecutorFailedWorkspace tests that failed workspaces that breach
|
||||
// their template failed_ttl threshold trigger a stop job.
|
||||
// TestExecutorFailedWorkspace test AGPL functionality which mainly
|
||||
// ensures that autostop actions as a result of a failed workspace
|
||||
// build do not trigger.
|
||||
// For enterprise functionality see enterprise/coderd/workspaces_test.go
|
||||
func TestExecutorFailedWorkspace(t *testing.T) {
|
||||
t.Parallel()
|
||||
@ -693,12 +693,57 @@ func TestExecutorFailedWorkspace(t *testing.T) {
|
||||
ws := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
|
||||
build := coderdtest.AwaitWorkspaceBuildJob(t, client, ws.LatestBuild.ID)
|
||||
require.Equal(t, codersdk.WorkspaceStatusFailed, build.Status)
|
||||
require.Eventually(t,
|
||||
func() bool {
|
||||
return database.Now().Sub(*build.Job.CompletedAt) > failureTTL
|
||||
},
|
||||
testutil.IntervalMedium, testutil.IntervalFast)
|
||||
ticker <- time.Now()
|
||||
ticker <- build.Job.CompletedAt.Add(failureTTL * 2)
|
||||
stats := <-statCh
|
||||
// Expect no transitions since we're using AGPL.
|
||||
require.Len(t, stats.Transitions, 0)
|
||||
})
|
||||
}
|
||||
|
||||
// TestExecutorInactiveWorkspace test AGPL functionality which mainly
|
||||
// ensures that autostop actions as a result of an inactive workspace
|
||||
// do not trigger.
|
||||
// For enterprise functionality see enterprise/coderd/workspaces_test.go
|
||||
func TestExecutorInactiveWorkspace(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// Test that an AGPL TemplateScheduleStore properly disables
|
||||
// functionality.
|
||||
t.Run("OK", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var (
|
||||
ticker = make(chan time.Time)
|
||||
statCh = make(chan autobuild.Stats)
|
||||
logger = slogtest.Make(t, &slogtest.Options{
|
||||
// We ignore errors here since we expect to fail
|
||||
// builds.
|
||||
IgnoreErrors: true,
|
||||
})
|
||||
inactiveTTL = time.Millisecond
|
||||
|
||||
client = coderdtest.New(t, &coderdtest.Options{
|
||||
Logger: &logger,
|
||||
AutobuildTicker: ticker,
|
||||
IncludeProvisionerDaemon: true,
|
||||
AutobuildStats: statCh,
|
||||
TemplateScheduleStore: schedule.NewAGPLTemplateScheduleStore(),
|
||||
})
|
||||
)
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
|
||||
Parse: echo.ParseComplete,
|
||||
ProvisionPlan: echo.ProvisionComplete,
|
||||
ProvisionApply: echo.ProvisionComplete,
|
||||
})
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
|
||||
ctr.InactivityTTLMillis = ptr.Ref[int64](inactiveTTL.Milliseconds())
|
||||
})
|
||||
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
|
||||
ws := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
|
||||
build := coderdtest.AwaitWorkspaceBuildJob(t, client, ws.LatestBuild.ID)
|
||||
require.Equal(t, codersdk.WorkspaceStatusRunning, build.Status)
|
||||
ticker <- ws.LastUsedAt.Add(inactiveTTL * 2)
|
||||
stats := <-statCh
|
||||
// Expect no transitions since we're using AGPL.
|
||||
require.Len(t, stats.Transitions, 0)
|
||||
|
Reference in New Issue
Block a user