274 lines
6.3 KiB
Go
274 lines
6.3 KiB
Go
|
package ccq
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestParseConfigFileDoesntExist(t *testing.T) {
|
||
|
_, err := parseConfigFile("missingFile.json")
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `failed to open permissions file "missingFile.json": open missingFile.json: no such file or directory`, err.Error())
|
||
|
}
|
||
|
|
||
|
func TestParseConfigBadJson(t *testing.T) {
|
||
|
str := `
|
||
|
{
|
||
|
"permissions": [
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "B4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key_2",
|
||
|
"allowUnsigned": true,
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}`
|
||
|
|
||
|
_, err := parseConfig([]byte(str))
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `failed to unmarshal json: unexpected end of JSON input`, err.Error())
|
||
|
}
|
||
|
|
||
|
func TestParseConfigDuplicateUser(t *testing.T) {
|
||
|
str := `
|
||
|
{
|
||
|
"permissions": [
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "B4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key_2",
|
||
|
"allowUnsigned": true,
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}`
|
||
|
|
||
|
_, err := parseConfig([]byte(str))
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `UserName "Test User" is a duplicate`, err.Error())
|
||
|
}
|
||
|
|
||
|
func TestParseConfigDuplicateApiKey(t *testing.T) {
|
||
|
str := `
|
||
|
{
|
||
|
"permissions": [
|
||
|
{
|
||
|
"userName": "Test User 1",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "B4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"userName": "Test User 2",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowUnsigned": true,
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}`
|
||
|
|
||
|
_, err := parseConfig([]byte(str))
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `API key "my_secret_key" is a duplicate`, err.Error())
|
||
|
}
|
||
|
|
||
|
func TestParseConfigUnsupportedCallType(t *testing.T) {
|
||
|
str := `
|
||
|
{
|
||
|
"permissions": [
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"badCallType": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "B4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}`
|
||
|
|
||
|
_, err := parseConfig([]byte(str))
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `unsupported call type for user "Test User", must be "ethCall"`, err.Error())
|
||
|
}
|
||
|
|
||
|
func TestParseConfigInvalidContractAddress(t *testing.T) {
|
||
|
str := `
|
||
|
{
|
||
|
"permissions": [
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "HelloWorld",
|
||
|
"call": "0x06fdde"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}`
|
||
|
|
||
|
_, err := parseConfig([]byte(str))
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `invalid contract address "HelloWorld" for user "Test User"`, err.Error())
|
||
|
}
|
||
|
|
||
|
func TestParseConfigInvalidEthCall(t *testing.T) {
|
||
|
str := `
|
||
|
{
|
||
|
"permissions": [
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "B4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "HelloWorld"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}`
|
||
|
|
||
|
_, err := parseConfig([]byte(str))
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `invalid eth call "HelloWorld" for user "Test User"`, err.Error())
|
||
|
}
|
||
|
|
||
|
func TestParseConfigInvalidEthCallLength(t *testing.T) {
|
||
|
str := `
|
||
|
{
|
||
|
"permissions": [
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "B4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fd"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}`
|
||
|
|
||
|
_, err := parseConfig([]byte(str))
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `eth call "0x06fd" for user "Test User" has an invalid length, must be 4 bytes`, err.Error())
|
||
|
}
|
||
|
|
||
|
func TestParseConfigDuplicateAllowedCallForUser(t *testing.T) {
|
||
|
str := `
|
||
|
{
|
||
|
"permissions": [
|
||
|
{
|
||
|
"userName": "Test User",
|
||
|
"apiKey": "my_secret_key",
|
||
|
"allowedCalls": [
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "B4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"ethCall": {
|
||
|
"note:": "Name of WETH on Goerli",
|
||
|
"chain": 2,
|
||
|
"contractAddress": "B4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
||
|
"call": "0x06fdde03"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}`
|
||
|
|
||
|
_, err := parseConfig([]byte(str))
|
||
|
require.Error(t, err)
|
||
|
assert.Equal(t, `"ethCall:2:000000000000000000000000b4fbf271143f4fbf7b91a5ded31805e42b2208d6:06fdde03" is a duplicate allowed call for user "Test User"`, err.Error())
|
||
|
}
|