Skip to content
Snippets Groups Projects
Verified Commit 7f4e421b authored by Timm Fitschen's avatar Timm Fitschen
Browse files

fix test

parent d4bc97b6
No related branches found
No related tags found
1 merge request!4f-fix-deadlock -> dev
Pipeline #5391 passed
...@@ -30,10 +30,7 @@ import org.junit.Assert; ...@@ -30,10 +30,7 @@ import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
public class DatabaseAccessManagerTest { public class DatabaseAccessManagerTest {
public static final ReadAccessSemaphore readAccess = new ReadAccessSemaphore(); Thread createReadThread(long wait, String name, ReadAccessSemaphore readAccess) {
public static final WriteAccessLock writeAccess = new WriteAccessLock(readAccess);
Thread createReadThread(long wait, String name) {
return new Thread( return new Thread(
new Runnable() { new Runnable() {
...@@ -47,13 +44,12 @@ public class DatabaseAccessManagerTest { ...@@ -47,13 +44,12 @@ public class DatabaseAccessManagerTest {
} finally { } finally {
readAccess.release(); readAccess.release();
} }
System.out.println(Thread.currentThread().getName() + " terminated");
} }
}, },
name); name);
} }
Thread createWriteThread(long wait, String name) { Thread createWriteThread(long wait, String name, WriteAccessLock writeAccess) {
return new Thread( return new Thread(
new Runnable() { new Runnable() {
...@@ -69,7 +65,6 @@ public class DatabaseAccessManagerTest { ...@@ -69,7 +65,6 @@ public class DatabaseAccessManagerTest {
} finally { } finally {
writeAccess.release(); writeAccess.release();
} }
System.out.println(Thread.currentThread().getName() + " terminated");
} }
}, },
name); name);
...@@ -77,15 +72,17 @@ public class DatabaseAccessManagerTest { ...@@ -77,15 +72,17 @@ public class DatabaseAccessManagerTest {
@Test @Test
public void testDeadLock() throws InterruptedException { public void testDeadLock() throws InterruptedException {
final ReadAccessSemaphore readAccess = new ReadAccessSemaphore();
final WriteAccessLock writeAccess = new WriteAccessLock(readAccess);
List<Thread> ts = new LinkedList<>(); List<Thread> ts = new LinkedList<>();
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
Thread t1 = createReadThread(1, "Ra" + i); Thread t1 = createReadThread(1, "Ra" + i, readAccess);
Thread t2 = createReadThread(2, "Rb" + i); Thread t2 = createReadThread(2, "Rb" + i, readAccess);
Thread t3 = createReadThread(3, "Rc" + i); Thread t3 = createReadThread(3, "Rc" + i, readAccess);
Thread t5 = createReadThread(5, "Rd" + i); Thread t5 = createReadThread(5, "Rd" + i, readAccess);
Thread t7 = createReadThread(7, "Re" + i); Thread t7 = createReadThread(7, "Re" + i, readAccess);
Thread t11 = createReadThread(11, "Rf" + i); Thread t11 = createReadThread(11, "Rf" + i, readAccess);
Thread w5 = createWriteThread(2, "W" + i); Thread w5 = createWriteThread(2, "W" + i, writeAccess);
t1.start(); t1.start();
t2.start(); t2.start();
...@@ -105,13 +102,14 @@ public class DatabaseAccessManagerTest { ...@@ -105,13 +102,14 @@ public class DatabaseAccessManagerTest {
} }
for (Thread t : ts) { for (Thread t : ts) {
t.join(); t.join(10000);
}
for (Thread t : ts) {
assertFalse(t.isAlive()); assertFalse(t.isAlive());
} }
} }
public static final ReadAccessSemaphore readAccess = new ReadAccessSemaphore();
public static final WriteAccessLock writeAccess = new WriteAccessLock(readAccess);
/** /**
* Two read-, two write-threads. The read-threads request read access, the write-threads request * Two read-, two write-threads. The read-threads request read access, the write-threads request
* write access.<br> * write access.<br>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment