Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Validate zstd compression #10766

Open
wants to merge 1 commit into
base: 4.5.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions gradle/libs.versions.toml
Expand Up @@ -53,6 +53,7 @@ systemlambda = "1.2.1"
testcontainers = "1.19.7"
vertx = "4.5.7"
wiremock = "2.33.2"
zstdjni = "1.5.6-3"

#
# Versions which start with managed- are managed by Micronaut in the sense
Expand Down Expand Up @@ -271,6 +272,8 @@ httpcomponents-mime = { module = "org.apache.httpcomponents:httpmime", version.r

wiremock = { module = "com.github.tomakehurst:wiremock-jre8", version.ref = "wiremock" }

zstdjni = { module = "com.github.luben:zstd-jni", version.ref = "zstdjni" }

[bundles]
asm = ["asm", "asm-commons"]

Expand Down
1 change: 1 addition & 0 deletions http-server-netty/build.gradle
Expand Up @@ -34,6 +34,7 @@ dependencies {
compileOnly libs.managed.netty.incubator.codec.http3
compileOnly libs.brotli4j

testRuntimeOnly libs.zstdjni
testImplementation libs.jmh.core
testAnnotationProcessor libs.jmh.generator.annprocess

Expand Down
Expand Up @@ -24,6 +24,8 @@ import io.netty.handler.codec.compression.SnappyFrameDecoder
import io.netty.handler.codec.compression.SnappyFrameEncoder
import io.netty.handler.codec.compression.ZlibCodecFactory
import io.netty.handler.codec.compression.ZlibWrapper
import io.netty.handler.codec.compression.ZstdDecoder
import io.netty.handler.codec.compression.ZstdEncoder
import io.netty.handler.codec.http.HttpHeaderNames
import io.netty.handler.codec.http.HttpHeaderValues
import jakarta.inject.Singleton
Expand Down Expand Up @@ -72,6 +74,7 @@ class CompressionSpec extends Specification {
HttpHeaderValues.GZIP | ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP)
HttpHeaderValues.DEFLATE | ZlibCodecFactory.newZlibDecoder(ZlibWrapper.ZLIB)
HttpHeaderValues.SNAPPY | new SnappyFrameDecoder()
HttpHeaderValues.ZSTD | new ZstdDecoder()
}

def compressionLevel(int threshold, int actual, boolean compressed) {
Expand Down Expand Up @@ -142,6 +145,7 @@ class CompressionSpec extends Specification {
HttpHeaderValues.DEFLATE | ZlibCodecFactory.newZlibEncoder(ZlibWrapper.ZLIB)
HttpHeaderValues.X_DEFLATE | ZlibCodecFactory.newZlibEncoder(ZlibWrapper.ZLIB)
HttpHeaderValues.SNAPPY | new SnappyFrameEncoder()
HttpHeaderValues.ZSTD | new ZstdEncoder()
}

@Requires(property = "spec.name", value = "CompressionSpec")
Expand Down
Expand Up @@ -15,6 +15,7 @@ import io.netty.channel.embedded.EmbeddedChannel
import io.netty.handler.codec.compression.SnappyFrameEncoder
import io.netty.handler.codec.compression.ZlibCodecFactory
import io.netty.handler.codec.compression.ZlibWrapper
import io.netty.handler.codec.compression.ZstdEncoder
import io.netty.handler.codec.http.DefaultFullHttpRequest
import io.netty.handler.codec.http.DefaultFullHttpResponse
import io.netty.handler.codec.http.DefaultHttpContent
Expand Down Expand Up @@ -414,6 +415,7 @@ class PipeliningServerHandlerSpec extends Specification {
HttpHeaderValues.DEFLATE | ZlibCodecFactory.newZlibEncoder(ZlibWrapper.NONE)
HttpHeaderValues.X_DEFLATE | ZlibCodecFactory.newZlibEncoder(ZlibWrapper.NONE)
HttpHeaderValues.SNAPPY | new SnappyFrameEncoder()
HttpHeaderValues.ZSTD | new ZstdEncoder()
}

def 'decompression full to full'(ChannelHandler compressor, CharSequence contentEncoding) {
Expand Down Expand Up @@ -465,6 +467,7 @@ class PipeliningServerHandlerSpec extends Specification {
HttpHeaderValues.DEFLATE | ZlibCodecFactory.newZlibEncoder(ZlibWrapper.NONE)
HttpHeaderValues.X_DEFLATE | ZlibCodecFactory.newZlibEncoder(ZlibWrapper.NONE)
HttpHeaderValues.SNAPPY | new SnappyFrameEncoder()
HttpHeaderValues.ZSTD | new ZstdEncoder()
}

def 'decompression parts to stream'(ChannelHandler compressor, CharSequence contentEncoding) {
Expand Down Expand Up @@ -523,6 +526,7 @@ class PipeliningServerHandlerSpec extends Specification {
HttpHeaderValues.DEFLATE | ZlibCodecFactory.newZlibEncoder(ZlibWrapper.NONE)
HttpHeaderValues.X_DEFLATE | ZlibCodecFactory.newZlibEncoder(ZlibWrapper.NONE)
HttpHeaderValues.SNAPPY | new SnappyFrameEncoder()
HttpHeaderValues.ZSTD | new ZstdEncoder()
}

def 'empty streaming response while in queue'() {
Expand Down