package ua.yet.adv.java.concurrency;

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

import org.junit.Assert;
import org.junit.Test;

public class TestDeadlock {

	@Test
	public void testDeadlock() throws InterruptedException {
		new Thread(() -> OperationsDeadlock.main(null)).start();

		// Sleeping for deadlock to happen
		Thread.sleep(1000);

		// Programmatic way to detect deadlock

		ThreadMXBean bean = ManagementFactory.getThreadMXBean();
		long[] threadIds = bean.findDeadlockedThreads(); // Returns null if no
															// threads are
															// deadlocked.

		Assert.assertNotNull(threadIds);
		Assert.assertEquals(2, threadIds.length);

		ThreadInfo[] infos = bean.getThreadInfo(threadIds);

		for (ThreadInfo info : infos) {
			System.out.println(info);
		}
	}

}