mirror of
https://github.com/coder/coder.git
synced 2025-07-08 11:39:50 +00:00
In anticipation of needing the `LogSender` to run on a context that doesn't get immediately canceled when you `Close()` the agent, I've undertaken a little refactor to manage the goroutines that get run against the Tailnet and Agent API connection. This handles controlling two contexts, one that gets canceled right away at the start of graceful shutdown, and another that stays up to allow graceful shutdown to complete.
64 lines
2.1 KiB
Go
64 lines
2.1 KiB
Go
package coderd_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/coder/coder/v2/coderd/coderdtest"
|
|
"github.com/coder/coder/v2/coderd/rbac"
|
|
"github.com/coder/coder/v2/codersdk"
|
|
"github.com/coder/coder/v2/enterprise/coderd/coderdenttest"
|
|
"github.com/coder/coder/v2/enterprise/coderd/license"
|
|
"github.com/coder/coder/v2/testutil"
|
|
)
|
|
|
|
func TestWorkspacePortShare(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
dep := coderdtest.DeploymentValues(t)
|
|
dep.Experiments = append(dep.Experiments, string(codersdk.ExperimentSharedPorts))
|
|
ownerClient, owner := coderdenttest.New(t, &coderdenttest.Options{
|
|
Options: &coderdtest.Options{
|
|
IncludeProvisionerDaemon: true,
|
|
DeploymentValues: dep,
|
|
},
|
|
LicenseOptions: &coderdenttest.LicenseOptions{
|
|
Features: license.Features{
|
|
codersdk.FeatureControlSharedPorts: 1,
|
|
},
|
|
},
|
|
})
|
|
client, user := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID, rbac.RoleTemplateAdmin())
|
|
r := setupWorkspaceAgent(t, client, codersdk.CreateFirstUserResponse{
|
|
UserID: user.ID,
|
|
OrganizationID: owner.OrganizationID,
|
|
}, 0)
|
|
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
|
|
defer cancel()
|
|
|
|
// try to update port share with template max port share level owner
|
|
_, err := client.UpsertWorkspaceAgentPortShare(ctx, r.workspace.ID, codersdk.UpsertWorkspaceAgentPortShareRequest{
|
|
AgentName: r.sdkAgent.Name,
|
|
Port: 8080,
|
|
ShareLevel: codersdk.WorkspaceAgentPortShareLevelPublic,
|
|
})
|
|
require.Error(t, err, "Port sharing level not allowed")
|
|
|
|
// update the template max port share level to public
|
|
var level codersdk.WorkspaceAgentPortShareLevel = codersdk.WorkspaceAgentPortShareLevelPublic
|
|
client.UpdateTemplateMeta(ctx, r.workspace.TemplateID, codersdk.UpdateTemplateMeta{
|
|
MaxPortShareLevel: &level,
|
|
})
|
|
|
|
// OK
|
|
ps, err := client.UpsertWorkspaceAgentPortShare(ctx, r.workspace.ID, codersdk.UpsertWorkspaceAgentPortShareRequest{
|
|
AgentName: r.sdkAgent.Name,
|
|
Port: 8080,
|
|
ShareLevel: codersdk.WorkspaceAgentPortShareLevelPublic,
|
|
})
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, codersdk.WorkspaceAgentPortShareLevelPublic, ps.ShareLevel)
|
|
}
|