Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@

import com.google.protobuf.ByteString;
import com.hedera.mirror.api.proto.AddressBookQuery;
import com.hedera.mirror.api.proto.Fee.EstimateMode;
import com.hedera.mirror.api.proto.Fee.FeeEstimate;
import com.hedera.mirror.api.proto.Fee.FeeEstimateQuery;
import com.hedera.mirror.api.proto.Fee.FeeEstimateResponse;
import com.hedera.mirror.api.proto.Fee.FeeExtra;
import com.hedera.mirror.api.proto.Fee.NetworkFee;
import com.hedera.mirror.api.proto.ReactorNetworkServiceGrpc;
import com.hederahashgraph.api.proto.java.NodeAddress;
import com.hederahashgraph.api.proto.java.ServiceEndpoint;
Expand All @@ -26,8 +32,34 @@
@RequiredArgsConstructor
public class NetworkController extends ReactorNetworkServiceGrpc.NetworkServiceImplBase {

static final FeeEstimateResponse STUB_RESPONSE = stubResponse();

private final NetworkService networkService;

private static FeeEstimateResponse stubResponse() {
final var feeExtra = FeeExtra.newBuilder()
.setCharged(0)
.setCount(1)
.setFeePerUnit(0L)
.setIncluded(1)
.setName("Test data")
.setSubtotal(0L);
final var feeEstimate = FeeEstimate.newBuilder().setBase(0L).addExtras(feeExtra);
return FeeEstimateResponse.newBuilder()
.addNotes("This API is not yet implemented and only returns stubbed test data")
.setMode(EstimateMode.STATE)
.setNetwork(NetworkFee.newBuilder().setMultiplier(1).setSubtotal(0L))
.setNode(feeEstimate)
.setService(feeEstimate)
.setTotal(0)
.build();
}

@Override
public Mono<FeeEstimateResponse> getFeeEstimate(FeeEstimateQuery request) {
return Mono.just(STUB_RESPONSE);
}

@Override
public Flux<NodeAddress> getNodes(Mono<AddressBookQuery> request) {
return request.map(this::toFilter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@

import com.google.protobuf.ByteString;
import com.hedera.mirror.api.proto.AddressBookQuery;
import com.hedera.mirror.api.proto.Fee.FeeEstimateQuery;
import com.hedera.mirror.api.proto.ReactorNetworkServiceGrpc;
import com.hederahashgraph.api.proto.java.FileID;
import com.hederahashgraph.api.proto.java.NodeAddress;
import com.hederahashgraph.api.proto.java.ServiceEndpoint;
import io.grpc.Status;
import io.grpc.StatusRuntimeException;
import jakarta.annotation.Resource;
import java.net.InetAddress;
import java.time.Duration;
import java.util.HashSet;
import lombok.CustomLog;
import lombok.RequiredArgsConstructor;
import net.devh.boot.grpc.client.inject.GrpcClient;
import org.apache.commons.lang3.StringUtils;
import org.hiero.mirror.common.domain.DomainBuilder;
Expand All @@ -31,33 +31,40 @@
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;

@CustomLog
class NetworkControllerTest extends GrpcIntegrationTest {
@RequiredArgsConstructor
final class NetworkControllerTest extends GrpcIntegrationTest {

private static final Duration WAIT = Duration.ofSeconds(10L);
private static final long CONSENSUS_TIMESTAMP = 1L;

private final DomainBuilder domainBuilder;
private final SystemEntity systemEntity;

@GrpcClient("local")
private ReactorNetworkServiceGrpc.ReactorNetworkServiceStub reactiveService;

@Resource
private DomainBuilder domainBuilder;

@Resource
private SystemEntity systemEntity;
@Test
void getFeeEstimate() {

Check warning on line 47 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L47

JUnit tests should include assert() or fail()

Check notice on line 47 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L47

Linguistics Antipattern - The getter 'getFeeEstimate' should not return void linguistically
final var query = FeeEstimateQuery.newBuilder().build();
StepVerifier.withVirtualTime(() -> reactiveService.getFeeEstimate(Mono.just(query)))
.thenAwait(WAIT)
.consumeNextWith(n -> assertThat(n).isEqualTo(NetworkController.STUB_RESPONSE))
.expectComplete()
.verify(WAIT);
}

@Test
void missingFileId() {
AddressBookQuery query = AddressBookQuery.newBuilder().build();
void getNodesMissingFileId() {

Check warning on line 57 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L57

JUnit tests should include assert() or fail()

Check notice on line 57 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L57

Linguistics Antipattern - The getter 'getNodesMissingFileId' should not return void linguistically
final var query = AddressBookQuery.newBuilder().build();
StepVerifier.withVirtualTime(() -> reactiveService.getNodes(Mono.just(query)))
.thenAwait(WAIT)
.expectErrorSatisfies(t -> assertException(t, Status.Code.INVALID_ARGUMENT, "fileId: must not be null"))
.verify(WAIT);
}

@Test
void invalidFileId() {
AddressBookQuery query = AddressBookQuery.newBuilder()
void getNodesInvalidFileId() {

Check warning on line 66 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L66

JUnit tests should include assert() or fail()

Check notice on line 66 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L66

Linguistics Antipattern - The getter 'getNodesInvalidFileId' should not return void linguistically
final var query = AddressBookQuery.newBuilder()
.setFileId(FileID.newBuilder().setFileNum(-1).build())
.build();
StepVerifier.withVirtualTime(() -> reactiveService.getNodes(Mono.just(query)))
Expand All @@ -67,8 +74,8 @@
}

@Test
void invalidLimit() {
AddressBookQuery query = AddressBookQuery.newBuilder()
void getNodesInvalidLimit() {

Check warning on line 77 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L77

JUnit tests should include assert() or fail()

Check notice on line 77 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L77

Linguistics Antipattern - The getter 'getNodesInvalidLimit' should not return void linguistically
final var query = AddressBookQuery.newBuilder()
.setFileId(FileID.newBuilder().build())
.setLimit(-1)
.build();
Expand All @@ -81,8 +88,8 @@
}

@Test
void notFound() {
AddressBookQuery query = AddressBookQuery.newBuilder()
void getNodesNotFound() {

Check warning on line 91 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L91

JUnit tests should include assert() or fail()

Check notice on line 91 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L91

Linguistics Antipattern - The getter 'getNodesNotFound' should not return void linguistically
final var query = AddressBookQuery.newBuilder()
.setFileId(systemEntity.addressBookFile102().toFileID())
.build();

Expand All @@ -93,11 +100,11 @@
}

@Test
void noLimit() {
AddressBook addressBook = addressBook();
AddressBookEntry addressBookEntry1 = addressBookEntry();
AddressBookEntry addressBookEntry2 = addressBookEntry();
AddressBookQuery query = AddressBookQuery.newBuilder()
void getNodesNoLimit() {

Check warning on line 103 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L103

JUnit tests should include assert() or fail()

Check notice on line 103 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L103

Linguistics Antipattern - The getter 'getNodesNoLimit' should not return void linguistically
final var addressBook = addressBook();
final var addressBookEntry1 = addressBookEntry();
final var addressBookEntry2 = addressBookEntry();
final var query = AddressBookQuery.newBuilder()
.setFileId(addressBook.getFileId().toFileID())
.build();

Expand All @@ -110,11 +117,10 @@
}

@Test
void noLimitServiceEndpointWithDomainName() {
var addressBook = addressBook();
var addressBookEntry1 = addressBookEntryCustomized("www.example-node.com", "", 5000);

var query = AddressBookQuery.newBuilder()
void getNodesNoLimitServiceEndpointWithDomainName() {

Check warning on line 120 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L120

JUnit tests should include assert() or fail()

Check notice on line 120 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L120

Linguistics Antipattern - The getter 'getNodesNoLimitServiceEndpointWithDomainName' should not return void linguistically
final var addressBook = addressBook();
final var addressBookEntry1 = addressBookEntryCustomized("www.example-node.com", "", 5000);
final var query = AddressBookQuery.newBuilder()
.setFileId(addressBook.getFileId().toFileID())
.build();

Expand All @@ -126,11 +132,10 @@
}

@Test
void testWithEmptyDomainNameAndIpAddress() {
var addressBook = addressBook();
var addressBookEntry1 = addressBookEntryCustomized("", "", 0);

var query = AddressBookQuery.newBuilder()
void getNodesTestWithEmptyDomainNameAndIpAddress() {

Check warning on line 135 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L135

JUnit tests should include assert() or fail()

Check notice on line 135 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L135

Linguistics Antipattern - The getter 'getNodesTestWithEmptyDomainNameAndIpAddress' should not return void linguistically
final var addressBook = addressBook();
final var addressBookEntry1 = addressBookEntryCustomized("", "", 0);
final var query = AddressBookQuery.newBuilder()
.setFileId(addressBook.getFileId().toFileID())
.build();

Expand All @@ -142,11 +147,11 @@
}

@Test
void limitReached() {
AddressBook addressBook = addressBook();
AddressBookEntry addressBookEntry1 = addressBookEntry();
void getNodesLmitReached() {

Check warning on line 150 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L150

JUnit tests should include assert() or fail()

Check notice on line 150 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L150

Linguistics Antipattern - The getter 'getNodesLmitReached' should not return void linguistically
final var addressBook = addressBook();
final var addressBookEntry1 = addressBookEntry();
addressBookEntry();
AddressBookQuery query = AddressBookQuery.newBuilder()
final var query = AddressBookQuery.newBuilder()
.setFileId(addressBook.getFileId().toFileID())
.setLimit(1)
.build();
Expand All @@ -160,9 +165,9 @@

@SuppressWarnings("deprecation")
@Test
void nullFields() {
AddressBook addressBook = addressBook();
AddressBookEntry addressBookEntry = domainBuilder
void getNodesNullFields() {

Check warning on line 168 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L168

JUnit tests should include assert() or fail()

Check notice on line 168 in grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

grpc/src/test/java/org/hiero/mirror/grpc/controller/NetworkControllerTest.java#L168

Linguistics Antipattern - The getter 'getNodesNullFields' should not return void linguistically
final var addressBook = addressBook();
final var addressBookEntry = domainBuilder
.addressBookEntry()
.customize(a -> a.consensusTimestamp(CONSENSUS_TIMESTAMP)
.description(null)
Expand All @@ -171,7 +176,7 @@
.publicKey(null)
.stake(null))
.persist();
AddressBookQuery query = AddressBookQuery.newBuilder()
final var query = AddressBookQuery.newBuilder()
.setFileId(addressBook.getFileId().toFileID())
.build();

Expand Down Expand Up @@ -205,8 +210,8 @@
}

private AddressBookEntry addressBookEntryCustomized(String domainName, String ipAddress, int port) {
var serviceEndpoints = new HashSet<AddressBookServiceEndpoint>();
var endpoint = domainBuilder
final var serviceEndpoints = new HashSet<AddressBookServiceEndpoint>();
final var endpoint = domainBuilder
.addressBookServiceEndpoint()
.customize(a -> a.domainName(domainName).ipAddressV4(ipAddress).port(port))
.get();
Expand Down Expand Up @@ -253,7 +258,7 @@
private void assertException(Throwable t, Status.Code status, String message) {
assertThat(t).isNotNull().isInstanceOf(StatusRuntimeException.class).hasMessageContaining(message);

StatusRuntimeException statusRuntimeException = (StatusRuntimeException) t;
final var statusRuntimeException = (StatusRuntimeException) t;
assertThat(statusRuntimeException.getStatus().getCode()).isEqualTo(status);
}
}
Loading
Loading