/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.runner;
import org.eclipse.che.api.core.rest.shared.dto.Link;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.collections.Lists;
import java.util.Collections;
import java.util.List;
public class RandomRunnerSelectionStrategyTest {
RemoteRunner runner1 = new RemoteRunner("url1", "java/web", Collections.<Link>emptyList());
RemoteRunner runner2 = new RemoteRunner("url2", "java/web2", Collections.<Link>emptyList());
RemoteRunner runner3 = new RemoteRunner("url3", "java/web3", Collections.<Link>emptyList());
@Test
public void shouldSelectFromOneElementInList() {
//given
RandomRunnerSelectionStrategy strategy = new RandomRunnerSelectionStrategy();
//when
RemoteRunner actual = strategy.select(Lists.newArrayList(runner1));
//then
Assert.assertEquals(actual, runner1);
}
@Test
public void shouldSelectFromTwoElementInList() {
//given
RandomRunnerSelectionStrategy strategy = new RandomRunnerSelectionStrategy();
List<RemoteRunner> remoteRunners = Lists.newArrayList(runner1, runner2);
//when
RemoteRunner actual = strategy.select(remoteRunners);
//then
Assert.assertTrue(remoteRunners.contains(actual));
}
@Test
public void shouldSelectFromThree() {
//given
RandomRunnerSelectionStrategy strategy = new RandomRunnerSelectionStrategy();
List<RemoteRunner> remoteRunners = Lists.newArrayList(runner1, runner2, runner3);
//when
int runner1Select = 0;
int runner2Select = 0;
int runner3Select = 0;
for (int i = 0; i < 1000; i++) {
RemoteRunner actual = strategy.select(remoteRunners);
if (actual == runner1) {
runner1Select++;
} else if (actual == runner2) {
runner2Select++;
} else if (actual == runner3) {
runner3Select++;
}
}
//then
Assert.assertTrue(runner1Select > 250);
Assert.assertTrue(runner2Select > 250);
Assert.assertTrue(runner3Select > 250);
Assert.assertEquals(runner1Select + runner2Select + runner3Select, 1000);
}
}