/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2013, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.classic.control; import java.util.LinkedList; import ch.qos.logback.classic.Level; import ch.qos.logback.core.CoreConstants; public class ScenarioMaker { private final static int AVERAGE_LOGGER_DEPTH = 4; private final static int LOGGER_DEPT_DEV = 2; // the frequency of a set levelInt event for every create logger event private final static int CREATE_LOGGER_TO_SET_LEVEL_FREQUENCY = 5; private final static int SECOND_SET_LEVEL_FREQUENCY = 3; private static long count = 0; /** * Makes a scenario with len logger creations. Logger names are generated * independently such that the overwhelming majority of logger names will be * unrelated to each other. Each logger creation may be followed with a * randomly generated set levelInt action on that logger. * * @param len * @return */ static public Scenario makeTypeAScenario(int len) { Scenario scenario = new Scenario(); ; for (int i = 0; i < len; i++) { String loggerName = ScenarioRandomUtil.randomLoggerName( AVERAGE_LOGGER_DEPTH, LOGGER_DEPT_DEV); scenario.add(new CreateLogger(loggerName)); } return scenario; } static public Scenario makeRealisticCreationScenario(int len) { Scenario scenario = new Scenario(); LinkedList<String> queue = new LinkedList<String>(); int loggerCreationCount = 0; // add an empty string to get going queue.add(""); while (loggerCreationCount < len) { if ((count % 100) == 0) { System.out.println("count=" + count); } String loggerName = (String) queue.removeFirst(); int randomChildrenCount = ScenarioRandomUtil .randomChildrenCount(loggerName); if (randomChildrenCount == 0) { scenario.add(new CreateLogger(loggerName)); addSetLevelSubScenario(scenario, loggerName); loggerCreationCount++; } else { for (int i = 0; i < randomChildrenCount; i++) { String childName; if (loggerName.equals("")) { childName = ScenarioRandomUtil.randomId(); count += childName.length(); } else { childName = loggerName + CoreConstants.DOT + ScenarioRandomUtil.randomId(); count += childName.length(); } queue.add(childName); addSetLevelSubScenario(scenario, loggerName); loggerCreationCount++; } } } return scenario; } static void addSetLevelSubScenario(Scenario scenario, String loggerName) { if (ScenarioRandomUtil.oneInFreq(CREATE_LOGGER_TO_SET_LEVEL_FREQUENCY)) { Level l = ScenarioRandomUtil.randomLevel(); scenario.add(new SetLevel(l, loggerName)); if (ScenarioRandomUtil.oneInFreq(SECOND_SET_LEVEL_FREQUENCY)) { l = ScenarioRandomUtil.randomLevel(); scenario.add(new SetLevel(l, loggerName)); } } } }