mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-05-05 07:45:27 -04:00
cli: iam destroy (#946)
This commit is contained in:
parent
f1b331bbbd
commit
5137e9fa57
11 changed files with 659 additions and 9 deletions
|
@ -8,13 +8,18 @@ package cloudcmd
|
|||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/edgelesssys/constellation/v2/cli/internal/iamid"
|
||||
"github.com/edgelesssys/constellation/v2/cli/internal/terraform"
|
||||
"github.com/edgelesssys/constellation/v2/internal/cloud/cloudprovider"
|
||||
"github.com/edgelesssys/constellation/v2/internal/cloud/gcpshared"
|
||||
tfjson "github.com/hashicorp/terraform-json"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestIAMCreator(t *testing.T) {
|
||||
|
@ -148,3 +153,186 @@ func TestIAMCreator(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDestroyIAMConfiguration(t *testing.T) {
|
||||
newError := func() error {
|
||||
return errors.New("failed")
|
||||
}
|
||||
|
||||
testCases := map[string]struct {
|
||||
tfClient *stubTerraformClient
|
||||
wantErr bool
|
||||
wantDestroyCalled bool
|
||||
wantCleanupWorkspaceCalled bool
|
||||
}{
|
||||
"destroy error": {
|
||||
tfClient: &stubTerraformClient{destroyErr: newError()},
|
||||
wantErr: true,
|
||||
wantDestroyCalled: true,
|
||||
},
|
||||
"destroy": {
|
||||
tfClient: &stubTerraformClient{},
|
||||
wantDestroyCalled: true,
|
||||
wantCleanupWorkspaceCalled: true,
|
||||
},
|
||||
"cleanup error": {
|
||||
tfClient: &stubTerraformClient{cleanUpWorkspaceErr: newError()},
|
||||
wantErr: true,
|
||||
wantDestroyCalled: true,
|
||||
wantCleanupWorkspaceCalled: true,
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
destroyer := &IAMDestroyer{client: tc.tfClient}
|
||||
|
||||
err := destroyer.DestroyIAMConfiguration(context.Background())
|
||||
|
||||
if tc.wantErr {
|
||||
assert.Error(err)
|
||||
} else {
|
||||
assert.NoError(err)
|
||||
}
|
||||
|
||||
assert.Equal(tc.wantDestroyCalled, tc.tfClient.destroyCalled)
|
||||
assert.Equal(tc.wantCleanupWorkspaceCalled, tc.tfClient.cleanUpWorkspaceCalled)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetTfstateServiceAccountKey(t *testing.T) {
|
||||
someError := errors.New("failed")
|
||||
|
||||
gcpFile := `
|
||||
{
|
||||
"auth_provider_x509_cert_url": "",
|
||||
"auth_uri": "",
|
||||
"client_email": "",
|
||||
"client_id": "",
|
||||
"client_x509_cert_url": "",
|
||||
"private_key": "",
|
||||
"private_key_id": "",
|
||||
"project_id": "",
|
||||
"token_uri": "",
|
||||
"type": ""
|
||||
}
|
||||
`
|
||||
gcpFileB64 := base64.StdEncoding.EncodeToString([]byte(gcpFile))
|
||||
|
||||
testCases := map[string]struct {
|
||||
cl *stubTerraformClient
|
||||
wantValidSaKey bool
|
||||
wantErr bool
|
||||
wantShowCalled bool
|
||||
}{
|
||||
"valid": {
|
||||
cl: &stubTerraformClient{
|
||||
tfjsonState: &tfjson.State{
|
||||
Values: &tfjson.StateValues{
|
||||
Outputs: map[string]*tfjson.StateOutput{
|
||||
"sa_key": {
|
||||
Value: gcpFileB64,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
wantValidSaKey: true,
|
||||
wantShowCalled: true,
|
||||
},
|
||||
"show error": {
|
||||
cl: &stubTerraformClient{
|
||||
showErr: someError,
|
||||
},
|
||||
wantErr: true,
|
||||
wantShowCalled: true,
|
||||
},
|
||||
"nil tfstate values": {
|
||||
cl: &stubTerraformClient{
|
||||
tfjsonState: &tfjson.State{
|
||||
Values: nil,
|
||||
},
|
||||
},
|
||||
wantErr: true,
|
||||
wantShowCalled: true,
|
||||
},
|
||||
"no key": {
|
||||
cl: &stubTerraformClient{
|
||||
tfjsonState: &tfjson.State{
|
||||
Values: &tfjson.StateValues{},
|
||||
},
|
||||
},
|
||||
wantErr: true,
|
||||
wantShowCalled: true,
|
||||
},
|
||||
"invalid base64": {
|
||||
cl: &stubTerraformClient{
|
||||
tfjsonState: &tfjson.State{
|
||||
Values: &tfjson.StateValues{
|
||||
Outputs: map[string]*tfjson.StateOutput{
|
||||
"sa_key": {
|
||||
Value: "iamnotvalid",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: true,
|
||||
wantShowCalled: true,
|
||||
},
|
||||
"valid base64 invalid json": {
|
||||
cl: &stubTerraformClient{
|
||||
tfjsonState: &tfjson.State{
|
||||
Values: &tfjson.StateValues{
|
||||
Outputs: map[string]*tfjson.StateOutput{
|
||||
"sa_key": {
|
||||
Value: base64.StdEncoding.EncodeToString([]byte("asdf")),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: true,
|
||||
wantShowCalled: true,
|
||||
},
|
||||
"not string": {
|
||||
cl: &stubTerraformClient{
|
||||
tfjsonState: &tfjson.State{
|
||||
Values: &tfjson.StateValues{
|
||||
Outputs: map[string]*tfjson.StateOutput{
|
||||
"sa_key": {
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: true,
|
||||
wantShowCalled: true,
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
destroyer := IAMDestroyer{client: tc.cl}
|
||||
|
||||
saKey, err := destroyer.GetTfstateServiceAccountKey(context.Background())
|
||||
|
||||
if tc.wantErr {
|
||||
assert.Error(err)
|
||||
return
|
||||
}
|
||||
assert.NoError(err)
|
||||
|
||||
var saKeyComp gcpshared.ServiceAccountKey
|
||||
require.NoError(t, json.Unmarshal([]byte(gcpFile), &saKeyComp))
|
||||
|
||||
assert.Equal(saKey, saKeyComp)
|
||||
assert.Equal(tc.wantShowCalled, tc.cl.showCalled)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue