Skip to content

Commit

Permalink
Merge pull request #29 from aminueza/feature/add-resource-tests
Browse files Browse the repository at this point in the history
Add tests for resources
  • Loading branch information
felladrin authored Mar 1, 2020
2 parents aaccb68 + 2cb9f81 commit 53e284a
Show file tree
Hide file tree
Showing 21 changed files with 2,074 additions and 119 deletions.
14 changes: 11 additions & 3 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,15 @@ jobs:
id: go
- name: Get dependencies
run: go get -v -t -d ./...
- name: Build the docker-compose stack
run: docker-compose -f test-compose.yml up -d
- name: Test
run: go test ./...
- name: Build
run: make build
env:
TF_ACC: 0
MINIO_ENDPOINT: localhost:9000
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
MINIO_ENABLE_HTTPS: false
run: go test -count=1 -v -cover ./...
- name: Remove containers
run: docker rm -f minio
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,9 @@ build: build_cleanup

build_cleanup:
rm -f ./terraform-provider-s3minio_*
test:
TF_ACC=0 MINIO_ENDPOINT=localhost:9000 \
MINIO_ACCESS_KEY=minio MINIO_SECRET_KEY=minio123 \
MINIO_ENABLE_HTTPS=false $(GO) test -count=1 -v -cover ./...

