package se.chalmers.gdcn.tests; import se.chalmers.gdcn.control.WorkerReputationManager; import se.chalmers.gdcn.network.WorkerID; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; /** * Created by Leif on 2014-04-01. */ public class WorkerManagementTest { private WorkerReputationManager workerReputationManager; private KeyPair keyPairA; private WorkerID workerA; private WorkerID myWorkerID; private final static int DEMOTE_REPUTATION = 3; @BeforeClass public void setupClass() throws NoSuchAlgorithmException { KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); keyPairA = generator.generateKeyPair(); workerA = new WorkerID(keyPairA.getPublic()); myWorkerID = new WorkerID(generator.generateKeyPair().getPublic()); } @BeforeMethod public void setupTest(){ workerReputationManager = new WorkerReputationManager(myWorkerID, DEMOTE_REPUTATION, WorkerReputationManager.DisciplinaryAction.REMOVE); } @Test public void registerTest() throws NoSuchAlgorithmException { assert ! workerReputationManager.hasWorkerReputation(workerA); assert workerReputationManager.registerWorker(workerA); assert ! workerReputationManager.hasWorkerReputation(workerA); workerReputationManager.promoteWorker(workerA); assert workerReputationManager.hasWorkerReputation(workerA); assert workerReputationManager.hasWorkerReputation(new WorkerID(keyPairA.getPublic())); } @Test public void removeTest(){ assert workerReputationManager.registerWorker(workerA); workerReputationManager.reportWorker(workerA, WorkerReputationManager.DisciplinaryAction.REMOVE); assert ! workerReputationManager.hasWorkerReputation(workerA); } @Test public void reputationTest(){ workerReputationManager.registerWorker(workerA); assert 0 == workerReputationManager.getReputation(workerA); workerReputationManager.promoteWorker(workerA); assert 1 == workerReputationManager.getReputation(workerA); workerReputationManager.reportWorker(workerA, WorkerReputationManager.DisciplinaryAction.DEMOTE); assert 1-DEMOTE_REPUTATION == workerReputationManager.getReputation(workerA); } @Test public void trustHimselfTest(){ assert workerReputationManager.hasWorkerReputation(myWorkerID); } @Test public void exceptionTestReputation(){ assert 0 == workerReputationManager.getReputation(workerA); } @Test public void exceptionTestPromote(){ boolean exceptionThrown = false; try{ workerReputationManager.promoteWorker(workerA); } catch (IllegalArgumentException e){ exceptionThrown = true; } assert exceptionThrown; } }