コード例 #1
0
        public async Task Should_skip_decompression_if_no_compression_header_is_found()
        {
            var body    = new byte[] { 1, 2, 3 };
            var message = new Message(body);

            var decompressorExecuted = false;

            var receivePlugin = new CompressionPlugin(
                new CompressionConfiguration("noop", bytes => bytes, 1,
                                             new Dictionary <string, Func <byte[], byte[]> >
            {
                {
                    "compression-x", bytes =>
                    {
                        decompressorExecuted = true;
                        return(bytes);
                    }
                }
            }));

            var receivedMessage = await receivePlugin.AfterMessageReceive(message);

            Assert.Equal(body, receivedMessage.Body);

            Assert.False(decompressorExecuted, "Decompressing function should not have executed, but it did.");
        }
        /// <summary>
        /// Register compression plugin with customizations.
        /// </summary>
        /// <param name="compressionConfiguration">Compression to be used.</param>
        /// <param name="client"></param>
        public static ServiceBusPlugin RegisterCompressionPlugin(this ClientEntity client, CompressionConfiguration compressionConfiguration)
        {
            ServiceBusPlugin plugin = new CompressionPlugin(compressionConfiguration);

            client.RegisterPlugin(plugin);

            return(plugin);
        }
コード例 #3
0
        public async Task Should_not_compress_empty_body()
        {
            var message = new Message(new byte[] {});

            var plugin = new CompressionPlugin(new GzipCompressionConfiguration());
            var result = await plugin.BeforeMessageSend(message);

            Assert.Equal(Array.Empty <byte>(), result.Body);
            Assert.False(message.UserProperties.ContainsKey(Headers.CompressionMethodName), "Header should not be found for a message with empty body.");
        }
コード例 #4
0
        public async Task Should_not_compress_null_body()
        {
            var message = new Message(null);

            var plugin = new CompressionPlugin(new GzipCompressionConfiguration());
            var result = await plugin.BeforeMessageSend(message);

            Assert.Null(result.Body);
            Assert.False(message.UserProperties.ContainsKey(Headers.CompressionMethodName), "Header should not be found for a message with null body.");
        }
コード例 #5
0
        public async Task Should_not_compress_body_smaller_than_configured_size()
        {
            var bytes   = new byte[] { 1, 2, 3 };
            var message = new Message(bytes);

            var plugin = new CompressionPlugin(new GzipCompressionConfiguration());
            var result = await plugin.BeforeMessageSend(message);

            Assert.Equal(bytes, result.Body);
            Assert.False(message.UserProperties.ContainsKey(Headers.CompressionMethodName), "Header should not be found for a message with empty body.");
        }
コード例 #6
0
        public async Task Should_throw_for_not_configured_compression_method()
        {
            var bytes   = new byte[] { 1, 2, 3 };
            var message = new Message(bytes);

            var plugin      = new CompressionPlugin(new GzipCompressionConfiguration());
            var sentMessage = await plugin.BeforeMessageSend(message);

            sentMessage.UserProperties[Headers.CompressionMethodName] = "Unknown";

            await Assert.ThrowsAsync <Exception>(() => plugin.AfterMessageReceive(sentMessage));
        }
コード例 #7
0
        public async Task Should_receive_it()
        {
            var payload = new string('A', 1500);
            var bytes   = Encoding.UTF8.GetBytes(payload);
            var message = new Message(bytes);

            var plugin = new CompressionPlugin(new GzipCompressionConfiguration());
            var result = await plugin.BeforeMessageSend(message);

            var receivedMessage = await plugin.AfterMessageReceive(result);

            Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body));
            Assert.Equal("GZip", message.UserProperties[Headers.CompressionMethodName]);
        }
コード例 #8
0
        public async Task Should_throw_meaningful_exception_for_erred_compression_func()
        {
            var configuration = new CompressionConfiguration("test", bytes => throw new Exception("compressor threw"), 1,
                                                             new Dictionary <string, Func <byte[], byte[]> > {
                { "test", bytes => null }
            });

            var plugin = new CompressionPlugin(configuration);

            var message = new Message(new byte[] { 1, 2, 3 });

            var exception = await Assert.ThrowsAsync <Exception>(() => plugin.BeforeMessageSend(message));

            Assert.StartsWith("User provided compression delegate threw an exception.", exception.Message);
        }
コード例 #9
0
        public async Task Should_be_able_to_decompress_messages_sent_with_different_compression_other_than_default()
        {
            var deflateCompressionConfiguration = new DeflateCompressionConfiguration();

            var gzipCompressionConfiguration = new GzipCompressionConfiguration(1);

            gzipCompressionConfiguration.AddDecompressor(deflateCompressionConfiguration.CompressionMethodName, DeflateDecompressor);

            var bytes   = Enumerable.Range(1, 1024).Select(x => (byte)x).ToArray();
            var message = new Message(bytes);

            message.UserProperties[Headers.CompressionMethodName] = deflateCompressionConfiguration.CompressionMethodName;

            var sendPlugin  = new CompressionPlugin(deflateCompressionConfiguration);
            var sentMessage = await sendPlugin.BeforeMessageSend(message);

            var receivePlugin   = new CompressionPlugin(gzipCompressionConfiguration);
            var receivedMessage = await receivePlugin.AfterMessageReceive(sentMessage);

            Assert.Equal(bytes, receivedMessage.Body);
        }
コード例 #10
0
        public async Task Should_compress_normal_body()
        {
            var payload = new string('A', 1500);
            var bytes   = Encoding.UTF8.GetBytes(payload);
            var message = new Message(bytes);

            var plugin = new CompressionPlugin(new GzipCompressionConfiguration());
            var result = await plugin.BeforeMessageSend(message);

            var bodyAsBase64String = Convert.ToBase64String(result.Body);

#if NETFRAMEWORK
            Assert.Equal("H4sIAAAAAAAEAHN0HAWjYBSMglEw3AAATW9s69wFAAA=", bodyAsBase64String);
            Assert.Equal(32, message.UserProperties[Headers.CompressedBodySize]);
#else
            Assert.Equal("H4sIAAAAAAAAC3N0HAWjITAaAqMhMBoCjsMMAABNb2zr3AUAAA==", bodyAsBase64String);
            Assert.Equal(37, message.UserProperties[Headers.CompressedBodySize]);
#endif
            Assert.Equal("GZip", message.UserProperties[Headers.CompressionMethodName]);
            Assert.Equal(payload.Length, message.UserProperties[Headers.OriginalBodySize]);
        }