Last active
October 16, 2019 13:39
-
-
Save Mukundhan-I2I/eb30e03873c02ff252b7ccc4e7efb1d4 to your computer and use it in GitHub Desktop.
UnitTestUtils
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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