/* TestMBeanOperationInvoker.java
*
* Copyright 2009-2015 Comcast Interactive Media, LLC.
*
* 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 org.fishwife.jrugged.spring.jmx;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import javax.management.JMException;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import java.util.HashMap;
import java.util.Map;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createMock;
import static junit.framework.Assert.assertEquals;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
public class TestMBeanOperationInvoker {
private MBeanServer mockMBeanServer;
private ObjectName mockObjectName;
private MBeanOperationInfo mockOperationInfo;
private MBeanValueConverter mockValueConverter;
private MBeanOperationInvoker invoker;
class MockMBeanOperationInvoker extends MBeanOperationInvoker {
MockMBeanOperationInvoker(MBeanServer mBeanServer, ObjectName objectName, MBeanOperationInfo operationInfo) {
super(mBeanServer, objectName, operationInfo);
}
MBeanValueConverter createMBeanValueConverter(Map<String, String[]> parameterMap) {
return mockValueConverter;
}
}
@Before
public void setUp() {
mockMBeanServer = createMock(MBeanServer.class);
mockObjectName = createMock(ObjectName.class);
mockOperationInfo = createMock(MBeanOperationInfo.class);
mockValueConverter = createMock(MBeanValueConverter.class);
invoker = new MockMBeanOperationInvoker(mockMBeanServer, mockObjectName, mockOperationInfo);
}
@Test
public void testConstructor() {
assertEquals(mockMBeanServer, ReflectionTestUtils.getField(invoker, "mBeanServer"));
assertEquals(mockObjectName, ReflectionTestUtils.getField(invoker, "objectName"));
assertEquals(mockOperationInfo, ReflectionTestUtils.getField(invoker, "operationInfo"));
}
@Test
public void testInvokeOperation() throws JMException {
MBeanParameterInfo mockParameterInfo1 = createMock(MBeanParameterInfo.class);
MBeanParameterInfo mockParameterInfo2 = createMock(MBeanParameterInfo.class);
MBeanParameterInfo[] parameterInfoArray = new MBeanParameterInfo[] { mockParameterInfo1, mockParameterInfo2 };
expect(mockOperationInfo.getSignature()).andReturn(parameterInfoArray);
String name1 = "name 1";
String type1 = "type 1";
expect(mockParameterInfo1.getType()).andReturn(type1);
expect(mockParameterInfo1.getName()).andReturn(name1);
String value1 = "value 1";
expect(mockValueConverter.convertParameterValue(name1, type1)).andReturn(value1);
String name2 = "name 2";
String type2 = "type 2";
expect(mockParameterInfo2.getType()).andReturn(type2);
expect(mockParameterInfo2.getName()).andReturn(name2);
String value2 = "value 2";
expect(mockValueConverter.convertParameterValue(name2, type2)).andReturn(value2);
String operationName = "some_operation_name";
expect(mockOperationInfo.getName()).andReturn(operationName);
Object value = new Object();
expect(mockMBeanServer.invoke(eq(mockObjectName), eq(operationName), anyObject(String[].class), anyObject(String[].class))).andReturn(value);
replay(mockMBeanServer, mockObjectName, mockOperationInfo, mockValueConverter,
mockParameterInfo1, mockParameterInfo2);
Map<String, String[]> parameterMap = new HashMap<String, String[]>();
parameterMap.put(name1, new String[] { value1 });
parameterMap.put(name2, new String[] { value2 });
Object invokeResult = invoker.invokeOperation(parameterMap);
assertEquals(value, invokeResult);
verify(mockMBeanServer, mockObjectName, mockOperationInfo, mockValueConverter,
mockParameterInfo1, mockParameterInfo2);
}
}