Skip to content

Commit

Permalink
use different test execution phase instead of before class
Browse files Browse the repository at this point in the history
  • Loading branch information
Fadelis committed Sep 26, 2023
1 parent 2ee2f48 commit 6bf69f1
Show file tree
Hide file tree
Showing 11 changed files with 64 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public final class GrpcMockTestExecutionListener extends AbstractTestExecutionLi
private static final Logger log = LoggerFactory.getLogger(GrpcMockTestExecutionListener.class);

@Override
public void beforeTestClass(TestContext testContext) {
public void prepareTestInstance(TestContext testContext) {
if (isInvalidContext(testContext)) {
return;
}
Expand Down Expand Up @@ -52,9 +52,9 @@ public void afterTestMethod(TestContext testContext) {
}

private boolean isInvalidContext(TestContext testContext) {
return annotationMissing(testContext)
|| wireMockConfigurationMissing(testContext)
|| applicationContextBroken(testContext);
return applicationContextBroken(testContext)
|| annotationMissing(testContext)
|| grpcMockConfigurationMissing(testContext);
}

private boolean annotationMissing(TestContext testContext) {
Expand All @@ -66,7 +66,7 @@ private boolean annotationMissing(TestContext testContext) {
return false;
}

private boolean wireMockConfigurationMissing(TestContext testContext) {
private boolean grpcMockConfigurationMissing(TestContext testContext) {
boolean missing = !testContext(testContext).containsBean(GrpcMockConfiguration.class.getName());
log.debug("GrpcMockConfiguration is missing [{}]", missing);
return missing;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import static org.grpcmock.GrpcMock.stubFor;
import static org.grpcmock.GrpcMock.unaryMethod;

import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
import io.grpc.health.v1.HealthGrpc;
Expand All @@ -30,12 +29,11 @@ void should_reset_mappings_for_dynamic_port_test1() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.NOT_SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import static org.grpcmock.GrpcMock.stubFor;
import static org.grpcmock.GrpcMock.unaryMethod;

import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
import io.grpc.health.v1.HealthGrpc;
Expand All @@ -31,12 +30,11 @@ void should_reset_mappings_for_dynamic_port_test1() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.NOT_SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import static org.grpcmock.GrpcMock.stubFor;
import static org.grpcmock.GrpcMock.unaryMethod;

import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
import io.grpc.health.v1.HealthGrpc;
Expand All @@ -24,11 +23,10 @@ void should_reset_mappings_for_dynamic_port_test1() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.NOT_SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import static org.grpcmock.GrpcMock.stubFor;
import static org.grpcmock.GrpcMock.unaryMethod;

import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
import io.grpc.health.v1.HealthGrpc;
Expand All @@ -24,11 +23,10 @@ void should_reset_mappings_for_dynamic_port_test1() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import static org.grpcmock.GrpcMock.stubFor;
import static org.grpcmock.GrpcMock.unaryMethod;

import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
import io.grpc.health.v1.HealthGrpc;
Expand All @@ -30,12 +29,11 @@ void should_reset_mappings_for_dynamic_port_test1() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.NOT_SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import static org.grpcmock.GrpcMock.stubFor;
import static org.grpcmock.GrpcMock.unaryMethod;

import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
import io.grpc.health.v1.HealthGrpc;
Expand All @@ -30,12 +29,11 @@ void should_reset_mappings_for_dynamic_port_test1() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import io.grpc.ServerCall.Listener;
import io.grpc.ServerCallHandler;
import io.grpc.ServerInterceptor;
import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
import io.grpc.health.v1.HealthGrpc;
Expand All @@ -33,13 +32,12 @@ void should_use_configured_interceptor() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.withHeader(MY_HEADER, HEADER_VALUE)
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}

public static class MyServerInterceptor implements ServerInterceptor {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import static org.grpcmock.GrpcMock.stubFor;
import static org.grpcmock.GrpcMock.unaryMethod;

import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
import io.grpc.health.v1.HealthGrpc;
Expand All @@ -25,20 +24,18 @@ void should_respond_with_response() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.NOT_SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}

@Test
void should_respond_with_unimplemented_error() {
HealthCheckResponse response = HealthCheckResponse.getDefaultInstance();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

assertThatThrownBy(() -> runAndAssertHealthCheckRequest(request, response))
assertThatThrownBy(() -> runAndAssertHealthCheckRequest(response))
.hasMessage("UNIMPLEMENTED: Method not found: grpc.health.v1.Health/Check");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;

/**
* @author Fadelis
Expand Down Expand Up @@ -50,7 +49,7 @@ void tearDownChannel() {
serverChannel.shutdownNow();
}

void runAndAssertHealthCheckRequest(HealthCheckRequest request, HealthCheckResponse response) {
void runAndAssertHealthCheckRequest(HealthCheckResponse response) {
HealthBlockingStub serviceStub = HealthGrpc.newBlockingStub(serverChannel);

assertThat(serviceStub.check(HealthCheckRequest.getDefaultInstance())).isEqualTo(response);
Expand All @@ -60,11 +59,10 @@ void simpleHealthCheckRequest() {
HealthCheckResponse response = HealthCheckResponse.newBuilder()
.setStatus(ServingStatus.SERVING)
.build();
HealthCheckRequest request = HealthCheckRequest.getDefaultInstance();

stubFor(unaryMethod(HealthGrpc.getCheckMethod())
.willReturn(response(response)));

runAndAssertHealthCheckRequest(request, response);
runAndAssertHealthCheckRequest(response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.grpcmock.springboot;

import static org.assertj.core.api.Assertions.assertThat;

import org.grpcmock.springboot.TestExecutionListenerAllowsOtherBeforeActionsTest.ApplicationEventListener;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Import;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.test.annotation.DirtiesContext;

/**
* @author Fadelis
*/
@SpringBootTest(classes = TestApplication.class, webEnvironment = WebEnvironment.NONE)
@AutoConfigureGrpcMock
@DirtiesContext
@Import(ApplicationEventListener.class)
class TestExecutionListenerAllowsOtherBeforeActionsTest extends TestBase {

private static boolean beforeAllRunSuccessful;
private static boolean applicationContextInitialized;

@BeforeAll
static void checkIfApplicationContextNotInitialized() {
beforeAllRunSuccessful = !applicationContextInitialized;
}

@Test
void should_run_before_all_action_before_application_context_is_available() {
// check that beforeAll method was actually run before the application context was initialized
assertThat(beforeAllRunSuccessful).isTrue();
// check that grpc mock instance is running
simpleHealthCheckRequest();
}


public static class ApplicationEventListener implements ApplicationListener<ContextRefreshedEvent> {

@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
applicationContextInitialized = true;
}
}
}

0 comments on commit 6bf69f1

Please sign in to comment.