Package com.springsource.insight.plugin.springcore

Source Code of com.springsource.insight.plugin.springcore.StereotypeOperationCollectionAspectTestSupport

/**
* Copyright (c) 2009-2011 VMware, Inc. All Rights Reserved.
*
* 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.springsource.insight.plugin.springcore;

import java.lang.annotation.Annotation;
import java.util.List;

import org.springframework.context.ApplicationEvent;

import com.foo.example.AbstractBean;
import com.springsource.insight.collection.OperationCollectionAspectSupport;
import com.springsource.insight.collection.OperationCollector;
import com.springsource.insight.collection.OperationListCollector;
import com.springsource.insight.collection.test.OperationCollectionAspectTestSupport;
import com.springsource.insight.intercept.operation.Operation;
import com.springsource.insight.intercept.operation.OperationType;
import com.springsource.insight.util.ListUtil;

/**
*
*/
public abstract class StereotypeOperationCollectionAspectTestSupport
        extends OperationCollectionAspectTestSupport {

    protected final Class<? extends Annotation> stereoTypeClass;

    protected StereotypeOperationCollectionAspectTestSupport(Class<? extends Annotation> annClass) {
        if ((stereoTypeClass = annClass) == null) {
            throw new IllegalStateException("No stereotype class provided");
        }
    }

    @Override
    protected OperationCollector createSpiedOperationCollector(OperationCollector originalCollector) {
        assertNotNull("No original collector", originalCollector);
        return new OperationListCollector();
    }

    @Override
    protected Operation getLastEnteredOperation(OperationCollector spiedCollector) {
        List<Operation> opsList = ((OperationListCollector) spiedCollector).getCollectedOperations();
        if (ListUtil.size(opsList) <= 0) {
            return null;
        } else {
            return opsList.get(opsList.size() - 1);
        }
    }

    protected void assertLifecycleMethodsNotIntercepted(AbstractBean beanInstance) throws Exception {
        OperationCollectionAspectSupport aspectInstance = getAspect();
        OperationCollector orgCollector = aspectInstance.getCollector();
        OperationListCollector collector = new OperationListCollector();
        aspectInstance.setCollector(collector);

        List<Operation> collectedOps = collector.getCollectedOperations();
        try {
            beanInstance.afterPropertiesSet();
            assertTrue("Unexpected invocation for 'afterPropertiesSet': " + collectedOps, collectedOps.isEmpty());

            ApplicationEvent testEvent = new TestEvent(beanInstance);

            beanInstance.onApplicationEvent(testEvent);
            assertTrue("Unexpected invocation for 'onApplicationEvent': " + collectedOps, collectedOps.isEmpty());

            beanInstance.publishEvent(testEvent);
            assertTrue("Unexpected invocation for 'publishEvent': " + collectedOps, collectedOps.isEmpty());

            beanInstance.multicastEvent(testEvent);
            assertTrue("Unexpected invocation for 'multicastEvent': " + collectedOps, collectedOps.isEmpty());
        } finally {
            aspectInstance.setCollector(orgCollector);
        }
    }

    protected Operation assertStereotypeOperation(Runnable beanInstance, boolean withOperation) {
        Class<?> beanClass = beanInstance.getClass();
        Annotation ann = beanClass.getAnnotation(stereoTypeClass);
        assertNotNull("Missing stereotype @" + stereoTypeClass.getSimpleName(), ann);

        beanInstance.run();

        Operation operation = getLastEntered();
        if (withOperation) {
            assertStereotypeOperation(operation, beanClass, "run");
        } else if (operation != null) {
            fail(beanClass.getSimpleName() + " unexpected operation: " + operation.getLabel());
        }
        return operation;
    }

    protected Operation assertStereotypeOperation(Operation operation, Class<?> beanClass, String beanMethod) {
        assertNotNull(beanClass.getSimpleName() + " no operation", operation);
        assertEquals(beanClass.getSimpleName() + " mismatched type", OperationType.METHOD, operation.getType());
        assertEquals("Mismatched component type", stereoTypeClass.getSimpleName(), operation.get(StereotypedSpringBeanMethodOperationCollectionAspectSupport.COMP_TYPE_ATTR, String.class));
        assertEquals("Mismatched label", beanClass.getSimpleName() + "#" + beanMethod, operation.getLabel());
        return operation;
    }

    protected static class TestEvent extends ApplicationEvent {
        private static final long serialVersionUID = 1L;

        public TestEvent(AbstractBean beanInstance) {
            super(beanInstance);
        }
    }
}
TOP

Related Classes of com.springsource.insight.plugin.springcore.StereotypeOperationCollectionAspectTestSupport

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.