Konstantin Lebedev
4 years ago
4 changed files with 217 additions and 36 deletions
-
1weed/iamapi/iamapi_handlers.go
-
43weed/iamapi/iamapi_management_handlers.go
-
46weed/iamapi/iamapi_server.go
-
157weed/iamapi/iamapi_test.go
@ -0,0 +1,157 @@ |
|||
package iamapi |
|||
|
|||
import ( |
|||
"encoding/xml" |
|||
"github.com/aws/aws-sdk-go/aws" |
|||
"github.com/aws/aws-sdk-go/aws/session" |
|||
"github.com/aws/aws-sdk-go/service/iam" |
|||
"github.com/chrislusf/seaweedfs/weed/pb/iam_pb" |
|||
"github.com/gorilla/mux" |
|||
"github.com/stretchr/testify/assert" |
|||
"net/http" |
|||
"net/http/httptest" |
|||
"testing" |
|||
) |
|||
|
|||
var S3config iam_pb.S3ApiConfiguration |
|||
var GetS3ApiConfiguration func(s3cfg *iam_pb.S3ApiConfiguration) (err error) |
|||
var PutS3ApiConfiguration func(s3cfg *iam_pb.S3ApiConfiguration) (err error) |
|||
|
|||
type iamS3ApiConfigureMock struct{} |
|||
|
|||
func (iam iamS3ApiConfigureMock) GetS3ApiConfiguration(s3cfg *iam_pb.S3ApiConfiguration) (err error) { |
|||
s3cfg = &S3config |
|||
return nil |
|||
} |
|||
|
|||
func (iam iamS3ApiConfigureMock) PutS3ApiConfiguration(s3cfg *iam_pb.S3ApiConfiguration) (err error) { |
|||
S3config = *s3cfg |
|||
return nil |
|||
} |
|||
|
|||
var a = IamApiServer{} |
|||
|
|||
func TestCreateUser(t *testing.T) { |
|||
userName := aws.String("Test") |
|||
params := &iam.CreateUserInput{UserName: userName} |
|||
req, _ := iam.New(session.New()).CreateUserRequest(params) |
|||
_ = req.Build() |
|||
out := CreateUserResponse{} |
|||
response, err := executeRequest(req.HTTPRequest, out) |
|||
assert.Equal(t, nil, err) |
|||
assert.Equal(t, http.StatusOK, response.Code) |
|||
//assert.Equal(t, out.XMLName, "lol")
|
|||
} |
|||
|
|||
func TestListUsers(t *testing.T) { |
|||
params := &iam.ListUsersInput{} |
|||
req, _ := iam.New(session.New()).ListUsersRequest(params) |
|||
_ = req.Build() |
|||
out := ListUsersResponse{} |
|||
response, err := executeRequest(req.HTTPRequest, out) |
|||
assert.Equal(t, nil, err) |
|||
assert.Equal(t, http.StatusOK, response.Code) |
|||
} |
|||
|
|||
func TestListAccessKeys(t *testing.T) { |
|||
svc := iam.New(session.New()) |
|||
params := &iam.ListAccessKeysInput{} |
|||
req, _ := svc.ListAccessKeysRequest(params) |
|||
_ = req.Build() |
|||
out := ListAccessKeysResponse{} |
|||
response, err := executeRequest(req.HTTPRequest, out) |
|||
assert.Equal(t, nil, err) |
|||
assert.Equal(t, http.StatusOK, response.Code) |
|||
} |
|||
|
|||
func TestDeleteUser(t *testing.T) { |
|||
userName := aws.String("Test") |
|||
params := &iam.DeleteUserInput{UserName: userName} |
|||
req, _ := iam.New(session.New()).DeleteUserRequest(params) |
|||
_ = req.Build() |
|||
out := DeleteUserResponse{} |
|||
response, err := executeRequest(req.HTTPRequest, out) |
|||
assert.Equal(t, nil, err) |
|||
assert.Equal(t, http.StatusNotFound, response.Code) |
|||
} |
|||
|
|||
func TestGetUser(t *testing.T) { |
|||
userName := aws.String("Test") |
|||
params := &iam.GetUserInput{UserName: userName} |
|||
req, _ := iam.New(session.New()).GetUserRequest(params) |
|||
_ = req.Build() |
|||
out := GetUserResponse{} |
|||
response, err := executeRequest(req.HTTPRequest, out) |
|||
assert.Equal(t, nil, err) |
|||
assert.Equal(t, http.StatusNotFound, response.Code) |
|||
} |
|||
|
|||
// Todo flat statement
|
|||
func TestCreatePolicy(t *testing.T) { |
|||
params := &iam.CreatePolicyInput{ |
|||
PolicyName: aws.String("S3-read-only-example-bucket"), |
|||
PolicyDocument: aws.String(` |
|||
{ |
|||
"Version": "2012-10-17", |
|||
"Statement": [ |
|||
{ |
|||
"Effect": "Allow", |
|||
"Action": [ |
|||
"s3:Get*", |
|||
"s3:List*" |
|||
], |
|||
"Resource": [ |
|||
"arn:aws:s3:::EXAMPLE-BUCKET", |
|||
"arn:aws:s3:::EXAMPLE-BUCKET/*" |
|||
] |
|||
} |
|||
] |
|||
}`), |
|||
} |
|||
req, _ := iam.New(session.New()).CreatePolicyRequest(params) |
|||
_ = req.Build() |
|||
out := CreatePolicyResponse{} |
|||
response, err := executeRequest(req.HTTPRequest, out) |
|||
assert.Equal(t, nil, err) |
|||
assert.Equal(t, http.StatusOK, response.Code) |
|||
} |
|||
|
|||
func TestPutUserPolicy(t *testing.T) { |
|||
userName := aws.String("Test") |
|||
params := &iam.PutUserPolicyInput{ |
|||
UserName: userName, |
|||
PolicyName: aws.String("S3-read-only-example-bucket"), |
|||
PolicyDocument: aws.String( |
|||
`{ |
|||
"Version": "2012-10-17", |
|||
"Statement": [ |
|||
{ |
|||
"Effect": "Allow", |
|||
"Action": [ |
|||
"s3:Get*", |
|||
"s3:List*" |
|||
], |
|||
"Resource": [ |
|||
"arn:aws:s3:::EXAMPLE-BUCKET", |
|||
"arn:aws:s3:::EXAMPLE-BUCKET/*" |
|||
] |
|||
} |
|||
] |
|||
}`), |
|||
} |
|||
req, _ := iam.New(session.New()).PutUserPolicyRequest(params) |
|||
_ = req.Build() |
|||
out := PutUserPolicyResponse{} |
|||
response, err := executeRequest(req.HTTPRequest, out) |
|||
assert.Equal(t, nil, err) |
|||
assert.Equal(t, http.StatusOK, response.Code) |
|||
} |
|||
|
|||
func executeRequest(req *http.Request, v interface{}) (*httptest.ResponseRecorder, error) { |
|||
rr := httptest.NewRecorder() |
|||
apiRouter := mux.NewRouter().SkipClean(true) |
|||
a.s3ApiConfig = iamS3ApiConfigureMock{} |
|||
apiRouter.Path("/").Methods("POST").HandlerFunc(a.DoActions) |
|||
apiRouter.ServeHTTP(rr, req) |
|||
return rr, xml.Unmarshal(rr.Body.Bytes(), &v) |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue