15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "media/ffmpeg/ffmpeg_common.h" 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "media/filters/in_memory_url_protocol.h" 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "testing/gtest/include/gtest/gtest.h" 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace media { 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const uint8 kData[] = { 0x01, 0x02, 0x03, 0x04 }; 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST(InMemoryUrlProtocolTest, ReadFromLargeBuffer) { 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu InMemoryUrlProtocol protocol(kData, std::numeric_limits<int64>::max(), false); 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu uint8 out[sizeof(kData)]; 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(4, protocol.Read(sizeof(out), out)); 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(0, memcmp(out, kData, sizeof(out))); 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST(InMemoryUrlProtocolTest, ReadWithNegativeSize) { 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu InMemoryUrlProtocol protocol(kData, sizeof(kData), false); 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu uint8 out[sizeof(kData)]; 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(AVERROR(EIO), protocol.Read(-2, out)); 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST(InMemoryUrlProtocolTest, ReadWithZeroSize) { 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu InMemoryUrlProtocol protocol(kData, sizeof(kData), false); 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu uint8 out; 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(0, protocol.Read(0, &out)); 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST(InMemoryUrlProtocolTest, SetPosition) { 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu InMemoryUrlProtocol protocol(kData, sizeof(kData), false); 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(protocol.SetPosition(-1)); 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(protocol.SetPosition(sizeof(kData) + 1)); 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu uint8 out; 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(protocol.SetPosition(sizeof(kData))); 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(0, protocol.Read(1, &out)); 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int i = sizeof(kData) / 2; 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(protocol.SetPosition(i)); 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(1, protocol.Read(1, &out)); 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(kData[i], out); 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace media 52