com.rmn.qa.AutomationRunContextTest.java Source code

Java tutorial

Introduction

Here is the source code for com.rmn.qa.AutomationRunContextTest.java

Source

/*
 * 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);
    }
}