#include "stdafx.h" #include "gtest/gtest.h" #include "gmock/gmock.h" #include "../TOverlappedDataBufferQueue.h" #include "../TOverlappedDataBuffer.h" using namespace chcore; TEST(TOverlappedDataBufferQueueTests, DefaultConstructor_SanityTest) { TOverlappedDataBufferQueue queue; EXPECT_EQ(nullptr, queue.GetEmptyBuffer()); EXPECT_EQ(nullptr, queue.GetFullBuffer()); EXPECT_EQ(nullptr, queue.GetFinishedBuffer()); EXPECT_NE(nullptr, queue.GetEventReadPossibleHandle()); EXPECT_NE(nullptr, queue.GetEventWritePossibleHandle()); EXPECT_NE(nullptr, queue.GetEventWriteFinishedHandle()); DWORD dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_TIMEOUT, dwResult); dwResult = WaitForSingleObject(queue.GetEventWritePossibleHandle(), 0); EXPECT_EQ(WAIT_TIMEOUT, dwResult); dwResult = WaitForSingleObject(queue.GetEventWriteFinishedHandle(), 0); EXPECT_EQ(WAIT_TIMEOUT, dwResult); } TEST(TOverlappedDataBufferQueueTests, AllocatingConstructor_SanityTest) { TOverlappedDataBufferQueue queue(3, 32768); EXPECT_NE(nullptr, queue.GetEmptyBuffer()); EXPECT_EQ(nullptr, queue.GetFullBuffer()); EXPECT_EQ(nullptr, queue.GetFinishedBuffer()); EXPECT_NE(nullptr, queue.GetEventReadPossibleHandle()); EXPECT_NE(nullptr, queue.GetEventWritePossibleHandle()); EXPECT_NE(nullptr, queue.GetEventWriteFinishedHandle()); DWORD dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); dwResult = WaitForSingleObject(queue.GetEventWritePossibleHandle(), 0); EXPECT_EQ(WAIT_TIMEOUT, dwResult); dwResult = WaitForSingleObject(queue.GetEventWriteFinishedHandle(), 0); EXPECT_EQ(WAIT_TIMEOUT, dwResult); } TEST(TOverlappedDataBufferQueueTests, GetEmptyBuffer) { TOverlappedDataBufferQueue queue(3, 32768); DWORD dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); EXPECT_NE(nullptr, queue.GetEmptyBuffer()); dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); EXPECT_NE(nullptr, queue.GetEmptyBuffer()); dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); EXPECT_NE(nullptr, queue.GetEmptyBuffer()); dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_TIMEOUT, dwResult); EXPECT_EQ(nullptr, queue.GetEmptyBuffer()); } TEST(TOverlappedDataBufferQueueTests, AddEmptyBuffer) { TOverlappedDataBufferQueue queue(3, 32768); TOverlappedDataBuffer* pBuffers[3] = { queue.GetEmptyBuffer(), queue.GetEmptyBuffer(), queue.GetEmptyBuffer() }; DWORD dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_TIMEOUT, dwResult); queue.AddEmptyBuffer(pBuffers[0]); dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); queue.AddEmptyBuffer(pBuffers[1]); dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); queue.AddEmptyBuffer(pBuffers[2]); dwResult = WaitForSingleObject(queue.GetEventReadPossibleHandle(), 0); EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); } TEST(TOverlappedDataBufferQueueTests, GetFullBuffer_AddFullBuffer) { TOverlappedDataBufferQueue queue(3, 32768); TOverlappedDataBuffer* pBuffers[3] = { queue.GetEmptyBuffer(), queue.GetEmptyBuffer(), queue.GetEmptyBuffer() }; TOverlappedDataBuffer* pBuffer = pBuffers[0]; pBuffer->InitForRead(0, 1230); pBuffer->SetBytesTransferred(1230); pBuffer->SetStatusCode(0); queue.AddFullBuffer(pBuffer); DWORD dwResult = WaitForSingleObject(queue.GetEventWritePossibleHandle(), 0); EXPECT_EQ(WAIT_OBJECT_0 + 0, dwResult); }