#include "config.h"
#include "modules/websockets/WebSocketPerMessageDeflate.h"
-#include "wtf/Vector.h"
#include "wtf/text/StringHash.h"
#include <algorithm>
#include <gtest/gtest.h>
#include <iterator>
-using namespace WebCore;
-
+namespace blink {
namespace {
TEST(WebSocketPerMessageDeflateTest, TestDeflateHelloTakeOver)
c.resetDeflateBuffer();
ASSERT_TRUE(c.deflate(f2));
- EXPECT_EQ(2u, f2.payloadLength);
- EXPECT_EQ(0, memcmp("\x02\x00", f2.payload, f2.payloadLength));
+ EXPECT_EQ(1u, f2.payloadLength);
+ EXPECT_EQ(0, memcmp("\x00", f2.payload, f2.payloadLength));
EXPECT_TRUE(f2.final);
EXPECT_FALSE(f2.compress);
EXPECT_TRUE(f3.final);
}
+TEST(WebSocketPerMessageDeflateTest, TestInflateMultipleBlocksOverMultipleFrames)
+{
+ WebSocketPerMessageDeflate c;
+ c.enable(8, WebSocketDeflater::TakeOverContext);
+ WebSocketFrame::OpCode opcode = WebSocketFrame::OpCodeText;
+ WebSocketFrame::OpCode continuation = WebSocketFrame::OpCodeContinuation;
+ std::string expected = "HelloHello";
+ std::string actual;
+ WebSocketFrame f1(opcode, "\xf2\x48\xcd\xc9\xc9\x07\x00\x00\x00\xff\xff", 11, WebSocketFrame::Compress);
+ WebSocketFrame f2(continuation, "\xf2\x00\x11\x00\x00", 5, WebSocketFrame::Final);
+
+ ASSERT_TRUE(c.inflate(f1));
+ EXPECT_FALSE(f1.compress);
+ EXPECT_FALSE(f1.final);
+ actual += std::string(f1.payload, f1.payloadLength);
+
+ c.resetInflateBuffer();
+ ASSERT_TRUE(c.inflate(f2));
+ EXPECT_FALSE(f2.compress);
+ EXPECT_TRUE(f2.final);
+ actual += std::string(f2.payload, f2.payloadLength);
+
+ EXPECT_EQ(expected, actual);
+}
+
TEST(WebSocketPerMessageDeflateTest, TestInflateEmptyFrame)
{
WebSocketPerMessageDeflate c;
String actual = WebSocketPerMessageDeflate().createExtensionProcessor()->handshakeString();
EXPECT_EQ(String("permessage-deflate; client_max_window_bits"), actual);
}
+
} // namespace
+} // namespace blink