IAM Role Assignment (#665)
* Initial PoC for a Project Role Assignment resource Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * fix: move project_role_assignment into new "authorization" resource group Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * feat: add authorization_project_role_assignment acceptance test Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * docs: add authorization_project_role_assignment docs and examples Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * fix: linting Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * feat: add generic role_assignment resources Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * feat: add infrastructure for experimental features Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * feat: Make IAM resources part of the iam experiment Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * fix: Log an error if an experiment does not exist Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> * fix: Do not cache the experiment check Caching the experiment check causes problems when running the provider in debug mode, since configure in the provider can be called multiple times there with different configurations, with different experiments enabled. Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> --------- Signed-off-by: Benjamin Ritter <benjamin.ritter@stackit.cloud> Co-authored-by: Benjamin Ritter <benjamin.ritter@stackit.cloud>
This commit is contained in:
parent
69b117f4e7
commit
dadea7a904
18 changed files with 853 additions and 1 deletions
113
stackit/internal/features/experiments_test.go
Normal file
113
stackit/internal/features/experiments_test.go
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
package features
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-framework/diag"
|
||||
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
|
||||
)
|
||||
|
||||
func TestValidExperiment(t *testing.T) {
|
||||
type args struct {
|
||||
experiment string
|
||||
diags *diag.Diagnostics
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want bool
|
||||
}{
|
||||
{
|
||||
name: "valid",
|
||||
args: args{
|
||||
experiment: "iam",
|
||||
diags: &diag.Diagnostics{},
|
||||
},
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
name: "invalid",
|
||||
args: args{
|
||||
experiment: "foo",
|
||||
diags: &diag.Diagnostics{},
|
||||
},
|
||||
want: false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := ValidExperiment(tt.args.experiment, tt.args.diags); got != tt.want {
|
||||
t.Errorf("ValidExperiment() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckExperimentEnabled(t *testing.T) {
|
||||
type args struct {
|
||||
ctx context.Context
|
||||
data *core.ProviderData
|
||||
experiment string
|
||||
resourceType string
|
||||
diags *diag.Diagnostics
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
wantDiagsErr bool
|
||||
wantDiagsWarning bool
|
||||
}{
|
||||
{
|
||||
name: "enabled",
|
||||
args: args{
|
||||
ctx: context.Background(),
|
||||
data: &core.ProviderData{
|
||||
Experiments: []string{"iam"},
|
||||
},
|
||||
experiment: "iam",
|
||||
diags: &diag.Diagnostics{},
|
||||
},
|
||||
wantDiagsErr: false,
|
||||
wantDiagsWarning: true,
|
||||
},
|
||||
{
|
||||
name: "disabled",
|
||||
args: args{
|
||||
ctx: context.Background(),
|
||||
data: &core.ProviderData{
|
||||
Experiments: []string{},
|
||||
},
|
||||
experiment: "iam",
|
||||
diags: &diag.Diagnostics{},
|
||||
},
|
||||
wantDiagsErr: true,
|
||||
wantDiagsWarning: false,
|
||||
},
|
||||
{
|
||||
name: "invalid experiment",
|
||||
args: args{
|
||||
ctx: context.Background(),
|
||||
data: &core.ProviderData{
|
||||
Experiments: []string{"iam"},
|
||||
},
|
||||
experiment: "foobar",
|
||||
resourceType: "provider",
|
||||
diags: &diag.Diagnostics{},
|
||||
},
|
||||
wantDiagsErr: true,
|
||||
wantDiagsWarning: false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
CheckExperimentEnabled(tt.args.ctx, tt.args.data, tt.args.experiment, tt.args.resourceType, tt.args.diags)
|
||||
if got := tt.args.diags.HasError(); got != tt.wantDiagsErr {
|
||||
t.Errorf("CheckExperimentEnabled() diags.HasError() = %v, want %v", got, tt.wantDiagsErr)
|
||||
}
|
||||
if got := tt.args.diags.WarningsCount() > 0; got != tt.wantDiagsWarning {
|
||||
t.Errorf("CheckExperimentEnabled() diags.WarningsCount() > 0 = %v, want %v", got, tt.wantDiagsErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue