Skip to content

Commit 066c3a7

Browse files
author
Alexander Furer
committed
test for #175
1 parent d8c6541 commit 066c3a7

File tree

3 files changed

+62
-15
lines changed

3 files changed

+62
-15
lines changed

grpc-spring-boot-starter-demo/src/main/java/org/lognet/springboot/grpc/demo/DemoAppConfiguration.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
import io.grpc.examples.CalculatorGrpc;
44
import io.grpc.examples.CalculatorOuterClass;
5-
import io.grpc.examples.SecuredCalculatorGrpc;
65
import io.grpc.stub.StreamObserver;
76
import org.lognet.springboot.grpc.GRpcService;
87
import org.springframework.context.annotation.Configuration;
9-
import org.springframework.security.access.annotation.Secured;
108

119
@Configuration
1210
public class DemoAppConfiguration {
@@ -21,7 +19,7 @@ public void calculate(CalculatorOuterClass.CalculatorRequest request, StreamObse
2119

2220

2321
}
24-
static CalculatorOuterClass.CalculatorResponse calculate(CalculatorOuterClass.CalculatorRequest request){
22+
public static CalculatorOuterClass.CalculatorResponse calculate(CalculatorOuterClass.CalculatorRequest request){
2523
CalculatorOuterClass.CalculatorResponse.Builder resultBuilder = CalculatorOuterClass.CalculatorResponse.newBuilder();
2624
switch (request.getOperation()){
2725
case ADD:
@@ -45,17 +43,5 @@ static CalculatorOuterClass.CalculatorResponse calculate(CalculatorOuterClass.Ca
4543

4644
}
4745

48-
@GRpcService(interceptors = NotSpringBeanInterceptor.class)
49-
@Secured({})
50-
public static class SecuredCalculatorService extends SecuredCalculatorGrpc.SecuredCalculatorImplBase{
51-
@Override
52-
public void calculate(CalculatorOuterClass.CalculatorRequest request, StreamObserver<CalculatorOuterClass.CalculatorResponse> responseObserver) {
53-
responseObserver.onNext(CalculatorService.calculate(request));
54-
responseObserver.onCompleted();
55-
5646

57-
}
58-
59-
60-
}
6147
}

grpc-spring-boot-starter-demo/src/test/java/org/lognet/springboot/grpc/auth/PrePostSecurityAuthTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import io.grpc.Status;
44
import io.grpc.StatusRuntimeException;
5+
import io.grpc.examples.CalculatorOuterClass;
6+
import io.grpc.examples.SecuredCalculatorGrpc;
57
import io.grpc.examples.tasks.Assignment;
68
import io.grpc.examples.tasks.Person;
79
import io.grpc.examples.tasks.TaskServiceGrpc;
@@ -10,9 +12,12 @@
1012
import org.junit.Assert;
1113
import org.junit.Test;
1214
import org.junit.runner.RunWith;
15+
import org.lognet.springboot.grpc.GRpcService;
1316
import org.lognet.springboot.grpc.GrpcServerTestBase;
1417
import org.lognet.springboot.grpc.demo.DemoApp;
18+
import org.lognet.springboot.grpc.demo.DemoAppConfiguration;
1519
import org.lognet.springboot.grpc.demo.ITaskService;
20+
import org.lognet.springboot.grpc.demo.NotSpringBeanInterceptor;
1621
import org.lognet.springboot.grpc.security.AuthCallCredentials;
1722
import org.lognet.springboot.grpc.security.AuthHeader;
1823
import org.lognet.springboot.grpc.security.GrpcSecurity;
@@ -22,6 +27,7 @@
2227
import org.springframework.boot.test.context.TestConfiguration;
2328
import org.springframework.boot.test.mock.mockito.MockBean;
2429
import org.springframework.context.annotation.Import;
30+
import org.springframework.security.access.prepost.PreAuthorize;
2531
import org.springframework.security.core.userdetails.User;
2632
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
2733
import org.springframework.test.context.junit4.SpringRunner;
@@ -75,6 +81,17 @@ public List<T> get(Duration duration) throws Throwable {
7581

7682
@TestConfiguration
7783
static class TestCfg extends GrpcSecurityConfigurerAdapter {
84+
@GRpcService(interceptors = NotSpringBeanInterceptor.class)
85+
@PreAuthorize("isAuthenticated()")
86+
public static class SecuredCalculatorService extends SecuredCalculatorGrpc.SecuredCalculatorImplBase{
87+
@Override
88+
public void calculate(CalculatorOuterClass.CalculatorRequest request, StreamObserver<CalculatorOuterClass.CalculatorResponse> responseObserver) {
89+
responseObserver.onNext(DemoAppConfiguration.CalculatorService.calculate(request));
90+
responseObserver.onCompleted();
91+
92+
93+
}
94+
}
7895
@Override
7996
public void configure(GrpcSecurity builder) throws Exception {
8097
builder.authorizeRequests()
@@ -119,6 +136,33 @@ public void configure(GrpcSecurity builder) throws Exception {
119136
@MockBean
120137
private ITaskService service;
121138

139+
@Test
140+
public void preAuthAnnotationOnClassTest() {
141+
142+
143+
final SecuredCalculatorGrpc.SecuredCalculatorBlockingStub stub = SecuredCalculatorGrpc
144+
.newBlockingStub(selectedChanel);
145+
146+
final CalculatorOuterClass.CalculatorResponse response = stub
147+
.withCallCredentials(user2Credentials())
148+
.calculate(CalculatorOuterClass.CalculatorRequest.newBuilder()
149+
.setNumber1(1)
150+
.setNumber2(1)
151+
.setOperation(CalculatorOuterClass.CalculatorRequest.OperationType.ADD)
152+
.build());
153+
assertThat(response.getResult(),Matchers.is(2d));
154+
155+
final StatusRuntimeException statusRuntimeException = Assert.assertThrows(StatusRuntimeException.class, () -> {
156+
stub.withCallCredentials(unAuthUserCredentials())
157+
.calculate(CalculatorOuterClass.CalculatorRequest.newBuilder()
158+
.setNumber1(1)
159+
.setNumber2(1)
160+
.setOperation(CalculatorOuterClass.CalculatorRequest.OperationType.ADD)
161+
.build());
162+
});
163+
assertThat(statusRuntimeException.getStatus().getCode(), Matchers.is(Status.Code.UNAUTHENTICATED));
164+
}
165+
122166
@Test
123167
public void unaryPreAuthorizeCallTest() {
124168
final TaskServiceGrpc.TaskServiceBlockingStub stub = TaskServiceGrpc.newBlockingStub(getChannel())

grpc-spring-boot-starter-demo/src/test/java/org/lognet/springboot/grpc/auth/UserDetailsAuthTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
import io.grpc.examples.CalculatorOuterClass;
1111
import io.grpc.examples.GreeterGrpc;
1212
import io.grpc.examples.SecuredCalculatorGrpc;
13+
import io.grpc.stub.StreamObserver;
1314
import org.hamcrest.Matchers;
1415
import org.junit.Test;
1516
import org.junit.runner.RunWith;
17+
import org.lognet.springboot.grpc.GRpcService;
1618
import org.lognet.springboot.grpc.GrpcServerTestBase;
1719
import org.lognet.springboot.grpc.demo.DemoApp;
20+
import org.lognet.springboot.grpc.demo.DemoAppConfiguration;
21+
import org.lognet.springboot.grpc.demo.NotSpringBeanInterceptor;
1822
import org.lognet.springboot.grpc.security.AuthClientInterceptor;
1923
import org.lognet.springboot.grpc.security.AuthHeader;
2024
import org.lognet.springboot.grpc.security.GrpcSecurity;
@@ -24,6 +28,7 @@
2428
import org.springframework.boot.test.context.TestConfiguration;
2529
import org.springframework.context.annotation.Bean;
2630
import org.springframework.context.annotation.Import;
31+
import org.springframework.security.access.annotation.Secured;
2732
import org.springframework.security.core.userdetails.User;
2833
import org.springframework.security.core.userdetails.UserDetails;
2934
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@@ -45,6 +50,18 @@ public class UserDetailsAuthTest extends GrpcServerTestBase {
4550

4651
@TestConfiguration
4752
static class TestCfg extends GrpcSecurityConfigurerAdapter {
53+
54+
@GRpcService(interceptors = NotSpringBeanInterceptor.class)
55+
@Secured({})
56+
public static class SecuredCalculatorService extends SecuredCalculatorGrpc.SecuredCalculatorImplBase{
57+
@Override
58+
public void calculate(CalculatorOuterClass.CalculatorRequest request, StreamObserver<CalculatorOuterClass.CalculatorResponse> responseObserver) {
59+
responseObserver.onNext(DemoAppConfiguration.CalculatorService.calculate(request));
60+
responseObserver.onCompleted();
61+
62+
63+
}
64+
}
4865
static final String pwd="strongPassword1";
4966

5067
@Bean

0 commit comments

Comments
 (0)