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