monitor: add tests

Signed-off-by: huanggze <loganhuang@yunify.com>
This commit is contained in:
zryfish
2020-04-01 17:41:50 +08:00
committed by huanggze
parent 17013d3519
commit 372a52e70e
63 changed files with 5405 additions and 4462 deletions

View File

@@ -1,73 +0,0 @@
// Copyright 2018 The OpenPitrix Authors. All rights reserved.
// Use of this source code is governed by a Apache license
// that can be found in the LICENSE file.
package access
import (
"context"
accountclient "openpitrix.io/openpitrix/pkg/client/account"
"openpitrix.io/openpitrix/pkg/constants"
"openpitrix.io/openpitrix/pkg/logger"
"openpitrix.io/openpitrix/pkg/manager"
"openpitrix.io/openpitrix/pkg/pb"
)
type Client struct {
pb.AccessManagerClient
}
func NewClient() (*Client, error) {
conn, err := manager.NewClient(constants.AccountServiceHost, constants.AccountServicePort)
if err != nil {
return nil, err
}
return &Client{
AccessManagerClient: pb.NewAccessManagerClient(conn),
}, nil
}
func (c *Client) CheckActionBundleUser(ctx context.Context, actionBundleIds []string, userId string) bool {
users, err := c.GetActionBundleUsers(ctx, actionBundleIds)
if err != nil {
return false
}
for _, user := range users {
if user.GetUserId().GetValue() == userId {
return true
}
}
return false
}
func (c *Client) GetActionBundleRoles(ctx context.Context, actionBundleIds []string) ([]*pb.Role, error) {
response, err := c.DescribeRoles(ctx, &pb.DescribeRolesRequest{
ActionBundleId: actionBundleIds,
Status: []string{constants.StatusActive},
})
if err != nil {
logger.Error(ctx, "Describe roles failed: %+v", err)
return nil, err
}
return response.RoleSet, nil
}
func (c *Client) GetActionBundleUsers(ctx context.Context, actionBundleIds []string) ([]*pb.User, error) {
roles, err := c.GetActionBundleRoles(ctx, actionBundleIds)
if err != nil {
return nil, err
}
var roleIds []string
for _, role := range roles {
roleIds = append(roleIds, role.RoleId)
}
accountClient, err := accountclient.NewClient()
if err != nil {
logger.Error(ctx, "Get account manager client failed: %+v", err)
return nil, err
}
return accountClient.GetRoleUsers(ctx, roleIds)
}

View File

