Skip to content

Commit

Permalink
testcase: Adds new unit test case for resource alicloud_nas_fileset a…
Browse files Browse the repository at this point in the history
…licloud_nas_auto_snapshot_policy alicloud_nas_file_system
  • Loading branch information
thisnihonglei committed Feb 25, 2022
1 parent c591fe7 commit 96e5d33
Show file tree
Hide file tree
Showing 7 changed files with 82,735 additions and 9 deletions.
8 changes: 4 additions & 4 deletions alicloud/resource_alicloud_nas_auto_snapshot_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@ func resourceAlicloudNasAutoSnapshotPolicyRead(d *schema.ResourceData, meta inte
func resourceAlicloudNasAutoSnapshotPolicyUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
nasService := NasService{client}
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
var response map[string]interface{}
update := false
request := map[string]interface{}{
Expand Down Expand Up @@ -155,10 +159,6 @@ func resourceAlicloudNasAutoSnapshotPolicyUpdate(d *schema.ResourceData, meta in
}
if update {
action := "ModifyAutoSnapshotPolicy"
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-06-26"), StringPointer("AK"), nil, request, &util.RuntimeOptions{})
Expand Down
329 changes: 329 additions & 0 deletions alicloud/resource_alicloud_nas_auto_snapshot_policy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,23 @@ package alicloud
import (
"fmt"
"log"
"os"
"reflect"
"strconv"
"strings"
"testing"
"time"

"github.com/agiledragon/gomonkey/v2"
"github.com/alibabacloud-go/tea/tea"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/terraform"
"github.com/stretchr/testify/assert"

"github.com/PaesslerAG/jsonpath"
util "github.com/alibabacloud-go/tea-utils/service"

"github.com/alibabacloud-go/tea-rpc/client"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
Expand Down Expand Up @@ -248,3 +258,322 @@ variable "name" {
}
`, name)
}

func TestAccAlicloudNASAutoSnapshotPolicy_unit(t *testing.T) {
p := Provider().(*schema.Provider).ResourcesMap
d, _ := schema.InternalMap(p["alicloud_nas_auto_snapshot_policy"].Schema).Data(nil, nil)
dCreate, _ := schema.InternalMap(p["alicloud_nas_auto_snapshot_policy"].Schema).Data(nil, nil)
dCreate.MarkNewResource()
for key, value := range map[string]interface{}{
"auto_snapshot_policy_name": "auto_snapshot_policy_name",
"repeat_weekdays": []string{"3", "4"},
"time_points": []string{"1", "2"},
"retention_days": 30,
} {
err := dCreate.Set(key, value)
assert.Nil(t, err)
err = d.Set(key, value)
assert.Nil(t, err)
}
region := os.Getenv("ALICLOUD_REGION")
rawClient, err := sharedClientForRegion(region)
if err != nil {
t.Skipf("Skipping the test case with err: %s", err)
t.Skipped()
}
rawClient = rawClient.(*connectivity.AliyunClient)
ReadMockResponse := map[string]interface{}{
"AutoSnapshotPolicies": map[string]interface{}{
"AutoSnapshotPolicy": []interface{}{
map[string]interface{}{
"AutoSnapshotPolicyName": "auto_snapshot_policy_name",
"RepeatWeekdays": "3,4",
"RetentionDays": 30,
"Status": "Available",
"AutoSnapshotPolicyId": "MockAutoSnapshotPolicyId",
"TimePoints": "1,2",
},
},
},
}

responseMock := map[string]func(errorCode string) (map[string]interface{}, error){
"RetryError": func(errorCode string) (map[string]interface{}, error) {
return nil, &tea.SDKError{
Code: String(errorCode),
Data: String(errorCode),
Message: String(errorCode),
}
},
"NotFoundError": func(errorCode string) (map[string]interface{}, error) {
return nil, GetNotFoundErrorFromString(GetNotFoundMessage("alicloud_nas_auto_snapshot_policy", "MockAutoSnapshotPolicyId"))
},
"NoRetryError": func(errorCode string) (map[string]interface{}, error) {
return nil, &tea.SDKError{
Code: String(errorCode),
Data: String(errorCode),
Message: String(errorCode),
}
},
"CreateNormal": func(errorCode string) (map[string]interface{}, error) {
result := ReadMockResponse
result["AutoSnapshotPolicyId"] = "MockAutoSnapshotPolicyId"
return result, nil
},
"UpdateNormal": func(errorCode string) (map[string]interface{}, error) {
result := ReadMockResponse
return result, nil
},
"DeleteNormal": func(errorCode string) (map[string]interface{}, error) {
result := ReadMockResponse
return result, nil
},
"ReadNormal": func(errorCode string) (map[string]interface{}, error) {
result := ReadMockResponse
return result, nil
},
}
// Create
t.Run("CreateClientAbnormal", func(t *testing.T) {
patches := gomonkey.ApplyMethod(reflect.TypeOf(&connectivity.AliyunClient{}), "NewNasClient", func(_ *connectivity.AliyunClient) (*client.Client, error) {
return nil, &tea.SDKError{
Code: String("loadEndpoint error"),
Data: String("loadEndpoint error"),
Message: String("loadEndpoint error"),
}
})
err := resourceAlicloudNasAutoSnapshotPolicyCreate(d, rawClient)
patches.Reset()
assert.NotNil(t, err)
})
t.Run("CreateAbnormal", func(t *testing.T) {
retryFlag := true
noRetryFlag := true
patches := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
if retryFlag {
retryFlag = false
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["CreateNormal"]("")
})
err := resourceAlicloudNasAutoSnapshotPolicyCreate(d, rawClient)
patches.Reset()
assert.NotNil(t, err)
})
t.Run("CreateNormal", func(t *testing.T) {
retryFlag := false
noRetryFlag := false
patches := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
if retryFlag {
retryFlag = false
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["CreateNormal"]("")
})
err := resourceAlicloudNasAutoSnapshotPolicyCreate(dCreate, rawClient)
patches.Reset()
assert.Nil(t, err)
})

// Set ID for Update and Delete Method
d.SetId("MockAutoSnapshotPolicyId")
// Update
t.Run("UpdateClientAbnormal", func(t *testing.T) {
patches := gomonkey.ApplyMethod(reflect.TypeOf(&connectivity.AliyunClient{}), "NewNasClient", func(_ *connectivity.AliyunClient) (*client.Client, error) {
return nil, &tea.SDKError{
Code: String("loadEndpoint error"),
Data: String("loadEndpoint error"),
Message: String("loadEndpoint error"),
}
})

err := resourceAlicloudNasAutoSnapshotPolicyUpdate(d, rawClient)
patches.Reset()
assert.NotNil(t, err)
})

t.Run("UpdateModifyAutoSnapshotPolicyAbnormal", func(t *testing.T) {
diff := terraform.NewInstanceDiff()
for _, key := range []string{"auto_snapshot_policy_name", "repeat_weekdays", "retention_days", "time_points"} {
switch p["alicloud_nas_auto_snapshot_policy"].Schema[key].Type {
case schema.TypeString:
diff.SetAttribute(key, &terraform.ResourceAttrDiff{Old: d.Get(key).(string), New: d.Get(key).(string) + "_update"})
case schema.TypeBool:
diff.SetAttribute(key, &terraform.ResourceAttrDiff{Old: strconv.FormatBool(d.Get(key).(bool)), New: strconv.FormatBool(true)})
case schema.TypeInt:
diff.SetAttribute(key, &terraform.ResourceAttrDiff{Old: strconv.Itoa(d.Get(key).(int)), New: strconv.Itoa(3)})
case schema.TypeMap:
diff.SetAttribute("tags.%", &terraform.ResourceAttrDiff{Old: "0", New: "2"})
diff.SetAttribute("tags.For", &terraform.ResourceAttrDiff{Old: "", New: "Test"})
diff.SetAttribute("tags.Created", &terraform.ResourceAttrDiff{Old: "", New: "TF"})
case schema.TypeSet:
diff.SetAttribute("repeat_weekdays.0", &terraform.ResourceAttrDiff{Old: "", New: "4"})
diff.SetAttribute("time_points.0", &terraform.ResourceAttrDiff{Old: "", New: "3"})
}

}
resourceData1, _ := schema.InternalMap(p["alicloud_nas_auto_snapshot_policy"].Schema).Data(nil, diff)
resourceData1.SetId(d.Id())
retryFlag := true
noRetryFlag := true
patches := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
if retryFlag {
retryFlag = false
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["UpdateNormal"]("")
})
err := resourceAlicloudNasAutoSnapshotPolicyUpdate(resourceData1, rawClient)
patches.Reset()
assert.NotNil(t, err)
})

t.Run("UpdateModifyAutoSnapshotPolicyNormal", func(t *testing.T) {
diff := terraform.NewInstanceDiff()
for _, key := range []string{"auto_snapshot_policy_name", "repeat_weekdays", "retention_days", "time_points"} {
switch p["alicloud_nas_auto_snapshot_policy"].Schema[key].Type {
case schema.TypeString:
diff.SetAttribute(key, &terraform.ResourceAttrDiff{Old: d.Get(key).(string), New: d.Get(key).(string) + "_update"})
case schema.TypeBool:
diff.SetAttribute(key, &terraform.ResourceAttrDiff{Old: strconv.FormatBool(d.Get(key).(bool)), New: strconv.FormatBool(true)})
case schema.TypeInt:
diff.SetAttribute(key, &terraform.ResourceAttrDiff{Old: strconv.Itoa(d.Get(key).(int)), New: strconv.Itoa(3)})
case schema.TypeMap:
diff.SetAttribute("tags.%", &terraform.ResourceAttrDiff{Old: "0", New: "2"})
diff.SetAttribute("tags.For", &terraform.ResourceAttrDiff{Old: "", New: "Test"})
diff.SetAttribute("tags.Created", &terraform.ResourceAttrDiff{Old: "", New: "TF"})
case schema.TypeSet:
diff.SetAttribute("repeat_weekdays.0", &terraform.ResourceAttrDiff{Old: "", New: "4"})
diff.SetAttribute("time_points.0", &terraform.ResourceAttrDiff{Old: "", New: "3"})
}
}
resourceData1, _ := schema.InternalMap(p["alicloud_nas_auto_snapshot_policy"].Schema).Data(nil, diff)
resourceData1.SetId(d.Id())
retryFlag := false
noRetryFlag := false
patches := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
if retryFlag {
retryFlag = false
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["UpdateNormal"]("")
})
err := resourceAlicloudNasAutoSnapshotPolicyUpdate(resourceData1, rawClient)
patches.Reset()
assert.Nil(t, err)
})

// Delete
t.Run("DeleteClientAbnormal", func(t *testing.T) {
patches := gomonkey.ApplyMethod(reflect.TypeOf(&connectivity.AliyunClient{}), "NewNasClient", func(_ *connectivity.AliyunClient) (*client.Client, error) {
return nil, &tea.SDKError{
Code: String("loadEndpoint error"),
Data: String("loadEndpoint error"),
Message: String("loadEndpoint error"),
}
})
err := resourceAlicloudNasAutoSnapshotPolicyDelete(d, rawClient)
patches.Reset()
assert.NotNil(t, err)
})
t.Run("DeleteMockAbnormal", func(t *testing.T) {
retryFlag := true
noRetryFlag := true
patches := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
if retryFlag {
retryFlag = false
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["DeleteNormal"]("")
})
err := resourceAlicloudNasAutoSnapshotPolicyDelete(d, rawClient)
patches.Reset()
assert.NotNil(t, err)
})
t.Run("DeleteMockNormal", func(t *testing.T) {
retryFlag := false
noRetryFlag := false
patches := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
if retryFlag {
retryFlag = false
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["DeleteNormal"]("")
})
patcheDescribeNasAutoSnapshotPolicy := gomonkey.ApplyMethod(reflect.TypeOf(&NasService{}), "DescribeNasAutoSnapshotPolicy", func(*NasService, string) (map[string]interface{}, error) {
return responseMock["NotFoundError"]("ResourceNotfound")
})
err := resourceAlicloudNasAutoSnapshotPolicyDelete(d, rawClient)
patches.Reset()
patcheDescribeNasAutoSnapshotPolicy.Reset()
assert.Nil(t, err)
})

t.Run("DeleteIsExpectedErrors", func(t *testing.T) {
retryFlag := true
noRetryFlag := false
patches := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
if retryFlag {
return responseMock["RetryError"]("InvalidLifecyclePolicy.NotFound")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["DeleteNormal"]("")
})
err := resourceAlicloudNasAutoSnapshotPolicyDelete(d, rawClient)
patches.Reset()
assert.Nil(t, err)
})

//Read
t.Run("ReadDescribeNasAutoSnapshotPolicyNotFound", func(t *testing.T) {
patcheDorequest := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
NotFoundFlag := true
noRetryFlag := false
if NotFoundFlag {
return responseMock["NotFoundError"]("ResourceNotfound")
} else if noRetryFlag {
return responseMock["NoRetryError"]("NoRetryError")
}
return responseMock["ReadNormal"]("")
})
err := resourceAlicloudNasAutoSnapshotPolicyRead(d, rawClient)
patcheDorequest.Reset()
assert.Nil(t, err)
})

t.Run("ReadDescribeNasAutoSnapshotPolicyAbnormal", func(t *testing.T) {
patcheDorequest := gomonkey.ApplyMethod(reflect.TypeOf(&client.Client{}), "DoRequest", func(_ *client.Client, _ *string, _ *string, _ *string, _ *string, _ *string, _ map[string]interface{}, _ map[string]interface{}, _ *util.RuntimeOptions) (map[string]interface{}, error) {
retryFlag := false
noRetryFlag := true
if retryFlag {
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["ReadNormal"]("")
})
err := resourceAlicloudNasAutoSnapshotPolicyRead(d, rawClient)
patcheDorequest.Reset()
assert.NotNil(t, err)
})
}
8 changes: 4 additions & 4 deletions alicloud/resource_alicloud_nas_file_system.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,10 @@ func resourceAlicloudNasFileSystemCreate(d *schema.ResourceData, meta interface{
func resourceAlicloudNasFileSystemUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
nasService := NasService{client}
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
var response map[string]interface{}
request := map[string]interface{}{
"RegionId": client.RegionId,
Expand All @@ -179,10 +183,6 @@ func resourceAlicloudNasFileSystemUpdate(d *schema.ResourceData, meta interface{
if d.HasChange("description") {
request["Description"] = d.Get("description")
action := "ModifyFileSystem"
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-06-26"), StringPointer("AK"), nil, request, &util.RuntimeOptions{})
Expand Down

0 comments on commit 96e5d33

Please sign in to comment.