.PHONY: default build build_cleanup
.PHONY: default build build_cleanup test
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ require (
github.com/dustin/go-humanize v1.0.0
github.com/go-ini/ini v1.51.0 // indirect
github.com/hashicorp/terraform v0.12.17
github.com/hashicorp/terraform-plugin-sdk v1.5.0 // indirect
github.com/hashicorp/terraform-plugin-sdk v1.6.0
github.com/jen20/awspolicyequivalence v1.1.0
github.com/minio/minio v0.0.0-20191209145531-bf3a97d3aae3
github.com/minio/minio-go v6.0.14+incompatible
Expand Down
7 changes: 5 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ github.com/bmatcuk/doublestar v1.1.5 h1:2bNwBOmhyFEFcoB3tGvTD5xanq+4kyOZlB8wFYbM
github.com/bmatcuk/doublestar v1.1.5/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc=
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
github.com/briankassouf/jose v0.9.1/go.mod h1:HQhVmdUf7dBNwIIdBTivnCDxcf6IZY3/zrb+uKSJz6Y=
Expand Down Expand Up @@ -387,8 +388,8 @@ github.com/hashicorp/terraform-config-inspect v0.0.0-20190821133035-82a99dc22ef4
github.com/hashicorp/terraform-config-inspect v0.0.0-20190821133035-82a99dc22ef4/go.mod h1:JDmizlhaP5P0rYTTZB0reDMefAiJyfWPEtugV4in1oI=
github.com/hashicorp/terraform-config-inspect v0.0.0-20191115094559-17f92b0546e8 h1:+RyjwU+Gnd/aTJBPZVDNm903eXVjjqhbaR4Ypx3xYyY=
github.com/hashicorp/terraform-config-inspect v0.0.0-20191115094559-17f92b0546e8/go.mod h1:p+ivJws3dpqbp1iP84+npOyAmTTOLMgCzrXd3GSdn/A=
github.com/hashicorp/terraform-plugin-sdk v1.5.0 h1:hzac/oigJkGup0kI+PwBGI4/fvG7Na8kM8j9xCBrmWo=
github.com/hashicorp/terraform-plugin-sdk v1.5.0/go.mod h1:H5QLx/uhwfxBZ59Bc5SqT19M4i+fYt7LZjHTpbLZiAg=
github.com/hashicorp/terraform-plugin-sdk v1.6.0 h1:Um5hsAL7kKsfTHtan8lybY/d03F2bHu4fjRB1H6Ag4U=
github.com/hashicorp/terraform-plugin-sdk v1.6.0/go.mod h1:H5QLx/uhwfxBZ59Bc5SqT19M4i+fYt7LZjHTpbLZiAg=
github.com/hashicorp/terraform-svchost v0.0.0-20191011084731-65d371908596 h1:hjyO2JsNZUKT1ym+FAdlBEkGPevazYsmVgIMw7dVELg=
github.com/hashicorp/terraform-svchost v0.0.0-20191011084731-65d371908596/go.mod h1:kNDNcF7sN4DocDLBkQYz73HGKwN1ANB1blq4lIYLYvg=
github.com/hashicorp/vault v0.0.0-20181121181053-d4367e581fe1/go.mod h1:KfSyffbKxoVyspOdlaGVjIuwLobi07qD1bAbosPMpP0=
Expand Down Expand Up @@ -657,6 +658,7 @@ github.com/posener/complete v1.2.1/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DK
github.com/posener/complete v1.2.2-0.20190702141536-6ffe496ea953 h1:oBvgW8IvwF278gJ3R4hH0gD3ZeJxjwBXVIScRR0dRc8=
github.com/posener/complete v1.2.2-0.20190702141536-6ffe496ea953/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E=
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
github.com/pquerna/otp v1.1.0 h1:q2gMsMuMl3JzneUaAX1MRGxLvOG6bzXV51hivBaStf0=
github.com/pquerna/otp v1.1.0/go.mod h1:Zad1CMQfSQZI5KLpahDiSUX4tMMREnXw98IvL1nhgMk=
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
Expand Down Expand Up @@ -727,6 +729,7 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/svanharmelen/jsonapi v0.0.0-20180618144545-0c0828c3f16d/go.mod h1:BSTlc8jOjh0niykqEGVXOLXdi9o0r0kR8tCYiMvjFgw=
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
Expand Down
14 changes: 8 additions & 6 deletions minio/check_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ func BucketConfig(d *schema.ResourceData, meta interface{}) *S3MinioBucket {
m := meta.(*S3MinioClient)

return &S3MinioBucket{
MinioClient: m.S3Client,
MinioAdmin: m.S3Admin,
MinioRegion: m.S3Region,
MinioAccess: m.S3UserAccess,
MinioBucket: d.Get("bucket").(string),
MinioACL: d.Get("acl").(string),
MinioClient: m.S3Client,
MinioAdmin: m.S3Admin,
MinioRegion: m.S3Region,
MinioAccess: m.S3UserAccess,
MinioBucket: d.Get("bucket").(string),
MinioBucketPrefix: d.Get("bucket_prefix").(string),
MinioACL: d.Get("acl").(string),
MinioForceDestroy: d.Get("force_destroy").(bool),
}
}

Expand Down
23 changes: 10 additions & 13 deletions minio/data_source_minio_iam_policy_document_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package minio

import (
"log"
"regexp"
"testing"

Expand Down Expand Up @@ -105,8 +104,6 @@ func TestAccMinioDataSourceIAMPolicyDocument_noStatementMerge(t *testing.T) {
}

func TestAccMinioDataSourceIAMPolicyDocument_noStatementOverride(t *testing.T) {
log.Print(testAccMinioIAMPolicyDocumentNoStatementOverrideConfig)
log.Print(testAccMinioIAMPolicyDocumentNoStatementOverrideExpectedJSON)
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Expand Down Expand Up @@ -462,7 +459,7 @@ data "minio_iam_policy_document" "override" {
data "minio_iam_policy_document" "test_override" {
override_json = "${data.minio_iam_policy_document.override.json}"
statement {
actions = ["ec2:*"]
actions = ["s3:*"]
resources = ["*"]
}
statement {
Expand All @@ -482,7 +479,7 @@ var testAccMinioIAMPolicyDocumentOverrideExpectedJSON = `{
{
"Sid": "",
"Effect": "Allow",
"Action": "ec2:*",
"Action": "s3:*",
"Resource": "*"
},
{
Expand All @@ -498,7 +495,7 @@ var testAccMinioIAMPolicyDocumentNoStatementMergeConfig = `
data "minio_iam_policy_document" "source" {
statement {
sid = ""
actions = ["ec2:DescribeAccountAttributes"]
actions = ["s3:GetObject"]
resources = ["*"]
}
}
Expand All @@ -521,7 +518,7 @@ var testAccMinioIAMPolicyDocumentNoStatementMergeExpectedJSON = `{
{
"Sid": "",
"Effect": "Allow",
"Action": "ec2:DescribeAccountAttributes",
"Action": "s3:GetObject",
"Resource": "*"
},
{
Expand All @@ -537,7 +534,7 @@ var testAccMinioIAMPolicyDocumentNoStatementOverrideConfig = `
data "minio_iam_policy_document" "source" {
statement {
sid = "OverridePlaceholder"
actions = ["ec2:DescribeAccountAttributes"]
actions = ["s3:GetObject"]
resources = ["*"]
}
}
Expand Down Expand Up @@ -571,7 +568,7 @@ data "minio_iam_policy_document" "test" {
statement {
sid = "1"
effect = "Allow"
actions = ["ec2:DescribeAccountAttributes"]
actions = ["s3:GetObject"]
resources = ["*"]
}
statement {
Expand All @@ -587,7 +584,7 @@ var testAccMinioIAMPolicyDocumentDuplicateBlankSidConfig = `
statement {
sid = ""
effect = "Allow"
actions = ["ec2:DescribeAccountAttributes"]
actions = ["s3:GetObject"]
resources = ["*"]
}
statement {
Expand All @@ -604,7 +601,7 @@ var testAccMinioIAMPolicyDocumentDuplicateBlankSidExpectedJSON = `{
{
"Sid": "",
"Effect": "Allow",
"Action": "ec2:DescribeAccountAttributes",
"Action": "s3:GetObject",
"Resource": "*"
},
{
Expand All @@ -620,7 +617,7 @@ const testAccMinioIAMPolicyDocumentDataSourceConfigVersion20081017 = `
data "minio_iam_policy_document" "test" {
version = "2008-10-17"
statement {
actions = ["ec2:*"]
actions = ["s3:*"]
resources = ["*"]
}
}
Expand All @@ -632,7 +629,7 @@ const testAccMinioIAMPolicyDocumentDataSourceConfigVersion20081017ExpectedJSON =
{
"Sid": "",
"Effect": "Allow",
"Action": "ec2:*",
"Action": "s3:*",
"Resource": "*"
}
]
Expand Down
31 changes: 31 additions & 0 deletions minio/import_minio_s3_buckets.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package minio

import (
"fmt"

"github.com/hashicorp/terraform/helper/schema"
)

func resourceMinioS3BucketImportState(
d *schema.ResourceData,
meta interface{}) ([]*schema.ResourceData, error) {

results := make([]*schema.ResourceData, 1)
results[0] = d

conn := meta.(*S3MinioClient).S3Client
pol, err := conn.GetBucketPolicy(d.Id())
if err != nil {
return nil, fmt.Errorf("Error importing Minio S3 bucket policy: %s", err)
}

policy := resourceMinioBucket()
pData := policy.Data(nil)
pData.SetId(d.Id())
pData.SetType("minio_s3_bucket_policy")
_ = pData.Set("bucket", d.Id())
_ = pData.Set("acl", pol)
results = append(results, pData)

return results, nil
}
2 changes: 1 addition & 1 deletion minio/new_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func (config *S3MinioConfig) NewClient() (interface{}, error) {
}

minioAdmin, _ := madmin.New(config.S3HostPort, config.S3UserAccess, config.S3UserSecret, config.S3SSL)
minioAdmin.TraceOn(nil)
//minioAdmin.TraceOn(nil)
if err != nil {
log.Println("[FATAL] Error connecting to S3 server.")
return nil, err
Expand Down
14 changes: 8 additions & 6 deletions minio/payload.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,14 @@ type S3MinioClient struct {

//S3MinioBucket defines minio config
type S3MinioBucket struct {
MinioClient *minio.Client
MinioAdmin *madmin.AdminClient
MinioRegion string
MinioBucket string
MinioACL string
MinioAccess string
MinioClient *minio.Client
MinioAdmin *madmin.AdminClient
MinioRegion string
MinioBucket string
MinioBucketPrefix string
MinioACL string
MinioAccess string
MinioForceDestroy bool
}

//S3MinioIAMUserConfig defines IAM config
Expand Down
28 changes: 20 additions & 8 deletions minio/resource_minio_iam_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"log"
"regexp"
"strings"

madmin "github.com/aminueza/terraform-minio-provider/madmin"
"github.com/aws/aws-sdk-go/aws"
Expand All @@ -30,7 +31,7 @@ func resourceMinioIAMGroup() *schema.Resource {
Type: schema.TypeBool,
Optional: true,
Default: false,
Description: "Delete group even if it has non-Terraform-managed IAM access keys",
Description: "Delete group even if it has non-Terraform-managed members",
},
"group_name": {
Type: schema.TypeString,
Expand Down Expand Up @@ -112,17 +113,16 @@ func minioReadGroup(d *schema.ResourceData, meta interface{}) error {

output, err := iamGroupConfig.MinioAdmin.GetGroupDescription(iamGroupConfig.MinioIAMName)
if err != nil {
if strings.Contains(err.Error(), "group does not exist") {
log.Printf("[WARN] No IAM group by name (%s) found, removing from state", d.Id())
d.SetId("")
return nil
}
return fmt.Errorf("Error reading IAM Group %s: %s", d.Id(), err)
}

log.Printf("[WARN] (%v)", output)

if &output == nil {
log.Printf("[WARN] No IAM group by name (%s) found, removing from state", d.Id())
d.SetId("")
return nil
}

if err := d.Set("group_name", string(output.Name)); err != nil {
return err
}
Expand All @@ -135,7 +135,19 @@ func minioDeleteGroup(d *schema.ResourceData, meta interface{}) error {
iamGroupConfig := IAMGroupConfig(d, meta)

log.Printf("[DEBUG] Checking if IAM Group %s is empty:", d.Id())
groupDesc, _ := iamGroupConfig.MinioAdmin.GetGroupDescription(d.Id())
groupDesc, err := iamGroupConfig.MinioAdmin.GetGroupDescription(d.Id())
if err != nil {
if strings.Contains(err.Error(), "not exist") {
log.Printf("[WARN] No IAM group by name (%s) found, removing from state", d.Id())
d.SetId("")
return nil
}
return fmt.Errorf("Error reading IAM Group %s: %s", d.Id(), err)
}

if groupDesc.Name == "" {
return nil
}

if len(groupDesc.Policy) == 0 {
//delete group requires to set policy if it doesn't exist
Expand Down
Loading

0 comments on commit 53e284a

Please sign in to comment.