@@ -1,142 +0,0 @@
// Copyright 2018 The OpenPitrix Authors. All rights reserved.
// Use of this source code is governed by a Apache license
// that can be found in the LICENSE file.
package account
import (
"context"
"fmt"
"math"
"strings"
"openpitrix.io/openpitrix/pkg/constants"
"openpitrix.io/openpitrix/pkg/logger"
"openpitrix.io/openpitrix/pkg/manager"
"openpitrix.io/openpitrix/pkg/pb"
"openpitrix.io/openpitrix/pkg/util/pbutil"
"openpitrix.io/openpitrix/pkg/util/stringutil"
)
type Client struct {
pb.AccountManagerClient
}
func NewClient() (*Client, error) {
conn, err := manager.NewClient(constants.AccountServiceHost, constants.AccountServicePort)
if err != nil {
return nil, err
}
return &Client{
AccountManagerClient: pb.NewAccountManagerClient(conn),
}, nil
}
func (c *Client) GetUsers(ctx context.Context, userIds []string) ([]*pb.User, error) {
var internalUsers []*pb.User
var noInternalUserIds []string
for _, userId := range userIds {
if stringutil.StringIn(userId, constants.InternalUsers) {
internalUsers = append(internalUsers, &pb.User{
UserId: pbutil.ToProtoString(userId),
})
} else {
noInternalUserIds = append(noInternalUserIds, userId)
}
}
if len(noInternalUserIds) == 0 {
return internalUsers, nil
}
response, err := c.DescribeUsers(ctx, &pb.DescribeUsersRequest{
UserId: noInternalUserIds,
})
if err != nil {
logger.Error(ctx, "Describe users %s failed: %+v", noInternalUserIds, err)
return nil, err
}
if len(response.UserSet) != len(noInternalUserIds) {
logger.Error(ctx, "Describe users %s with return count [%d]", userIds, len(response.UserSet)+len(internalUsers))
return nil, fmt.Errorf("describe users %s with return count [%d]", userIds, len(response.UserSet)+len(internalUsers))
}
response.UserSet = append(response.UserSet, internalUsers...)
return response.UserSet, nil
}
func (c *Client) GetUser(ctx context.Context, userId string) (*pb.User, error) {
users, err := c.GetUsers(ctx, []string{userId})
if err != nil {
return nil, err
}
if len(users) == 0 {
return nil, fmt.Errorf("not found user [%s]", userId)
}
return users[0], nil
}
func (c *Client) GetUserGroupPath(ctx context.Context, userId string) (string, error) {
var userGroupPath string
response, err := c.DescribeUsersDetail(ctx, &pb.DescribeUsersRequest{
UserId: []string{userId},
})
if err != nil || len(response.UserDetailSet) == 0 {
logger.Error(ctx, "Describe user [%s] failed: %+v", userId, err)
return "", err
}
groups := response.UserDetailSet[0].GroupSet
//If one user under different groups, get the highest group path.
minLevel := math.MaxInt32
for _, group := range groups {
level := len(strings.Split(group.GroupPath.GetValue(), "."))
if level < minLevel {
minLevel = level
userGroupPath = group.GetGroupPath().GetValue()
}
}
return userGroupPath, nil
}
func (c *Client) GetRoleUsers(ctx context.Context, roleIds []string) ([]*pb.User, error) {
response, err := c.DescribeUsers(ctx, &pb.DescribeUsersRequest{
RoleId: roleIds,
Status: []string{constants.StatusActive},
})
if err != nil {
logger.Error(ctx, "Describe users failed: %+v", err)
return nil, err
}
return response.UserSet, nil
}
func (c *Client) GetIsvFromUser(ctx context.Context, userId string) (*pb.User, error) {
groupPath, err := c.GetUserGroupPath(ctx, userId)
if err != nil {
return nil, err
}
rootGroupId := strings.Split(groupPath, ".")[0]
describeUsersResponse, err := c.DescribeUsers(ctx, &pb.DescribeUsersRequest{
RootGroupId: []string{rootGroupId},
Status: []string{constants.StatusActive},
RoleId: []string{constants.RoleIsv},
})
if err != nil {
logger.Error(ctx, "Failed to describe users: %+v", err)
return nil, err
}
if len(describeUsersResponse.UserSet) == 0 {
logger.Error(ctx, "Isv not exist with root group id [%s]", rootGroupId)
return nil, fmt.Errorf("isv not exist")
}
return describeUsersResponse.UserSet[0], nil
}

View File

@@ -1,35 +0,0 @@
// Copyright 2018 The OpenPitrix Authors. All rights reserved.
// Use of this source code is governed by a Apache license
// that can be found in the LICENSE file.
package client
import (
"context"
accessclient "openpitrix.io/openpitrix/pkg/client/access"
"openpitrix.io/openpitrix/pkg/pb"
"openpitrix.io/openpitrix/pkg/sender"
"openpitrix.io/openpitrix/pkg/util/ctxutil"
)
func SetSystemUserToContext(ctx context.Context) context.Context {
return ctxutil.ContextWithSender(ctx, sender.GetSystemSender())
}
func SetUserToContext(ctx context.Context, userId, apiMethod string) (context.Context, error) {
accessClient, err := accessclient.NewClient()
if err != nil {
return nil, err
}
response, err := accessClient.CanDo(ctx, &pb.CanDoRequest{
UserId: userId,
ApiMethod: apiMethod,
})
if err != nil {
return nil, err
}
userSender := sender.New(response.UserId, sender.OwnerPath(response.OwnerPath), sender.OwnerPath(response.AccessPath))
return ctxutil.ContextWithSender(ctx, userSender), nil
}