Skip to content

Commit

Permalink
Validate zstd compression
Browse files Browse the repository at this point in the history
  • Loading branch information
sullis committed Apr 25, 2024
1 parent 336907a commit 4da7ff4
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 0 deletions.
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

0 comments on commit 4da7ff4

Please sign in to comment.