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

Side by Side Diff: extensions/browser/api/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
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 "extensions/browser/api/cast_channel/cast_framer.h"
6
7 #include <stddef.h>
8
9 #include <algorithm>
10 #include <string>
11
12 #include "extensions/common/api/cast_channel/cast_channel.pb.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace extensions {
16 namespace api {
17 namespace cast_channel {
18
19 using ::cast_channel::ChannelError;
20
21 class CastFramerTest : public testing::Test {
22 public:
23 CastFramerTest() {}
24 ~CastFramerTest() override {}
25
26 void SetUp() override {
27 cast_message_.set_protocol_version(CastMessage::CASTV2_1_0);
28 cast_message_.set_source_id("source");
29 cast_message_.set_destination_id("destination");
30 cast_message_.set_namespace_("namespace");
31 cast_message_.set_payload_type(CastMessage::STRING);
32 cast_message_.set_payload_utf8("payload");
33 ASSERT_TRUE(MessageFramer::Serialize(cast_message_, &cast_message_str_));
34
35 buffer_ = new net::GrowableIOBuffer;
36 buffer_->SetCapacity(MessageFramer::MessageHeader::max_message_size());
37 framer_.reset(new MessageFramer(buffer_.get()));
38 }
39
40 void WriteToBuffer(const std::string& data) {
41 memcpy(buffer_->StartOfBuffer(), data.data(), data.size());
42 }
43
44 protected:
45 CastMessage cast_message_;
46 std::string cast_message_str_;
47 scoped_refptr<net::GrowableIOBuffer> buffer_;
48 std::unique_ptr<MessageFramer> framer_;
49 };
50
51 TEST_F(CastFramerTest, TestMessageFramerCompleteMessage) {
52 ChannelError error;
53 size_t message_length;
54
55 WriteToBuffer(cast_message_str_);
56
57 // Receive 1 byte of the header, framer demands 3 more bytes.
58 EXPECT_EQ(4u, framer_->BytesRequested());
59 EXPECT_EQ(nullptr, framer_->Ingest(1, &message_length, &error).get());
60 EXPECT_EQ(ChannelError::NONE, error);
61 EXPECT_EQ(3u, framer_->BytesRequested());
62
63 // Ingest remaining 3, expect that the framer has moved on to requesting the
64 // body contents.
65 EXPECT_EQ(nullptr, framer_->Ingest(3, &message_length, &error).get());
66 EXPECT_EQ(ChannelError::NONE, error);
67 EXPECT_EQ(
68 cast_message_str_.size() - MessageFramer::MessageHeader::header_size(),
69 framer_->BytesRequested());
70
71 // Remainder of packet sent over the wire.
72 std::unique_ptr<CastMessage> message;
73 message = framer_->Ingest(framer_->BytesRequested(), &message_length, &error);
74 EXPECT_NE(static_cast<CastMessage*>(nullptr), message.get());
75 EXPECT_EQ(ChannelError::NONE, error);
76 EXPECT_EQ(message->SerializeAsString(), cast_message_.SerializeAsString());
77 EXPECT_EQ(4u, framer_->BytesRequested());
78 EXPECT_EQ(message->SerializeAsString().size(), message_length);
79 }
80
81 TEST_F(CastFramerTest, TestSerializeErrorMessageTooLarge) {
82 std::string serialized;
83 CastMessage big_message;
84 big_message.CopyFrom(cast_message_);
85 std::string payload;
86 payload.append(MessageFramer::MessageHeader::max_message_size() + 1, 'x');
87 big_message.set_payload_utf8(payload);
88 EXPECT_FALSE(MessageFramer::Serialize(big_message, &serialized));
89 }
90
91 TEST_F(CastFramerTest, TestIngestIllegalLargeMessage) {
92 std::string mangled_cast_message = cast_message_str_;
93 mangled_cast_message[0] = 88;
94 mangled_cast_message[1] = 88;
95 mangled_cast_message[2] = 88;
96 mangled_cast_message[3] = 88;
97 WriteToBuffer(mangled_cast_message);
98
99 size_t bytes_ingested;
100 ChannelError error;
101 EXPECT_EQ(4u, framer_->BytesRequested());
102 EXPECT_EQ(nullptr, framer_->Ingest(4, &bytes_ingested, &error).get());
103 EXPECT_EQ(ChannelError::INVALID_MESSAGE, error);
104 EXPECT_EQ(0u, framer_->BytesRequested());
105
106 // Test that the parser enters a terminal error state.
107 WriteToBuffer(cast_message_str_);
108 EXPECT_EQ(0u, framer_->BytesRequested());
109 EXPECT_EQ(nullptr, framer_->Ingest(4, &bytes_ingested, &error).get());
110 EXPECT_EQ(ChannelError::INVALID_MESSAGE, error);
111 EXPECT_EQ(0u, framer_->BytesRequested());
112 }
113
114 TEST_F(CastFramerTest, TestUnparsableBodyProto) {
115 // Message header is OK, but the body is replaced with "x"en.
116 std::string mangled_cast_message = cast_message_str_;
117 for (size_t i = MessageFramer::MessageHeader::header_size();
118 i < mangled_cast_message.size();
119 ++i) {
120 std::fill(mangled_cast_message.begin() +
121 MessageFramer::MessageHeader::header_size(),
122 mangled_cast_message.end(),
123 'x');
124 }
125 WriteToBuffer(mangled_cast_message);
126
127 // Send header.
128 size_t message_length;
129 ChannelError error;
130 EXPECT_EQ(4u, framer_->BytesRequested());
131 EXPECT_EQ(nullptr, framer_->Ingest(4, &message_length, &error).get());
132 EXPECT_EQ(ChannelError::NONE, error);
133 EXPECT_EQ(cast_message_str_.size() - 4, framer_->BytesRequested());
134
135 // Send body, expect an error.
136 std::unique_ptr<CastMessage> message;
137 EXPECT_EQ(nullptr, framer_->Ingest(framer_->BytesRequested(), &message_length,
138 &error).get());
139 EXPECT_EQ(ChannelError::INVALID_MESSAGE, error);
140 }
141 } // namespace cast_channel
142 } // namespace api
143 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/api/cast_channel/cast_framer.cc ('k') | extensions/browser/api/cast_channel/cast_message_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698