javamanager/javacaptain/tsrc/test_runner/src/timerserverjavatimetest.cpp
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javacaptain/tsrc/test_runner/src/timerserverjavatimetest.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,364 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  TimerServerJavaTime
+*
+*/
+
+#include "TestHarness.h"
+
+#include <sys/time.h>
+#include <time.h>
+
+
+#include "commsclientendpoint.h"
+#include "commslistener.h"
+#include "comms.h"
+#include "monitor.h"
+
+#include "testmessages.h"
+#include "timerserverhelpers.h"
+
+using namespace java::comms;
+using namespace java::captain;
+using namespace java::util;
+
+extern java::comms::CommsClientEndpoint* commsClient;
+
+static Monitor* monitor1;
+static Monitor* monitor2;
+static int      timerId;
+
+class JavaTime
+{
+public:
+    JavaTime():mMillisFromEpoch(0LL) {}
+    JavaTime(const long long& aTime):mMillisFromEpoch(aTime) {}
+    JavaTime(const JavaTime& aJt):mMillisFromEpoch(aJt.getTime()) {}
+    JavaTime& operator= (const JavaTime& aJt)
+    {
+        mMillisFromEpoch = aJt.getTime();
+        return *this;
+    }
+    const long long& operator+ (const long long& a)
+    {
+        return (this->mMillisFromEpoch += a);
+    }
+    virtual ~JavaTime() {}
+
+    virtual long long getTime() const
+    {
+        return mMillisFromEpoch;
+    }
+    virtual void setTime(const long long& aNewTime)
+    {
+        mMillisFromEpoch = aNewTime;
+    }
+
+private:
+    long long mMillisFromEpoch;
+};
+
+long long getCurrentJavaTime()
+{
+    timeval tim;
+    int err = gettimeofday(&tim, NULL);
+    if (-1 == err)
+    {
+        return -1LL;
+    }
+
+    return (tim.tv_sec * 1000LL) +
+           (tim.tv_usec / 1000LL);
+}
+
+
+TEST_GROUP(TimerServerJavaTime)
+{
+    tsCommsListener* tsListener;
+    TEST_SETUP()
+    {
+        monitor1 = Monitor::createMonitor();
+        monitor2 = Monitor::createMonitor();
+        tsListener = new tsCommsListener(monitor1, monitor2, timerId);
+        commsClient->registerDefaultListener(tsListener);
+    }
+
+    TEST_TEARDOWN()
+    {
+        commsClient->unregisterDefaultListener(tsListener);
+        delete tsListener;
+        delete monitor2;
+        delete monitor1;
+    }
+};
+
+static void omaEquals(int& a, int&b)
+{
+    if (a != b)
+        printf("Comparing 0x%x == 0x%x fails!!!\n", a, b);
+    CHECK(a == b);
+}
+/*
+TEST(TimerServerJavaTime, TS10_STOP)
+{
+    int timerId = 0;
+    startTimer(timerId, 10);
+    stopTimer(timerId);
+}
+
+TEST(TimerServerJavaTime, TS09_3_timers_a2_b2_c2_seconds_c_canceled)
+{
+    int tid1=0, tid2=0, tid3=0;
+    startTimer(tid1, 2);
+    startTimer(tid2, 2);
+    startTimer(tid3, 2);
+    stopTimer(tid3);
+    monitor->wait();
+    CHECK(receivedTimeout==tid2 || receivedTimeout==tid1);
+    monitor2->notify();
+
+    monitor->wait();
+    CHECK(receivedTimeout==tid2 || receivedTimeout==tid1);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TS08_3_timers_a1_b2_c3_seconds_b_canceled)
+{   int tid1=0, tid2=0, tid3=0;
+    startTimer(tid1, 1);
+    startTimer(tid2, 2);
+    stopTimer(tid2);
+    startTimer(tid3, 3);
+    monitor->wait();
+    CHECK(receivedTimeout==tid1 || receivedTimeout==tid3);
+    monitor2->notify();
+
+    monitor->wait();
+    CHECK(receivedTimeout==tid1 || receivedTimeout==tid3);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TS07_3_timers_a3_b2_c1_seconds_a_canceled)
+{
+    int tid1=0, tid2=0, tid3=0;
+    startTimer(tid1, 3);
+    startTimer(tid2, 2);
+    stopTimer(tid1);
+    startTimer(tid3, 1);
+    monitor->wait();
+    CHECK(receivedTimeout==tid2 || receivedTimeout==tid3);
+    monitor2->notify();
+
+    monitor->wait();
+    CHECK(receivedTimeout==tid2 || receivedTimeout==tid3);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TS06_3_timers_2_1_2_seconds)
+{
+    int tid1=0, tid2=0, tid3=0;
+    startTimer(tid1, 2);
+    startTimer(tid2, 1);
+    startTimer(tid3, 2);
+    monitor->wait();
+    omaEquals(tid2, receivedTimeout);
+//    CHECK(tid2 == receivedTimeout);
+    monitor2->notify();
+
+    monitor->wait();
+    CHECK(receivedTimeout==tid1 || receivedTimeout==tid3);
+    monitor2->notify();
+
+    monitor->wait();
+    CHECK(receivedTimeout==tid1 || receivedTimeout==tid3);
+    monitor2->notify();
+}
+
+
+TEST(TimerServerJavaTime, TS05_3_timers_1_2_3_seconds)
+{
+    int tid1=0, tid2=0, tid3=0;
+    startTimer(tid1, 1);
+    startTimer(tid2, 2);
+    startTimer(tid3, 3);
+    monitor->wait();
+    omaEquals(tid1, receivedTimeout);
+//    CHECK(tid1 == receivedTimeout);
+    monitor2->notify();
+
+    monitor->wait();
+    omaEquals(tid2, receivedTimeout);
+//    CHECK(tid2 == receivedTimeout);
+    monitor2->notify();
+
+    monitor->wait();
+    omaEquals(tid3, receivedTimeout);
+//    CHECK(tid3 == receivedTimeout);
+    monitor2->notify();
+}
+*/
+TEST(TimerServerJavaTime, TSJT02_01_3_timers_2_1_2_seconds)
+{
+    int tid1=0, tid2=0, tid3=0;
+    startJavaTimeTimer(tid1, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+    startJavaTimeTimer(tid2, JavaTime(getCurrentJavaTime()+(1L * 1000L)).getTime());
+    startJavaTimeTimer(tid3, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+
+    monitor1->wait();
+    CHECK(tid2 == timerId);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(tid1 == timerId || tid3 == timerId);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(tid1 == timerId || tid3 == timerId);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TSJT02_02_3_timers_1_2_3_seconds)
+{
+    int tid1=0, tid2=0, tid3=0;
+    startJavaTimeTimer(tid1, JavaTime(getCurrentJavaTime()+(1L * 1000L)).getTime());
+    startJavaTimeTimer(tid2, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+    startJavaTimeTimer(tid3, JavaTime(getCurrentJavaTime()+(3L * 1000L)).getTime());
+
+    monitor1->wait();
+    CHECK(tid1 == timerId);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(tid2 == timerId);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(tid3 == timerId);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TSJT02_01_3_timers_3_2_1_seconds)
+{
+    int tid1=0, tid2=0, tid3=0;
+    startJavaTimeTimer(tid1, JavaTime(getCurrentJavaTime()+(3L * 1000L)).getTime());
+    startJavaTimeTimer(tid2, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+    startJavaTimeTimer(tid3, JavaTime(getCurrentJavaTime()+(1L * 1000L)).getTime());
+
+    monitor1->wait();
+    CHECK(tid3 == timerId);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(tid2 == timerId);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(tid1 == timerId);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TSJT01_05_5_timers_2_2_2_2_2_seconds)
+{
+    int tid1=0, tid2=0, tid3=0, tid4=0, tid5=0;
+    JavaTime jt(getCurrentJavaTime()+(2L * 1000L));
+    startJavaTimeTimer(tid1, jt.getTime());
+    startJavaTimeTimer(tid2, jt.getTime());
+    startJavaTimeTimer(tid3, jt.getTime());
+    startJavaTimeTimer(tid4, jt.getTime());
+    startJavaTimeTimer(tid5, jt.getTime());
+
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4 || timerId==tid5);
+    monitor2->notify();
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4 || timerId==tid5);
+    monitor2->notify();
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4 || timerId==tid5);
+    monitor2->notify();
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4 || timerId==tid5);
+    monitor2->notify();
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4 || timerId==tid5);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TSJT01_04_4_timers_2_2_2_2_seconds)
+{
+    int tid1=0, tid2=0, tid3=0, tid4=0;
+    startJavaTimeTimer(tid1, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+    startJavaTimeTimer(tid2, JavaTime(getCurrentJavaTime()+(1900L)).getTime());
+    startJavaTimeTimer(tid3, JavaTime(getCurrentJavaTime()+(1800L)).getTime());
+    startJavaTimeTimer(tid4, JavaTime(getCurrentJavaTime()+(1700L)).getTime());
+
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4);
+    monitor2->notify();
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4);
+    monitor2->notify();
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4);
+    monitor2->notify();
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3 || timerId==tid4);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TSJT01_03_3_timers_2_2_2_seconds)
+{
+    int tid1=0, tid2=0, tid3=0;
+    startJavaTimeTimer(tid1, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+    startJavaTimeTimer(tid2, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+    startJavaTimeTimer(tid3, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2 || timerId==tid3);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TSJT01_02_2_timers_2_2_seconds)
+{
+    int tid1=0, tid2=0;
+    startJavaTimeTimer(tid1, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+    startJavaTimeTimer(tid2, JavaTime(getCurrentJavaTime()+(2L * 1000L)).getTime());
+
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2);
+    monitor2->notify();
+
+    monitor1->wait();
+    CHECK(timerId==tid1 || timerId==tid2);
+    monitor2->notify();
+}
+
+TEST(TimerServerJavaTime, TSJT01_01_1_timer_2_seconds)
+{
+    int tid = 0;
+    JavaTime jt(getCurrentJavaTime() + (2L * 1000L));
+    startJavaTimeTimer(tid, jt.getTime());
+    monitor1->wait();
+//    CHECK(tid == receivedTimeout);
+    omaEquals(tid, timerId);
+    monitor2->notify();
+}
+