mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-23 11:57:18 +00:00
d17996f8b0
* Update V3 from V4 * Fix build v3 -> v4 * Update ssz * Update beacon_chain.pb.go * Fix formatter import * Update update-mockgen.sh comment to v4 * Fix conflicts. Pass build and tests * Fix test
272 lines
7.0 KiB
Go
272 lines
7.0 KiB
Go
package apimiddleware
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
|
|
fieldparams "github.com/prysmaticlabs/prysm/v4/config/fieldparams"
|
|
"github.com/prysmaticlabs/prysm/v4/proto/eth/service"
|
|
"github.com/prysmaticlabs/prysm/v4/testing/require"
|
|
)
|
|
|
|
func TestListKeystores_JSONisEqual(t *testing.T) {
|
|
middlewareResponse := &ListKeystoresResponseJson{
|
|
Keystores: []*KeystoreJson{
|
|
{
|
|
ValidatingPubkey: "0x0",
|
|
DerivationPath: "m/44'/60'/0'/0/0",
|
|
},
|
|
},
|
|
}
|
|
|
|
protoResponse := &service.ListKeystoresResponse{
|
|
Data: []*service.ListKeystoresResponse_Keystore{
|
|
{
|
|
ValidatingPubkey: make([]byte, fieldparams.BLSPubkeyLength),
|
|
DerivationPath: "m/44'/60'/0'/0/0",
|
|
},
|
|
},
|
|
}
|
|
|
|
listResp, err := areJsonPropertyNamesEqual(middlewareResponse, protoResponse)
|
|
require.NoError(t, err)
|
|
require.Equal(t, listResp, true)
|
|
|
|
resp, err := areJsonPropertyNamesEqual(middlewareResponse.Keystores[0], protoResponse.Data[0])
|
|
require.NoError(t, err)
|
|
require.Equal(t, resp, true)
|
|
}
|
|
|
|
func TestImportKeystores_JSONisEqual(t *testing.T) {
|
|
importKeystoresRequest := &ImportKeystoresRequestJson{}
|
|
|
|
protoImportRequest := &service.ImportKeystoresRequest{
|
|
Keystores: []string{""},
|
|
Passwords: []string{""},
|
|
SlashingProtection: "a",
|
|
}
|
|
|
|
requestResp, err := areJsonPropertyNamesEqual(importKeystoresRequest, protoImportRequest)
|
|
require.NoError(t, err)
|
|
require.Equal(t, requestResp, true)
|
|
|
|
importKeystoresResponse := &ImportKeystoresResponseJson{
|
|
Statuses: []*StatusJson{
|
|
{
|
|
Status: "Error",
|
|
Message: "a",
|
|
},
|
|
},
|
|
}
|
|
|
|
protoImportKeystoresResponse := &service.ImportKeystoresResponse{
|
|
Data: []*service.ImportedKeystoreStatus{
|
|
{
|
|
Status: service.ImportedKeystoreStatus_ERROR,
|
|
Message: "a",
|
|
},
|
|
},
|
|
}
|
|
|
|
ImportResp, err := areJsonPropertyNamesEqual(importKeystoresResponse, protoImportKeystoresResponse)
|
|
require.NoError(t, err)
|
|
require.Equal(t, ImportResp, true)
|
|
|
|
resp, err := areJsonPropertyNamesEqual(importKeystoresResponse.Statuses[0], protoImportKeystoresResponse.Data[0])
|
|
require.NoError(t, err)
|
|
require.Equal(t, resp, true)
|
|
}
|
|
|
|
func TestDeleteKeystores_JSONisEqual(t *testing.T) {
|
|
deleteKeystoresRequest := &DeleteKeystoresRequestJson{}
|
|
|
|
protoDeleteRequest := &service.DeleteKeystoresRequest{
|
|
Pubkeys: [][]byte{{}},
|
|
}
|
|
|
|
requestResp, err := areJsonPropertyNamesEqual(deleteKeystoresRequest, protoDeleteRequest)
|
|
require.NoError(t, err)
|
|
require.Equal(t, requestResp, true)
|
|
|
|
deleteKeystoresResponse := &DeleteKeystoresResponseJson{
|
|
Statuses: []*StatusJson{
|
|
{
|
|
Status: "Error",
|
|
Message: "a",
|
|
},
|
|
},
|
|
SlashingProtection: "a",
|
|
}
|
|
protoDeleteResponse := &service.DeleteKeystoresResponse{
|
|
Data: []*service.DeletedKeystoreStatus{
|
|
{
|
|
Status: service.DeletedKeystoreStatus_ERROR,
|
|
Message: "a",
|
|
},
|
|
},
|
|
SlashingProtection: "a",
|
|
}
|
|
|
|
deleteResp, err := areJsonPropertyNamesEqual(deleteKeystoresResponse, protoDeleteResponse)
|
|
require.NoError(t, err)
|
|
require.Equal(t, deleteResp, true)
|
|
|
|
resp, err := areJsonPropertyNamesEqual(deleteKeystoresResponse.Statuses[0], protoDeleteResponse.Data[0])
|
|
require.NoError(t, err)
|
|
require.Equal(t, resp, true)
|
|
|
|
}
|
|
|
|
func TestListRemoteKeys_JSONisEqual(t *testing.T) {
|
|
middlewareResponse := &ListRemoteKeysResponseJson{
|
|
Keystores: []*RemoteKeysListJson{
|
|
{
|
|
Pubkey: "0x0",
|
|
Url: "http://localhost:8080",
|
|
Readonly: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
protoResponse := &service.ListRemoteKeysResponse{
|
|
Data: []*service.ListRemoteKeysResponse_Keystore{
|
|
{
|
|
Pubkey: make([]byte, fieldparams.BLSPubkeyLength),
|
|
Url: "http://localhost:8080",
|
|
Readonly: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
listResp, err := areJsonPropertyNamesEqual(middlewareResponse, protoResponse)
|
|
require.NoError(t, err)
|
|
require.Equal(t, listResp, true)
|
|
|
|
resp, err := areJsonPropertyNamesEqual(middlewareResponse.Keystores[0], protoResponse.Data[0])
|
|
require.NoError(t, err)
|
|
require.Equal(t, resp, true)
|
|
}
|
|
|
|
func TestImportRemoteKeys_JSONisEqual(t *testing.T) {
|
|
importKeystoresRequest := &ImportRemoteKeysRequestJson{}
|
|
|
|
protoImportRequest := &service.ImportRemoteKeysRequest{
|
|
RemoteKeys: []*service.ImportRemoteKeysRequest_Keystore{
|
|
{
|
|
Pubkey: make([]byte, fieldparams.BLSPubkeyLength),
|
|
Url: "http://localhost:8080",
|
|
},
|
|
},
|
|
}
|
|
|
|
requestResp, err := areJsonPropertyNamesEqual(importKeystoresRequest, protoImportRequest)
|
|
require.NoError(t, err)
|
|
require.Equal(t, requestResp, true)
|
|
|
|
importKeystoresResponse := &ImportRemoteKeysResponseJson{
|
|
Statuses: []*StatusJson{
|
|
{
|
|
Status: "Error",
|
|
Message: "a",
|
|
},
|
|
},
|
|
}
|
|
|
|
protoImportKeystoresResponse := &service.ImportRemoteKeysResponse{
|
|
Data: []*service.ImportedRemoteKeysStatus{
|
|
{
|
|
Status: service.ImportedRemoteKeysStatus_ERROR,
|
|
Message: "a",
|
|
},
|
|
},
|
|
}
|
|
|
|
ImportResp, err := areJsonPropertyNamesEqual(importKeystoresResponse, protoImportKeystoresResponse)
|
|
require.NoError(t, err)
|
|
require.Equal(t, ImportResp, true)
|
|
|
|
resp, err := areJsonPropertyNamesEqual(importKeystoresResponse.Statuses[0], protoImportKeystoresResponse.Data[0])
|
|
require.NoError(t, err)
|
|
require.Equal(t, resp, true)
|
|
}
|
|
|
|
func TestDeleteRemoteKeys_JSONisEqual(t *testing.T) {
|
|
deleteKeystoresRequest := &DeleteRemoteKeysRequestJson{}
|
|
|
|
protoDeleteRequest := &service.DeleteRemoteKeysRequest{
|
|
Pubkeys: [][]byte{{}},
|
|
}
|
|
|
|
requestResp, err := areJsonPropertyNamesEqual(deleteKeystoresRequest, protoDeleteRequest)
|
|
require.NoError(t, err)
|
|
require.Equal(t, requestResp, true)
|
|
|
|
deleteKeystoresResponse := &DeleteRemoteKeysResponseJson{
|
|
Statuses: []*StatusJson{
|
|
{
|
|
Status: "Error",
|
|
Message: "a",
|
|
},
|
|
},
|
|
}
|
|
protoDeleteResponse := &service.DeleteRemoteKeysResponse{
|
|
Data: []*service.DeletedRemoteKeysStatus{
|
|
{
|
|
Status: service.DeletedRemoteKeysStatus_ERROR,
|
|
Message: "a",
|
|
},
|
|
},
|
|
}
|
|
|
|
deleteResp, err := areJsonPropertyNamesEqual(deleteKeystoresResponse, protoDeleteResponse)
|
|
require.NoError(t, err)
|
|
require.Equal(t, deleteResp, true)
|
|
|
|
resp, err := areJsonPropertyNamesEqual(deleteKeystoresResponse.Statuses[0], protoDeleteResponse.Data[0])
|
|
require.NoError(t, err)
|
|
require.Equal(t, resp, true)
|
|
}
|
|
|
|
// note: this does not do a deep comparison of the structs
|
|
func areJsonPropertyNamesEqual(internal, proto interface{}) (bool, error) {
|
|
internalJSON, err := json.Marshal(internal)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
protoJSON, err := json.Marshal(proto)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
var internalRaw map[string]json.RawMessage
|
|
err = json.Unmarshal(internalJSON, &internalRaw)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
var protoRaw map[string]json.RawMessage
|
|
err = json.Unmarshal(protoJSON, &protoRaw)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
internalKeys := make([]string, 0, len(internalRaw))
|
|
protoKeys := make([]string, 0, len(protoRaw))
|
|
for key := range internalRaw {
|
|
internalKeys = append(internalKeys, key)
|
|
if _, ok := protoRaw[key]; !ok {
|
|
fmt.Printf("key: %s not found\n", key)
|
|
fmt.Printf("proto: %v\n", protoRaw)
|
|
return false, nil
|
|
} else {
|
|
protoKeys = append(protoKeys, key)
|
|
fmt.Printf("key: %s\n", key)
|
|
}
|
|
}
|
|
if len(internalKeys) != len(protoKeys) {
|
|
return false, nil
|
|
}
|
|
return true, nil
|
|
}
|