package betsy.common.timeouts.timeout; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.NoSuchElementException; import java.util.Objects; import betsy.common.timeouts.Properties; /** * @author Christoph Broeker * @version 1.0 */ public class Timeouts { private List<Timeout> timeouts = new ArrayList<>(); private Path properties = Paths.get("timeout.properties"); /** * @param timeouts The timeouts, which should be managed by the {@link betsy.common.timeouts}. * @param nameOfProperties The name of the properties file. */ public Timeouts(ArrayList<Timeout> timeouts, String nameOfProperties) { Objects.requireNonNull(nameOfProperties, "nameOfProperties can't be null."); if (nameOfProperties.length() > 0) { this.properties = Paths.get(nameOfProperties); } this.timeouts = Objects.requireNonNull(timeouts, "The timeouts can't be null."); } /** * @param nameOfProperties The name of the properties file. */ public Timeouts(String nameOfProperties) { Objects.requireNonNull(nameOfProperties, "nameOfProperties can't be null."); if (nameOfProperties.length() > 0) { this.properties = Paths.get(nameOfProperties); } addTimeouts(); } /** * @param timeouts The timeouts, which should be managed by the {@link betsy.common.timeouts}. */ public Timeouts(ArrayList<Timeout> timeouts) { this.timeouts = Objects.requireNonNull(timeouts, "The timeouts can't be null."); } /** * */ public Timeouts() { addTimeouts(); } /** * This method returns the {@link Timeout} for given key. * * @param key The key of the {@link Timeout}. * @return The {@link Timeout] for the given key. */ public Timeout getTimeout(String key) { Objects.requireNonNull(key, "The key can't be null."); if (getAllTimeouts().get(key) != null) { return getAllTimeouts().get(key); } else { throw new NoSuchElementException("There is no timeout with this given key."); } } /** * This method returns a {@link HashMap} with all Timeouts as {@link HashMap}. * * @return A {@link HashMap} with the key as {@link String} and a {@link Timeout}. */ public HashMap<String, Timeout> getAllTimeouts() { HashMap<String, Timeout> map = new HashMap<>(); for (Timeout timeout : timeouts) map.put(timeout.getKey(), timeout); return map; } /** * This method it is possible to change the values of an existing {@link Timeout}. * * @param timeout The {@link Timeout} with the new values. */ public void setTimeout(Timeout timeout) { Objects.requireNonNull(timeout, "The timeout can't be null."); getTimeout(timeout.getKey()).setValue(timeout.getTimeoutInMs()); getTimeout(timeout.getKey()).setTimeToRepetition(timeout.getTimeToRepetitionInMs()); } /** * This method reads all timeouts, which are set in the {@link Timeouts} from the {@link Properties}. */ public void readTimeoutProperties() { timeouts = Properties.read(properties, timeouts); } private void addTimeouts() { timeouts.add(new Timeout("Tomcat.startup", 120_000, 500)); timeouts.add(new Timeout("FileTasks.deleteDirectory", 5_000, Timeout.Category.UNMEASURABLE)); //Virtual engines timeouts.add(new Timeout("active_bpel_v.service", 30_000, 500)); timeouts.add(new Timeout("bpelg_v.service", 30_000, 500)); timeouts.add(new Timeout("ode_v.service", 30_000, 500)); timeouts.add(new Timeout("openesb_v.service", 30_000, 500)); timeouts.add(new Timeout("orchestra_v.service", 30_000, 500)); timeouts.add(new Timeout("petalsesb_v.service", 30_000, 500)); timeouts.add(new Timeout("active_bpel_v.deployment", 30_000, 500)); timeouts.add(new Timeout("bpelg_v.deployment", 30_000, 500)); timeouts.add(new Timeout("ode_v.deployment", 30_000, 500)); timeouts.add(new Timeout("openesb_v.deployment", 30_000, 500)); timeouts.add(new Timeout("orchestra_v.deployment", 30_000, 500)); timeouts.add(new Timeout("petalsesb_v.deployment", 30_000, 500)); timeouts.add(new Timeout("PortForwardingConfigurator.applyPortForwarding", 10_000, 100)); timeouts.add(new Timeout("PortForwardingConfigurator.clearPortForwarding", 10_000, 100)); timeouts.add(new Timeout("VirtualBoxMachineImpl.startVirtualMachine", 60_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("VirtualBoxMachineImpl.saveState", 30_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("VirtualBoxMachineImpl.restore", 30_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("VirtualBoxMachineImpl.stop", 10_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("VirtualBoxMachineImpl.takeSnapshot", 30_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("VirtualBoxMachineImpl.takeSnapshot.sleep", 500, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("SnapshotCreator.invoke", 30_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("SnapshotCreator.failIfBetsyServerTimesOut", 15_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("VBoxApplianceImporter.importAppliance.readProgress", 1_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("VBoxApplianceImporter.importAppliance.importProgress", 1_000, Timeout.Category.UNMEASURABLE)); //BPMN timeouts.add(new Timeout("Camunda.deploy", 20_000, 500)); timeouts.add(new Timeout("Camunda.startup", 30_000, 500)); timeouts.add(new Timeout("Camunda710.startup", 30_000, 500)); timeouts.add(new Timeout("Jbpm.deploy.maven", 1500)); timeouts.add(new Timeout("Jbpm.deploy", 30_000, 1000)); timeouts.add(new Timeout("Jbpm.undeploy", 30_000, 1000)); timeouts.add(new Timeout("Jbpm.startup", 24_0000, 5000)); timeouts.add(new Timeout("Jbpm.shutdown", 24_0000, 5000)); timeouts.add(new Timeout("JbpmTester.runTest", 10_000)); //BPEL timeouts.add(new Timeout("Retry.atMostThreeTimes", 500, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("BPELComposite.test", 2_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("BPELComposite.testSoapUi", 500, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("TestingAPI.generateEngineDependentTest", 15_000, Timeout.PlaceOfUse.EXTERN)); timeouts.add(new Timeout("ActiveBpel.deploy", 100_000, 500)); timeouts.add(new Timeout("Bpelg.deploy", 100_000, 500)); timeouts.add(new Timeout("Ode.deploy", 30_000, 500)); timeouts.add(new Timeout("OpenEsb30x.installComponent", 15_000, 500)); timeouts.add(new Timeout("OpenEsb30x.startup.waitForUrl", 15_000, 500)); timeouts.add(new Timeout("OpenEsb30x.startup.waitForStart", 15_000, 500)); timeouts.add(new Timeout("OpenEsb.startup", 15_000, 500)); timeouts.add(new Timeout("PetalsEsb.deploy", 20_000, 500)); timeouts.add(new Timeout("PetalsEsb.startup", 120_000, 500)); timeouts.add(new Timeout("Wso2.deploy", 120_000, 500)); timeouts.add(new Timeout("Wso2.deploy.sleep", 2_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("Wso2.undeploy", 120_000, 500)); timeouts.add(new Timeout("Wso2.undeploy.sleep", 1_000, Timeout.Category.UNMEASURABLE)); timeouts.add(new Timeout("Wso2.startup", 160_000, 500)); timeouts.add(new Timeout("Wso2.startup.sleep", 2_000, Timeout.Category.UNMEASURABLE)); } }