|
|
package api
import ( "bytes" "encoding/hex" "encoding/json" "math/big" "testing" "time"
ethCommon "github.com/ethereum/go-ethereum/common" "github.com/hermeznetwork/hermez-node/common" "github.com/stretchr/testify/assert" )
type testAuth struct { EthAddr string `json:"hezEthereumAddress" binding:"required"` BJJ string `json:"bjj" binding:"required"` Signature string `json:"signature" binding:"required"` Timestamp time.Time `json:"timestamp"` }
func genTestAuths(auths []*common.AccountCreationAuth) []testAuth { testAuths := []testAuth{} for _, auth := range auths { testAuths = append(testAuths, testAuth{ EthAddr: ethAddrToHez(auth.EthAddr), BJJ: bjjToString(auth.BJJ), Signature: "0x" + hex.EncodeToString(auth.Signature), Timestamp: auth.Timestamp, }) } return testAuths }
func TestAccountCreationAuth(t *testing.T) { // POST
endpoint := apiURL + "account-creation-authorization" for _, auth := range tc.auths { jsonAuthBytes, err := json.Marshal(auth) assert.NoError(t, err) jsonAuthReader := bytes.NewReader(jsonAuthBytes) assert.NoError( t, doGoodReq( "POST", endpoint, jsonAuthReader, nil, ), ) } // GET
endpoint += "/" for _, auth := range tc.auths { fetchedAuth := testAuth{} assert.NoError( t, doGoodReq( "GET", endpoint+auth.EthAddr, nil, &fetchedAuth, ), ) assertAuth(t, auth, fetchedAuth) } // POST
// 400
// Wrong addr
badAuth := tc.auths[0] badAuth.EthAddr = ethAddrToHez(ethCommon.BigToAddress(big.NewInt(1))) jsonAuthBytes, err := json.Marshal(badAuth) assert.NoError(t, err) jsonAuthReader := bytes.NewReader(jsonAuthBytes) err = doBadReq("POST", endpoint, jsonAuthReader, 400) assert.NoError(t, err) // Wrong signature
badAuth = tc.auths[0] badAuth.Signature = badAuth.Signature[:len(badAuth.Signature)-1] badAuth.Signature += "F" jsonAuthBytes, err = json.Marshal(badAuth) assert.NoError(t, err) jsonAuthReader = bytes.NewReader(jsonAuthBytes) err = doBadReq("POST", endpoint, jsonAuthReader, 400) assert.NoError(t, err) // GET
// 400
err = doBadReq("GET", endpoint+"hez:0xFooBar", nil, 400) assert.NoError(t, err) // 404
err = doBadReq("GET", endpoint+"hez:0x0000000000000000000000000000000000000001", nil, 404) assert.NoError(t, err) }
func assertAuth(t *testing.T, expected, actual testAuth) { // timestamp should be very close to now
assert.Less(t, time.Now().UTC().Unix()-3, actual.Timestamp.Unix()) expected.Timestamp = actual.Timestamp assert.Equal(t, expected, actual) }
|