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 15namespace remoting { 16namespace protocol { 17 18TEST(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. 40TEST(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. 62TEST(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. 82TEST(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