diff --git a/integration/api_test.go b/integration/api_test.go index 8ce16153f..63e2a1aa3 100644 --- a/integration/api_test.go +++ b/integration/api_test.go @@ -61,6 +61,7 @@ func Test_DeleteClusterWithROArequestWithJSONWithDelete(t *testing.T) { assert.Contains(t, err.Error(), "ErrorClusterNotFound") } +// 创建安全组 func Test_CreateSecurityGroupWithRPCrequestWithJSONWithNestingparametersWithPOST(t *testing.T) { client, err := ecs.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) assert.Nil(t, err) @@ -79,6 +80,7 @@ func Test_CreateSecurityGroupWithRPCrequestWithJSONWithNestingparametersWithPOST securityGroupId = response.SecurityGroupId } +// 查询安全组 func Test_ECS_DescribeSecurityGroupsWithRPCrequestWithJSONWithNestingparametersWithGET(t *testing.T) { client, err := ecs.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) assert.Nil(t, err) @@ -99,6 +101,7 @@ func Test_ECS_DescribeSecurityGroupsWithRPCrequestWithJSONWithNestingparametersW flag = false } +// 删除安全组 func Test_ECS_DeleteSecurityGroupWithRPCrequestWithJSONWithPOST(t *testing.T) { client, err := ecs.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) assert.Nil(t, err) @@ -112,6 +115,7 @@ func Test_ECS_DeleteSecurityGroupWithRPCrequestWithJSONWithPOST(t *testing.T) { securityGroupId = "" } +// 查询 RDS func Test_RDS_DescribeDBInstancesWithRPCrequest(t *testing.T) { client, err := rds.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) assert.Nil(t, err) @@ -123,6 +127,7 @@ func Test_RDS_DescribeDBInstancesWithRPCrequest(t *testing.T) { assert.NotNil(t, response) } +// 查询 CDN 域名 func Test_CDN_DescribeCdnDomainDetailWithRPCrequest(t *testing.T) { client, err := cdn.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) assert.Nil(t, err) @@ -134,6 +139,7 @@ func Test_CDN_DescribeCdnDomainDetailWithRPCrequest(t *testing.T) { assert.Equal(t, 36, len(response.RequestId)) } +// 查询角色列表 func Test_RAM_ListRolesWithRPCrequest(t *testing.T) { client, err := ram.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) assert.Nil(t, err) @@ -145,6 +151,7 @@ func Test_RAM_ListRolesWithRPCrequest(t *testing.T) { assert.Equal(t, 36, len(response.RequestId)) } +// 查询 slb regions func Test_SLB_DescribeRegionsWithRPCrequest(t *testing.T) { client, err := slb.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) assert.Nil(t, err) @@ -156,6 +163,7 @@ func Test_SLB_DescribeRegionsWithRPCrequest(t *testing.T) { assert.True(t, len(response.Regions.Region) > 0) } +// 查询 vpc regions func Test_VPC_DescribeRegionsWithRPCrequest(t *testing.T) { client, err := vpc.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) assert.Nil(t, err) diff --git a/integration/base.go b/integration/base.go index 43dc269e5..9f82173c3 100644 --- a/integration/base.go +++ b/integration/base.go @@ -1,6 +1,7 @@ package integration import ( + "github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors" "github.com/aliyun/alibaba-cloud-sdk-go/services/ram" "github.com/aliyun/alibaba-cloud-sdk-go/services/sts" @@ -32,10 +33,14 @@ var ( var ecsEndpoint = "ecs." + os.Getenv("REGION_ID") + ".aliyuncs.com" +func newRamClient() (*ram.Client, error) { + return ram.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) +} + func createRole(userid string) (name string, arn string, err error) { listRequest := ram.CreateListRolesRequest() listRequest.Scheme = "HTTPS" - client, err := ram.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) + client, err := newRamClient() if err != nil { return } @@ -63,26 +68,39 @@ func createRole(userid string) (name string, arn string, err error) { return } -func createUser() (err error) { - listRequest := ram.CreateListUsersRequest() - listRequest.Scheme = "HTTPS" - client, err := ram.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) +func createUser() (response *ram.CreateUserResponse, err error) { + client, err := newRamClient() if err != nil { return } - listResponse, err := client.ListUsers(listRequest) + createRequest := ram.CreateCreateUserRequest() + createRequest.Scheme = "HTTPS" + createRequest.UserName = username + return client.CreateUser(createRequest) +} + +func ensureUser() (err error) { + client, err := newRamClient() if err != nil { return } - for _, user := range listResponse.Users.User { - if user.UserName == username { - return + + // 查询用户 + getUserRequest := ram.CreateGetUserRequest() + getUserRequest.UserName = username + getUserRequest.Scheme = "HTTPS" + _, err = client.GetUser(getUserRequest) + if err != nil { + if se, ok := err.(*errors.ServerError); ok { + if se.ErrorCode() == "EntityNotExist.User" { + // 如果用户不存在,则创建 + _, err = createUser() + return + } } + return } - createRequest := ram.CreateCreateUserRequest() - createRequest.Scheme = "HTTPS" - createRequest.UserName = username - _, err = client.CreateUser(createRequest) + return } @@ -90,7 +108,7 @@ func createAttachPolicyToUser() error { listRequest := ram.CreateListPoliciesForUserRequest() listRequest.UserName = username listRequest.Scheme = "HTTPS" - client, err := ram.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) + client, err := newRamClient() if err != nil { return err } @@ -119,7 +137,7 @@ func createAttachPolicyToRole() error { listRequest := ram.CreateListPoliciesForRoleRequest() listRequest.RoleName = rolename listRequest.Scheme = "HTTPS" - client, err := ram.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) + client, err := newRamClient() if err != nil { return err } @@ -145,7 +163,7 @@ func createAttachPolicyToRole() error { } func createAccessKey() (id string, secret string, err error) { - client, err := ram.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET")) + client, err := newRamClient() if err != nil { return } @@ -183,7 +201,7 @@ func createAccessKey() (id string, secret string, err error) { } func createAssumeRole() (response *sts.AssumeRoleResponse, err error) { - err = createUser() + err = ensureUser() if err != nil { return } diff --git a/integration/main_test.go b/integration/main_test.go new file mode 100644 index 000000000..abc510134 --- /dev/null +++ b/integration/main_test.go @@ -0,0 +1,105 @@ +package integration + +import ( + "os" + "testing" + + "github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors" + "github.com/aliyun/alibaba-cloud-sdk-go/services/ram" +) + +func TestMain(m *testing.M) { + // 设置测试前的准备工作 + setup() + + // 运行所有测试 + exitCode := m.Run() + + // 清理工作 + teardown() + + // 退出测试程序,exitCode 为0表示成功,非0表示失败 + os.Exit(exitCode) +} + +func setup() { + // 初始化代码 +} + +func teardown() { + // 清理代码 + client, err := newRamClient() + if err != nil { + return + } + // 查询用户 + getUserRequest := ram.CreateGetUserRequest() + getUserRequest.UserName = username + getUserRequest.Scheme = "HTTPS" + _, err = client.GetUser(getUserRequest) + + if err != nil { + if se, ok := err.(*errors.ServerError); ok { + // 如果用户不存在,则返回 + if se.ErrorCode() == "EntityNotExist.User" { + return + } + } + } + + cleanUpUser() + cleanUpRole() +} + +func cleanUpUser() { + client, err := newRamClient() + if err != nil { + return + } + + listPoliciesForUserRequest := ram.CreateListPoliciesForUserRequest() + listPoliciesForUserRequest.UserName = username + + response, err := client.ListPoliciesForUser(listPoliciesForUserRequest) + for _, v := range response.Policies.Policy { + r := ram.CreateDetachPolicyFromUserRequest() + r.UserName = username + r.PolicyName = v.PolicyName + r.PolicyType = v.PolicyType + client.DetachPolicyFromUser(r) + } + + lakr := ram.CreateListAccessKeysRequest() + lakr.UserName = username + accessKeysResponse, err := client.ListAccessKeys(lakr) + for _, v := range accessKeysResponse.AccessKeys.AccessKey { + r := ram.CreateDeleteAccessKeyRequest() + r.UserName = username + r.UserAccessKeyId = v.AccessKeyId + client.DeleteAccessKey(r) + } + + dur := ram.CreateDeleteUserRequest() + dur.UserName = username + _, err = client.DeleteUser(dur) +} + +func cleanUpRole() { + client, err := newRamClient() + if err != nil { + return + } + lpfrr := ram.CreateListPoliciesForRoleRequest() + lpfrr.RoleName = rolename + response, err := client.ListPoliciesForRole(lpfrr) + for _, v := range response.Policies.Policy { + r := ram.CreateDetachPolicyFromRoleRequest() + r.RoleName = rolename + r.PolicyName = v.PolicyName + r.PolicyType = v.PolicyType + client.DetachPolicyFromRole(r) + } + drr := ram.CreateDeleteRoleRequest() + drr.RoleName = rolename + _, err = client.DeleteRole(drr) +}