package vnet.sms.common.spring.jmx.support;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.Test;
import org.springframework.context.support.StaticApplicationContext;
import org.springframework.jmx.export.MBeanExportOperations;
import org.springframework.jmx.export.MBeanExporter;
import vnet.sms.common.spring.jmx.MBeanExportOperationsAware;
public class MBeanExportOperationsInjectorTest {
@Test
public final void assertThatPostProcessBeforeInitializationReturnsBeanPassedIn() {
final Object beanPassedIn = new Object();
final MBeanExportOperationsInjector objectUnderTest = new MBeanExportOperationsInjector();
final Object returnedBean = objectUnderTest
.postProcessBeforeInitialization(beanPassedIn,
"assertThatPostProcessBeforeInitializationReturnsBeanPassedIn");
assertSame(
"postProcessBeforeInitialization() did not return the bean that has been passed in",
beanPassedIn, returnedBean);
}
@Test
public final void assertThatPostProcessAfterInitializationReturnsBeanPassedIn() {
final Object beanPassedIn = new Object();
final MBeanExportOperationsInjector objectUnderTest = new MBeanExportOperationsInjector();
final Object returnedBean = objectUnderTest
.postProcessAfterInitialization(beanPassedIn,
"assertThatPostProcessAfterInitializationReturnsBeanPassedIn");
assertSame(
"postProcessAfterInitialization() did not return the bean that has been passed in",
beanPassedIn, returnedBean);
}
@Test(expected = IllegalStateException.class)
public final void assertThatPostProcessBeforeInitializationRecognizesMissingApplicationContext() {
final MBeanExportOperationsAware extensionPoint = new MBeanExportOperationsAware() {
@Override
public void setMBeanExportOperations(
final MBeanExportOperations mbeanExportOperations) {
}
};
final MBeanExportOperationsInjector objectUnderTest = new MBeanExportOperationsInjector();
objectUnderTest
.postProcessBeforeInitialization(extensionPoint,
"assertThatPostProcessBeforeInitializationRecognizesMissingApplicationContext");
}
@Test
public final void assertThatPostProcessBeforeInitializationInjectsMBeanExportOperationsIntoMBeanExportOperationsAwareBean() {
final AtomicReference<MBeanExportOperations> mbeanExportOperationsHolder = new AtomicReference<MBeanExportOperations>();
final MBeanExportOperationsAware extensionPoint = new MBeanExportOperationsAware() {
@Override
public void setMBeanExportOperations(
final MBeanExportOperations mbeanExportOperations) {
mbeanExportOperationsHolder.set(mbeanExportOperations);
}
};
final StaticApplicationContext appContext = new StaticApplicationContext();
appContext
.registerSingleton(
"assertThatPostProcessBeforeInitializationInjectsMBeanExportOperationsIntoMBeanExportOperationsAwareBean",
MBeanExporter.class);
final MBeanExportOperationsInjector objectUnderTest = new MBeanExportOperationsInjector();
objectUnderTest.setApplicationContext(appContext);
objectUnderTest
.postProcessBeforeInitialization(
extensionPoint,
"assertThatPostProcessBeforeInitializationInjectsTransportProtocolPluginIntoTransportProtocolExtensionPoint");
assertNotNull(
"postProcessBeforeInitialization() did NOT inject TransportProtocolPlugin into TransportProtocolExtensionPoint",
mbeanExportOperationsHolder.get());
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatSetApplicationContextRejectsNullApplicationContext() {
final MBeanExportOperationsInjector objectUnderTest = new MBeanExportOperationsInjector();
objectUnderTest.setApplicationContext(null);
}
}