Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!
Open sidebar
chainweaver
ida
contract-ida
Commits
f05c1524
Commit
f05c1524
authored
1 year ago
by
guanghonglu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add user test
parent
21cc3a7b
master
develop
v2.1.0
v2.0.0
v1.0.0
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
163 additions
and
149 deletions
+163
-149
event/events.go
event/events.go
+2
-1
ida.go
ida.go
+10
-5
test/cmd/mycmc_test.go
test/cmd/mycmc_test.go
+151
-143
No files found.
event/events.go
View file @
f05c1524
...
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
ida.go
View file @
f05c1524
...
...
@@ -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
{
...
...
This diff is collapsed.
Click to expand it.
test/cmd/mycmc_test.go
View file @
f05c1524
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_contract
4
"
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"
testContractName
Prefix
=
"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
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment