Skip to content

chore: run enterprise tests using license #67

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ jobs:
uses: crazy-max/[email protected]
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Run GoReleaser
uses: goreleaser/[email protected]
with:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ jobs:
- run: go mod download
- env:
TF_ACC: "1"
CODER_ENTERPRISE_LICENSE: ${{ secrets.CODER_ENTERPRISE_LICENSE }}
run: go test -v -cover ./internal/provider/
timeout-minutes: 10

Expand Down
14 changes: 12 additions & 2 deletions integration/integration.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
"github.com/stretchr/testify/require"
)

func StartCoder(ctx context.Context, t *testing.T, name string, useTrial bool) *codersdk.Client {
func StartCoder(ctx context.Context, t *testing.T, name string, useLicense bool) *codersdk.Client {
coderImg := os.Getenv("CODER_IMAGE")
if coderImg == "" {
coderImg = "ghcr.io/coder/coder"
Expand All @@ -30,6 +30,11 @@ func StartCoder(ctx context.Context, t *testing.T, name string, useTrial bool) *
coderVersion = "latest"
}

coderLicense := os.Getenv("CODER_ENTERPRISE_LICENSE")
if useLicense && coderLicense == "" {
t.Skip("Skipping tests that require a license.")
}

t.Logf("using coder image %s:%s", coderImg, coderVersion)

cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
Expand Down Expand Up @@ -96,7 +101,6 @@ func StartCoder(ctx context.Context, t *testing.T, name string, useTrial bool) *
Email: testEmail,
Username: testUsername,
Password: testPassword,
Trial: useTrial,
})
require.NoError(t, err, "create first user")
resp, err := client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
Expand All @@ -105,6 +109,12 @@ func StartCoder(ctx context.Context, t *testing.T, name string, useTrial bool) *
})
require.NoError(t, err, "login to coder instance with password")
client.SetSessionToken(resp.SessionToken)
if useLicense {
_, err := client.AddLicense(ctx, codersdk.AddLicenseRequest{
License: coderLicense,
})
require.NoError(t, err, "add license")
}
return client
}

Expand Down
1 change: 0 additions & 1 deletion internal/provider/group_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ func TestAccGroupResource(t *testing.T) {
if os.Getenv("TF_ACC") == "" {
t.Skip("Acceptance tests are disabled.")
}

ctx := context.Background()
client := integration.StartCoder(ctx, t, "group_acc", true)
firstUser, err := client.User(ctx, codersdk.Me)
Expand Down
153 changes: 121 additions & 32 deletions internal/provider/template_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func TestAccTemplateResource(t *testing.T) {
t.Skip("Acceptance tests are disabled.")
}
ctx := context.Background()
client := integration.StartCoder(ctx, t, "template_acc", true)
client := integration.StartCoder(ctx, t, "template_acc", false)
firstUser, err := client.User(ctx, codersdk.Me)
require.NoError(t, err)

Expand All @@ -51,31 +51,15 @@ func TestAccTemplateResource(t *testing.T) {
},
},
ACL: testAccTemplateACLConfig{
GroupACL: []testAccTemplateKeyValueConfig{
{
Key: PtrTo(firstUser.OrganizationIDs[0].String()),
Value: PtrTo("use"),
},
},
null: true,
},
}

cfg2 := cfg1
cfg2.Versions = slices.Clone(cfg2.Versions)
cfg2.Name = PtrTo("example-template-new")
cfg2.AllowUserAutostart = PtrTo(false)
cfg2.Versions[0].Directory = &exTemplateTwo
cfg2.Versions[0].Name = PtrTo("new")
cfg2.ACL.UserACL = []testAccTemplateKeyValueConfig{
{
Key: PtrTo(firstUser.ID.String()),
Value: PtrTo("admin"),
},
}
cfg2.AutostopRequirement = testAccAutostopRequirementConfig{
DaysOfWeek: PtrTo([]string{"monday", "tuesday"}),
Weeks: PtrTo(int64(2)),
}

cfg3 := cfg2
cfg3.Versions = slices.Clone(cfg3.Versions)
Expand Down Expand Up @@ -103,9 +87,6 @@ func TestAccTemplateResource(t *testing.T) {
cfg6 := cfg4
cfg6.Versions = slices.Clone(cfg6.Versions[1:])

cfg7 := cfg6
cfg7.ACL.null = true

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
IsUnitTest: true,
Expand Down Expand Up @@ -180,9 +161,6 @@ func TestAccTemplateResource(t *testing.T) {
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttrSet("coderd_template.test", "id"),
resource.TestCheckResourceAttr("coderd_template.test", "name", "example-template-new"),
resource.TestCheckResourceAttr("coderd_template.test", "allow_user_auto_start", "false"),
resource.TestCheckResourceAttr("coderd_template.test", "auto_stop_requirement.days_of_week.#", "2"),
resource.TestCheckResourceAttr("coderd_template.test", "auto_stop_requirement.weeks", "2"),
resource.TestMatchTypeSetElemNestedAttrs("coderd_template.test", "versions.*", map[string]*regexp.Regexp{
"name": regexp.MustCompile("new"),
}),
Expand Down Expand Up @@ -244,14 +222,6 @@ func TestAccTemplateResource(t *testing.T) {
}),
),
},
// Unmanaged ACL
{
Config: cfg7.String(t),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckNoResourceAttr("coderd_template.test", "acl"),
testAccCheckNumTemplateVersions(ctx, client, 5),
),
},
// Resource deleted
},
})
Expand Down Expand Up @@ -285,6 +255,9 @@ func TestAccTemplateResource(t *testing.T) {
},
},
},
ACL: testAccTemplateACLConfig{
null: true,
},
}

