Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: components/cast_channel/cast_framer_unittest.cc

Issue 2926313002: Revert of [cast_channel] Move cast_channel related files from //extensions to //components (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/cast_channel/cast_framer.cc ('k') | components/cast_channel/cast_message_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/cast_channel/cast_framer.h"
6
7 #include <stddef.h>
8
9 #include <algorithm>
10 #include <string>
11
12 #include "components/cast_channel/proto/cast_channel.pb.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace cast_channel {
16
17 using ::cast_channel::ChannelError;
18
19 class CastFramerTest : public testing::Test {
20 public:
21 CastFramerTest() {}
22 ~CastFramerTest() override {}
23
24 void SetUp() override {
25 cast_message_.set_protocol_version(CastMessage::CASTV2_1_0);
26 cast_message_.set_source_id("source");
27 cast_message_.set_destination_id("destination");
28 cast_message_.set_namespace_("namespace");
29 cast_message_.set_payload_type(CastMessage::STRING);
30 cast_message_.set_payload_utf8("payload");
31 ASSERT_TRUE(MessageFramer::Serialize(cast_message_, &cast_message_str_));
32
33 buffer_ = new net::GrowableIOBuffer;
34 buffer_->SetCapacity(MessageFramer::MessageHeader::max_message_size());
35 framer_.reset(new MessageFramer(buffer_.get()));
36 }
37
38 void WriteToBuffer(const std::string& data) {
39 memcpy(buffer_->StartOfBuffer(), data.data(), data.size());
40 }
41
42 protected:
43 CastMessage cast_message_;
44 std::string cast_message_str_;
45 scoped_refptr<net::GrowableIOBuffer> buffer_;
46 std::unique_ptr<MessageFramer> framer_;
47 };
48
49 TEST_F(CastFramerTest, TestMessageFramerCompleteMessage) {
50 ChannelError error;
51 size_t message_length;
52
53 WriteToBuffer(cast_message_str_);
54
55 // Receive 1 byte of the header, framer demands 3 more bytes.
56 EXPECT_EQ(4u, framer_->BytesRequested());
57 EXPECT_EQ(nullptr, framer_->Ingest(1, &message_length, &error).get());
58 EXPECT_EQ(ChannelError::NONE, error);
59 EXPECT_EQ(3u, framer_->BytesRequested());
60
61 // Ingest remaining 3, expect that the framer has moved on to requesting the
62 // body contents.
63 EXPECT_EQ(nullptr, framer_->Ingest(3, &message_length, &error).get());
64 EXPECT_EQ(ChannelError::NONE, error);
65 EXPECT_EQ(
66 cast_message_str_.size() - MessageFramer::MessageHeader::header_size(),
67 framer_->BytesRequested());
68
69 // Remainder of packet sent over the wire.
70 std::unique_ptr<CastMessage> message;
71 message = framer_->Ingest(framer_->BytesRequested(), &message_length, &error);
72 EXPECT_NE(static_cast<CastMessage*>(nullptr), message.get());
73 EXPECT_EQ(ChannelError::NONE, error);
74 EXPECT_EQ(message->SerializeAsString(), cast_message_.SerializeAsString());
75 EXPECT_EQ(4u, framer_->BytesRequested());
76 EXPECT_EQ(message->SerializeAsString().size(), message_length);
77 }
78
79 TEST_F(CastFramerTest, TestSerializeErrorMessageTooLarge) {
80 std::string serialized;
81 CastMessage big_message;
82 big_message.CopyFrom(cast_message_);
83 std::string payload;
84 payload.append(MessageFramer::MessageHeader::max_message_size() + 1, 'x');
85 big_message.set_payload_utf8(payload);
86 EXPECT_FALSE(MessageFramer::Serialize(big_message, &serialized));
87 }
88
89 TEST_F(CastFramerTest, TestIngestIllegalLargeMessage) {
90 std::string mangled_cast_message = cast_message_str_;
91 mangled_cast_message[0] = 88;
92 mangled_cast_message[1] = 88;
93 mangled_cast_message[2] = 88;
94 mangled_cast_message[3] = 88;
95 WriteToBuffer(mangled_cast_message);
96
97 size_t bytes_ingested;
98 ChannelError error;
99 EXPECT_EQ(4u, framer_->BytesRequested());
100 EXPECT_EQ(nullptr, framer_->Ingest(4, &bytes_ingested, &error).get());
101 EXPECT_EQ(ChannelError::INVALID_MESSAGE, error);
102 EXPECT_EQ(0u, framer_->BytesRequested());
103
104 // Test that the parser enters a terminal error state.
105 WriteToBuffer(cast_message_str_);
106 EXPECT_EQ(0u, framer_->BytesRequested());
107 EXPECT_EQ(nullptr, framer_->Ingest(4, &bytes_ingested, &error).get());
108 EXPECT_EQ(ChannelError::INVALID_MESSAGE, error);
109 EXPECT_EQ(0u, framer_->BytesRequested());
110 }
111
112 TEST_F(CastFramerTest, TestUnparsableBodyProto) {
113 // Message header is OK, but the body is replaced with "x"en.
114 std::string mangled_cast_message = cast_message_str_;
115 for (size_t i = MessageFramer::MessageHeader::header_size();
116 i < mangled_cast_message.size(); ++i) {
117 std::fill(mangled_cast_message.begin() +
118 MessageFramer::MessageHeader::header_size(),
119 mangled_cast_message.end(), 'x');
120 }
121 WriteToBuffer(mangled_cast_message);
122
123 // Send header.
124 size_t message_length;
125 ChannelError error;
126 EXPECT_EQ(4u, framer_->BytesRequested());
127 EXPECT_EQ(nullptr, framer_->Ingest(4, &message_length, &error).get());
128 EXPECT_EQ(ChannelError::NONE, error);
129 EXPECT_EQ(cast_message_str_.size() - 4, framer_->BytesRequested());
130
131 // Send body, expect an error.
132 std::unique_ptr<CastMessage> message;
133 EXPECT_EQ(nullptr,
134 framer_->Ingest(framer_->BytesRequested(), &message_length, &error)
135 .get());
136 EXPECT_EQ(ChannelError::INVALID_MESSAGE, error);
137 }
138 } // namespace cast_channel
OLDNEW
« no previous file with comments | « components/cast_channel/cast_framer.cc ('k') | components/cast_channel/cast_message_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698