- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / protocol / content_description_unittest.cc
1 // Copyright (c) 2012 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 "remoting/protocol/content_description.h"
6
7 #include <string>
8
9 #include "base/logging.h"
10 #include "remoting/protocol/authenticator.h"
11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h"
14
15 namespace remoting {
16 namespace protocol {
17
18 TEST(ContentDescriptionTest, FormatAndParse) {
19   scoped_ptr<CandidateSessionConfig> config =
20       CandidateSessionConfig::CreateDefault();
21   ContentDescription description(
22       config.Pass(), Authenticator::CreateEmptyAuthenticatorMessage());
23   scoped_ptr<buzz::XmlElement> xml(description.ToXml());
24   LOG(ERROR) << xml->Str();
25   scoped_ptr<ContentDescription> parsed(
26       ContentDescription::ParseXml(xml.get()));
27   ASSERT_TRUE(parsed.get());
28   EXPECT_TRUE(description.config()->control_configs() ==
29               parsed->config()->control_configs());
30   EXPECT_TRUE(description.config()->video_configs() ==
31               parsed->config()->video_configs());
32   EXPECT_TRUE(description.config()->event_configs() ==
33               parsed->config()->event_configs());
34   EXPECT_TRUE(description.config()->audio_configs() ==
35               parsed->config()->audio_configs());
36 }
37
38 // Verify that we can still parse configs with transports that we don't
39 // recognize.
40 TEST(ContentDescriptionTest, ParseUnknown) {
41   std::string kTestDescription =
42       "<description xmlns=\"google:remoting\">"
43       "  <control transport=\"stream\" version=\"2\"/>"
44       "  <event transport=\"stream\" version=\"2\"/>"
45       "  <event transport=\"new_awesome_transport\" version=\"3\"/>"
46       "  <video transport=\"stream\" version=\"2\" codec=\"vp8\"/>"
47       "  <authentication/>"
48       "</description>";
49   scoped_ptr<buzz::XmlElement> xml(buzz::XmlElement::ForStr(kTestDescription));
50   scoped_ptr<ContentDescription> parsed(
51       ContentDescription::ParseXml(xml.get()));
52   ASSERT_TRUE(parsed.get());
53   EXPECT_EQ(1U, parsed->config()->event_configs().size());
54   EXPECT_TRUE(parsed->config()->event_configs()[0] ==
55               ChannelConfig(ChannelConfig::TRANSPORT_STREAM,
56                             kDefaultStreamVersion,
57                             ChannelConfig::CODEC_UNDEFINED));
58 }
59
60 // Verify that we can parse configs with none transport without version and
61 // codec.
62 TEST(ContentDescriptionTest, NoneTransport) {
63   std::string kTestDescription =
64       "<description xmlns=\"google:remoting\">"
65       "  <control transport=\"stream\" version=\"2\"/>"
66       "  <event transport=\"stream\" version=\"2\"/>"
67       "  <event transport=\"stream\" version=\"2\"/>"
68       "  <video transport=\"stream\" version=\"2\" codec=\"vp8\"/>"
69       "  <audio transport=\"none\"/>"
70       "  <authentication/>"
71       "</description>";
72   scoped_ptr<buzz::XmlElement> xml(buzz::XmlElement::ForStr(kTestDescription));
73   scoped_ptr<ContentDescription> parsed(
74       ContentDescription::ParseXml(xml.get()));
75   ASSERT_TRUE(parsed.get());
76   EXPECT_EQ(1U, parsed->config()->audio_configs().size());
77   EXPECT_TRUE(parsed->config()->audio_configs()[0] == ChannelConfig());
78 }
79
80 // Verify that we can parse configs with none transport with version and
81 // codec.
82 TEST(ContentDescriptionTest, NoneTransportWithCodec) {
83   std::string kTestDescription =
84       "<description xmlns=\"google:remoting\">"
85       "  <control transport=\"stream\" version=\"2\"/>"
86       "  <event transport=\"stream\" version=\"2\"/>"
87       "  <event transport=\"stream\" version=\"2\"/>"
88       "  <video transport=\"stream\" version=\"2\" codec=\"vp8\"/>"
89       "  <audio transport=\"none\" version=\"2\" codec=\"verbatim\"/>"
90       "  <authentication/>"
91       "</description>";
92   scoped_ptr<buzz::XmlElement> xml(buzz::XmlElement::ForStr(kTestDescription));
93   scoped_ptr<ContentDescription> parsed(
94       ContentDescription::ParseXml(xml.get()));
95   ASSERT_TRUE(parsed.get());
96   EXPECT_EQ(1U, parsed->config()->audio_configs().size());
97   EXPECT_TRUE(parsed->config()->audio_configs()[0] == ChannelConfig());
98 }
99
100 }  // namespace protocol
101 }  // namespace remoting
102