Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / media / cast / transport / rtp_sender / packet_storage / packet_storage_unittest.cc
index 7b3758e..298942c 100644 (file)
@@ -4,6 +4,8 @@
 
 #include "media/cast/transport/rtp_sender/packet_storage/packet_storage.h"
 
+#include <stdint.h>
+
 #include <vector>
 
 #include "base/test/simple_test_tick_clock.h"
@@ -14,99 +16,100 @@ namespace media {
 namespace cast {
 namespace transport {
 
-static const int kMaxDeltaStoredMs = 500;
-static const base::TimeDelta kDeltaBetweenFrames =
-    base::TimeDelta::FromMilliseconds(33);
+static size_t kStoredFrames = 10;
+
+// Generate |number_of_frames| and store into |*storage|.
+// First frame has 1 packet, second frame has 2 packets, etc.
+static void StoreFrames(size_t number_of_frames,
+                        uint32 first_frame_id,
+                        PacketStorage* storage) {
+  const base::TimeTicks kTicks;
+  const int kSsrc = 1;
+  for (size_t i = 0; i < number_of_frames; ++i) {
+    SendPacketVector packets;
+    // First frame has 1 packet, second frame has 2 packets, etc.
+    const size_t kNumberOfPackets = i + 1;
+    for (size_t j = 0; j < kNumberOfPackets; ++j) {
+      Packet test_packet(1, 0);
+      packets.push_back(
+          std::make_pair(
+              PacedPacketSender::MakePacketKey(kTicks, kSsrc, j),
+              new base::RefCountedData<Packet>(test_packet)));
+    }
+    storage->StoreFrame(first_frame_id, packets);
+    ++first_frame_id;
+  }
+}
 
-static const int64 kStartMillisecond = GG_INT64_C(12345678900000);
+TEST(PacketStorageTest, NumberOfStoredFrames) {
+  PacketStorage storage(kStoredFrames);
 
-class PacketStorageTest : public ::testing::Test {
- protected:
-  PacketStorageTest() : packet_storage_(&testing_clock_, kMaxDeltaStoredMs) {
-    testing_clock_.Advance(
-        base::TimeDelta::FromMilliseconds(kStartMillisecond));
-  }
+  uint32 frame_id = 0;
+  frame_id = ~frame_id; // The maximum value of uint32.
+  StoreFrames(200, frame_id, &storage);
+  EXPECT_EQ(kStoredFrames, storage.GetNumberOfStoredFrames());
+}
 
-  base::SimpleTestTickClock testing_clock_;
-  PacketStorage packet_storage_;
-};
+TEST(PacketStorageTest, GetFrameWrapAround8bits) {
+  PacketStorage storage(kStoredFrames);
 
-TEST_F(PacketStorageTest, TimeOut) {
-  Packet test_123(100, 123);  // 100 insertions of the value 123.
-  PacketList packets;
-  for (uint32 frame_id = 0; frame_id < 30; ++frame_id) {
-    for (uint16 packet_id = 0; packet_id < 10; ++packet_id) {
-      packet_storage_.StorePacket(frame_id, packet_id, &test_123);
-    }
-    testing_clock_.Advance(kDeltaBetweenFrames);
-  }
+  const uint32 kFirstFrameId = 250;
+  StoreFrames(kStoredFrames, kFirstFrameId, &storage);
+  EXPECT_EQ(kStoredFrames, storage.GetNumberOfStoredFrames());
 
-  // All packets belonging to the first 14 frames is expected to be expired.
-  for (uint32 frame_id = 0; frame_id < 14; ++frame_id) {
-    for (uint16 packet_id = 0; packet_id < 10; ++packet_id) {
-      Packet packet;
-      EXPECT_FALSE(packet_storage_.GetPacket(frame_id, packet_id, &packets));
-    }
-  }
-  // All packets belonging to the next 15 frames is expected to be valid.
-  for (uint32 frame_id = 14; frame_id < 30; ++frame_id) {
-    for (uint16 packet_id = 0; packet_id < 10; ++packet_id) {
-      EXPECT_TRUE(packet_storage_.GetPacket(frame_id, packet_id, &packets));
-      EXPECT_TRUE(packets.front() == test_123);
-    }
+  // Expect we get the correct frames by looking at the number of
+  // packets.
+  uint32 frame_id = kFirstFrameId;
+  for (size_t i = 0; i < kStoredFrames; ++i) {
+    ASSERT_TRUE(storage.GetFrame8(frame_id));
+    EXPECT_EQ(i + 1, storage.GetFrame8(frame_id)->size());
+    ++frame_id;
   }
 }
 
-TEST_F(PacketStorageTest, MaxNumberOfPackets) {
-  Packet test_123(100, 123);  // 100 insertions of the value 123.
-  PacketList packets;
-
-  uint32 frame_id = 0;
-  for (uint16 packet_id = 0; packet_id <= PacketStorage::kMaxStoredPackets;
-      ++packet_id) {
-    packet_storage_.StorePacket(frame_id, packet_id, &test_123);
-  }
-  Packet packet;
-  uint16 packet_id = 0;
-  EXPECT_FALSE(packet_storage_.GetPacket(frame_id, packet_id, &packets));
-
-  ++packet_id;
-  for (; packet_id <= PacketStorage::kMaxStoredPackets; ++packet_id) {
-    EXPECT_TRUE(packet_storage_.GetPacket(frame_id, packet_id, &packets));
-    EXPECT_TRUE(packets.back() == test_123);
+TEST(PacketStorageTest, GetFrameWrapAround32bits) {
+  PacketStorage storage(kStoredFrames);
+
+  // First frame ID is close to the maximum value of uint32.
+  uint32 first_frame_id = 0xffffffff - 5;
+  StoreFrames(kStoredFrames, first_frame_id, &storage);
+  EXPECT_EQ(kStoredFrames, storage.GetNumberOfStoredFrames());
+
+  // Expect we get the correct frames by looking at the number of
+  // packets.
+  uint32 frame_id = first_frame_id;
+  for (size_t i = 0; i < kStoredFrames; ++i) {
+    ASSERT_TRUE(storage.GetFrame8(frame_id));
+    EXPECT_EQ(i + 1, storage.GetFrame8(frame_id)->size());
+    ++frame_id;
   }
 }
 
-TEST_F(PacketStorageTest, PacketContent) {
-  Packet test_123(100, 123);  // 100 insertions of the value 123.
-  Packet test_234(200, 234);  // 200 insertions of the value 234.
-  PacketList packets;
-
-  for (uint32 frame_id = 0; frame_id < 10; ++frame_id) {
-    for (uint16 packet_id = 0; packet_id < 10; ++packet_id) {
-      // Every other packet.
-      if (packet_id % 2 == 0) {
-        packet_storage_.StorePacket(frame_id, packet_id, &test_123);
-      } else {
-        packet_storage_.StorePacket(frame_id, packet_id, &test_234);
-      }
-    }
-    testing_clock_.Advance(kDeltaBetweenFrames);
+TEST(PacketStorageTest, GetFrameTooOld) {
+  PacketStorage storage(kStoredFrames);
+
+  // First frame ID is close to the maximum value of uint32.
+  uint32 first_frame_id = 0xffffffff - 5;
+
+  // Store two times the capacity.
+  StoreFrames(2 * kStoredFrames, first_frame_id, &storage);
+  EXPECT_EQ(kStoredFrames, storage.GetNumberOfStoredFrames());
+
+  uint32 frame_id = first_frame_id;
+  // Old frames are evicted.
+  for (size_t i = 0; i < kStoredFrames; ++i) {
+    EXPECT_FALSE(storage.GetFrame8(frame_id));
+    ++frame_id;
   }
-  for (uint32 frame_id = 0; frame_id < 10; ++frame_id) {
-    for (uint16 packet_id = 0; packet_id < 10; ++packet_id) {
-      EXPECT_TRUE(packet_storage_.GetPacket(frame_id, packet_id, &packets));
-      // Every other packet.
-      if (packet_id % 2 == 0) {
-        EXPECT_TRUE(packets.back() == test_123);
-      } else {
-        EXPECT_TRUE(packets.back() == test_234);
-      }
-    }
+  // Check recent frames are there.
+  for (size_t i = 0; i < kStoredFrames; ++i) {
+    ASSERT_TRUE(storage.GetFrame8(frame_id));
+    EXPECT_EQ(kStoredFrames + i + 1,
+              storage.GetFrame8(frame_id)->size());
+    ++frame_id;
   }
 }
 
 }  // namespace transport
 }  // namespace cast
 }  // namespace media
-