Java tutorial
/* * Copyright (C) 2014 RetailMeNot, Inc. * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ package com.rmn.qa; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import org.openqa.grid.common.SeleniumProtocol; import org.openqa.grid.internal.ProxySet; import org.openqa.grid.internal.TestSlot; import org.openqa.grid.internal.utils.CapabilityMatcher; import org.openqa.selenium.Platform; import org.openqa.selenium.remote.CapabilityType; import junit.framework.Assert; import nl.jqno.equalsverifier.EqualsVerifier; import nl.jqno.equalsverifier.Warning; /** * Created by mhardin on 5/1/14. */ public class AutomationRunContextTest extends BaseTest { @Test // Tests that an old run gets cleaned up (removed) public void testOldRun() { AutomationRunRequest oldRequest = new AutomationRunRequest("uuid", 10, "firefox", "10", Platform.LINUX, AutomationUtils.modifyDate(new Date(), -5, Calendar.MINUTE)); AutomationRunContext context = AutomationContext.getContext(); context.addRun(oldRequest); Assert.assertTrue("Run should exist", context.hasRun(oldRequest.getUuid())); ProxySet proxySet = new ProxySet(false); proxySet.add(new MockRemoteProxy()); context.cleanUpRunRequests(proxySet); Assert.assertFalse("Run request should no longer exist as it should have been removed", context.hasRun(oldRequest.getUuid())); } @Test // Tests that a new run does not get cleaned up (removed) public void testNewRun() { AutomationRunRequest oldRequest = new AutomationRunRequest("uuid", 10, "firefox"); AutomationRunContext context = AutomationContext.getContext(); context.addRun(oldRequest); Assert.assertTrue("Run should exist", context.hasRun(oldRequest.getUuid())); ProxySet proxySet = new ProxySet(false); proxySet.add(new MockRemoteProxy()); context.cleanUpRunRequests(proxySet); Assert.assertTrue("Run request should still exist as the run was new enough", context.hasRun(oldRequest.getUuid())); } @Test // Tests that a new run does not get cleaned up (removed) public void testNewRunIE() { AutomationRunRequest oldRequest = new AutomationRunRequest("uuid", 10, "internetexplorer", "10", Platform.LINUX, AutomationUtils.modifyDate(new Date(), -7, Calendar.MINUTE)); AutomationRunContext context = AutomationContext.getContext(); context.addRun(oldRequest); Assert.assertTrue("Run should exist", context.hasRun(oldRequest.getUuid())); ProxySet proxySet = new ProxySet(false); proxySet.add(new MockRemoteProxy()); context.cleanUpRunRequests(proxySet); Assert.assertTrue("Run request should still exist as the run was new enough", context.hasRun(oldRequest.getUuid())); } @Test // Tests that a new run does not get cleaned up (removed) public void testOldRunIE() { AutomationRunRequest oldRequest = new AutomationRunRequest("uuid", 10, "internetexplorer", "10", Platform.LINUX, AutomationUtils.modifyDate(new Date(), -15, Calendar.MINUTE)); AutomationRunContext context = AutomationContext.getContext(); context.addRun(oldRequest); Assert.assertTrue("Run should exist", context.hasRun(oldRequest.getUuid())); ProxySet proxySet = new ProxySet(false); proxySet.add(new MockRemoteProxy()); context.cleanUpRunRequests(proxySet); Assert.assertFalse("Run request should no longer exist as it should have been removed", context.hasRun(oldRequest.getUuid())); } @Test // Tests that a run with slots does not get removed public void testActiveSession() { String uuid = "uuid"; AutomationRunRequest request = new AutomationRunRequest(uuid, 10, "firefox", "10", Platform.LINUX, AutomationUtils.modifyDate(new Date(), -1, Calendar.HOUR)); AutomationRunContext context = AutomationContext.getContext(); context.addRun(request); Assert.assertTrue("Run should exist", context.hasRun(request.getUuid())); ProxySet proxySet = new ProxySet(false); MockRemoteProxy proxy = new MockRemoteProxy(); CapabilityMatcher matcher = new AutomationCapabilityMatcher(); proxy.setCapabilityMatcher(matcher); proxySet.add(proxy); Map<String, Object> config = new HashMap<>(); config.put(AutomationConstants.UUID, uuid); proxy.setConfig(config); List<TestSlot> testSlots = new ArrayList<>(); TestSlot testSlot = new TestSlot(proxy, null, null, config); proxy.setTestSlots(testSlots); testSlot.getNewSession(config); testSlots.add(testSlot); proxySet.add(proxy); context.cleanUpRunRequests(proxySet); Assert.assertTrue("Run request should still exist as there were active sessions", context.hasRun(request.getUuid())); } @Test // Tests that a run with slots does not get removed public void testNoSessions() { String uuid = "uuid"; AutomationRunRequest request = new AutomationRunRequest(uuid, 10, "firefox", "10", Platform.LINUX, AutomationUtils.modifyDate(new Date(), -1, Calendar.HOUR)); AutomationRunContext context = AutomationContext.getContext(); context.addRun(request); Assert.assertTrue("Run should exist", context.hasRun(request.getUuid())); ProxySet proxySet = new ProxySet(false); MockRemoteProxy proxy = new MockRemoteProxy(); CapabilityMatcher matcher = new AutomationCapabilityMatcher(); proxy.setCapabilityMatcher(matcher); proxySet.add(proxy); Map<String, Object> config = new HashMap<>(); config.put(AutomationConstants.UUID, uuid); proxy.setConfig(config); List<TestSlot> testSlots = new ArrayList<>(); TestSlot testSlot = new TestSlot(proxy, null, null, config); proxy.setTestSlots(testSlots); testSlots.add(testSlot); proxySet.add(proxy); context.cleanUpRunRequests(proxySet); Assert.assertFalse("Run request should not exist as there were no active sessions", context.hasRun(request.getUuid())); } @Test // Tests that a newly created run is considered a 'new' run public void testIsNewRun() { AutomationRunRequest first = new AutomationRunRequest("uuid", 3, "firefox"); AutomationRunContext context = AutomationContext.getContext(); context.addRun(first); Assert.assertTrue("Run should be considered new", context.isNewRunQueuedUp()); } @Test // Tests that a newly created run is considered a 'new' run public void testNotNewRun() { AutomationRunRequest first = new AutomationRunRequest("uuid", null, null, null, null, AutomationUtils.modifyDate(new Date(), -3, Calendar.MINUTE)); AutomationRunContext context = AutomationContext.getContext(); context.addRun(first); Assert.assertFalse("Run should be considered new", context.isNewRunQueuedUp()); } @Test // Tests that equals and hash code are working as expected public void equalsContract() { EqualsVerifier.forClass(AutomationRunRequest.class).suppress(Warning.NULL_FIELDS).verify(); } @Test // Tests that the correct node count is returned when tests don't have a UUID public void testNodesFreeNoUuid() { AutomationRunContext runContext = new AutomationRunContext(); runContext.setTotalNodeCount(10); ProxySet proxySet = new ProxySet(false); MockRemoteProxy proxy = new MockRemoteProxy(); proxy.setCapabilityMatcher(new AutomationCapabilityMatcher()); Map<String, Object> capabilities = new HashMap<>(); capabilities.put(CapabilityType.PLATFORM, "linux"); capabilities.put(CapabilityType.BROWSER_NAME, "chrome"); TestSlot testSlot = new TestSlot(proxy, SeleniumProtocol.WebDriver, null, capabilities); testSlot.getNewSession(capabilities); proxy.setMultipleTestSlots(testSlot, 5); proxySet.add(proxy); int freeThreads = runContext.getTotalThreadsAvailable(proxySet); Assert.assertEquals(5, freeThreads); } @Test // Tests that the correct node count is returned when tests don't have a UUID public void testNodesFreeWithUuid() { AutomationRunContext runContext = new AutomationRunContext(); runContext.setTotalNodeCount(10); ProxySet proxySet = new ProxySet(false); MockRemoteProxy proxy = new MockRemoteProxy(); proxy.setCapabilityMatcher(new AutomationCapabilityMatcher()); Map<String, Object> capabilities = new HashMap<>(); capabilities.put(CapabilityType.PLATFORM, "linux"); capabilities.put(CapabilityType.BROWSER_NAME, "chrome"); capabilities.put(AutomationConstants.UUID, "testUuid"); TestSlot testSlot = new TestSlot(proxy, SeleniumProtocol.WebDriver, null, capabilities); testSlot.getNewSession(capabilities); proxy.setMultipleTestSlots(testSlot, 5); proxySet.add(proxy); int freeThreads = runContext.getTotalThreadsAvailable(proxySet); Assert.assertEquals(5, freeThreads); } @Test // Tests that a new run is counted instead of tests in progress public void testNewRunIsCounted() { String uuid = "testUuid"; AutomationRunContext runContext = new AutomationRunContext(); runContext.setTotalNodeCount(10); ProxySet proxySet = new ProxySet(false); MockRemoteProxy proxy = new MockRemoteProxy(); proxy.setCapabilityMatcher(new AutomationCapabilityMatcher()); Map<String, Object> capabilities = new HashMap<>(); capabilities.put(CapabilityType.PLATFORM, "linux"); capabilities.put(CapabilityType.BROWSER_NAME, "chrome"); capabilities.put(AutomationConstants.UUID, uuid); AutomationRunRequest request = new AutomationRunRequest(uuid, 10, "chrome"); runContext.addRun(request); TestSlot testSlot = new TestSlot(proxy, SeleniumProtocol.WebDriver, null, capabilities); testSlot.getNewSession(capabilities); proxy.setMultipleTestSlots(testSlot, 5); proxySet.add(proxy); int freeThreads = runContext.getTotalThreadsAvailable(proxySet); Assert.assertEquals(0, freeThreads); } @Test // Tests that for an old run, the in progress tests are counted public void testOldRunInProgress() { String uuid = "testUuid"; AutomationRunContext runContext = new AutomationRunContext(); runContext.setTotalNodeCount(10); ProxySet proxySet = new ProxySet(false); MockRemoteProxy proxy = new MockRemoteProxy(); proxy.setCapabilityMatcher(new AutomationCapabilityMatcher()); Map<String, Object> capabilities = new HashMap<>(); capabilities.put(CapabilityType.PLATFORM, "linux"); capabilities.put(CapabilityType.BROWSER_NAME, "chrome"); capabilities.put(AutomationConstants.UUID, uuid); AutomationRunRequest request = new AutomationRunRequest(uuid, 10, "chrome", "23", Platform.LINUX, AutomationUtils.modifyDate(new Date(), -5, Calendar.MINUTE)); runContext.addRun(request); TestSlot testSlot = new TestSlot(proxy, SeleniumProtocol.WebDriver, null, capabilities); testSlot.getNewSession(capabilities); int inProgressTests = 5; proxy.setMultipleTestSlots(testSlot, inProgressTests); proxySet.add(proxy); int freeThreads = runContext.getTotalThreadsAvailable(proxySet); Assert.assertEquals("Free threads should reflect in progress test count", inProgressTests, freeThreads); } }