blob: 77f3e8a9db9060d1322912ce1903fb9022db6f86 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.ignite.internal.mxbean;
import java.lang.reflect.Method;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.NotCompliantMBeanException;
import org.apache.ignite.mxbean.MXBeanParameter;
import org.apache.ignite.mxbean.MXBeanParametersDescriptions;
import org.apache.ignite.mxbean.MXBeanParametersNames;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Contains tests for {@link IgniteStandardMXBean} methods.
*/
public class IgniteStandardMXBeanTest {
/** */
private static final String NAME = "Name";
/** */
private static final String TYPE = "Type";
/** */
private static final String OPERATION_INFO_DESCRIPTION = "Operation info description";
/** */
private static final String PARAMETER_INFO_DESCRIPTION = "Parameter info description";
/** */
private static final String EMPTY_STRING = "";
/** */
private static final String TEST_METHOD_1 = "testMethod1";
/** */
private static final String TEST_METHOD_2 = "testMethod2";
/** */
private static final String TEST_METHOD_3 = "testMethod3";
/** */
private static final String TEST_METHOD_4 = "testMethod4";
/** */
private static final String TEST_METHOD_5 = "testMethod5";
/** */
private static final String TEST_METHOD_6 = "testMethod6";
/** */
private static final String TEST_METHOD_7 = "testMethod7";
/** */
private static final String TEST_METHOD_8 = "testMethod8";
/** */
private static final String TEST_METHOD_9 = "testMethod9";
/** */
private static final String TEST_METHOD_10 = "testMethod10";
/** */
private static final String FIRST_DESCRIPTION_PARAM_ANNOTATION = "First description parameter annotation.";
/** */
private static final String FIRST_DESCRIPTION_METHOD_ANNOTATION = "First description method annotation.";
/** */
private static final String SECOND_DESCRIPTION_PARAM_ANNOTATION = "Second description parameter annotation.";
/** */
private static final String SECOND_DESCRIPTION_METHOD_ANNOTATION = "Second description method annotation.";
/** */
private static final String FIRST_NAME_PARAM_ANNOTATION = "First name parameter annotation";
/** */
private static final String FIRST_NAME_METHOD_ANNOTATION = "First name method annotation";
/** */
private static final String SECOND_NAME_PARAM_ANNOTATION = "Second name parameter annotation";
/** */
private static final String SECOND_NAME_METHOD_ANNOTATION = "Second name method annotation";
/** */
private static final String FIRST_LOWERCASE_LETTER = "first lowercase letter.";
/** */
private static final String NO_DOT_AT_THE_END_OF_THE_STRING = "No dot at the end of the string";
/** */
private static final int ZERO_INDEX = 0;
/** */
private static final int FIRST_INDEX = 1;
/**
* Instance of {@link IgniteStandardMXBean}.
*/
private final IgniteStandardMXBean igniteStandardMXBean;
/**
* Instance of {@link MBeanParameterInfo}.
*/
private final MBeanParameterInfo paramInfo;
/**
* Public constructor that initializes instances of IgniteStandardMXBean and MBeanParameterInfo classes.
*/
public IgniteStandardMXBeanTest() throws NotCompliantMBeanException {
TestInterfaceImpl testItfImpl = new TestInterfaceImpl();
igniteStandardMXBean = new IgniteStandardMXBean(testItfImpl, TestInterface.class);
paramInfo = new MBeanParameterInfo(NAME, TYPE, PARAMETER_INFO_DESCRIPTION);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* All annotation parameters are valid.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test
public void getDescription_OldAnnotation() throws NoSuchMethodException {
String actualRes = getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_1, FIRST_INDEX);
assertEquals(SECOND_DESCRIPTION_METHOD_ANNOTATION, actualRes);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* An empty array is used as parameters in the annotation resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getDescription_OldAnnotationEmptyValueArray() throws NoSuchMethodException {
getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_2, FIRST_INDEX);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* An array whose length is less than transmitted parameter index is used as a parameter
* resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getDescription_OldAnnotationValueLengthLessThenParamIndex() throws NoSuchMethodException {
getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_3, FIRST_INDEX);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* Empty description parameter value resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getDescription_OldAnnotationEmptyParamValue() throws NoSuchMethodException {
getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_4, ZERO_INDEX);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* Description parameter without a dot at the end of the sentence resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getDescription_OldAnnotationNoDotAtTheEndOfTheString() throws NoSuchMethodException {
getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_5, ZERO_INDEX);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* Description parameter starts with a lowercase letter resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getDescription_OldAnnotationFirstLowercaseLetter() throws NoSuchMethodException {
getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_5, FIRST_INDEX);
}
/**
* A test method that represents a situation in which the method has only new annotations.
* All annotation parameters are valid.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test
public void getDescription_NewAnnotation() throws NoSuchMethodException {
String actualRes = getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_6, FIRST_INDEX);
assertEquals(SECOND_DESCRIPTION_PARAM_ANNOTATION, actualRes);
}
/**
* A test method that represents a situation in which the method has only new annotations.
* Empty description parameter value resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getDescription_NewAnnotationEmptyParamValue() throws NoSuchMethodException {
getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_7, ZERO_INDEX);
}
/**
* A test method that represents a situation in which the method has only new annotation.
* Description parameter without a dot at the end of the sentence resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getDescription_NewAnnotationNoDotAtTheEndOfTheString() throws NoSuchMethodException {
getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_8, ZERO_INDEX);
}
/**
* A test method that represents a situation in which the method has only new annotations.
* Description parameter starts with a lowercase letter resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getDescription_NewAnnotationFirstLowercaseLetter() throws NoSuchMethodException {
getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_8, FIRST_INDEX);
}
/**
* A test method that represents a situation in which the method has both old and new annotations.
* All annotations parameters are valid.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test
public void getDescription_BothOldAndNewAnnotations() throws NoSuchMethodException {
String actualRes = getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_9, FIRST_INDEX);
assertEquals(SECOND_DESCRIPTION_METHOD_ANNOTATION, actualRes);
}
/**
* A test method that represents a situation in which the method has no annotations at all.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test
public void getDescription_NoAnnotations() throws NoSuchMethodException {
String actualRes = getDescriptionWithMethodNameAndParamIndex(TEST_METHOD_10, FIRST_INDEX);
assertEquals(PARAMETER_INFO_DESCRIPTION, actualRes);
}
/**
* A test method that represents a situation in which the method has only the old annotation.
* All annotation parameters are valid.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test
public void getParameterName_OldAnnotation() throws NoSuchMethodException {
String actualRes = getParameterNameWithMethodNameAndParamIndex(TEST_METHOD_1, FIRST_INDEX);
assertEquals(SECOND_NAME_METHOD_ANNOTATION, actualRes);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* An empty array is used as parameters in the annotation resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getParameterName_OldAnnotationEmptyValueArray() throws NoSuchMethodException {
getParameterNameWithMethodNameAndParamIndex(TEST_METHOD_2, FIRST_INDEX);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* An array whose length is less than transmitted parameter index is used as a parameter
* resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getParameterName_OldAnnotationValueLengthLessThenParamIndex() throws NoSuchMethodException {
getParameterNameWithMethodNameAndParamIndex(TEST_METHOD_3, FIRST_INDEX);
}
/**
* A test method that represents a situation in which the method has only old annotation.
* Empty parameter name value resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getParameterName_OldAnnotationEmptyParamValue() throws NoSuchMethodException {
getParameterNameWithMethodNameAndParamIndex(TEST_METHOD_4, ZERO_INDEX);
}
/**
* A test method that represents a situation in which the method has only new annotations.
* All annotation parameters are valid.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test
public void getParameterName_NewAnnotation() throws NoSuchMethodException {
String actualRes = getParameterNameWithMethodNameAndParamIndex(TEST_METHOD_6, FIRST_INDEX);
assertEquals(SECOND_NAME_PARAM_ANNOTATION, actualRes);
}
/**
* A test method that represents a situation in which the method has only new annotations.
* Empty parameter name value resulting in an AssertionError.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test(expected = AssertionError.class)
public void getParameterName_NewAnnotationEmptyParamValue() throws NoSuchMethodException {
getParameterNameWithMethodNameAndParamIndex(TEST_METHOD_7, ZERO_INDEX);
}
/**
* A test method that represents a situation in which the method has both old and new annotations.
* All annotations parameters are valid.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test
public void getParameterName_BothOldAndNewAnnotations() throws NoSuchMethodException {
String actualRes = getParameterNameWithMethodNameAndParamIndex(TEST_METHOD_9, FIRST_INDEX);
assertEquals(SECOND_NAME_METHOD_ANNOTATION, actualRes);
}
/**
* A test method that represents a situation in which the method has no annotations at all.
*
* @throws NoSuchMethodException if method is not found.
*/
@Test
public void getParameterName_NoAnnotations() throws NoSuchMethodException {
String actualRes = getParameterNameWithMethodNameAndParamIndex(TEST_METHOD_10, FIRST_INDEX);
assertEquals(NAME, actualRes);
}
/**
* Utility method that returns the description for method argument by method name and parameter index.
*
* @param mName method name from interface TestInterface.
* @param paramIdx the sequence number of the argument considered.
* @return the description for method argument.
* @throws NoSuchMethodException if a matching method is not found.
*/
private String getDescriptionWithMethodNameAndParamIndex(String mName, int paramIdx)
throws NoSuchMethodException {
MBeanOperationInfo operationInfo = getMBeanOperationInfoWithMehtodName(mName);
return igniteStandardMXBean.getDescription(operationInfo, paramInfo, paramIdx);
}
/**
* Utility method that returns the name for method argument by method name and parameter index.
*
* @param mName method name from interface TestInterface.
* @param paramIdx the sequence number of the argument considered.
* @return the name for method argument.
* @throws NoSuchMethodException if a matching method is not found.
*/
private String getParameterNameWithMethodNameAndParamIndex(String mName, int paramIdx)
throws NoSuchMethodException {
MBeanOperationInfo operationInfo = getMBeanOperationInfoWithMehtodName(mName);
return igniteStandardMXBean.getParameterName(operationInfo, paramInfo, paramIdx);
}
/**
* Utility method for getting instance of MBeanOperationInfo constructed with default description from TestInterface
* by its method name.
*
* @param mName method name from interface TestInterface.
* @return MBeanOperationInfo.
* @throws NoSuchMethodException if a matching method is not found.
*/
private MBeanOperationInfo getMBeanOperationInfoWithMehtodName(String mName) throws NoSuchMethodException {
Method m = TestInterface.class.getDeclaredMethod(mName, String.class, String.class);
return new MBeanOperationInfo(OPERATION_INFO_DESCRIPTION, m);
}
/**
* Interface used for testing.
*/
public static interface TestInterface {
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
@MXBeanParametersNames({FIRST_NAME_METHOD_ANNOTATION, SECOND_NAME_METHOD_ANNOTATION})
@MXBeanParametersDescriptions({FIRST_DESCRIPTION_METHOD_ANNOTATION, SECOND_DESCRIPTION_METHOD_ANNOTATION})
void testMethod1(String firstParam, String secondParam);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
@MXBeanParametersNames({})
@MXBeanParametersDescriptions({})
void testMethod2(String firstParam, String secondParam);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
@MXBeanParametersNames({FIRST_NAME_METHOD_ANNOTATION})
@MXBeanParametersDescriptions({FIRST_DESCRIPTION_METHOD_ANNOTATION})
void testMethod3(String firstParam, String secondParam);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
@MXBeanParametersNames({EMPTY_STRING})
@MXBeanParametersDescriptions({EMPTY_STRING})
void testMethod4(String firstParam, String secondParam);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
@MXBeanParametersNames({FIRST_NAME_METHOD_ANNOTATION, SECOND_NAME_METHOD_ANNOTATION})
@MXBeanParametersDescriptions({NO_DOT_AT_THE_END_OF_THE_STRING, FIRST_LOWERCASE_LETTER})
void testMethod5(String firstParam, String secondParam);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
void testMethod6(
@MXBeanParameter(name = FIRST_NAME_PARAM_ANNOTATION, description = FIRST_DESCRIPTION_PARAM_ANNOTATION)
String firstParam,
@MXBeanParameter(name = SECOND_NAME_PARAM_ANNOTATION, description = SECOND_DESCRIPTION_PARAM_ANNOTATION)
String secondParam
);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
void testMethod7(
@MXBeanParameter(name = EMPTY_STRING, description = EMPTY_STRING)
String firstParam,
@MXBeanParameter(name = SECOND_NAME_PARAM_ANNOTATION, description = SECOND_DESCRIPTION_PARAM_ANNOTATION)
String secondParam
);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
void testMethod8(
@MXBeanParameter(name = FIRST_NAME_PARAM_ANNOTATION, description = NO_DOT_AT_THE_END_OF_THE_STRING)
String firstParam,
@MXBeanParameter(name = SECOND_NAME_PARAM_ANNOTATION, description = FIRST_LOWERCASE_LETTER)
String secondParam
);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
@MXBeanParametersNames({FIRST_NAME_METHOD_ANNOTATION, SECOND_NAME_METHOD_ANNOTATION})
@MXBeanParametersDescriptions({FIRST_DESCRIPTION_METHOD_ANNOTATION, SECOND_DESCRIPTION_METHOD_ANNOTATION})
void testMethod9(
@MXBeanParameter(name = FIRST_NAME_PARAM_ANNOTATION, description = NO_DOT_AT_THE_END_OF_THE_STRING)
String firstParam,
@MXBeanParameter(name = SECOND_NAME_PARAM_ANNOTATION, description = FIRST_LOWERCASE_LETTER)
String secondParam
);
/**
* Method used for testing.
*
* @param firstParam first string method parameter.
* @param secondParam second string method parameter.
*/
void testMethod10(String firstParam, String secondParam);
}
/**
* Test interface implementation.
*/
private static class TestInterfaceImpl implements TestInterface {
/** {@inheritDoc} */
@Override public void testMethod1(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod2(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod3(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod4(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod5(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod6(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod7(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod8(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod9(String firstParam, String secondParam) {
// No-op.
}
/** {@inheritDoc} */
@Override public void testMethod10(String firstParam, String secondParam) {
// No-op.
}
}
}