/* * Copyright 2014 NAVER Corp. * * 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. */ package com.navercorp.pinpoint.profiler.util; import static org.junit.Assert.*; import com.navercorp.pinpoint.bootstrap.interceptor.scope.InterceptorScopeInvocation; import com.navercorp.pinpoint.profiler.interceptor.scope.DefaultInterceptorScopeInvocation; import org.junit.Test; import com.navercorp.pinpoint.bootstrap.interceptor.scope.ExecutionPolicy; public class DefaultScopeTest { @Test public void test0() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); assertFalse(transaction.isActive()); assertFalse(transaction.tryEnter(ExecutionPolicy.INTERNAL)); assertFalse(transaction.isActive()); assertTrue(transaction.tryEnter(ExecutionPolicy.BOUNDARY)); assertTrue(transaction.isActive()); assertTrue(transaction.tryEnter(ExecutionPolicy.INTERNAL)); assertTrue(transaction.isActive()); assertFalse(transaction.tryEnter(ExecutionPolicy.BOUNDARY)); assertTrue(transaction.isActive()); assertFalse(transaction.canLeave(ExecutionPolicy.BOUNDARY)); assertTrue(transaction.isActive()); assertTrue(transaction.canLeave(ExecutionPolicy.INTERNAL)); transaction.leave(ExecutionPolicy.INTERNAL); assertTrue(transaction.isActive()); assertTrue(transaction.canLeave(ExecutionPolicy.BOUNDARY)); assertTrue(transaction.isActive()); transaction.leave(ExecutionPolicy.BOUNDARY); assertFalse(transaction.isActive()); assertFalse(transaction.canLeave(ExecutionPolicy.INTERNAL)); assertFalse(transaction.isActive()); } @Test public void test1() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); assertFalse(transaction.isActive()); assertTrue(transaction.tryEnter(ExecutionPolicy.ALWAYS)); assertTrue(transaction.isActive()); assertTrue(transaction.tryEnter(ExecutionPolicy.ALWAYS)); assertTrue(transaction.isActive()); assertTrue(transaction.canLeave(ExecutionPolicy.ALWAYS)); assertTrue(transaction.isActive()); transaction.leave(ExecutionPolicy.ALWAYS); assertTrue(transaction.isActive()); assertTrue(transaction.canLeave(ExecutionPolicy.ALWAYS)); assertTrue(transaction.isActive()); transaction.leave(ExecutionPolicy.ALWAYS); assertFalse(transaction.isActive()); } @Test public void testAttachment() { String attachment = "context"; InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.tryEnter(ExecutionPolicy.ALWAYS); assertNull(transaction.getAttachment()); transaction.setAttachment(attachment); assertSame(transaction.getAttachment(), attachment); transaction.tryEnter(ExecutionPolicy.ALWAYS); assertSame(transaction.getAttachment(), attachment); transaction.canLeave(ExecutionPolicy.ALWAYS); transaction.leave(ExecutionPolicy.ALWAYS); assertSame(transaction.getAttachment(), attachment); transaction.canLeave(ExecutionPolicy.ALWAYS); transaction.leave(ExecutionPolicy.ALWAYS); } @Test public void testAttachment2() { String attachment = "context"; InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.tryEnter(ExecutionPolicy.ALWAYS); assertNull(transaction.getAttachment()); transaction.setAttachment(attachment); transaction.canLeave(ExecutionPolicy.ALWAYS); transaction.leave(ExecutionPolicy.ALWAYS); transaction.tryEnter(ExecutionPolicy.ALWAYS); assertNull(transaction.getAttachment()); transaction.canLeave(ExecutionPolicy.ALWAYS); transaction.leave(ExecutionPolicy.ALWAYS); } @Test public void testAttachment3() { String oldAttachment = "context"; String newAttachment = "newnew"; InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.tryEnter(ExecutionPolicy.ALWAYS); transaction.setAttachment(oldAttachment); assertSame(oldAttachment, transaction.getAttachment()); assertSame(oldAttachment, transaction.setAttachment(newAttachment)); assertSame(newAttachment, transaction.getAttachment()); assertSame(newAttachment, transaction.removeAttachment()); assertNull(transaction.getAttachment()); transaction.canLeave(ExecutionPolicy.ALWAYS); transaction.leave(ExecutionPolicy.ALWAYS); } @Test(expected=IllegalStateException.class) public void testSetAttachmentFail() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.setAttachment("attachment"); } @Test(expected=IllegalStateException.class) public void testSetAttachmentFail2() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.tryEnter(ExecutionPolicy.ALWAYS); transaction.canLeave(ExecutionPolicy.ALWAYS); transaction.leave(ExecutionPolicy.ALWAYS); transaction.setAttachment("attachment"); } @Test(expected=IllegalStateException.class) public void testGetAttachmentFail() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.getAttachment(); } @Test(expected=IllegalStateException.class) public void testGetAttachmentFail2() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.tryEnter(ExecutionPolicy.ALWAYS); transaction.canLeave(ExecutionPolicy.ALWAYS); transaction.leave(ExecutionPolicy.ALWAYS); transaction.getAttachment(); } @Test(expected=IllegalStateException.class) public void testRemoveAttachmentFail() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.removeAttachment(); } @Test(expected=IllegalStateException.class) public void testRemoveAttachmentFail2() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.tryEnter(ExecutionPolicy.ALWAYS); transaction.canLeave(ExecutionPolicy.ALWAYS); transaction.leave(ExecutionPolicy.ALWAYS); transaction.removeAttachment(); } @Test(expected=IllegalStateException.class) public void testAfterWithoutBefore() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.leave(ExecutionPolicy.ALWAYS); } @Test(expected=IllegalStateException.class) public void testAfterWithoutBefore2() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.leave(ExecutionPolicy.BOUNDARY); } @Test(expected=IllegalStateException.class) public void testAfterWithoutBefore3() { InterceptorScopeInvocation transaction = new DefaultInterceptorScopeInvocation("test"); transaction.leave(ExecutionPolicy.INTERNAL); } }