diff options
Diffstat (limited to 'src/usr/trace/test/testbuffer.H')
-rw-r--r-- | src/usr/trace/test/testbuffer.H | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/usr/trace/test/testbuffer.H b/src/usr/trace/test/testbuffer.H new file mode 100644 index 000000000..d63a24ab3 --- /dev/null +++ b/src/usr/trace/test/testbuffer.H @@ -0,0 +1,92 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/trace/test/testbuffer.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +#include "../buffer.H" +#include "../bufferpage.H" +#include "../compdesc.H" +#include "../entry.H" +#include "../daemonif.H" + +#include <cxxtest/TestSuite.H> +#include <limits.h> +#include <sys/task.h> +#include <sys/time.h> +#include <kernel/pagemgr.H> + +namespace TRACE +{ + +class BufferTest : public CxxTest::TestSuite +{ + public: + void testClaimEntry() + { + DaemonIf d; + Buffer b(&d, 1); + + tid_t child = task_create(testClaimEntryThread, &b); + msg_free(d.wait()); + + BufferPage* page = b.claimPages(); + PageManager::freePage(page); + + task_wait_tid(child, NULL, NULL); + + page = b.claimPages(); + if (NULL == page) + { + TS_FAIL("Not enough pages created in trace buffer.\n"); + } + PageManager::freePage(page); + + page = b.claimPages(); + if (NULL != page) + { + TS_FAIL("Too many pages created in trace buffer.\n"); + } + + } + + static void* testClaimEntryThread(void* _buffer) + { + Buffer* b = reinterpret_cast<Buffer*>(_buffer); + + ComponentList l; + ComponentDesc* t = l.getDescriptor("TEST", 2048); + + static const size_t ALLOC_SIZE = 128; + + for(size_t i = 0; i < PAGESIZE/ALLOC_SIZE; i++) + { + Entry* e = b->claimEntry(t, ALLOC_SIZE - sizeof(Entry)); + if (e->comp != t) + { + TS_FAIL("Component ID is not updated in entry."); + } + } + + return NULL; + + } +}; + +} |