/**
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
*
* Copyright 2014-2016 Ruhr University Bochum / Hackmanit GmbH
*
* Licensed under Apache License 2.0
* http://www.apache.org/licenses/LICENSE-2.0
*/
package de.rub.nds.tlsattacker.modifiablevariable.util;
import de.rub.nds.tlsattacker.modifiablevariable.HoldsModifiableVariable;
import de.rub.nds.tlsattacker.modifiablevariable.biginteger.ModifiableBigInteger;
import de.rub.nds.tlsattacker.modifiablevariable.bytearray.ModifiableByteArray;
import de.rub.nds.tlsattacker.modifiablevariable.integer.ModifiableInteger;
import java.lang.reflect.Field;
import java.util.LinkedList;
import java.util.List;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Juraj Somorovsky - juraj.somorovsky@rub.de
*/
public class ModifiableVariableAnalyzerTest {
public ModifiableVariableAnalyzerTest() {
}
/**
* Test of getAllModifiableVariableFields method, of class
* ModifiableVariableAnalyzer.
*
*/
@Test
public void testGetAllModifiableVariableFields() {
SimpleClassWithModVariables chm = new SimpleClassWithModVariables();
String[] fieldNames = { "bi", "array", "i" };
List<Field> fields = ModifiableVariableAnalyzer.getAllModifiableVariableFields(chm);
for (String fn : fieldNames) {
assertTrue(containsFieldName(fn, fields));
}
assertFalse(containsFieldName("somename", fields));
}
/**
* Test of getRandomModifiableVariableField method, of class
* ModifiableVariableAnalyzer.
*/
@Test
public void testGetRandomModifiableVariableField() {
}
@Test
public void testGetAllModifiableVariableHolders() {
SimpleClassWithModVariables test1 = new SimpleClassWithModVariables();
test1.bi = new ModifiableBigInteger();
test1.x = new Integer("1");
assertEquals(1, ModifiableVariableAnalyzer.getAllModifiableVariableHoldersRecursively(test1).size());
test1.test = new SimpleClassWithModVariables();
assertEquals(2, ModifiableVariableAnalyzer.getAllModifiableVariableHoldersRecursively(test1).size());
}
@Test
public void testGetAllModifiableVariableFieldsRecursively() {
SimpleClassWithModVariables test1 = new SimpleClassWithModVariables();
test1.bi = new ModifiableBigInteger();
test1.x = new Integer("1");
List<ModifiableVariableField> fields = ModifiableVariableAnalyzer
.getAllModifiableVariableFieldsRecursively(test1);
assertEquals(3, fields.size());
test1.test = new SimpleClassWithModVariables();
fields = ModifiableVariableAnalyzer.getAllModifiableVariableFieldsRecursively(test1);
assertEquals(6, fields.size());
}
@Test
public void testGetAllModifiableVariableFieldsRecursivelyWithList() {
SimpleClassWithModVariablesList test1 = new SimpleClassWithModVariablesList();
test1.bi = new ModifiableBigInteger();
test1.list = new LinkedList<>();
test1.list.add(new SimpleClassWithModVariables());
test1.list.add(new SimpleClassWithModVariables());
List<ModifiableVariableField> fields = ModifiableVariableAnalyzer
.getAllModifiableVariableFieldsRecursively(test1);
assertEquals(9, fields.size());
}
@Test
public void testGetAllModifiableVariableFieldsRecursivelyOrder() {
SimpleClassWithModVariables test1 = new SimpleClassWithModVariables();
test1.bi = new ModifiableBigInteger();
test1.x = new Integer("1");
test1.test = new SimpleClassWithModVariables();
List<ModifiableVariableField> fields1 = ModifiableVariableAnalyzer
.getAllModifiableVariableFieldsRecursively(test1);
SimpleClassWithModVariables test2 = new SimpleClassWithModVariables();
test2.test = new SimpleClassWithModVariables();
List<ModifiableVariableField> fields2 = ModifiableVariableAnalyzer
.getAllModifiableVariableFieldsRecursively(test2);
assertEquals(6, fields1.size());
assertEquals(6, fields2.size());
for (int i = 0; i < fields1.size(); i++) {
String name1 = fields1.get(i).getField().getName();
String name2 = fields2.get(i).getField().getName();
assertEquals(name1, name2);
}
}
private boolean containsFieldName(String name, List<Field> list) {
for (Field f : list) {
if (f.getName().equals(name)) {
return true;
}
}
return false;
}
private class SimpleClassWithModVariables {
Integer x;
ModifiableBigInteger bi;
ModifiableByteArray array;
ModifiableInteger i;
@HoldsModifiableVariable
SimpleClassWithModVariables test;
}
private class SimpleClassWithModVariablesList {
Integer x;
ModifiableBigInteger bi;
ModifiableByteArray array;
ModifiableInteger i;
@HoldsModifiableVariable
SimpleClassWithModVariables test;
@HoldsModifiableVariable
List<SimpleClassWithModVariables> list;
}
}