/* Copyright (c) 2013-2014 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Gabriel Roldan (Boundless) - initial implementation */ package org.locationtech.geogig.metrics; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Assert; import org.junit.Test; public class CallStackTest extends Assert { @After public void tearDown() { CallStack.CALL_STACK.remove(); } @Test public void testRoot() { CallStack root = CallStack.push("op1", 1, 1); assertNotNull(root); assertTrue(root.isRoot()); assertEquals("op1", root.getName()); assertEquals(-1L, root.getNanoTime()); assertFalse(root.isSuccess()); assertFalse(root.isFinished()); CallStack pop = CallStack.pop(1, true); assertSame(root, pop); assertTrue(pop.isFinished()); assertEquals(1L, pop.getNanoTime()); assertTrue(pop.isSuccess()); assertNull(CallStack.CALL_STACK.get()); } @Test public void testMultipleRootsNoChildren() { CallStack root1 = CallStack.push("op1", 1, 1); assertSame(root1, CallStack.pop(1, true)); assertNull(CallStack.CALL_STACK.get()); CallStack root2 = CallStack.push("op2", 1, 1); assertSame(root2, CallStack.pop(2, true)); assertNull(CallStack.CALL_STACK.get()); CallStack root3 = CallStack.push("op3", 1, 1); assertSame(root3, CallStack.pop(3, false)); assertNull(CallStack.CALL_STACK.get()); } @Test public void testChildrenOneLevel() { CallStack root = CallStack.push("op1", 1, 1); CallStack c1 = CallStack.push("child1", 1, 1); assertSame(c1, CallStack.pop(1, true)); CallStack c2 = CallStack.push("child2", 1, 1); assertSame(c2, CallStack.pop(1, true)); CallStack c3 = CallStack.push("child3", 1, 1); assertSame(c3, CallStack.pop(1, true)); assertSame(root, CallStack.pop(10, true)); assertNull(CallStack.CALL_STACK.get()); } @Test public void testNested() { CallStack root = CallStack.push("root", 1, 1); CallStack c1 = CallStack.push("child1", 1, 1); CallStack c11 = CallStack.push("child11", 1, 1); CallStack c111 = CallStack.push("child111", 1, 1); assertSame(c111, CallStack.pop(1, true)); CallStack c112 = CallStack.push("child112", 1, 1); assertSame(c112, CallStack.pop(1, true)); assertSame(c11, CallStack.pop(1, true)); assertSame(c1, CallStack.pop(1, true)); assertSame(root, CallStack.pop(Long.MAX_VALUE, true)); System.out.println(root.toString(TimeUnit.MILLISECONDS)); assertNull(CallStack.CALL_STACK.get()); } }