0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-06-30 02:31:10 +00:00
terraform-provider-proxmox/fwprovider/tests/resource_acl_test.go
hrmny afcbb415a3
feat(access): add ACL resource (#1166)
* feat: add ACL resource

Signed-off-by: hrmny <8845940+ForsakenHarmony@users.noreply.github.com>

* chore: move code under /access, cleanup acc tests

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>

---------

Signed-off-by: hrmny <8845940+ForsakenHarmony@users.noreply.github.com>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2024-05-08 20:22:15 -04:00

175 lines
4.5 KiB
Go

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package tests
import (
"context"
"fmt"
"net/url"
"regexp"
"testing"
"github.com/brianvoe/gofakeit/v7"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/stretchr/testify/require"
"github.com/bpg/terraform-provider-proxmox/proxmox/access"
)
func TestAccAcl_User(t *testing.T) {
te := initTestEnvironment(t)
userID := fmt.Sprintf("%s@pve", gofakeit.Username())
te.addTemplateVars(map[string]any{
"UserID": userID,
})
resource.Test(t, resource.TestCase{
ProtoV6ProviderFactories: te.accProviders,
CheckDestroy: nil,
PreCheck: func() {
err := te.accessClient().CreateUser(context.Background(), &access.UserCreateRequestBody{
ID: userID,
Password: gofakeit.Password(true, true, true, true, false, 8),
})
require.NoError(t, err)
t.Cleanup(func() {
err := te.accessClient().DeleteUser(context.Background(), userID)
require.NoError(t, err)
})
},
Steps: []resource.TestStep{
{
Config: te.renderConfig(`resource "proxmox_virtual_environment_acl" "test" {
user_id = "{{.UserID}}"
path = "/"
role_id = "NoAccess"
}`),
Check: resource.ComposeTestCheckFunc(
testResourceAttributes("proxmox_virtual_environment_acl.test", map[string]string{
"path": "/",
"role_id": "NoAccess",
"user_id": userID,
"propagate": "true",
}),
testNoResourceAttributesSet("proxmox_virtual_environment_acl.test", []string{
"group_id",
"token_id",
}),
),
},
{
ResourceName: "proxmox_virtual_environment_acl.test",
ImportState: true,
ImportStateIdFunc: testAccACLImportStateIDFunc(),
ImportStateVerify: true,
},
{
Config: te.renderConfig(`resource "proxmox_virtual_environment_acl" "test" {
user_id = "{{.UserID}}"
path = "/"
role_id = "PVEPoolUser"
}`),
Check: resource.ComposeTestCheckFunc(
testResourceAttributes("proxmox_virtual_environment_acl.test", map[string]string{
"path": "/",
"role_id": "PVEPoolUser",
"user_id": userID,
"propagate": "true",
}),
testNoResourceAttributesSet("proxmox_virtual_environment_acl.test", []string{
"group_id",
"token_id",
}),
),
},
},
})
}
func TestAccAcl_Validators(t *testing.T) {
t.Parallel()
te := initTestEnvironment(t)
resource.UnitTest(t, resource.TestCase{
ProtoV6ProviderFactories: te.accProviders,
CheckDestroy: nil,
Steps: []resource.TestStep{
{
PlanOnly: true,
Config: `resource "proxmox_virtual_environment_acl" "test" {
group_id = "test"
path = "/"
role_id = "test"
token_id = "test"
}`,
ExpectError: regexp.MustCompile(`.*Error: Invalid Attribute Combination`),
},
{
PlanOnly: true,
Config: `resource "proxmox_virtual_environment_acl" "test" {
path = "/"
role_id = "test"
token_id = "test"
user_id = "test"
}`,
ExpectError: regexp.MustCompile(`.*Error: Invalid Attribute Combination`),
},
{
PlanOnly: true,
Config: `resource "proxmox_virtual_environment_acl" "test" {
group_id = "test"
path = "/"
role_id = "test"
user_id = "test"
}`,
ExpectError: regexp.MustCompile(`.*Error: Invalid Attribute Combination`),
},
{
PlanOnly: true,
Config: `resource "proxmox_virtual_environment_acl" "test" {
group_id = "test"
path = "/"
role_id = "test"
token_id = "test"
user_id = "test"
}`,
ExpectError: regexp.MustCompile(`.*Error: Invalid Attribute Combination`),
},
},
})
}
func testAccACLImportStateIDFunc() resource.ImportStateIdFunc {
return func(s *terraform.State) (string, error) {
resourceName := "proxmox_virtual_environment_acl.test"
rs, ok := s.RootModule().Resources[resourceName]
if !ok {
return "", fmt.Errorf("not found: %s", resourceName)
}
path := rs.Primary.Attributes["path"]
groupID := rs.Primary.Attributes["group_id"]
tokenID := rs.Primary.Attributes["token_id"]
userID := rs.Primary.Attributes["user_id"]
roleID := rs.Primary.Attributes["role_id"]
v := url.Values{
"entity_id": []string{groupID + tokenID + userID},
"role_id": []string{roleID},
}
return path + "?" + v.Encode(), nil
}
}