cfg2 := cfg1
Expand Down Expand Up @@ -367,6 +340,122 @@ func TestAccTemplateResource(t *testing.T) {
})
}

func TestAccTemplateResourceEnterprise(t *testing.T) {
if os.Getenv("TF_ACC") == "" {
t.Skip("Acceptance tests are disabled.")
}
ctx := context.Background()
client := integration.StartCoder(ctx, t, "template_acc", true)
firstUser, err := client.User(ctx, codersdk.Me)
require.NoError(t, err)

cfg1 := testAccTemplateResourceConfig{
URL: client.URL.String(),
Token: client.SessionToken(),
Name: PtrTo("example-template"),
Versions: []testAccTemplateVersionConfig{
{
// Auto-generated version name
Directory: PtrTo("../../integration/template-test/example-template"),
Active: PtrTo(true),
// TODO(ethanndickson): Remove this when we add in `*.tfvars` parsing
TerraformVariables: []testAccTemplateKeyValueConfig{
{
Key: PtrTo("name"),
Value: PtrTo("world"),
},
},
},
},
ACL: testAccTemplateACLConfig{
GroupACL: []testAccTemplateKeyValueConfig{
{
Key: PtrTo(firstUser.OrganizationIDs[0].String()),
Value: PtrTo("use"),
},
},
UserACL: []testAccTemplateKeyValueConfig{
{
Key: PtrTo(firstUser.ID.String()),
Value: PtrTo("admin"),
},
},
},
}

cfg2 := cfg1
cfg2.ACL.null = true

cfg3 := cfg2
cfg3.AllowUserAutostart = PtrTo(false)
cfg3.AutostopRequirement = testAccAutostopRequirementConfig{
DaysOfWeek: PtrTo([]string{"monday", "tuesday"}),
Weeks: PtrTo(int64(2)),
}

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
IsUnitTest: true,
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
Steps: []resource.TestStep{
{
Config: cfg1.String(t),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr("coderd_template.test", "acl.groups.#", "1"),
resource.TestMatchTypeSetElemNestedAttrs("coderd_template.test", "acl.groups.*", map[string]*regexp.Regexp{
"id": regexp.MustCompile(".+"),
"role": regexp.MustCompile("^use$"),
}),
resource.TestMatchTypeSetElemNestedAttrs("coderd_template.test", "acl.users.*", map[string]*regexp.Regexp{
"id": regexp.MustCompile(".+"),
"role": regexp.MustCompile("^admin$"),
}),
),
},
{
Config: cfg2.String(t),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckNoResourceAttr("coderd_template.test", "acl"),
func(s *terraform.State) error {
templates, err := client.Templates(ctx, codersdk.TemplateFilter{})
if err != nil {
return err
}
if len(templates) != 1 {
return fmt.Errorf("expected 1 template, got %d", len(templates))
}
acl, err := client.TemplateACL(ctx, templates[0].ID)
if err != nil {
return err
}
if len(acl.Groups) != 1 {
return fmt.Errorf("expected 1 group ACL, got %d", len(acl.Groups))
}
if acl.Groups[0].Role != "use" && acl.Groups[0].ID != firstUser.OrganizationIDs[0] {
return fmt.Errorf("expected group ACL to be 'use' for %s, got %s", firstUser.OrganizationIDs[0].String(), acl.Groups[0].Role)
}
if len(acl.Users) != 1 {
return fmt.Errorf("expected 1 user ACL, got %d", len(acl.Users))
}
if acl.Users[0].Role != "admin" && acl.Users[0].ID != firstUser.ID {
return fmt.Errorf("expected user ACL to be 'admin' for %s, got %s", firstUser.ID.String(), acl.Users[0].Role)
}
return nil
},
),
},
{
Config: cfg3.String(t),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr("coderd_template.test", "allow_user_auto_start", "false"),
resource.TestCheckResourceAttr("coderd_template.test", "auto_stop_requirement.days_of_week.#", "2"),
resource.TestCheckResourceAttr("coderd_template.test", "auto_stop_requirement.weeks", "2"),
),
},
},
})
}

func TestAccTemplateResourceAGPL(t *testing.T) {
if os.Getenv("TF_ACC") == "" {
t.Skip("Acceptance tests are disabled.")
Expand Down
Loading