package org.cyclopsgroup.jmxterm.cmd; import static org.junit.Assert.assertEquals; import java.io.StringWriter; import java.util.Arrays; import java.util.HashSet; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import org.cyclopsgroup.jmxterm.MockSession; import org.jmock.Expectations; import org.jmock.Mockery; import org.junit.Before; import org.junit.Test; /** * Test case for {@link BeansCommand} * * @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a> */ public class BeansCommandTest { private BeansCommand command; private MBeanServerConnection conn; private Mockery context; private StringWriter output; /** * Set up testing connection */ @Before public void setUp() { output = new StringWriter(); context = new Mockery(); command = new BeansCommand(); conn = context.mock( MBeanServerConnection.class ); } /** * Test execution and get all beans * * @throws Exception */ @Test public void testExecuteWithAllBeans() throws Exception { context.checking( new Expectations() { { one( conn ).getDomains(); will( returnValue( new String[] { "a", "b" } ) ); atLeast( 1 ).of( conn ).queryNames( new ObjectName( "a:*" ), null ); will( returnValue( new HashSet<ObjectName>( Arrays.asList( new ObjectName( "a:type=1" ), new ObjectName( "a:type=2" ) ) ) ) ); atLeast( 1 ).of( conn ).queryNames( new ObjectName( "b:*" ), null ); will( returnValue( new HashSet<ObjectName>( Arrays.asList( new ObjectName( "b:type=1" ) ) ) ) ); } } ); command.setSession( new MockSession( output, conn ) ); command.execute(); context.assertIsSatisfied(); assertEquals( "a:type=1\na:type=2\nb:type=1\n", output.toString() ); } /** * Test execution where domain is set in session * * @throws Exception */ @Test public void testExecuteWithDomainInSession() throws Exception { context.checking( new Expectations() { { allowing( conn ).getDomains(); will( returnValue( new String[] { "a", "b" } ) ); atLeast( 1 ).of( conn ).queryNames( new ObjectName( "b:*" ), null ); will( returnValue( new HashSet<ObjectName>( Arrays.asList( new ObjectName( "b:type=1" ) ) ) ) ); } } ); MockSession session = new MockSession( output, conn ); session.setDomain( "b" ); command.setSession( session ); command.execute(); context.assertIsSatisfied(); assertEquals( "b:type=1\n", output.toString() ); } /** * Test execution with an domain option * * @throws Exception */ @Test public void testExecuteWithDomainOption() throws Exception { command.setDomain( "b" ); context.checking( new Expectations() { { allowing( conn ).getDomains(); will( returnValue( new String[] { "a", "b" } ) ); atLeast( 1 ).of( conn ).queryNames( new ObjectName( "b:*" ), null ); will( returnValue( new HashSet<ObjectName>( Arrays.asList( new ObjectName( "b:type=1" ) ) ) ) ); } } ); command.setSession( new MockSession( output, conn ) ); command.execute(); context.assertIsSatisfied(); assertEquals( "b:type=1\n", output.toString() ); } /** * Test execution with domain NULL * * @throws Exception */ @Test public void testExecuteWithNullDomain() throws Exception { command.setDomain( "*" ); context.checking( new Expectations() { { one( conn ).getDomains(); will( returnValue( new String[] { "a", "b" } ) ); atLeast( 1 ).of( conn ).queryNames( new ObjectName( "a:*" ), null ); will( returnValue( new HashSet<ObjectName>( Arrays.asList( new ObjectName( "a:type=1" ), new ObjectName( "a:type=2" ) ) ) ) ); atLeast( 1 ).of( conn ).queryNames( new ObjectName( "b:*" ), null ); will( returnValue( new HashSet<ObjectName>( Arrays.asList( new ObjectName( "b:type=1" ) ) ) ) ); } } ); MockSession session = new MockSession( output, conn ); session.setDomain( "b" ); command.setSession( session ); command.execute(); context.assertIsSatisfied(); assertEquals( "a:type=1\na:type=2\nb:type=1\n", output.toString() ); } }