All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.serenitybdd.core.parallel.Agency Maven / Gradle / Ivy

There is a newer version: 4.2.8
Show newest version
package net.serenitybdd.core.parallel;

import net.serenitybdd.core.Serenity;
import net.thucydides.core.steps.BaseStepListener;
import net.thucydides.core.steps.StepEventBus;

import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;

/**
 * The Agency keeps track of multiple listeners assigned to different agents (which represent actors or activities), to facilitate parallel execution of test tasks.
 * Agents can run in parallel and are used to group steps reported by the Serenity Event Bus.
 */
public class Agency {

    private static final Agency INSTANCE = new Agency();

    private final Map listeners = new ConcurrentHashMap<>();

    protected Agency() {}

    public static Agency getInstance() {
        return INSTANCE;
    }

    public void registerAgent(Agent agent) {
        listeners.put(agent, StepEventBus.getParallelEventBus().getBaseStepListener().spawn(agent.getName()));
    }

    public Optional baseListenerFor(Agent agent) {
        return Optional.ofNullable(listeners.get(agent));
    }

    public void dropAgent(Agent agent) {
        listeners.remove(agent);
    }

    public Optional currentAgentSpecificListener() {
        if (Serenity.sessionVariableCalled(Agent.IN_THE_CURRENT_SESSION) != null) {
            return baseListenerFor(Serenity.sessionVariableCalled(Agent.IN_THE_CURRENT_SESSION));
        } else {
            return Optional.empty();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy