新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

Commit f05c1524 authored by guanghonglu's avatar guanghonglu

add user test

No related merge requests found
......@@ -16,7 +16,8 @@ func EmitUserCreatedEvent(userInfoBytes []byte) {
// EmitUserTypeChangedEvent converts EventUserTypeChanged to a string array and emits the event
func EmitUserTypeChangedEvent(userAddress string, newType types.UserType) {
sdk.Instance.EmitEvent(_const.EventUserTypeChanged, []string{userAddress, string(rune(newType))})
newTypeStr := strconv.FormatInt(int64(newType), 10)
sdk.Instance.EmitEvent(_const.EventUserTypeChanged, []string{userAddress, newTypeStr})
}
// EmitUserPermissionsChangedEvent converts EventUserPermissionsChanged to a string array and emits the event
......
......@@ -254,9 +254,12 @@ func (a *IDA) RegisterUser(name string, createdAt time.Time, enterpriseType type
if err != nil {
return code.ErrorResp(code.ErrInternalDataReadFailed, fmt.Sprintf("failed to getstate[%s %s], err: %v", _const.KeyRegisterCount, "", err))
}
registerCount, err := strconv.Atoi(registerCountStr)
if err != nil {
return code.ErrorResp(code.ErrInternalAtoiFailed, fmt.Sprintf("failed to registerCount %v to int: %v", registerCountStr, err))
registerCount := 0
if len(registerCountStr) != 0 {
registerCount, err = strconv.Atoi(registerCountStr)
if err != nil {
return code.ErrorResp(code.ErrInternalAtoiFailed, fmt.Sprintf("failed to registerCount[%v] to int: %v", registerCountStr, err))
}
}
newRegisterCountBytes, err := json.Marshal(registerCount + 1)
if err != nil {
......@@ -399,8 +402,10 @@ func (a *IDA) QueryAuthorizedUsers(userAddress string) protogo.Response {
return *errResp
}
authorizeeLists := make([]string, 0, len(userInfo.Authorizees))
for key := range userInfo.Authorizees {
authorizeeLists = append(authorizeeLists, key)
for key, exist := range userInfo.Authorizees {
if exist {
authorizeeLists = append(authorizeeLists, key)
}
}
listsBytes, err := json.Marshal(authorizeeLists)
if err != nil {
......
package main
import (
"chainmaker.org/chainmaker/common/v2/json"
_const "chainmaker.org/chainmaker/ida/contract-ida/const"
"chainmaker.org/chainmaker/ida/contract-ida/types"
"chainmaker.org/chainmaker/ida/contract-ida/util"
chainmaker_sdk_go "chainmaker.org/chainmaker/sdk-go/v2"
"github.com/stretchr/testify/require"
"strconv"
"testing"
"chainmaker.org/chainmaker/common/v2/json"
_const "chainmaker.org/chainmaker/ida/contract-ida/const"
"chainmaker.org/chainmaker/ida/contract-ida/types"
"chainmaker.org/chainmaker/ida/contract-ida/util"
chainmaker_sdk_go "chainmaker.org/chainmaker/sdk-go/v2"
"fmt"
"github.com/stretchr/testify/require"
"strconv"
"testing"
"time"
)
const (
adminSdkConfigPath = "../testdata/sdk_config_pk_admin.yml"
clientSdkConfigPath = "../testdata/sdk_config_pk_user.yml"
contractFilePath = "../testdata/ida.7z"
testContractName = "test_contract4"
testContractVersion = "0.0.1"
testNewContractVersion = "0.0.2"
testAdminKeyPath = "../testdata/admin.key"
testUserKeyPath = "../testdata/user.key"
testUserName = "jack"
adminSdkConfigPath = "../testdata/sdk_config_pk_admin.yml"
clientSdkConfigPath = "../testdata/sdk_config_pk_user.yml"
contractFilePath = "../testdata/ida.7z"
testContractNamePrefix = "test_contract"
testContractVersion = "0.0.1"
testNewContractVersion = "0.0.2"
testAdminKeyPath = "../testdata/admin.key"
testUserKeyPath = "../testdata/user.key"
testUserName = "jack"
)
func TestAll(t *testing.T) {
// create admin client
adminClient, err := chainmaker_sdk_go.NewChainClient(chainmaker_sdk_go.WithConfPath(adminSdkConfigPath))
require.Nil(t, err)
// create contract
resp, err := createContract(adminClient, testContractName, testContractVersion, contractFilePath, testAdminKeyPath)
adminInfoBytes := []byte(resp.ContractResult.ContractEvent[0].EventData[0])
adminInfo := &types.UserInfo{}
err = json.Unmarshal(adminInfoBytes, adminInfo)
require.Nil(t, err)
// query contract version
resp, err = invokeContract(adminClient, testContractName, _const.MethodQueryContractVersion, query_contract,
map[string]string{})
require.Nil(t, err)
require.Equal(t, "0", string(resp.ContractResult.Result))
// upgrade contract
_, err = upgradeContract(adminClient, testContractName, testNewContractVersion, contractFilePath, testAdminKeyPath)
require.Nil(t, err)
// query contract version
resp, err = invokeContract(adminClient, testContractName, _const.MethodQueryContractVersion, query_contract,
map[string]string{})
require.Nil(t, err)
require.Equal(t, "1", string(resp.ContractResult.Result))
// create user client
client, err := chainmaker_sdk_go.NewChainClient(chainmaker_sdk_go.WithConfPath(clientSdkConfigPath))
require.Nil(t, err)
// register user
resp, err = invokeContract(client, testContractName, _const.MethodRegisterUser, invoke_contract,
map[string]string{
"name": "jack",
"createdAt": "2006-01-02T15:04:05Z07:00",
"creditCode": "12232134",
"enterpriseType": "0",
})
require.Nil(t, err)
userInfoBytes := []byte(resp.ContractResult.ContractEvent[0].EventData[0])
userInfo := &types.UserInfo{}
err = json.Unmarshal(userInfoBytes, userInfo)
require.Nil(t, err)
require.Equal(t, testUserName, userInfo.Name)
// query user
resp, err = invokeContract(client, testContractName, _const.MethodQueryUser, query_contract,
map[string]string{
_const.ParamUserAddress: userInfo.Address,
})
require.Nil(t, err)
queryResp := resp.ContractResult.Result
queryUserInfo := &types.UserInfo{}
err = json.Unmarshal(queryResp, queryUserInfo)
require.Nil(t, err)
require.Equal(t, testUserName, queryUserInfo.Name)
initialPerm := util.NewUserPermissions(true, false, false)
require.Equal(t, initialPerm, queryUserInfo.UserPermission)
// change user type
adminTypeStr := strconv.FormatInt(int64(types.Admin), 10)
resp, err = invokeContract(client, testContractName, _const.MethodChangeUserType, invoke_contract,
map[string]string{
_const.ParamUserType: adminTypeStr,
_const.ParamUserAddress: userInfo.Address,
})
require.Nil(t, err)
require.Equal(t, adminTypeStr, resp.ContractResult.ContractEvent[0].EventData[1])
// change user permissions
allPermStr := strconv.FormatInt(int64(util.NewUserPermissions(true, true, true)), 10)
resp, err = invokeContract(client, testContractName, _const.MethodChangeUserPermissions, invoke_contract,
map[string]string{
_const.ParamUserPermission: allPermStr,
_const.ParamUserAddress: userInfo.Address,
})
require.Nil(t, err)
require.Equal(t, allPermStr, resp.ContractResult.ContractEvent[0].EventData[1])
// authorize user
resp, err = invokeContract(client, testContractName, _const.MethodAuthorizeUser, invoke_contract,
map[string]string{
_const.ParamUserAddress: adminInfo.Address,
})
require.Nil(t, err)
require.Equal(t, userInfo.Address, resp.ContractResult.ContractEvent[0].EventData[0])
require.Equal(t, adminInfo.Address, resp.ContractResult.ContractEvent[0].EventData[1])
resp, err = invokeContract(client, testContractName, _const.MethodQueryAuthorizedUsers, query_contract,
map[string]string{
_const.ParamUserAddress: userInfo.Address,
})
authorizeeLists := make([]string, 0)
err = json.Unmarshal(resp.ContractResult.Result, authorizeeLists)
require.Nil(t, err)
require.Nil(t, 1, len(authorizeeLists))
require.Nil(t, adminInfo.Address, authorizeeLists[0])
// deAuthorize user
resp, err = invokeContract(client, testContractName, _const.MethodDeAuthorizeUser, invoke_contract,
map[string]string{
_const.ParamUserAddress: adminInfo.Address,
})
require.Nil(t, err)
require.Equal(t, userInfo.Address, resp.ContractResult.ContractEvent[0].EventData[0])
require.Equal(t, adminInfo.Address, resp.ContractResult.ContractEvent[0].EventData[1])
resp, err = invokeContract(client, testContractName, _const.MethodQueryAuthorizedUsers, query_contract,
map[string]string{
_const.ParamUserAddress: userInfo.Address,
})
authorizeeLists = make([]string, 0)
err = json.Unmarshal(resp.ContractResult.Result, authorizeeLists)
require.Nil(t, err)
require.Nil(t, 0, len(authorizeeLists))
// query user balance
resp, err = invokeContract(client, testContractName, _const.MethodQueryUserBalance, query_contract,
map[string]string{
_const.ParamUserAddress: userInfo.Address,
})
require.Nil(t, err)
require.Nil(t, "0", string(resp.ContractResult.Result))
}
testContractName := testContractNamePrefix + fmt.Sprintf("_%d", time.Now().UnixNano()/int64(time.Millisecond))
// create admin client
adminClient, err := chainmaker_sdk_go.NewChainClient(chainmaker_sdk_go.WithConfPath(adminSdkConfigPath))
require.Nil(t, err)
// create contract
resp, err := createContract(adminClient, testContractName, testContractVersion, contractFilePath, testAdminKeyPath)
adminInfoBytes := []byte(resp.ContractResult.ContractEvent[0].EventData[0])
adminInfo := &types.UserInfo{}
err = json.Unmarshal(adminInfoBytes, adminInfo)
require.Nil(t, err)
// query contract version
resp, err = invokeContract(adminClient, testContractName, _const.MethodQueryContractVersion, query_contract,
map[string]string{})
require.Nil(t, err)
require.Equal(t, "0", string(resp.ContractResult.Result))
// upgrade contract
_, err = upgradeContract(adminClient, testContractName, testNewContractVersion, contractFilePath, testAdminKeyPath)
require.Nil(t, err)
// query contract version
resp, err = invokeContract(adminClient, testContractName, _const.MethodQueryContractVersion, query_contract,
map[string]string{})
require.Nil(t, err)
require.Equal(t, "1", string(resp.ContractResult.Result))
// create user client
client, err := chainmaker_sdk_go.NewChainClient(chainmaker_sdk_go.WithConfPath(clientSdkConfigPath))
require.Nil(t, err)
// register user
resp, err = invokeContract(client, testContractName, _const.MethodRegisterUser, invoke_contract,
map[string]string{
"name": "jack",
"createdAt": "2023-03-29T22:07:00+08:00",
"creditCode": "12232134",
"enterpriseType": "0",
})
require.Nil(t, err)
userInfoBytes := []byte(resp.ContractResult.ContractEvent[0].EventData[0])
userInfo := &types.UserInfo{}
err = json.Unmarshal(userInfoBytes, userInfo)
require.Nil(t, err)
require.Equal(t, testUserName, userInfo.Name)
// query user
resp, err = invokeContract(client, testContractName, _const.MethodQueryUser, query_contract,
map[string]string{
_const.ParamUserAddress: userInfo.Address,
})
require.Nil(t, err)
queryResp := resp.ContractResult.Result
queryUserInfo := &types.UserInfo{}
err = json.Unmarshal(queryResp, queryUserInfo)
require.Nil(t, err)
require.Equal(t, testUserName, queryUserInfo.Name)
initialPerm := util.NewUserPermissions(true, false, false)
require.Equal(t, initialPerm, queryUserInfo.UserPermission)
// change user type
adminTypeStr := strconv.FormatInt(int64(types.Admin), 10)
resp, err = invokeContract(adminClient, testContractName, _const.MethodChangeUserType, invoke_contract,
map[string]string{
_const.ParamUserType: adminTypeStr,
_const.ParamUserAddress: userInfo.Address,
})
require.Nil(t, err)
require.Equal(t, adminTypeStr, resp.ContractResult.ContractEvent[0].EventData[1])
// change user permissions
allPermStr := strconv.FormatInt(int64(util.NewUserPermissions(true, true, true)), 10)
resp, err = invokeContract(adminClient, testContractName, _const.MethodChangeUserPermissions, invoke_contract,
map[string]string{
_const.ParamUserPermission: allPermStr,
_const.ParamUserAddress: userInfo.Address,
})
require.Nil(t, err)
require.Equal(t, allPermStr, resp.ContractResult.ContractEvent[0].EventData[1])
// authorize user
resp, err = invokeContract(client, testContractName, _const.MethodAuthorizeUser, invoke_contract,
map[string]string{
_const.ParamUserAddress: adminInfo.Address,
})
require.Nil(t, err)
require.Equal(t, userInfo.Address, resp.ContractResult.ContractEvent[0].EventData[0])
require.Equal(t, adminInfo.Address, resp.ContractResult.ContractEvent[0].EventData[1])
resp, err = invokeContract(client, testContractName, _const.MethodQueryAuthorizedUsers, query_contract,
map[string]string{
_const.ParamUserAddress: userInfo.Address,
})
authorizeeLists := make([]string, 0)
err = json.Unmarshal(resp.ContractResult.Result, &authorizeeLists)
require.Nil(t, err)
require.Equal(t, 1, len(authorizeeLists))
require.Equal(t, adminInfo.Address, authorizeeLists[0])
// deAuthorize user
resp, err = invokeContract(client, testContractName, _const.MethodDeAuthorizeUser, invoke_contract,
map[string]string{
_const.ParamUserAddress: adminInfo.Address,
})
require.Nil(t, err)
require.Equal(t, userInfo.Address, resp.ContractResult.ContractEvent[0].EventData[0])
require.Equal(t, adminInfo.Address, resp.ContractResult.ContractEvent[0].EventData[1])
resp, err = invokeContract(client, testContractName, _const.MethodQueryAuthorizedUsers, query_contract,
map[string]string{
_const.ParamUserAddress: userInfo.Address,
})
authorizeeLists = make([]string, 0)
err = json.Unmarshal(resp.ContractResult.Result, &authorizeeLists)
require.Nil(t, err)
require.Equal(t, 0, len(authorizeeLists))
// query user balance
resp, err = invokeContract(client, testContractName, _const.MethodQueryUserBalance, query_contract,
map[string]string{
_const.ParamUserAddress: userInfo.Address,
})
require.Nil(t, err)
require.Equal(t, "0", string(resp.ContractResult.Result))
// create ida
newIDAs := []types.IDAInfo{
types.IDA
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment