|
| 1 | +//go:build integration |
| 2 | +// +build integration |
| 3 | + |
| 4 | +package apis |
| 5 | + |
| 6 | +import ( |
| 7 | + "context" |
| 8 | + "os" |
| 9 | + "testing" |
| 10 | + |
| 11 | + "github.com/qiniu/go-sdk/v7/auth" |
| 12 | + createpolicy "github.com/qiniu/go-sdk/v7/iam/apis/create_policy" |
| 13 | + httpclient "github.com/qiniu/go-sdk/v7/storagev2/http_client" |
| 14 | + "github.com/stretchr/testify/require" |
| 15 | +) |
| 16 | + |
| 17 | +const ( |
| 18 | + kGroupAlias = "GoIamGroup" |
| 19 | + kPolicyAlias = "GoIamPolicy" |
| 20 | + kPolicyAlias2 = "GoIamPolicy2" |
| 21 | +) |
| 22 | + |
| 23 | +var ( |
| 24 | + testAK = os.Getenv("accessKey") |
| 25 | + testSK = os.Getenv("secretKey") |
| 26 | +) |
| 27 | + |
| 28 | +func TestUserGroupsPolicyApi(t *testing.T) { |
| 29 | + |
| 30 | + ctx := context.Background() |
| 31 | + iamClient := NewIam(&httpclient.Options{ |
| 32 | + Credentials: auth.New(testAK, testSK), |
| 33 | + }) |
| 34 | + |
| 35 | + // 清理环境 |
| 36 | + _, _ = iamClient.DeleteGroup(ctx, &DeleteGroupRequest{ |
| 37 | + Alias: kGroupAlias, |
| 38 | + }, nil) |
| 39 | + |
| 40 | + _, _ = iamClient.DeletePolicy(ctx, &DeletePolicyRequest{ |
| 41 | + Alias: kPolicyAlias, |
| 42 | + }, nil) |
| 43 | + |
| 44 | + _, _ = iamClient.DeletePolicy(ctx, &DeletePolicyRequest{ |
| 45 | + Alias: kPolicyAlias2, |
| 46 | + }, nil) |
| 47 | + |
| 48 | + // 创建组 |
| 49 | + createGroupResponse, err := iamClient.CreateGroup(ctx, &CreateGroupRequest{ |
| 50 | + Alias: kGroupAlias, |
| 51 | + Description: kGroupAlias + "desc", |
| 52 | + }, nil) |
| 53 | + require.NoError(t, err, "1. create group failed") |
| 54 | + |
| 55 | + require.NotNil(t, createGroupResponse, "1.1 create group response is nil") |
| 56 | + require.True(t, len(createGroupResponse.Data.Id) > 0, "1.2 create group response Id is nil") |
| 57 | + require.True(t, createGroupResponse.Data.RootUid > 0, "1.3 create group response RootUid is nil") |
| 58 | + require.True(t, len(createGroupResponse.Data.Alias) > 0, "1.4 create group response Alias is nil") |
| 59 | + require.True(t, len(createGroupResponse.Data.Description) > 0, "1.5 create group response Description is nil") |
| 60 | + require.True(t, len(createGroupResponse.Data.CreatedAt) > 0, "1.6 create group response CreatedAt is nil") |
| 61 | + require.True(t, len(createGroupResponse.Data.UpdatedAt) > 0, "1.7 create group response UpdatedAt is nil") |
| 62 | + |
| 63 | + // 创建策略 |
| 64 | + policyDesc := kPolicyAlias + "Desc" |
| 65 | + policyAction := "cdn/DownloadCDNLog" |
| 66 | + policyEffect := "Allow" |
| 67 | + policyResource := "qrn:product:::/a/b/c.txt" |
| 68 | + createPolicyResponse, err := iamClient.CreatePolicy(ctx, &CreatePolicyRequest{ |
| 69 | + Alias: kPolicyAlias, |
| 70 | + Description: policyDesc, |
| 71 | + EditType: 1, |
| 72 | + Statement: []createpolicy.CreateStatement{ |
| 73 | + { |
| 74 | + Actions: []string{policyAction}, |
| 75 | + Resources: []string{policyResource}, |
| 76 | + Effect: policyEffect, |
| 77 | + }, |
| 78 | + }, |
| 79 | + }, nil) |
| 80 | + require.NoError(t, err, "2. create policy failed") |
| 81 | + require.NotNil(t, createPolicyResponse, "2.1 create policy response is nil") |
| 82 | + require.True(t, len(createPolicyResponse.Data.Id) > 0, "2.2 create policy response Id is nil") |
| 83 | + require.True(t, createPolicyResponse.Data.RootUid > 0, "2.3 create policy response RootUid is nil") |
| 84 | + require.True(t, len(createPolicyResponse.Data.Alias) > 0, "2.4 create policy response Alias is nil") |
| 85 | + require.True(t, len(createPolicyResponse.Data.Description) > 0, "2.5 create policy response Description is nil") |
| 86 | + require.True(t, len(createPolicyResponse.Data.CreatedAt) > 0, "2.6 create policy response CreatedAt is nil") |
| 87 | + require.True(t, len(createPolicyResponse.Data.UpdatedAt) > 0, "2.7 create policy response UpdatedAt is nil") |
| 88 | + require.True(t, len(createPolicyResponse.Data.Statement) > 0, "2.8 create policy response Statement is nil") |
| 89 | + require.True(t, len(createPolicyResponse.Data.Statement[0].Actions) > 0, "2.9 create policy response Statement Actions is nil") |
| 90 | + require.True(t, len(createPolicyResponse.Data.Statement[0].Resources) > 0, "2.10 create policy response Statement Resources is nil") |
| 91 | + require.True(t, len(createPolicyResponse.Data.Statement[0].Effect) > 0, "2.11 create policy response Statement Effect is nil") |
| 92 | + |
| 93 | + // 创建策略 2 |
| 94 | + policyDesc = kPolicyAlias2 + "Desc" |
| 95 | + createPolicyResponse, err = iamClient.CreatePolicy(ctx, &CreatePolicyRequest{ |
| 96 | + Alias: kPolicyAlias2, |
| 97 | + Description: policyDesc, |
| 98 | + EditType: 1, |
| 99 | + Statement: []createpolicy.CreateStatement{ |
| 100 | + { |
| 101 | + Actions: []string{policyAction}, |
| 102 | + Resources: []string{policyResource}, |
| 103 | + Effect: policyEffect, |
| 104 | + }, |
| 105 | + }, |
| 106 | + }, nil) |
| 107 | + require.NoError(t, err, "3. create policy failed") |
| 108 | + require.NotNil(t, createPolicyResponse, "3.1 create policy response is nil") |
| 109 | + require.True(t, len(createPolicyResponse.Data.Id) > 0, "3.2 create policy response Id is nil") |
| 110 | + require.True(t, createPolicyResponse.Data.RootUid > 0, "3.3 create policy response RootUid is nil") |
| 111 | + require.True(t, len(createPolicyResponse.Data.Alias) > 0, "3.4 create policy response Alias is nil") |
| 112 | + require.True(t, len(createPolicyResponse.Data.Description) > 0, "3.5 create policy response Description is nil") |
| 113 | + require.True(t, len(createPolicyResponse.Data.CreatedAt) > 0, "3.6 create policy response CreatedAt is nil") |
| 114 | + require.True(t, len(createPolicyResponse.Data.UpdatedAt) > 0, "3.7 create policy response UpdatedAt is nil") |
| 115 | + require.True(t, len(createPolicyResponse.Data.Statement) > 0, "3.8 create policy response Statement is nil") |
| 116 | + require.True(t, len(createPolicyResponse.Data.Statement[0].Actions) > 0, "3.9 create policy response Statement Actions is nil") |
| 117 | + require.True(t, len(createPolicyResponse.Data.Statement[0].Resources) > 0, "3.10 create policy response Statement Resources is nil") |
| 118 | + require.True(t, len(createPolicyResponse.Data.Statement[0].Effect) > 0, "3.11 create policy response Statement Effect is nil") |
| 119 | + |
| 120 | + // 分组添加策略 |
| 121 | + _, err = iamClient.ModifyGroupPolicies(ctx, &ModifyGroupPoliciesRequest{ |
| 122 | + Alias: kGroupAlias, |
| 123 | + PolicyAliases: []string{kPolicyAlias}, |
| 124 | + }, nil) |
| 125 | + if err != nil { |
| 126 | + t.Error("4. modify group policies failed", err) |
| 127 | + return |
| 128 | + } |
| 129 | + |
| 130 | + // 获取分组策略信息 |
| 131 | + getGroupPoliciesResponse, err := iamClient.GetGroupPolicies(ctx, &GetGroupPoliciesRequest{ |
| 132 | + Alias: kGroupAlias, |
| 133 | + }, nil) |
| 134 | + require.NoError(t, err, "5. get group policies failed") |
| 135 | + require.NotNil(t, getGroupPoliciesResponse, "5. get group policies response is nil") |
| 136 | + require.True(t, getGroupPoliciesResponse.Data.Count == 1, "5.1 get group policies response Data.Count is invalid") |
| 137 | + require.True(t, len(getGroupPoliciesResponse.Data.List) == 1, "5.2 get group policies response Data.List is invalid") |
| 138 | + |
| 139 | + addPolicy := getGroupPoliciesResponse.Data.List[0] |
| 140 | + require.True(t, len(addPolicy.Id) > 0, "5.3 get group policies response Data.List[0].Id is invalid") |
| 141 | + require.True(t, addPolicy.Alias == kPolicyAlias, "5.3 get group policies response Data.List[0].Alias is invalid") |
| 142 | + require.True(t, len(addPolicy.Description) > 0, "5.4 get group policies response Data.List[0].Description is invalid") |
| 143 | + require.True(t, len(addPolicy.CreatedAt) > 0, "5.5 get group policies response Data.List[0].CreatedAt is invalid") |
| 144 | + require.True(t, len(addPolicy.UpdatedAt) > 0, "5.6 get group policies response Data.List[0].UpdatedAt is invalid") |
| 145 | + require.True(t, len(addPolicy.Statement) == 1, "5.7 get group policies response Data.List[0].Statement is invalid") |
| 146 | + require.True(t, len(addPolicy.Statement[0].Actions) == 1, "5.8 get group policies response Data.List[0].Statement.Actions is invalid") |
| 147 | + require.True(t, addPolicy.Statement[0].Actions[0] == policyAction, "5.9 get group policies response Data.List[0].Statement.Actions[0] is invalid") |
| 148 | + require.True(t, len(addPolicy.Statement[0].Resources) == 1, "5.10 get group policies response Data.List[0].Statement.Resources is invalid") |
| 149 | + require.True(t, addPolicy.Statement[0].Resources[0] == policyResource, "5.9 get group policies response Data.List[0].Statement.Resources[0] is invalid") |
| 150 | + require.True(t, addPolicy.Statement[0].Effect == policyEffect, "5.12 get group policies response Data.List[0].Statement[0].Effect is invalid") |
| 151 | + |
| 152 | + // 更新分组策略 |
| 153 | + _, err = iamClient.ModifyGroupPolicies(ctx, &ModifyGroupPoliciesRequest{ |
| 154 | + Alias: kGroupAlias, |
| 155 | + PolicyAliases: []string{kGroupAlias, kPolicyAlias2}, |
| 156 | + }, nil) |
| 157 | + require.NoError(t, err, "6. modify group policies failed") |
| 158 | + |
| 159 | + // 获取分组策略信息 |
| 160 | + getGroupPoliciesResponse, err = iamClient.GetGroupPolicies(ctx, &GetGroupPoliciesRequest{ |
| 161 | + Alias: kGroupAlias, |
| 162 | + }, nil) |
| 163 | + require.NoError(t, err, "7. get group policies failed") |
| 164 | + require.NotNil(t, getGroupPoliciesResponse, "7. get group policies response is nil") |
| 165 | + require.True(t, getGroupPoliciesResponse.Data.Count == 2, "7.1 get group policies response Data.Count is invalid") |
| 166 | + require.True(t, len(getGroupPoliciesResponse.Data.List) == 2, "7.2 get group policies response Data.List is invalid") |
| 167 | + |
| 168 | + for _, policy := range getGroupPoliciesResponse.Data.List { |
| 169 | + require.True(t, policy.Alias == kPolicyAlias || policy.Alias == kPolicyAlias2, "7.3 get group policies response Data.List is invalid") |
| 170 | + } |
| 171 | + |
| 172 | + // 删除分组策略 |
| 173 | + _, err = iamClient.DeleteGroupPolicies(ctx, &DeleteGroupPoliciesRequest{ |
| 174 | + Alias: kGroupAlias, |
| 175 | + PolicyAliases: []string{kPolicyAlias}, |
| 176 | + }, nil) |
| 177 | + require.NoError(t, err, "8. modify group policies failed") |
| 178 | + |
| 179 | + // 获取分组策略信息 |
| 180 | + getGroupPoliciesResponse, err = iamClient.GetGroupPolicies(ctx, &GetGroupPoliciesRequest{ |
| 181 | + Alias: kGroupAlias, |
| 182 | + }, nil) |
| 183 | + require.NoError(t, err, "9. get group policies failed") |
| 184 | + require.NotNil(t, getGroupPoliciesResponse, "9.1 get group policies response is nil") |
| 185 | + require.True(t, getGroupPoliciesResponse.Data.Count == 1, "9.2 get group policies response Data.List is invalid") |
| 186 | + require.True(t, getGroupPoliciesResponse.Data.List[0].Alias == kPolicyAlias2, "9.3 get group policies response Data.List is invalid") |
| 187 | +} |
0 commit comments