Skip to content

Commit a2a8fbf

Browse files
committed
#8: resolve comments || tests for grpc codec configuration
1 parent 40533fe commit a2a8fbf

File tree

5 files changed

+142
-40
lines changed

5 files changed

+142
-40
lines changed

spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/client/GrpcClientAutoConfiguration.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@
2727
import org.springframework.context.annotation.Configuration;
2828
import org.springframework.context.annotation.Import;
2929
import org.springframework.grpc.autoconfigure.client.GrpcClientProperties.NamedChannel;
30+
import org.springframework.grpc.autoconfigure.common.codec.GrpcCodecConfiguration;
3031
import org.springframework.grpc.client.GrpcChannelConfigurer;
3132

3233
@Configuration(proxyBeanMethods = false)
3334
@EnableConfigurationProperties(GrpcClientProperties.class)
3435
@Import({ GrpcChannelFactoryConfigurations.ShadedNettyChannelFactoryConfiguration.class,
3536
GrpcChannelFactoryConfigurations.NettyChannelFactoryConfiguration.class,
36-
GrpcChannelFactoryConfigurations.DefaultChannelFactoryConfiguration.class })
37+
GrpcChannelFactoryConfigurations.DefaultChannelFactoryConfiguration.class, GrpcCodecConfiguration.class })
3738
public class GrpcClientAutoConfiguration {
3839

3940
@Bean
@@ -86,13 +87,13 @@ else if (ShadedNettyChannelFactoryHelper.isAvailable()) {
8687

8788
@ConditionalOnBean(CompressorRegistry.class)
8889
@Bean
89-
public GrpcChannelConfigurer compressionServerConfigurer(final CompressorRegistry registry) {
90+
GrpcChannelConfigurer compressionClientConfigurer(CompressorRegistry registry) {
9091
return (name, builder) -> builder.compressorRegistry(registry);
9192
}
9293

9394
@ConditionalOnBean(DecompressorRegistry.class)
9495
@Bean
95-
public GrpcChannelConfigurer decompressionServerConfigurer(final DecompressorRegistry registry) {
96+
GrpcChannelConfigurer decompressionClientConfigurer(DecompressorRegistry registry) {
9697
return (name, builder) -> builder.decompressorRegistry(registry);
9798
}
9899

spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/common/codec/GrpcCodecAutoConfiguration.java

Lines changed: 0 additions & 33 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright 2024-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.grpc.autoconfigure.common.codec;
18+
19+
import io.grpc.Codec;
20+
import io.grpc.Compressor;
21+
import io.grpc.Decompressor;
22+
import io.grpc.DecompressorRegistry;
23+
import io.grpc.CompressorRegistry;
24+
import org.springframework.beans.factory.ObjectProvider;
25+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
26+
import org.springframework.context.annotation.Bean;
27+
import org.springframework.context.annotation.Configuration;
28+
29+
/**
30+
* The autoconfiguration that contains all codec related beans for clients/servers.
31+
*
32+
* @author Andrei Lisa
33+
*/
34+
@Configuration(proxyBeanMethods = false)
35+
@ConditionalOnClass(Codec.class)
36+
public class GrpcCodecConfiguration {
37+
38+
@Bean
39+
public CompressorRegistry compressorRegistry(ObjectProvider<Compressor> compressors) {
40+
CompressorRegistry registry = CompressorRegistry.getDefaultInstance();
41+
compressors.forEach(registry::register);
42+
return registry;
43+
}
44+
45+
@Bean
46+
public DecompressorRegistry decompressorRegistry(ObjectProvider<Decompressor> decompressors) {
47+
DecompressorRegistry registry = DecompressorRegistry.getDefaultInstance();
48+
decompressors.forEach(decompressor -> registry.with(decompressor, false));
49+
return registry;
50+
}
51+
52+
}

spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/GrpcServerAutoConfiguration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.springframework.context.annotation.Bean;
3333
import org.springframework.context.annotation.Import;
3434
import org.springframework.core.Ordered;
35+
import org.springframework.grpc.autoconfigure.common.codec.GrpcCodecConfiguration;
3536
import org.springframework.grpc.server.GrpcServerFactory;
3637
import org.springframework.grpc.server.ServerBuilderCustomizer;
3738
import org.springframework.grpc.server.lifecycle.GrpcServerLifecycle;
@@ -52,7 +53,7 @@
5253
@EnableConfigurationProperties(GrpcServerProperties.class)
5354
@Import({ GrpcServerFactoryConfigurations.ShadedNettyServerFactoryConfiguration.class,
5455
GrpcServerFactoryConfigurations.NettyServerFactoryConfiguration.class,
55-
GrpcServerFactoryConfigurations.ServiceProviderServerFactoryConfiguration.class })
56+
GrpcServerFactoryConfigurations.ServiceProviderServerFactoryConfiguration.class, GrpcCodecConfiguration.class })
5657
public class GrpcServerAutoConfiguration {
5758

5859
private final GrpcServerProperties properties;
@@ -75,14 +76,13 @@ ServerBuilderCustomizers serverBuilderCustomizers(ObjectProvider<ServerBuilderCu
7576

7677
@ConditionalOnBean(CompressorRegistry.class)
7778
@Bean
78-
public ServerBuilderCustomizer<NettyServerBuilder> compressionServerConfigurer(final CompressorRegistry registry) {
79+
ServerBuilderCustomizer<NettyServerBuilder> compressionServerConfigurer(CompressorRegistry registry) {
7980
return builder -> builder.compressorRegistry(registry);
8081
}
8182

8283
@ConditionalOnBean(DecompressorRegistry.class)
8384
@Bean
84-
public ServerBuilderCustomizer<NettyServerBuilder> decompressionServerConfigurer(
85-
final DecompressorRegistry registry) {
85+
ServerBuilderCustomizer<NettyServerBuilder> decompressionServerConfigurer(DecompressorRegistry registry) {
8686
return builder -> builder.decompressorRegistry(registry);
8787
}
8888

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package org.springframework.grpc.autoconfigure.common;
2+
3+
import io.grpc.Compressor;
4+
import io.grpc.CompressorRegistry;
5+
import io.grpc.Decompressor;
6+
import io.grpc.DecompressorRegistry;
7+
import org.junit.jupiter.api.Test;
8+
import org.springframework.boot.autoconfigure.AutoConfigurations;
9+
import org.springframework.boot.test.context.TestConfiguration;
10+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
11+
import org.springframework.context.annotation.Bean;
12+
import org.springframework.grpc.autoconfigure.common.codec.GrpcCodecConfiguration;
13+
14+
import java.io.InputStream;
15+
import java.io.OutputStream;
16+
17+
import static org.assertj.core.api.Assertions.assertThat;
18+
19+
/**
20+
* Tests for {@link GrpcCodecConfiguration}.
21+
*
22+
* @author Andrei Lisa
23+
*/
24+
public class GrpcCodecConfigurationTest {
25+
26+
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
27+
.withConfiguration(AutoConfigurations.of(GrpcCodecConfiguration.class));
28+
29+
@Test
30+
void testCompressorRegistryBean() {
31+
contextRunner.run(context -> {
32+
assertThat(context).hasSingleBean(CompressorRegistry.class);
33+
CompressorRegistry registry = context.getBean(CompressorRegistry.class);
34+
assertThat(registry).isNotNull();
35+
});
36+
}
37+
38+
@Test
39+
void testDecompressorRegistryBean() {
40+
contextRunner.run(context -> {
41+
assertThat(context).hasSingleBean(DecompressorRegistry.class);
42+
DecompressorRegistry registry = context.getBean(DecompressorRegistry.class);
43+
assertThat(registry).isNotNull();
44+
});
45+
}
46+
47+
@TestConfiguration
48+
static class TestConfig {
49+
50+
@Bean
51+
public Compressor testCompressor() {
52+
return new Compressor() {
53+
@Override
54+
public String getMessageEncoding() {
55+
return "testCompressor";
56+
}
57+
58+
@Override
59+
public OutputStream compress(OutputStream os) {
60+
return null;
61+
}
62+
};
63+
}
64+
65+
@Bean
66+
public Decompressor testDecompressor() {
67+
return new Decompressor() {
68+
@Override
69+
public String getMessageEncoding() {
70+
return "testDecompressor";
71+
}
72+
73+
@Override
74+
public InputStream decompress(InputStream is) {
75+
return null;
76+
}
77+
};
78+
}
79+
80+
}
81+
82+
}

0 commit comments

Comments
 (0)