Skip to content

Commit e172621

Browse files
YangSen-qnYangSen-qn
and
YangSen-qn
authored
Fix: delete group policy & bucket v4 (#158)
* fix: DeleteGroupPolicies * buckets v4 * change test case style --------- Co-authored-by: YangSen-qn <[email protected]>
1 parent 90c99e3 commit e172621

File tree

5 files changed

+203
-5
lines changed

5 files changed

+203
-5
lines changed

iam/apis/api_delete_group_policies.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func (iam *Iam) DeleteGroupPolicies(ctx context.Context, request *DeleteGroupPol
7575
if err != nil {
7676
return nil, err
7777
}
78-
req := httpclient.Request{Method: "PATCH", ServiceNames: serviceNames, Path: path, RawQuery: rawQuery, Endpoints: options.OverwrittenEndpoints, Region: options.OverwrittenRegion, Interceptors: []httpclient.Interceptor{uplogInterceptor}, AuthType: auth.TokenQiniu, Credentials: innerRequest.Credentials, RequestBody: body, OnRequestProgress: options.OnRequestProgress}
78+
req := httpclient.Request{Method: "DELETE", ServiceNames: serviceNames, Path: path, RawQuery: rawQuery, Endpoints: options.OverwrittenEndpoints, Region: options.OverwrittenRegion, Interceptors: []httpclient.Interceptor{uplogInterceptor}, AuthType: auth.TokenQiniu, Credentials: innerRequest.Credentials, RequestBody: body, OnRequestProgress: options.OnRequestProgress}
7979
if options.OverwrittenEndpoints == nil && options.OverwrittenRegion == nil && iam.client.GetRegions() == nil {
8080
bucketHosts := httpclient.DefaultBucketHosts()
8181

+187
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
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+
}

storage/bucket_test.go

+12-1
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,23 @@ func TestBuckets(t *testing.T) {
127127
// Test get bucket list v4
128128
func TestBucketsV4(t *testing.T) {
129129
var input BucketV4Input
130-
for {
130+
for i := 0; ; i++ {
131131
output, err := bucketManager.BucketsV4(&input)
132132
if err != nil {
133133
t.Fatalf("Buckets() error, %s", err)
134134
}
135135

136+
// 测试账号 bucket 较多,此处只测试第一页
137+
// 如果测试账号 bucket 较少,未分页,则移除此处验证
138+
if i == 0 {
139+
if !output.IsTruncated {
140+
t.Fatalf("Buckets() IsTruncated error, %s", err)
141+
}
142+
if len(output.NextMarker) == 0 {
143+
t.Fatalf("Buckets() IsTruncated error, %s", err)
144+
}
145+
}
146+
136147
for _, bucket := range output.Buckets {
137148
t.Log(bucket)
138149

storagev2/apis/get_buckets_v4/api.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ type BucketsV4 = []BucketV4
7474
// 返回所有存储空间结果
7575
type BucketsResultV4 = Response
7676
type jsonResponse struct {
77-
NextMarker string `json:"nextMarker"` // 下一页开始的空间标识
78-
IsTruncated bool `json:"isTruncated"` // 是否所有的结果都已经返回
77+
NextMarker string `json:"next_marker"` // 下一页开始的空间标识
78+
IsTruncated bool `json:"is_truncated"` // 是否所有的结果都已经返回
7979
Buckets BucketsV4 `json:"buckets"`
8080
}
8181

0 commit comments

Comments
 (0)