From b4e7fb0364672f73b613b3d04eba9535e97d7c65 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Fri, 15 Jun 2018 09:10:00 -0400 Subject: Add CurrentTime utilities Add some comments. Update license text. Change-Id: I4cee208378c44d9730274aee337feb95f9026add Issue-ID: POLICY-908 Signed-off-by: Jim Hahn --- .../common/utils/time/TestTimeMultiTest.java | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 utils-test/src/test/java/org/onap/policy/common/utils/time/TestTimeMultiTest.java (limited to 'utils-test/src/test/java/org/onap/policy/common/utils/time/TestTimeMultiTest.java') diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/time/TestTimeMultiTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/time/TestTimeMultiTest.java new file mode 100644 index 00000000..206ab5f1 --- /dev/null +++ b/utils-test/src/test/java/org/onap/policy/common/utils/time/TestTimeMultiTest.java @@ -0,0 +1,116 @@ +/* + * ============LICENSE_START======================================================= + * Common Utils-Test + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.utils.time; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; +import org.junit.Test; + +/** + * + */ +public class TestTimeMultiTest { + + private static final int NTHREADS = 10; + private static final int NTIMES = 100; + private static final long WAIT_SEC = 5L; + private static final long MIN_SLEEP_MS = 5L; + + private TestTimeMulti ttm; + private Semaphore done; + + @Test + public void test() throws Exception { + ttm = new TestTimeMulti(NTHREADS); + done = new Semaphore(0); + + long tbeg = ttm.getMillis(); + + // create threads + List threads = new ArrayList<>(NTHREADS); + for (int x = 0; x < NTHREADS; ++x) { + threads.add(new MyThread(x + MIN_SLEEP_MS)); + } + + // launch threads + for (MyThread thr : threads) { + thr.start(); + } + + // wait for each one to complete + for (MyThread thr : threads) { + assertTrue("complete " + thr.getSleepMs(), done.tryAcquire(WAIT_SEC, TimeUnit.SECONDS)); + ttm.threadCompleted(); + } + + // check results + for (MyThread thr : threads) { + assertEquals("time " + thr.getSleepMs(), thr.texpected, thr.tactual); + } + + assertTrue(ttm.getMillis() >= tbeg + NTIMES * MIN_SLEEP_MS); + } + + private class MyThread extends Thread { + + private final long sleepMs; + + private volatile long texpected; + private volatile long tactual; + + public MyThread(long sleepMs) { + this.sleepMs = sleepMs; + + this.setDaemon(true); + } + + public long getSleepMs() { + return sleepMs; + } + + @Override + public void run() { + try { + for (int x = 0; x < NTIMES; ++x) { + texpected = ttm.getMillis() + sleepMs; + ttm.sleep(sleepMs); + + if ((tactual = ttm.getMillis()) != texpected) { + break; + } + + if ((tactual = ttm.getDate().getTime()) != texpected) { + break; + } + } + + } catch (InterruptedException expected) { + Thread.currentThread().interrupt(); + } + + done.release(); + } + } +} -- cgit 1.2.3-korg