package se.chalmers.gdcn.replica; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import se.chalmers.gdcn.files.TaskMeta; import se.chalmers.gdcn.network.WorkerID; import utils.TaskHolder; import utils.WorkerHolder; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; /** * Created by Leif on 2014-04-17. */ public class ComparatorTest { private static final float REPUTATION = 3f; private static final int REPLICAS = 3; private final TaskComparator comparator = new TaskComparator(); private final TreeSet<TaskCompare> treeSet = new TreeSet<>(comparator); private TaskData taskA; private TaskData taskB; private TaskData cloneA; private WorkerID workerA; private WorkerID workerB; private WorkerID workerC; @BeforeClass public void setupClass() { workerA = WorkerHolder.getWorkerA(); workerB = WorkerHolder.getWorkerB(); workerC = WorkerHolder.getWorkerC(); } @BeforeMethod private void setup(){ taskA = create(TaskHolder.getTaskA()); taskB = create(TaskHolder.getTaskB()); cloneA = create(TaskHolder.getTaskA()); treeSet.clear(); } /////////////////////////////////////////// // Comparator tests @Test public void symmetryTest(){ assert comparator.compare(taskA, taskB) == - comparator.compare(taskB, taskA); } @Test public void equalsTest(){ assert comparator.compare(taskA, cloneA) == 0; assert comparator.compare(cloneA, taskA) == 0; } @Test public void assignLowTest(){ taskA.giveTask(workerA, 0f); assert comparator.compare(taskA, cloneA) > 0; } @Test public void assignHighTest(){ taskA.giveTask(workerA, REPUTATION); assert comparator.compare(taskA, cloneA) < 0; } /////////////////////////////////////////// // TaskData tests @Test public void returnLowTest(){ taskA.giveTask(workerA, 0f); taskA.giveTask(workerB, 0f); taskA.giveTask(workerC, 0f); assert ! taskA.enoughGiven(); assert taskA.value() > 0; taskA.returned(workerA); taskA.returned(workerB); taskA.returned(workerC); assert ! taskA.enoughReturned(); } @Test public void returnEnoughTest(){ taskA.giveTask(workerA, REPUTATION); assert taskA.value() < 0; taskA.giveTask(workerB, 0f); taskA.giveTask(workerC, 0f); assert taskA.enoughGiven(); taskA.returned(workerA); taskA.returned(workerB); taskA.returned(workerC); assert taskA.enoughReturned(); } @Test public void timeoutTest(){ float origValue = taskA.value(); assert origValue > 0; taskA.giveTask(workerA, REPUTATION); float newValue = taskA.value(); assert newValue < 0; taskA.timedOut(workerA); assert taskA.value() == origValue; taskA.returned(workerA); assert taskA.value() == newValue; } @Test public void orderTest(){ assert taskA.value() == taskB.value(); assert ! taskA.order().equals(taskB.order()); assert taskA.order().equals(cloneA.order()); } /////////////////////////////////// // Tree tests @Test public void testAdd(){ treeSet.add(taskA); treeSet.add(taskB); treeSet.add(cloneA); assert treeSet.size() == 2; } @Test public void removeTest(){ treeSet.add(taskA); treeSet.add(taskB); Set<TaskCompare> otherSet = new HashSet<>(); otherSet.add(cloneA); assert treeSet.removeAll(otherSet); assert treeSet.size() == 1; } @Test public void cloneTest(){ treeSet.add(taskA); treeSet.add(taskB); Set<TaskCompare> otherSet = (Set<TaskCompare>) treeSet.clone(); assert otherSet.remove(cloneA); } private static TaskData create(TaskMeta meta){ return new TaskData(meta, "job", REPLICAS, REPUTATION); } }