package se.chalmers.gdcn.tests;
import org.testng.annotations.Test;
import se.chalmers.gdcn.compare.EqualityControl;
import se.chalmers.gdcn.replica.ReplicaManager.ReplicaID;
import se.chalmers.gdcn.utils.ByteArray;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Created by joakim on 4/3/14.
*/
public class EqualityControlTest {
private ReplicaID replicaA = new ReplicaID("A");
private ReplicaID replicaB = new ReplicaID("B");
private ReplicaID replicaC = new ReplicaID("C");
private ReplicaID replicaD = new ReplicaID("D");
private byte[] firstResult = {1, 2, 3, 4};
private byte[] equalResult = {1, 2, 3, 4};
private byte[] nonEqualResult = {1, 2, 3, 0};
@Test
public void compareEqual() {
Map<ReplicaID, byte[]> results = new HashMap<>();
results.put(replicaA, firstResult);
results.put(replicaB, firstResult);
results.put(replicaC, equalResult);
Map<ByteArray,Set<ReplicaID>> compareData = EqualityControl.compareData(results);
assert compareData.size() == 1;
Set<ReplicaID> replicaIDs = compareData.get(new ByteArray(firstResult));
assert replicaIDs != null;
assert replicaIDs.contains(replicaA);
assert replicaIDs.contains(replicaB);
assert replicaIDs.contains(replicaC);
}
@Test
public void compareInequal() {
Map<ReplicaID, byte[]> results = new HashMap<>();
results.put(replicaA, firstResult);
results.put(replicaD, nonEqualResult);
Map<ByteArray, Set<ReplicaID>> compareData = EqualityControl.compareData(results);
assert compareData.size() == 2;
Set<ReplicaID> firsts = compareData.get(new ByteArray(firstResult));
assert firsts != null;
assert firsts.contains(replicaA);
Set<ReplicaID> nonEquals = compareData.get(new ByteArray(nonEqualResult));
assert nonEquals != null;
assert nonEquals.contains(replicaD);
}
@Test
public void compareMixed() {
Map<ReplicaID, byte[]> results = new HashMap<>();
results.put(replicaA, firstResult);
results.put(replicaC, equalResult);
results.put(replicaD, nonEqualResult);
Map<ByteArray, Set<ReplicaID>> compareData = EqualityControl.compareData(results);
assert compareData.size() == 2;
Set<ReplicaID> firsts = compareData.get(new ByteArray(firstResult));
assert firsts != null;
assert firsts.contains(replicaA);
assert firsts.contains(replicaC);
Set<ReplicaID> nonEquals = compareData.get(new ByteArray(nonEqualResult));
assert nonEquals != null;
assert nonEquals.contains(replicaD);
}
}