mirror of https://github.com/hyperledger/besu
[PRIV] tests for onchain privacy (#465)
* testing around privx_findOnChainPrivacyGroup Signed-off-by: Ivaylo Kirilov <iikirilov@gmail.com> * test existence of on chain privacy precompile Signed-off-by: Ivaylo Kirilov <iikirilov@gmail.com> * test rehydration occurs in privacy block processor Signed-off-by: Ivaylo Kirilov <iikirilov@gmail.com> * fix compile Signed-off-by: Ivaylo Kirilov <iikirilov@gmail.com>pull/472/head
parent
6770d67265
commit
cf5307540a
@ -0,0 +1,120 @@ |
||||
/* |
||||
* Copyright ConsenSys AG. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.privacy.methods.privx; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
import static org.mockito.Mockito.mock; |
||||
import static org.mockito.Mockito.verify; |
||||
import static org.mockito.Mockito.when; |
||||
|
||||
import org.hyperledger.besu.enclave.Enclave; |
||||
import org.hyperledger.besu.enclave.EnclaveClientException; |
||||
import org.hyperledger.besu.enclave.types.PrivacyGroup; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequest; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequestContext; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.privacy.methods.EnclavePublicKeyProvider; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcError; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcErrorResponse; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcResponse; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcSuccessResponse; |
||||
import org.hyperledger.besu.ethereum.core.PrivacyParameters; |
||||
import org.hyperledger.besu.ethereum.privacy.MultiTenancyValidationException; |
||||
import org.hyperledger.besu.ethereum.privacy.PrivacyController; |
||||
|
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
|
||||
import io.vertx.core.json.JsonObject; |
||||
import io.vertx.ext.auth.User; |
||||
import io.vertx.ext.auth.jwt.impl.JWTUser; |
||||
import org.assertj.core.util.Lists; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
|
||||
public class PrivxFindOnChainPrivacyGroupTest { |
||||
private static final String ENCLAVE_PUBLIC_KEY = "A1aVtMxLCUHmBVHXoZzzBgPbW/wj5axDpW9X8l91SGo="; |
||||
private static final List<String> ADDRESSES = |
||||
List.of( |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", |
||||
"0x627306090abab3a6e1400e9345bc60c78a8bef57"); |
||||
|
||||
private final Enclave enclave = mock(Enclave.class); |
||||
private final PrivacyParameters privacyParameters = mock(PrivacyParameters.class); |
||||
private final PrivacyController privacyController = mock(PrivacyController.class); |
||||
|
||||
private final User user = |
||||
new JWTUser(new JsonObject().put("privacyPublicKey", ENCLAVE_PUBLIC_KEY), ""); |
||||
private final EnclavePublicKeyProvider enclavePublicKeyProvider = (user) -> ENCLAVE_PUBLIC_KEY; |
||||
|
||||
private JsonRpcRequestContext request; |
||||
private PrivacyGroup privacyGroup; |
||||
private PrivxFindOnChainPrivacyGroup privxFindOnChainPrivacyGroup; |
||||
|
||||
@Before |
||||
public void setUp() { |
||||
when(privacyParameters.getEnclave()).thenReturn(enclave); |
||||
when(privacyParameters.isEnabled()).thenReturn(true); |
||||
request = |
||||
new JsonRpcRequestContext( |
||||
new JsonRpcRequest("1", "privx_findOnChainPrivacyGroup", new Object[] {ADDRESSES}), |
||||
user); |
||||
privacyGroup = new PrivacyGroup(); |
||||
privacyGroup.setName(""); |
||||
privacyGroup.setDescription(""); |
||||
privacyGroup.setPrivacyGroupId("privacy group id"); |
||||
privacyGroup.setMembers(Lists.list("member1")); |
||||
|
||||
privxFindOnChainPrivacyGroup = |
||||
new PrivxFindOnChainPrivacyGroup(privacyController, enclavePublicKeyProvider); |
||||
} |
||||
|
||||
@SuppressWarnings("unchecked") |
||||
@Test |
||||
public void findsPrivacyGroupWithValidAddresses() { |
||||
when(privacyController.findOnChainPrivacyGroup(ADDRESSES, ENCLAVE_PUBLIC_KEY)) |
||||
.thenReturn(Collections.singletonList(privacyGroup)); |
||||
|
||||
final JsonRpcSuccessResponse response = |
||||
(JsonRpcSuccessResponse) privxFindOnChainPrivacyGroup.response(request); |
||||
final List<PrivacyGroup> result = (List<PrivacyGroup>) response.getResult(); |
||||
assertThat(result).hasSize(1); |
||||
assertThat(result.get(0)).isEqualToComparingFieldByField(privacyGroup); |
||||
verify(privacyController).findOnChainPrivacyGroup(ADDRESSES, ENCLAVE_PUBLIC_KEY); |
||||
} |
||||
|
||||
@Test |
||||
public void failsWithFindPrivacyGroupErrorIfEnclaveFails() { |
||||
when(privacyController.findOnChainPrivacyGroup(ADDRESSES, ENCLAVE_PUBLIC_KEY)) |
||||
.thenThrow(new EnclaveClientException(500, "some failure")); |
||||
|
||||
final JsonRpcErrorResponse response = |
||||
(JsonRpcErrorResponse) privxFindOnChainPrivacyGroup.response(request); |
||||
assertThat(response.getError()).isEqualTo(JsonRpcError.FIND_ON_CHAIN_PRIVACY_GROUP_ERROR); |
||||
verify(privacyController).findOnChainPrivacyGroup(ADDRESSES, ENCLAVE_PUBLIC_KEY); |
||||
} |
||||
|
||||
@Test |
||||
public void failsWithUnauthorizedErrorIfMultiTenancyValidationFails() { |
||||
when(privacyController.findOnChainPrivacyGroup(ADDRESSES, ENCLAVE_PUBLIC_KEY)) |
||||
.thenThrow(new MultiTenancyValidationException("validation failed")); |
||||
|
||||
final JsonRpcResponse expectedResponse = |
||||
new JsonRpcErrorResponse( |
||||
request.getRequest().getId(), JsonRpcError.FIND_ON_CHAIN_PRIVACY_GROUP_ERROR); |
||||
final JsonRpcResponse response = privxFindOnChainPrivacyGroup.response(request); |
||||
assertThat(response).isEqualTo(expectedResponse); |
||||
verify(privacyController).findOnChainPrivacyGroup(ADDRESSES, ENCLAVE_PUBLIC_KEY); |
||||
} |
||||
} |
Loading…
Reference in new issue