Skip to content

Commit

Permalink
testcase: Adds new unit test case for resource
Browse files Browse the repository at this point in the history
alicloud_nas_lifecycle_policy
  • Loading branch information
super-eggs authored and xiaozhu36 committed Jan 28, 2022
1 parent 487682f commit bd0cdfc
Show file tree
Hide file tree
Showing 2 changed files with 323 additions and 4 deletions.
8 changes: 4 additions & 4 deletions alicloud/resource_alicloud_nas_lifecycle_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,10 @@ func resourceAlicloudNasLifecyclePolicyRead(d *schema.ResourceData, meta interfa
}
func resourceAlicloudNasLifecyclePolicyUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
var response map[string]interface{}
parts, err := ParseResourceId(d.Id(), 2)
if err != nil {
Expand All @@ -127,10 +131,6 @@ func resourceAlicloudNasLifecyclePolicyUpdate(d *schema.ResourceData, meta inter
}
if update {
action := "ModifyLifecyclePolicy"
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
319 changes: 319 additions & 0 deletions alicloud/resource_alicloud_nas_lifecycle_policy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@ package alicloud

import (
"fmt"
"github.com/agiledragon/gomonkey/v2"
"github.com/alibabacloud-go/tea-rpc/client"
util "github.com/alibabacloud-go/tea-utils/service"
"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"
"os"
"reflect"
"strconv"
"testing"

"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
Expand Down Expand Up @@ -86,3 +96,312 @@ resource "alicloud_nas_file_system" "default" {
}
`, name)
}

func TestAccAlicloudNASLifecyclePolicy_unit(t *testing.T) {
p := Provider().(*schema.Provider).ResourcesMap
d, _ := schema.InternalMap(p["alicloud_nas_lifecycle_policy"].Schema).Data(nil, nil)
dCreate, _ := schema.InternalMap(p["alicloud_nas_lifecycle_policy"].Schema).Data(nil, nil)
dCreate.MarkNewResource()
for key, value := range map[string]interface{}{
"lifecycle_policy_name": "lifecycle_policy_name",
"file_system_id": "file_system_id",
"lifecycle_rule_name": "lifecycle_rule_name",
"storage_type": "storage_type",
"paths": []string{"/"},
} {
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{}{
"LifecyclePolicies": []interface{}{
map[string]interface{}{
"LifecyclePolicyName": "lifecycle_policy_name",
"FileSystemId": "file_system_id",
"LifecycleRuleName": "lifecycle_rule_name",
"StorageType": "storage_type",
"Paths": []string{"/"},
},
},
}

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_lifecycle_policy", "file_system_id:lifecycle_policy_name"))
},
"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
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 := resourceAlicloudNasLifecyclePolicyCreate(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 := resourceAlicloudNasLifecyclePolicyCreate(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 := resourceAlicloudNasLifecyclePolicyCreate(dCreate, rawClient)
patches.Reset()
assert.Nil(t, err)
})

// Set ID for Update and Delete Method
d.SetId("file_system_id:lifecycle_policy_name")
// 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 := resourceAlicloudNasLifecyclePolicyUpdate(d, rawClient)
patches.Reset()
assert.NotNil(t, err)
})

t.Run("UpdateModifyNasLifecyclePolicyAttributeAbnormal", func(t *testing.T) {
diff := terraform.NewInstanceDiff()
for _, key := range []string{"lifecycle_rule_name"} {
switch p["alicloud_nas_lifecycle_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"})
}
}
resourceData1, _ := schema.InternalMap(p["alicloud_nas_lifecycle_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 := resourceAlicloudNasLifecyclePolicyUpdate(resourceData1, rawClient)
patches.Reset()
assert.NotNil(t, err)
})
t.Run("UpdateModifyNasLifecyclePolicyAttributeNormal", func(t *testing.T) {
diff := terraform.NewInstanceDiff()
for _, key := range []string{"lifecycle_rule_name"} {
switch p["alicloud_nas_lifecycle_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"})
}
}
resourceData1, _ := schema.InternalMap(p["alicloud_nas_lifecycle_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"]("")
})
patcheDescribeVpcVbrHa := gomonkey.ApplyMethod(reflect.TypeOf(&NasService{}), "DescribeNasLifecyclePolicy", func(*NasService, string) (map[string]interface{}, error) {
return responseMock["NoRetryError"]("NoRetryError")
})
err := resourceAlicloudNasLifecyclePolicyUpdate(resourceData1, rawClient)
patches.Reset()
patcheDescribeVpcVbrHa.Reset()
assert.NotNil(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 := resourceAlicloudNasLifecyclePolicyDelete(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
// retry until the timeout comes
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["DeleteNormal"]("")
})
err := resourceAlicloudNasLifecyclePolicyDelete(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"]("")
})
err := resourceAlicloudNasLifecyclePolicyDelete(d, rawClient)
patches.Reset()
assert.Nil(t, err)
})

t.Run("DeleteNonRetryableError", func(t *testing.T) {
retryFlag := false
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 {
return responseMock["RetryError"]("Throttling")
} else if noRetryFlag {
noRetryFlag = false
return responseMock["NoRetryError"]("NonRetryableError")
}
return responseMock["DeleteNormal"]("")
})
err := resourceAlicloudNasLifecyclePolicyDelete(d, rawClient)
patches.Reset()
assert.NotNil(t, err)
})

//Read
t.Run("ReadDescribeNasLifecyclePolicyNotFound", 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 := resourceAlicloudNasLifecyclePolicyRead(d, rawClient)
patcheDorequest.Reset()
assert.Nil(t, err)
})

t.Run("ReadDescribeNasLifecyclePolicyAbnormal", 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 := resourceAlicloudNasLifecyclePolicyRead(d, rawClient)
patcheDorequest.Reset()
assert.NotNil(t, err)
})
}

0 comments on commit bd0cdfc

Please sign in to comment.