Files
android/libwvdrmengine/cdm/profiler/test/circular_buffer_test.cpp
Aaron Vaage a249c67504 OEMCrypto Profiler
This CL is a merge from the widevine repo of:
http://go/wvgerrit/16491 Circular Buffer
http://go/wvgerrit/16512 Circular Buffer Tests
http://go/wvgerrit/16493 Entry Writer
http://go/wvgerrit/16495 Profiled Scope
http://go/wvgerrit/16500 Stats Collection
http://go/wvgerrit/16543 Disallow Stats Copy or Assign
http://go/wvgerrit/16514 Moving OEM Function Enum
http://go/wvgerrit/16501 Defining Session Interface
http://go/wvgerrit/16502 Session Definitions
http://go/wvgerrit/16573 Remove code to num bytes table
http://go/wvgerrit/16556 Connecting Profiler to Profiled Scope
http://go/wvgerrit/16557 Android Reading Profiler History
http://go/wvgerrit/16574 Adding Get Stats Method
http://go/wvgerrit/16606 Seperating Session Parsing
http://go/wvgerrit/16607 Adding get stats method to DRMPlugin
http://go/wvgerrit/16608 Fixing Linux Build Failure
http://go/wvgerrit/16612 Stop Clearing History
http://go/wvgerrit/16613 Accessing profiler information using session id
http://go/wvgerrit/16614 Making All Session Subsets of Global Session

BUG: 25123303
BUG: 26027857
Change-Id: Ie2422e644aa631871852ea0e461695aeb7060f88
2016-01-27 10:14:46 -08:00

226 lines
5.0 KiB
C++

