mirror of
https://github.com/coder/coder.git
synced 2026-06-03 13:08:25 +00:00
393b3874ac
<!-- If you have used AI to produce some or all of this PR, please ensure you have read our [AI Contribution guidelines](https://coder.com/docs/about/contributing/AI_CONTRIBUTING) before submitting. --> part of https://github.com/coder/coder/issues/21335 This moves updating app status (used by Tasks) into the workspace agent API over dRPC. This will allow us to update the status without having to re-authenticate each time, like we would with an HTTP PATCH request. Further PRs in this stack will pipe these requests thru from the CLI MCP server to the agentsock and finally to this dRPC call to coderd.
116 lines
3.1 KiB
Go
116 lines
3.1 KiB
Go
package agentapi
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/coder/coder/v2/coderd/database"
|
|
"github.com/coder/coder/v2/coderd/util/ptr"
|
|
)
|
|
|
|
func TestShouldBump(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
prevState *database.WorkspaceAppStatusState // nil means no previous state
|
|
newState database.WorkspaceAppStatusState
|
|
shouldBump bool
|
|
}{
|
|
{
|
|
name: "FirstStatusBumps",
|
|
prevState: nil,
|
|
newState: database.WorkspaceAppStatusStateWorking,
|
|
shouldBump: true,
|
|
},
|
|
{
|
|
name: "WorkingToIdleBumps",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateWorking),
|
|
newState: database.WorkspaceAppStatusStateIdle,
|
|
shouldBump: true,
|
|
},
|
|
{
|
|
name: "WorkingToCompleteBumps",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateWorking),
|
|
newState: database.WorkspaceAppStatusStateComplete,
|
|
shouldBump: true,
|
|
},
|
|
{
|
|
name: "CompleteToIdleNoBump",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateComplete),
|
|
newState: database.WorkspaceAppStatusStateIdle,
|
|
shouldBump: false,
|
|
},
|
|
{
|
|
name: "CompleteToCompleteNoBump",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateComplete),
|
|
newState: database.WorkspaceAppStatusStateComplete,
|
|
shouldBump: false,
|
|
},
|
|
{
|
|
name: "FailureToIdleNoBump",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateFailure),
|
|
newState: database.WorkspaceAppStatusStateIdle,
|
|
shouldBump: false,
|
|
},
|
|
{
|
|
name: "FailureToFailureNoBump",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateFailure),
|
|
newState: database.WorkspaceAppStatusStateFailure,
|
|
shouldBump: false,
|
|
},
|
|
{
|
|
name: "CompleteToWorkingBumps",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateComplete),
|
|
newState: database.WorkspaceAppStatusStateWorking,
|
|
shouldBump: true,
|
|
},
|
|
{
|
|
name: "FailureToCompleteNoBump",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateFailure),
|
|
newState: database.WorkspaceAppStatusStateComplete,
|
|
shouldBump: false,
|
|
},
|
|
{
|
|
name: "WorkingToFailureBumps",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateWorking),
|
|
newState: database.WorkspaceAppStatusStateFailure,
|
|
shouldBump: true,
|
|
},
|
|
{
|
|
name: "IdleToIdleNoBump",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateIdle),
|
|
newState: database.WorkspaceAppStatusStateIdle,
|
|
shouldBump: false,
|
|
},
|
|
{
|
|
name: "IdleToWorkingBumps",
|
|
prevState: ptr.Ref(database.WorkspaceAppStatusStateIdle),
|
|
newState: database.WorkspaceAppStatusStateWorking,
|
|
shouldBump: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var prevAppStatus database.WorkspaceAppStatus
|
|
// If there's a previous state, report it first.
|
|
if tt.prevState != nil {
|
|
prevAppStatus.ID = uuid.UUID{1}
|
|
prevAppStatus.State = *tt.prevState
|
|
}
|
|
|
|
didBump := shouldBump(tt.newState, prevAppStatus)
|
|
if tt.shouldBump {
|
|
require.True(t, didBump, "wanted deadline to bump but it didn't")
|
|
} else {
|
|
require.False(t, didBump, "wanted deadline not to bump but it did")
|
|
}
|
|
})
|
|
}
|
|
}
|