From 468db2a97baaaaaeb796816c54304c32726d6cf0 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Thu, 16 Jan 2014 20:17:26 +0000 Subject: [PATCH] Use a mock timer to test the database cleaner. --- .../db/DatabaseCleanerImplTest.java | 66 +++++++------------ 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/briar-tests/src/org/briarproject/db/DatabaseCleanerImplTest.java b/briar-tests/src/org/briarproject/db/DatabaseCleanerImplTest.java index 28b35b54bc..222ec47dbd 100644 --- a/briar-tests/src/org/briarproject/db/DatabaseCleanerImplTest.java +++ b/briar-tests/src/org/briarproject/db/DatabaseCleanerImplTest.java @@ -1,67 +1,49 @@ package org.briarproject.db; -import static java.util.concurrent.TimeUnit.SECONDS; - -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicInteger; import org.briarproject.BriarTestCase; import org.briarproject.api.db.DbException; import org.briarproject.api.system.Timer; import org.briarproject.db.DatabaseCleaner.Callback; -import org.briarproject.system.SystemTimer; - +import org.jmock.Expectations; +import org.jmock.Mockery; import org.junit.Test; -// FIXME: Use a mock timer public class DatabaseCleanerImplTest extends BriarTestCase { @Test public void testCleanerRunsPeriodically() throws Exception { - final CountDownLatch latch = new CountDownLatch(5); + final AtomicInteger cleans = new AtomicInteger(0); Callback callback = new Callback() { - public void checkFreeSpaceAndClean() throws DbException { - latch.countDown(); - } - - public boolean shouldCheckFreeSpace() { - return true; - } - }; - Timer timer = new SystemTimer(); - DatabaseCleanerImpl cleaner = new DatabaseCleanerImpl(timer); - // Start the cleaner - cleaner.startCleaning(callback, 10); - // The database should be cleaned five times (allow 5s for system load) - assertTrue(latch.await(5, SECONDS)); - // Stop the cleaner - cleaner.stopCleaning(); - } - - @Test - public void testStoppingCleanerWakesItUp() throws Exception { - final CountDownLatch latch = new CountDownLatch(1); - Callback callback = new Callback() { + boolean check = true; public void checkFreeSpaceAndClean() throws DbException { - latch.countDown(); + cleans.incrementAndGet(); } public boolean shouldCheckFreeSpace() { - return true; + // Alternate between true and false + check = !check; + return !check; } }; - Timer timer = new SystemTimer(); - DatabaseCleanerImpl cleaner = new DatabaseCleanerImpl(timer); - long start = System.currentTimeMillis(); - // Start the cleaner - cleaner.startCleaning(callback, 10 * 1000); - // The database should be cleaned once at startup - assertTrue(latch.await(5, SECONDS)); - // Stop the cleaner (it should be waiting between sweeps) + Mockery context = new Mockery(); + final Timer timer = context.mock(Timer.class); + final DatabaseCleanerImpl cleaner = new DatabaseCleanerImpl(timer); + context.checking(new Expectations() {{ + oneOf(timer).scheduleAtFixedRate(cleaner, 0, 10); + oneOf(timer).cancel(); + }}); + // Start the cleaner - it should schedule itself with the timer + cleaner.startCleaning(callback, 10); + // Call the cleaner's run method six times + for(int i = 0; i < 6; i++) cleaner.run(); + // Stop the cleaner - it should cancel the timer cleaner.stopCleaning(); - long end = System.currentTimeMillis(); - // Check that much less than 10 seconds expired - assertTrue(end - start < 10 * 1000); + // The database should have been cleaned three times + assertEquals(3, cleans.get()); + context.assertIsSatisfied(); } } -- GitLab