Home | History | Annotate | Download | only in protocol
      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 
    103