From 39f79f77a435c2f769477caeb071e2f9f6e78742 Mon Sep 17 00:00:00 2001 From: Igor Murashkin Date: Wed, 30 Jan 2013 10:14:24 -0800 Subject: Camera: ProCameraTests - add asynchronous locking unit test Change-Id: Ib79eb84046c9ed898bfb086a6600265fc351924c --- camera/tests/ProCameraTests.cpp | 46 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) (limited to 'camera') diff --git a/camera/tests/ProCameraTests.cpp b/camera/tests/ProCameraTests.cpp index ca9e224..adc3c75 100644 --- a/camera/tests/ProCameraTests.cpp +++ b/camera/tests/ProCameraTests.cpp @@ -42,6 +42,11 @@ namespace client { #define dout if (0) std::cerr #endif +#define EXPECT_OK(x) EXPECT_EQ(OK, (x)) +#define ASSERT_OK(x) ASSERT_EQ(OK, (x)) + +class ProCameraTest; + enum LockEvent { UNKNOWN, ACQUIRED, @@ -63,9 +68,7 @@ public: IPCThreadState *ptr = IPCThreadState::self(); - dout << "will join thread pool" << std::endl; ptr->joinThreadPool(); - dout << "joined thread pool (done)" << std::endl; return false; } @@ -178,10 +181,13 @@ public: ProCameraTest() { } - virtual void SetUp() { + static void SetUpTestCase() { + // Binder Thread Pool Initialization mTestThread = new ProCameraTestThread(); mTestThread->run("ProCameraTestThread"); + } + virtual void SetUp() { mCamera = ProCamera::connect(CAMERA_ID); ASSERT_NE((void*)NULL, mCamera.get()); @@ -198,19 +204,49 @@ protected: sp mCamera; sp mListener; - sp mTestThread; + static sp mTestThread; }; +sp ProCameraTest::mTestThread; + +// test around exclusiveTryLock (immediate locking) TEST_F(ProCameraTest, LockingImmediate) { if (HasFatalFailure()) { return; } - EXPECT_FALSE(mCamera->hasExclusiveLock()); EXPECT_EQ(OK, mCamera->exclusiveTryLock()); + // at this point we definitely have the lock + + EXPECT_EQ(OK, mListener->WaitForEvent()); + EXPECT_EQ(ACQUIRED, mListener->ReadEvent()); + + EXPECT_TRUE(mCamera->hasExclusiveLock()); + EXPECT_EQ(OK, mCamera->exclusiveUnlock()); + + EXPECT_EQ(OK, mListener->WaitForEvent()); + EXPECT_EQ(RELEASED, mListener->ReadEvent()); + + EXPECT_FALSE(mCamera->hasExclusiveLock()); +} + +// test around exclusiveLock (locking at some future point in time) +TEST_F(ProCameraTest, LockingAsynchronous) { + + if (HasFatalFailure()) { + return; + } + + // TODO: Add another procamera that has a lock here. + // then we can be test that the lock wont immediately be acquired + + EXPECT_FALSE(mCamera->hasExclusiveLock()); + EXPECT_EQ(OK, mCamera->exclusiveLock()); + // at this point we may or may not have the lock + // we cant be sure until we get an ACQUIRED event EXPECT_EQ(OK, mListener->WaitForEvent()); EXPECT_EQ(ACQUIRED, mListener->ReadEvent()); -- cgit v1.1