// Copyright 2015 Google Inc. All Rights Reserved.
#include <gtest/gtest.h>
#include <stdint.h>
#include "circular_buffer.h"
namespace wvcdm {
TEST(CircularBufferTest, MixAddU8AndU8s) {
oemprofiler::CircularBuffer buffer(32);
const uint8_t expected_values[16] = {
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07,
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07
};
ASSERT_TRUE(buffer.AddU8(expected_values[0]));
ASSERT_TRUE(buffer.AddU8(expected_values[1]));
ASSERT_TRUE(buffer.AddU8s(expected_values + 2, 6));
ASSERT_TRUE(buffer.AddU8(expected_values[8]));
ASSERT_TRUE(buffer.AddU8(expected_values[9]));
ASSERT_TRUE(buffer.AddU8s(expected_values + 10, 6));
uint8_t read[16];
ASSERT_TRUE(buffer.PeekU8s(0, read, 16));
for (size_t i = 0; i < 16; i++) {
ASSERT_EQ(expected_values[i], read[i]);
}
}
TEST(CircularBufferTest, MixPeekU8AndU8s) {
oemprofiler::CircularBuffer buffer(32);
const uint8_t expected_values[16] = {
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07,
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07
};
ASSERT_TRUE(buffer.AddU8s(expected_values, 16));
for (size_t i = 0; i < 2; i++) {
uint8_t read;
ASSERT_TRUE(buffer.PeekU8(i, &read));
ASSERT_EQ(expected_values[i], read);
}
{
uint8_t read[8];
ASSERT_TRUE(buffer.PeekU8s(2, read, 8));
for (size_t i = 0; i < 8; i++) {
ASSERT_EQ(expected_values[i + 2], read[i]);
}
}
for (size_t i = 10; i < 16; i++) {
uint8_t read;
ASSERT_TRUE(buffer.PeekU8(i, &read));
ASSERT_EQ(expected_values[i], read);
}
}
TEST(CircularBufferTest, ZeroSpaceBuffer) {
oemprofiler::CircularBuffer buffer(0);
ASSERT_FALSE(buffer.AddU8(0));
const uint8_t values[4] = { 0x00, 0x01, 0x02, 0x03 };
ASSERT_FALSE(buffer.AddU8s(values, 4));
}
TEST(CircularBufferTest, AddU8sWithLengthZero) {
oemprofiler::CircularBuffer buffer(16);
const uint8_t expected_values[16] = {
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07,
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07
};
ASSERT_TRUE(buffer.AddU8s(expected_values, 0));
uint8_t read;
ASSERT_FALSE(buffer.PeekU8(0, &read));
}
TEST(CircularBufferTest, MeasureSpaceTest) {
oemprofiler::CircularBuffer buffer(16);
ASSERT_EQ(16u, buffer.GetFreeSpace());
ASSERT_EQ(0u, buffer.GetUsedSpace());
for (int i = 0; i < 16; i++) {
buffer.AddU8(0);
}
ASSERT_EQ(0u, buffer.GetFreeSpace());
ASSERT_EQ(16u, buffer.GetUsedSpace());
buffer.Remove(16);
ASSERT_EQ(16u, buffer.GetFreeSpace());
ASSERT_EQ(0u, buffer.GetUsedSpace());
}
TEST(CircularBufferTest, PeekAddU8Test) {
oemprofiler::CircularBuffer buffer(16);
for (uint8_t i = 0; i < 16; i++) {
ASSERT_TRUE(buffer.AddU8(i));
}
for (uint8_t i = 0; i < 16; i++) {
uint8_t read;
ASSERT_TRUE(buffer.PeekU8(i, &read));
ASSERT_EQ(i, read);
}
ASSERT_EQ(16u, buffer.GetUsedSpace());
}
TEST(CircularBufferTest, PeekAddU8WrapTest) {
oemprofiler::CircularBuffer buffer(16);
const uint8_t expected_values[] = {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23,
};
for (size_t i = 0; i < 16; i++) {
ASSERT_TRUE(buffer.AddU8(expected_values[i]));
}
for (size_t i = 0; i < 16; i++) {
uint8_t read;
ASSERT_TRUE(buffer.PeekU8(i, &read));
ASSERT_EQ(expected_values[i], read);
}
ASSERT_EQ(16u, buffer.GetUsedSpace());
buffer.Remove(8);
ASSERT_EQ(8u, buffer.GetUsedSpace());
for (size_t i = 0; i < 8; i++) {
const size_t expected_value_index = 8 + i;
const size_t buffer_index = i;
uint8_t read;
ASSERT_TRUE(buffer.PeekU8(buffer_index, &read));
ASSERT_EQ(expected_values[expected_value_index], read);
}
for (size_t i = 16; i < 24; i++) {
ASSERT_TRUE(buffer.AddU8(expected_values[i]));
}
for (size_t i = 0; i < 16; i++) {
const size_t expected_value_index = 8 + i;
const size_t buffer_index = i;
uint8_t read;
buffer.PeekU8(buffer_index, &read);
ASSERT_EQ(expected_values[expected_value_index], read);
}
}
TEST(CircularBufferTest, OutOfRoomTest) {
oemprofiler::CircularBuffer buffer(16);
for (int i = 0; i < 16; i++) {
ASSERT_TRUE(buffer.AddU8(i));
}
ASSERT_FALSE(buffer.AddU8(0));
}
TEST(CircularBufferTest, PassTailPeekTest) {
oemprofiler::CircularBuffer buffer(16);
uint8_t read;
ASSERT_FALSE(buffer.PeekU8( 0, &read));
ASSERT_FALSE(buffer.PeekU8(17, &read));
}
TEST(CircularBufferTest, NullOutputPeekTest) {
oemprofiler::CircularBuffer buffer(16);
buffer.AddU8(0);
ASSERT_FALSE(buffer.PeekU8(0, nullptr));
}
TEST(CircularBufferTest, PeekAddU8sTest) {
oemprofiler::CircularBuffer buffer(16);
const uint8_t data[] = {
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15
};
ASSERT_TRUE(buffer.AddU8s(data, 16));
uint8_t read[16];
ASSERT_TRUE(buffer.PeekU8s(0, read, 16));
for (uint8_t i = 0; i < 16; i++) {
ASSERT_EQ(i, read[i]);
}
ASSERT_EQ(16u, buffer.GetUsedSpace());
}
} // namespace