Skip to content

Instantly share code, notes, and snippets.

@Mukundhan-I2I
Last active October 16, 2019 13:39
Show Gist options
  • Save Mukundhan-I2I/eb30e03873c02ff252b7ccc4e7efb1d4 to your computer and use it in GitHub Desktop.
Save Mukundhan-I2I/eb30e03873c02ff252b7ccc4e7efb1d4 to your computer and use it in GitHub Desktop.
UnitTestUtils
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import sun.reflect.ReflectionFactory;
/**
* <p>
* UnitTestUtils
* </p>
*
* @author mukundhan
* @created Oct-08-2019
*/
public class UnitTestUtils {
public static List<Object> generateRandomObjects(Class clazz, Integer num) {
List<Object> objects = new ArrayList<Object>();
while (num > 0) {
try {
if (Long.class.equals(clazz)) {
objects.add(Long.valueOf(num));
} else if (Integer.class.equals(clazz)) {
objects.add(Integer.valueOf(num));
} else if (String.class.equals(clazz)) {
objects.add(String.valueOf(num));
} else {
objects.add(generateRandomObject(clazz));
}
num = num - 1;
} catch (Exception e) {
e.printStackTrace();
num = num - 1;
}
}
return objects;
}
public static Object generateRandomObject(Class clazz) throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, ClassNotFoundException {
Constructor<?> cons = ReflectionFactory.getReflectionFactory().newConstructorForSerialization(clazz);
cons.setAccessible(true);
Object obj = cons.newInstance();
Field[] clazzFields = clazz.getFields();
for (Field field: clazzFields) {
if (field.getType().isInstance(String.class)) {
field.setAccessible(true);
field.set(obj, getRandomValues());
} else if (field.getType().isInstance(Date.class)) {
field.setAccessible(true);
field.set(obj, new Date());
}
}
for (Method method: clazz.getMethods()) {
if (method.getName().startsWith("set")) {
for (Type subType: method.getGenericParameterTypes()) {
Class parameterClass = Class.forName(subType.getTypeName());
if (parameterClass.isAssignableFrom(String.class)) {
method.setAccessible(true);
method.invoke(obj, getRandomValues());
} else if (parameterClass.isAssignableFrom(Date.class)) {
method.setAccessible(true);
method.invoke(obj, new Date());
} else {
method.invoke(obj, generateRandomObject(parameterClass));
}
}
}
}
return obj;
}
public static String getRandomValues() {
return getAlphaNumericString(Math.min(1, 10));
}
public static String getAlphaNumericString(int n) {
String AlphaNumericString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789"
+ "abcdefghijklmnopqrstuvxyz";
StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; i++) {
int index = (int)(AlphaNumericString.length() * Math.random());
sb.append(AlphaNumericString.charAt(index));
}
return sb.toString();
}
public static Map<String, String> getTables() {
Map<String, String> tableConfig = new HashMap<>();
tableConfig.put(Constants.TABLE_DOC_STORE, Constants.TABLE_DOC_STORE);
return tableConfig;
}
public static DynamoDbTableConfig getTableConfig(final Class<? extends GenericDynamoDbDomain> domainClass,
final Boolean withIndex) {
Map<String, IDynamoDbIndexConfig> globalIndexes = getGlobalIndexConfigs();
return new DynamoDbTableConfig.Builder()
.tableName(Constants.TABLE_DOC_STORE)
.domainClass(domainClass)
.globalIndexes(withIndex ? globalIndexes : null)
.build();
}
public static Map<String, IDynamoDbIndexConfig> getGlobalIndexConfigs() {
Map<String, IDynamoDbIndexConfig> globalIndexes = new HashMap<>();
DynamoDbIndexConfig parentIndexConfig = getDynamoDbIndexConfig();
globalIndexes.put(Constants.INDEX_PARENT, parentIndexConfig);
return globalIndexes;
}
public static DynamoDbIndexConfig getDynamoDbIndexConfig() {
return new DynamoDbIndexConfig.Builder()
.indexName(Constants.INDEX_PARENT)
.partitionKey("documentType")
.sortKey("documentSubType")
.build();
}
public static List<DocStoreItem> getParentIndexes() {
return new ArrayList<>();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment