1f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/* 2f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * 4f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org */ 10f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 112d3b7e2173c672dca5d97d9a5c8ab4217652c442Zeke Chin#include "webrtc/base/fileutils.h" 12f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/gunit.h" 132d3b7e2173c672dca5d97d9a5c8ab4217652c442Zeke Chin#include "webrtc/base/pathutils.h" 14f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/stream.h" 15f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 16f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgnamespace rtc { 17f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 18f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/////////////////////////////////////////////////////////////////////////////// 19f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// TestStream 20f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/////////////////////////////////////////////////////////////////////////////// 21f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 22f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass TestStream : public StreamInterface { 23f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org public: 24f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org TestStream() : pos_(0) { } 25f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 26f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual StreamState GetState() const { return SS_OPEN; } 27f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual StreamResult Read(void* buffer, size_t buffer_len, 28f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t* read, int* error) { 29f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org unsigned char* uc_buffer = static_cast<unsigned char*>(buffer); 30f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org for (size_t i = 0; i < buffer_len; ++i) { 31f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org uc_buffer[i] = static_cast<unsigned char>(pos_++); 32f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 33f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (read) 34f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *read = buffer_len; 35f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return SR_SUCCESS; 36f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 37f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual StreamResult Write(const void* data, size_t data_len, 38f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t* written, int* error) { 39f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (error) 40f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *error = -1; 41f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return SR_ERROR; 42f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 43f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual void Close() { } 44f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual bool SetPosition(size_t position) { 45f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org pos_ = position; 46f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 47f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 48f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual bool GetPosition(size_t* position) const { 49f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (position) *position = pos_; 50f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 51f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 52f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual bool GetSize(size_t* size) const { 53f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 54f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 55f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org virtual bool GetAvailable(size_t* size) const { 56f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 57f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 58f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 59f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org private: 60f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t pos_; 61f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org}; 62f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 63f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool VerifyTestBuffer(unsigned char* buffer, size_t len, 64f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org unsigned char value) { 65f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool passed = true; 66f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org for (size_t i = 0; i < len; ++i) { 67f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (buffer[i] != value++) { 68f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org passed = false; 69f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org break; 70f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 71f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 72f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Ensure that we don't pass again without re-writing 73f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org memset(buffer, 0, len); 74f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return passed; 75f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 76f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 77f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid SeekTest(StreamInterface* stream, const unsigned char value) { 78f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t bytes; 79f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org unsigned char buffer[13] = { 0 }; 80f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const size_t kBufSize = sizeof(buffer); 81f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 82f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(stream->Read(buffer, kBufSize, &bytes, NULL), SR_SUCCESS); 83f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(bytes, kBufSize); 84f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(VerifyTestBuffer(buffer, kBufSize, value)); 85f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(stream->GetPosition(&bytes)); 86f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(13U, bytes); 87f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 88f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(stream->SetPosition(7)); 89f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 90f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(stream->Read(buffer, kBufSize, &bytes, NULL), SR_SUCCESS); 91f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(bytes, kBufSize); 92f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(VerifyTestBuffer(buffer, kBufSize, value + 7)); 93f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(stream->GetPosition(&bytes)); 94f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(20U, bytes); 95f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 96f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 97f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(FifoBufferTest, TestAll) { 98f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const size_t kSize = 16; 99f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const char in[kSize * 2 + 1] = "0123456789ABCDEFGHIJKLMNOPQRSTUV"; 100f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org char out[kSize * 2]; 101f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org void* p; 102f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const void* q; 103f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t bytes; 104f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org FifoBuffer buf(kSize); 105f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org StreamInterface* stream = &buf; 106f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 107f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Test assumptions about base state 108f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SS_OPEN, stream->GetState()); 109f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, stream->Read(out, kSize, &bytes, NULL)); 110f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != stream->GetReadData(&bytes)); 111f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ((size_t)0, bytes); 112f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeReadData(0); 113f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != stream->GetWriteBuffer(&bytes)); 114f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 115f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeWriteBuffer(0); 116f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 117f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try a full write 118f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize, &bytes, NULL)); 119f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 120f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 121f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try a write that should block 122f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, stream->Write(in, kSize, &bytes, NULL)); 123f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 124f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try a full read 125f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize, &bytes, NULL)); 126f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 127f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize)); 128f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 129f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try a read that should block 130f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, stream->Read(out, kSize, &bytes, NULL)); 131f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 132f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try a too-big write 133f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize * 2, &bytes, NULL)); 134f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(bytes, kSize); 135f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 136f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try a too-big read 137f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize * 2, &bytes, NULL)); 138f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 139f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize)); 140f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 141f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try some small writes and reads 142f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize / 2, &bytes, NULL)); 143f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 144f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 2, &bytes, NULL)); 145f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 146f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize / 2)); 147f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize / 2, &bytes, NULL)); 148f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 149f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize / 2, &bytes, NULL)); 150f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 151f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 2, &bytes, NULL)); 152f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 153f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize / 2)); 154f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 2, &bytes, NULL)); 155f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 156f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize / 2)); 157f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 158f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try wraparound reads and writes in the following pattern 159f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // WWWWWWWWWWWW.... 0123456789AB.... 160f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // RRRRRRRRXXXX.... ........89AB.... 161f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // WWWW....XXXXWWWW 4567....89AB0123 162f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // XXXX....RRRRXXXX 4567........0123 163f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // XXXXWWWWWWWWXXXX 4567012345670123 164f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // RRRRXXXXXXXXRRRR ....01234567.... 165f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // ....RRRRRRRR.... ................ 166f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize * 3 / 4, &bytes, NULL)); 167f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize * 3 / 4, bytes); 168f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 2, &bytes, NULL)); 169f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 170f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize / 2)); 171f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize / 2, &bytes, NULL)); 172f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 173f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 4, &bytes, NULL)); 174f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 4 , bytes); 175f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in + kSize / 2, out, kSize / 4)); 176f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize / 2, &bytes, NULL)); 177f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 178f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 2, &bytes, NULL)); 179f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2 , bytes); 180f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize / 2)); 181f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 2, &bytes, NULL)); 182f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2 , bytes); 183f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize / 2)); 184f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 185f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Use GetWriteBuffer to reset the read_position for the next tests 186f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->GetWriteBuffer(&bytes); 187f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeWriteBuffer(0); 188f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 189f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try using GetReadData to do a full read 190f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize, &bytes, NULL)); 191f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org q = stream->GetReadData(&bytes); 192f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != q); 193f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 194f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(q, in, kSize)); 195f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeReadData(kSize); 196f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, stream->Read(out, kSize, &bytes, NULL)); 197f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 198f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try using GetReadData to do some small reads 199f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize, &bytes, NULL)); 200f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org q = stream->GetReadData(&bytes); 201f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != q); 202f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 203f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(q, in, kSize / 2)); 204f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeReadData(kSize / 2); 205f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org q = stream->GetReadData(&bytes); 206f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != q); 207f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 208f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(q, in + kSize / 2, kSize / 2)); 209f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeReadData(kSize / 2); 210f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, stream->Read(out, kSize, &bytes, NULL)); 211f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 212f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try using GetReadData in a wraparound case 213f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // WWWWWWWWWWWWWWWW 0123456789ABCDEF 214f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // RRRRRRRRRRRRXXXX ............CDEF 215f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // WWWWWWWW....XXXX 01234567....CDEF 216f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // ............RRRR 01234567........ 217f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // RRRRRRRR........ ................ 218f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize, &bytes, NULL)); 219f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize * 3 / 4, &bytes, NULL)); 220f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize / 2, &bytes, NULL)); 221f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org q = stream->GetReadData(&bytes); 222f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != q); 223f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 4, bytes); 224f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(q, in + kSize * 3 / 4, kSize / 4)); 225f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeReadData(kSize / 4); 226f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org q = stream->GetReadData(&bytes); 227f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != q); 228f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 229f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(q, in, kSize / 2)); 230f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeReadData(kSize / 2); 231f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 232f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Use GetWriteBuffer to reset the read_position for the next tests 233f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->GetWriteBuffer(&bytes); 234f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeWriteBuffer(0); 235f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 236f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try using GetWriteBuffer to do a full write 237f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org p = stream->GetWriteBuffer(&bytes); 238f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != p); 239f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 240f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org memcpy(p, in, kSize); 241f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeWriteBuffer(kSize); 242f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize, &bytes, NULL)); 243f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 244f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize)); 245f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 246f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try using GetWriteBuffer to do some small writes 247f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org p = stream->GetWriteBuffer(&bytes); 248f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != p); 249f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 250f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org memcpy(p, in, kSize / 2); 251f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeWriteBuffer(kSize / 2); 252f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org p = stream->GetWriteBuffer(&bytes); 253f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != p); 254f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 255f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org memcpy(p, in + kSize / 2, kSize / 2); 256f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeWriteBuffer(kSize / 2); 257f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize, &bytes, NULL)); 258f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 259f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize)); 260f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 261f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try using GetWriteBuffer in a wraparound case 262f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // WWWWWWWWWWWW.... 0123456789AB.... 263f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // RRRRRRRRXXXX.... ........89AB.... 264f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // ........XXXXWWWW ........89AB0123 265f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // WWWW....XXXXXXXX 4567....89AB0123 266f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // RRRR....RRRRRRRR ................ 267f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize * 3 / 4, &bytes, NULL)); 268f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 2, &bytes, NULL)); 269f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org p = stream->GetWriteBuffer(&bytes); 270f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != p); 271f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 4, bytes); 272f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org memcpy(p, in, kSize / 4); 273f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeWriteBuffer(kSize / 4); 274f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org p = stream->GetWriteBuffer(&bytes); 275f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(NULL != p); 276f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize / 2, bytes); 277f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org memcpy(p, in + kSize / 4, kSize / 4); 278f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->ConsumeWriteBuffer(kSize / 4); 279f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize * 3 / 4, &bytes, NULL)); 280f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize * 3 / 4, bytes); 281f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in + kSize / 2, out, kSize / 4)); 282f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out + kSize / 4, kSize / 4)); 283f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 284f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Check that the stream is now empty 285f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, stream->Read(out, kSize, &bytes, NULL)); 286f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 287f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try growing the buffer 288f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize, &bytes, NULL)); 289f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 290f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(buf.SetCapacity(kSize * 2)); 291f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in + kSize, kSize, &bytes, NULL)); 292f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 293f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize * 2, &bytes, NULL)); 294f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize * 2, bytes); 295f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize * 2)); 296f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 297f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Try shrinking the buffer 298f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize, &bytes, NULL)); 299f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 300f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(buf.SetCapacity(kSize)); 301f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, stream->Write(in, kSize, &bytes, NULL)); 302f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize, &bytes, NULL)); 303f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(kSize, bytes); 304f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize)); 305f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 306f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Write to the stream, close it, read the remaining bytes 307f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Write(in, kSize / 2, &bytes, NULL)); 308f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org stream->Close(); 309f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SS_CLOSED, stream->GetState()); 310f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_EOS, stream->Write(in, kSize / 2, &bytes, NULL)); 311f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, stream->Read(out, kSize / 2, &bytes, NULL)); 312f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(in, out, kSize / 2)); 313f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_EOS, stream->Read(out, kSize / 2, &bytes, NULL)); 314f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 315f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 316f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(FifoBufferTest, FullBufferCheck) { 317f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org FifoBuffer buff(10); 318f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org buff.ConsumeWriteBuffer(10); 319f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 320f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t free; 321f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(buff.GetWriteBuffer(&free) != NULL); 322f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0U, free); 323f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 324f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 325f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgTEST(FifoBufferTest, WriteOffsetAndReadOffset) { 326f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const size_t kSize = 16; 327f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const char in[kSize * 2 + 1] = "0123456789ABCDEFGHIJKLMNOPQRSTUV"; 328f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org char out[kSize * 2]; 329f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org FifoBuffer buf(kSize); 330f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 331f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Write 14 bytes. 332f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, buf.Write(in, 14, NULL, NULL)); 333f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 334f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Make sure data is in |buf|. 335f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t buffered; 336f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(buf.GetBuffered(&buffered)); 337f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(14u, buffered); 338f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 339f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Read 10 bytes. 340f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org buf.ConsumeReadData(10); 341f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 342f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // There should be now 12 bytes of available space. 343f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t remaining; 344f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(buf.GetWriteRemaining(&remaining)); 345f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(12u, remaining); 346f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 347f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Write at offset 12, this should fail. 348f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, buf.WriteOffset(in, 10, 12, NULL)); 349f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 350f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Write 8 bytes at offset 4, this wraps around the buffer. 351f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, buf.WriteOffset(in, 8, 4, NULL)); 352f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 353f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Number of available space remains the same until we call 354f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // ConsumeWriteBuffer(). 355f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(buf.GetWriteRemaining(&remaining)); 356f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(12u, remaining); 357f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org buf.ConsumeWriteBuffer(12); 358f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 359f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // There's 4 bytes bypassed and 4 bytes no read so skip them and verify the 360f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // 8 bytes written. 361f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t read; 362f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_SUCCESS, buf.ReadOffset(out, 8, 8, &read)); 363f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(8u, read); 364f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(0, memcmp(out, in, 8)); 365f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 366f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // There should still be 16 bytes available for reading. 367f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_TRUE(buf.GetBuffered(&buffered)); 368f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(16u, buffered); 369f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 370f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Read at offset 16, this should fail since we don't have that much data. 371f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EXPECT_EQ(SR_BLOCK, buf.ReadOffset(out, 10, 16, NULL)); 372f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 373f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 374f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} // namespace rtc 375