package ru.qatools.gridrouter.sessions;
import org.junit.Before;
import org.junit.Test;
import ru.qatools.gridrouter.config.Version;
import java.time.Duration;
import java.time.temporal.Temporal;
import static java.time.ZonedDateTime.now;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.hamcrest.Matchers.lessThan;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
/**
* @author Ilya Sadykov
*/
public class WaitAvailableBrowsersCheckerTest {
WaitAvailableBrowsersChecker checker;
Version version;
StatsCounter counter;
@Before
public void setUp() throws Exception {
counter = mock(StatsCounter.class);
checker = new WaitAvailableBrowsersChecker(3, 1, counter);
version = new Version();
version.setPermittedCount(10);
version.setNumber("33");
when(counter.getSessionsCountForUserAndBrowser(eq("user"), eq("firefox"), eq("33"))).thenReturn(10);
}
@Test
public void testWaitAvailableBrowsersChecker() throws Exception {
Temporal started = now();
try {
checker.ensureFreeBrowsersAvailable("user", "host", "firefox", version);
} catch (WaitAvailableBrowserTimeoutException e) {
// do nothing
}
verify(counter, times(3)).getSessionsCountForUserAndBrowser(eq("user"), eq("firefox"), eq("33"));
assertThat(Duration.between(started, now()).toMillis(), greaterThanOrEqualTo(3000L));
}
@Test(expected = WaitAvailableBrowserTimeoutException.class)
public void testWaitAvailableBrowsersTimeout() throws Exception {
checker.ensureFreeBrowsersAvailable("user", "host", "firefox", version);
}
@Test
public void testNoWaitAvailableBrowser() throws Exception {
when(counter.getSessionsCountForUserAndBrowser(eq("user"), eq("firefox"), eq("33"))).thenReturn(5);
Temporal started = now();
checker.ensureFreeBrowsersAvailable("user", "host", "firefox", version);
verify(counter, times(1)).getSessionsCountForUserAndBrowser(eq("user"), eq("firefox"), eq("33"));
assertThat(Duration.between(started, now()).toMillis(), lessThan(1000L));
verifyNoMoreInteractions(counter);
}
}