├── .gitignore ├── .travis.settings.xml ├── .travis.yml ├── LICENSE ├── README.MD ├── docker └── Dockerfile ├── docs ├── Gemfile ├── _config.yml ├── _data │ ├── links.yaml │ ├── menuHeader.yaml │ └── sitemap.yaml ├── _layouts │ └── grinder.html ├── development │ └── contributing.html ├── download.html ├── faq.html ├── favicon.ico ├── guide │ ├── agents-and-workers.html │ ├── clojure.html │ ├── console-service.html │ ├── console.html │ ├── coordination.html │ ├── features.html │ ├── garbage-collection.html │ ├── getting-started.html │ ├── http-plugin.html │ ├── instrumentation.html │ ├── jython.html │ ├── logging.html │ ├── properties.html │ ├── script-gallery.html │ ├── scripts.html │ ├── setting-up-a-project.html │ ├── ssl-support.html │ ├── statistics.html │ ├── tcpproxy.html │ ├── tutorial-perks.html │ ├── tutorial-weight-distribution.html │ └── webconsole.html ├── images │ ├── banner.png │ ├── book-cover.jpg │ ├── console-distribute-files.png │ ├── console-es-g3.png │ ├── console-sample-controls.png │ ├── console-screenshot-g3.png │ ├── console-select-properties.png │ ├── console-start-and-reset.png │ ├── grinder-analyzer.png │ ├── grinder.png │ ├── ie-cache-settings.png │ ├── processes.png │ ├── proxy-preferences.png │ ├── tcpproxy-console.png │ ├── tcpproxy-proxy.gif │ ├── tcpproxy-ssl.gif │ ├── tcpproxy.gif │ ├── tcpproxy.vsd │ ├── webconsole-graph.png │ ├── webconsole-process-control-stop.png │ ├── webconsole-process-control.png │ ├── webconsole-screenshot.png │ └── webconsole-select-properties.png ├── index.html ├── license.html ├── links.html └── support.html ├── documentation ├── .gitignore ├── README ├── build.xml ├── etc │ ├── .gitignore │ ├── changes2xml.py │ ├── localpaths.properties │ ├── outline2xml.py │ └── scripts2XML.py ├── forrest.properties └── src │ └── documentation │ ├── add-image-to-title.xsl │ ├── changes2doc.xsl │ ├── classes │ └── CatalogManager.properties │ ├── conf │ └── cli.xconf │ ├── content │ ├── locationmap.xml │ └── xdocs │ │ ├── development │ │ └── contributing.xml │ │ ├── download.xml │ │ ├── faq.xml │ │ ├── g2 │ │ ├── console.xml │ │ ├── getting-started.xml │ │ ├── http-plugin.xml │ │ ├── junit-plugin.xml │ │ ├── manual.ihtml │ │ ├── properties.xml │ │ └── tcpsniffer.xml │ │ ├── g3 │ │ ├── agents-and-workers.xml │ │ ├── clojure.xml │ │ ├── console-service.xml │ │ ├── console.xml │ │ ├── coordination.xml │ │ ├── features.xml │ │ ├── garbage-collection.xml │ │ ├── getting-started.xml │ │ ├── http-plugin.xml │ │ ├── instrumentation.xml │ │ ├── jython.xml │ │ ├── logging.xml │ │ ├── properties.xml │ │ ├── scripts.xml │ │ ├── setting-up-a-project.xml │ │ ├── ssl-support.xml │ │ ├── statistics.xml │ │ ├── tcpproxy.xml │ │ ├── tutorial-perks.xml │ │ └── tutorial-weight-distribution.xml │ │ ├── index.xml │ │ ├── license.xml │ │ ├── links.xml │ │ ├── site.xml │ │ ├── support.xml │ │ └── tabs.xml │ ├── resources │ ├── image-sources │ │ ├── console-service.svg │ │ ├── distribute-files.svg │ │ ├── fuzzy-border-settings.png │ │ ├── grinder-logo.xcf │ │ ├── pastedpic_09282008_091054.png │ │ ├── pastedpic_09282008_095323.png │ │ ├── processes.svg │ │ ├── sample-controls.svg │ │ └── start-and-reset.svg │ └── images │ │ ├── PythonPoweredSmall.gif │ │ ├── book-cover.jpg │ │ ├── console-distribute-files.png │ │ ├── console-es-g3.png │ │ ├── console-es.png │ │ ├── console-sample-controls.png │ │ ├── console-screenshot-g3.png │ │ ├── console-screenshot.png │ │ ├── console-select-properties.png │ │ ├── console-start-and-reset.png │ │ ├── grinder-analyzer.png │ │ ├── grinder-logo.png │ │ ├── grinder.gif │ │ ├── grinder3.jpg │ │ ├── ie-cache-settings.png │ │ ├── logo.png │ │ ├── processes.png │ │ ├── proxy-preferences.png │ │ ├── tcpproxy-console.png │ │ ├── tcpproxy-proxy.gif │ │ ├── tcpproxy-ssl.gif │ │ ├── tcpproxy.gif │ │ └── tcpproxy.vsd │ ├── scripts2doc.xsl │ ├── sitemap.xmap │ ├── skinconf.xml │ ├── skins │ ├── common │ │ └── images │ │ │ └── fade.png │ └── pelt-grinder │ │ ├── css │ │ ├── basic.css │ │ ├── print.css │ │ ├── profile.css.xslt │ │ ├── screen.css │ │ ├── shCore.css │ │ ├── shCoreDefault.css │ │ ├── shCoreDjango.css │ │ ├── shCoreEclipse.css │ │ ├── shCoreEmacs.css │ │ ├── shCoreFadeToGrey.css │ │ ├── shCoreMDUltra.css │ │ ├── shCoreMidnight.css │ │ ├── shCoreRDark.css │ │ ├── shThemeDefault.css │ │ ├── shThemeDjango.css │ │ ├── shThemeEclipse.css │ │ ├── shThemeEmacs.css │ │ ├── shThemeFadeToGrey.css │ │ ├── shThemeMDUltra.css │ │ ├── shThemeMidnight.css │ │ └── shThemeRDark.css │ │ ├── images │ │ ├── chapter.gif │ │ ├── chapter_open.gif │ │ ├── current.gif │ │ ├── error.png │ │ ├── header_white_line.gif │ │ ├── info.png │ │ ├── instruction_arrow.png │ │ ├── label.gif │ │ ├── page.gif │ │ ├── pdfdoc.gif │ │ ├── printer.gif │ │ ├── success.png │ │ ├── warning.png │ │ └── xmldoc.gif │ │ ├── note.txt │ │ ├── scripts │ │ ├── sh │ │ ├── shAutoloader.js │ │ ├── shBrushAS3.js │ │ ├── shBrushAppleScript.js │ │ ├── shBrushBash.js │ │ ├── shBrushCSharp.js │ │ ├── shBrushClojure.js │ │ ├── shBrushColdFusion.js │ │ ├── shBrushCpp.js │ │ ├── shBrushCss.js │ │ ├── shBrushDelphi.js │ │ ├── shBrushDiff.js │ │ ├── shBrushErlang.js │ │ ├── shBrushGroovy.js │ │ ├── shBrushJScript.js │ │ ├── shBrushJava.js │ │ ├── shBrushJavaFX.js │ │ ├── shBrushPerl.js │ │ ├── shBrushPhp.js │ │ ├── shBrushPlain.js │ │ ├── shBrushPowerShell.js │ │ ├── shBrushPython.js │ │ ├── shBrushRuby.js │ │ ├── shBrushSass.js │ │ ├── shBrushScala.js │ │ ├── shBrushSql.js │ │ ├── shBrushVb.js │ │ ├── shBrushXml.js │ │ ├── shCore.js │ │ └── shLegacy.js │ │ ├── skinconf.xsl │ │ └── xslt │ │ ├── fo │ │ └── document-to-fo.xsl │ │ └── html │ │ ├── book-to-menu.xsl │ │ ├── document-to-html.xsl │ │ ├── site-to-xhtml.xsl │ │ └── tab-to-menu.xsl │ └── todo2doc.xsl ├── grinder-console-service ├── .gitignore ├── pom.xml ├── resources │ └── META-INF │ │ └── net.grinder.console ├── src │ └── net │ │ └── grinder │ │ └── console │ │ ├── model │ │ ├── DistributionResult.java │ │ ├── Files.java │ │ ├── Processes.java │ │ ├── Properties.java │ │ ├── Recording.java │ │ └── Report.java │ │ └── service │ │ ├── Bootstrap.java │ │ └── RestController.java └── test │ └── net │ └── grinder │ └── test │ └── console │ ├── model │ ├── TestFiles.java │ ├── TestProcesses.java │ ├── TestProperties.java │ ├── TestRecording.java │ └── Wrapper.java │ └── service │ └── RestControllerTest.java ├── grinder-core ├── .gitignore ├── pom.xml └── src │ ├── main │ ├── java │ │ └── net │ │ │ └── grinder │ │ │ ├── Console.java │ │ │ ├── Grinder.java │ │ │ ├── common │ │ │ ├── AbstractTestSemantics.java │ │ │ ├── Closer.java │ │ │ ├── GrinderBuild.java │ │ │ ├── GrinderException.java │ │ │ ├── GrinderProperties.java │ │ │ ├── SSLContextFactory.java │ │ │ ├── SkeletonThreadLifeCycleListener.java │ │ │ ├── Test.java │ │ │ ├── ThreadLifeCycleListener.java │ │ │ ├── UncheckedGrinderException.java │ │ │ ├── UncheckedInterruptedException.java │ │ │ ├── package.html │ │ │ └── processidentity │ │ │ │ ├── AgentIdentity.java │ │ │ │ ├── AgentProcessReport.java │ │ │ │ ├── ProcessAddress.java │ │ │ │ ├── ProcessIdentity.java │ │ │ │ ├── ProcessReport.java │ │ │ │ ├── WorkerIdentity.java │ │ │ │ ├── WorkerProcessReport.java │ │ │ │ └── package.html │ │ │ ├── communication │ │ │ ├── AbstractFanOutSender.java │ │ │ ├── AbstractSender.java │ │ │ ├── Acceptor.java │ │ │ ├── Address.java │ │ │ ├── AddressAwareMessage.java │ │ │ ├── BlockingSender.java │ │ │ ├── ClientReceiver.java │ │ │ ├── ClientSender.java │ │ │ ├── CloseCommunicationMessage.java │ │ │ ├── CommunicationDefaults.java │ │ │ ├── CommunicationException.java │ │ │ ├── ConnectionIdentity.java │ │ │ ├── ConnectionType.java │ │ │ ├── Connector.java │ │ │ ├── FanOutServerSender.java │ │ │ ├── FanOutStreamSender.java │ │ │ ├── IdleAwareSocketWrapper.java │ │ │ ├── IgnoreShutdownSender.java │ │ │ ├── KeepAliveMessage.java │ │ │ ├── Message.java │ │ │ ├── MessageDispatchRegistry.java │ │ │ ├── MessageDispatchSender.java │ │ │ ├── MessagePump.java │ │ │ ├── MessageQueue.java │ │ │ ├── MessageRequiringResponse.java │ │ │ ├── NoResponseMessage.java │ │ │ ├── QueuedSender.java │ │ │ ├── QueuedSenderDecorator.java │ │ │ ├── Receiver.java │ │ │ ├── ResourcePool.java │ │ │ ├── ResourcePoolImplementation.java │ │ │ ├── Sender.java │ │ │ ├── ServerReceiver.java │ │ │ ├── SocketWrapper.java │ │ │ ├── StreamReceiver.java │ │ │ ├── StreamSender.java │ │ │ ├── TeeSender.java │ │ │ └── package.html │ │ │ ├── console │ │ │ ├── ConsoleFoundation.java │ │ │ ├── SpringConsoleFoundation.java │ │ │ ├── client │ │ │ │ ├── ConsoleConnection.java │ │ │ │ ├── ConsoleConnectionException.java │ │ │ │ ├── ConsoleConnectionFactory.java │ │ │ │ ├── ConsoleConnectionImplementation.java │ │ │ │ └── package.html │ │ │ ├── common │ │ │ │ ├── ConsoleException.java │ │ │ │ ├── DisplayMessageConsoleException.java │ │ │ │ ├── ErrorHandler.java │ │ │ │ ├── ErrorQueue.java │ │ │ │ ├── ProcessReportDescriptionFactory.java │ │ │ │ ├── Resources.java │ │ │ │ ├── ResourcesImplementation.java │ │ │ │ └── package.html │ │ │ ├── communication │ │ │ │ ├── ConsoleCommunication.java │ │ │ │ ├── ConsoleCommunicationImplementation.java │ │ │ │ ├── DistributionControl.java │ │ │ │ ├── DistributionControlImplementation.java │ │ │ │ ├── ProcessControl.java │ │ │ │ ├── ProcessControlImplementation.java │ │ │ │ ├── ProcessStatusImplementation.java │ │ │ │ ├── package.html │ │ │ │ └── server │ │ │ │ │ ├── DispatchClientCommands.java │ │ │ │ │ ├── messages │ │ │ │ │ ├── GetNumberOfAgentsMessage.java │ │ │ │ │ ├── ResetRecordingMessage.java │ │ │ │ │ ├── ResetWorkerProcessesMessage.java │ │ │ │ │ ├── ResultMessage.java │ │ │ │ │ ├── StartRecordingMessage.java │ │ │ │ │ ├── StartWorkerProcessesMessage.java │ │ │ │ │ ├── StopAgentAndWorkerProcessesMessage.java │ │ │ │ │ ├── StopRecordingMessage.java │ │ │ │ │ ├── SuccessMessage.java │ │ │ │ │ └── package.html │ │ │ │ │ └── package.html │ │ │ ├── distribution │ │ │ │ ├── AgentCacheState.java │ │ │ │ ├── AgentCacheStateImplementation.java │ │ │ │ ├── AgentSet.java │ │ │ │ ├── CacheParameters.java │ │ │ │ ├── CacheParametersImplementation.java │ │ │ │ ├── FileChangeWatcher.java │ │ │ │ ├── FileDistribution.java │ │ │ │ ├── FileDistributionHandler.java │ │ │ │ ├── FileDistributionHandlerImplementation.java │ │ │ │ ├── FileDistributionImplementation.java │ │ │ │ ├── UpdateableAgentCacheState.java │ │ │ │ ├── WireFileDistribution.java │ │ │ │ └── package.html │ │ │ ├── editor │ │ │ │ ├── AbstractTextSource.java │ │ │ │ ├── Buffer.java │ │ │ │ ├── BufferImplementation.java │ │ │ │ ├── EditorException.java │ │ │ │ ├── EditorModel.java │ │ │ │ ├── ExternalEditor.java │ │ │ │ ├── TextSource.java │ │ │ │ └── package.html │ │ │ ├── model │ │ │ │ ├── ConsoleProperties.java │ │ │ │ ├── ModelTestIndex.java │ │ │ │ ├── SampleAccumulator.java │ │ │ │ ├── SampleListener.java │ │ │ │ ├── SampleModel.java │ │ │ │ ├── SampleModelImplementation.java │ │ │ │ ├── SampleModelViews.java │ │ │ │ ├── SampleModelViewsImplementation.java │ │ │ │ └── package.html │ │ │ ├── package.html │ │ │ ├── synchronisation │ │ │ │ ├── ConsoleBarrierGroups.java │ │ │ │ ├── ProcessBarrierGroups.java │ │ │ │ ├── WireDistributedBarriers.java │ │ │ │ └── package.html │ │ │ └── textui │ │ │ │ ├── TextUI.java │ │ │ │ └── package.html │ │ │ ├── engine │ │ │ ├── agent │ │ │ │ ├── AbstractProcessIdentityImplementation.java │ │ │ │ ├── AbstractWorkerFactory.java │ │ │ │ ├── Agent.java │ │ │ │ ├── AgentDaemon.java │ │ │ │ ├── AgentIdentityImplementation.java │ │ │ │ ├── AgentImplementation.java │ │ │ │ ├── CommandLine.java │ │ │ │ ├── DebugThreadWorker.java │ │ │ │ ├── DebugThreadWorkerFactory.java │ │ │ │ ├── FileStore.java │ │ │ │ ├── IsolatedGrinderProcessRunner.java │ │ │ │ ├── ProcessWorker.java │ │ │ │ ├── ProcessWorkerFactory.java │ │ │ │ ├── Worker.java │ │ │ │ ├── WorkerFactory.java │ │ │ │ ├── WorkerLauncher.java │ │ │ │ ├── WorkerProcessCommandLine.java │ │ │ │ └── package.html │ │ │ ├── common │ │ │ │ ├── ConnectorFactory.java │ │ │ │ ├── EngineException.java │ │ │ │ ├── ScriptLocation.java │ │ │ │ └── package.html │ │ │ ├── communication │ │ │ │ ├── ConsoleListener.java │ │ │ │ └── package.html │ │ │ ├── messages │ │ │ │ ├── InitialiseGrinderMessage.java │ │ │ │ └── package.html │ │ │ ├── package.html │ │ │ └── process │ │ │ │ ├── DataLogArguments.java │ │ │ │ ├── DispatchContext.java │ │ │ │ ├── DispatchResultReporter.java │ │ │ │ ├── ExternalLogger.java │ │ │ │ ├── GrinderProcess.java │ │ │ │ ├── GrinderThread.java │ │ │ │ ├── MasterInstrumenter.java │ │ │ │ ├── PluginRegistryImplementation.java │ │ │ │ ├── ProcessLifeCycleListener.java │ │ │ │ ├── RegisteredPlugin.java │ │ │ │ ├── SSLControlImplementation.java │ │ │ │ ├── ScriptContextImplementation.java │ │ │ │ ├── ScriptEngineContainer.java │ │ │ │ ├── ScriptStatisticsImplementation.java │ │ │ │ ├── ShutdownException.java │ │ │ │ ├── StatisticsForTestImplementation.java │ │ │ │ ├── StopWatch.java │ │ │ │ ├── StopWatchImplementation.java │ │ │ │ ├── TestData.java │ │ │ │ ├── TestRegistryImplementation.java │ │ │ │ ├── TestStatisticsHelper.java │ │ │ │ ├── TestStatisticsHelperImplementation.java │ │ │ │ ├── ThreadContext.java │ │ │ │ ├── ThreadContextImplementation.java │ │ │ │ ├── ThreadContextLocator.java │ │ │ │ ├── ThreadDataLogger.java │ │ │ │ ├── ThreadStarter.java │ │ │ │ ├── ThreadStopper.java │ │ │ │ ├── WorkerProcessEntryPoint.java │ │ │ │ ├── WorkerRunnableFactory.java │ │ │ │ ├── WorkerThreadSynchronisation.java │ │ │ │ ├── dcr │ │ │ │ ├── DCRContextImplementation.java │ │ │ │ ├── RecorderLocator.java │ │ │ │ ├── RecorderRegistry.java │ │ │ │ └── package.html │ │ │ │ └── package.html │ │ │ ├── messages │ │ │ ├── agent │ │ │ │ ├── CacheHighWaterMark.java │ │ │ │ ├── ClearCacheMessage.java │ │ │ │ ├── DistributeFileMessage.java │ │ │ │ ├── DistributionCacheCheckpointMessage.java │ │ │ │ ├── ResetGrinderMessage.java │ │ │ │ ├── StartGrinderMessage.java │ │ │ │ ├── StopGrinderMessage.java │ │ │ │ └── package.html │ │ │ └── console │ │ │ │ ├── AgentAddress.java │ │ │ │ ├── AgentAndCacheReport.java │ │ │ │ ├── AgentProcessReportMessage.java │ │ │ │ ├── CacheStatusReport.java │ │ │ │ ├── RegisterExpressionViewMessage.java │ │ │ │ ├── RegisterTestsMessage.java │ │ │ │ ├── ReportStatisticsMessage.java │ │ │ │ ├── WorkerAddress.java │ │ │ │ ├── WorkerProcessReportMessage.java │ │ │ │ └── package.html │ │ │ ├── package.html │ │ │ ├── plugininterface │ │ │ ├── GrinderPlugin.java │ │ │ ├── PluginException.java │ │ │ ├── PluginProcessContext.java │ │ │ ├── PluginRegistry.java │ │ │ ├── PluginThreadContext.java │ │ │ ├── PluginThreadListener.java │ │ │ └── package.html │ │ │ ├── script │ │ │ ├── Barrier.java │ │ │ ├── CancelledBarrierException.java │ │ │ ├── Grinder.java │ │ │ ├── InternalScriptContext.java │ │ │ ├── InvalidContextException.java │ │ │ ├── NoSuchStatisticException.java │ │ │ ├── NonInstrumentableTypeException.java │ │ │ ├── NotWrappableTypeException.java │ │ │ ├── SSLControl.java │ │ │ ├── Statistics.java │ │ │ ├── Test.java │ │ │ ├── TestRegistry.java │ │ │ ├── overview.html │ │ │ └── package.html │ │ │ ├── scriptengine │ │ │ ├── AbstractDCRInstrumenter.java │ │ │ ├── CompositeInstrumenter.java │ │ │ ├── DCRContext.java │ │ │ ├── Instrumenter.java │ │ │ ├── Recorder.java │ │ │ ├── ScriptEngineService.java │ │ │ ├── ScriptExecutionException.java │ │ │ ├── clojure │ │ │ │ ├── ClojureScriptEngine.java │ │ │ │ ├── ClojureScriptEngineService.java │ │ │ │ └── package.html │ │ │ ├── java │ │ │ │ ├── JavaDCRInstrumenter.java │ │ │ │ ├── JavaScriptEngineService.java │ │ │ │ └── package.html │ │ │ ├── jython │ │ │ │ ├── JythonScriptEngine.java │ │ │ │ ├── JythonScriptEngineService.java │ │ │ │ ├── JythonScriptExecutionException.java │ │ │ │ ├── instrumentation │ │ │ │ │ └── dcr │ │ │ │ │ │ ├── AbstractJythonDCRInstrumenter.java │ │ │ │ │ │ ├── Jython22Instrumenter.java │ │ │ │ │ │ ├── Jython25Instrumenter.java │ │ │ │ │ │ └── package.html │ │ │ │ └── package.html │ │ │ └── package.html │ │ │ ├── statistics │ │ │ ├── CommonStatisticsViews.java │ │ │ ├── ExpressionView.java │ │ │ ├── ImmutableStatisticsSet.java │ │ │ ├── PeakStatisticExpression.java │ │ │ ├── StatisticExpression.java │ │ │ ├── StatisticExpressionFactory.java │ │ │ ├── StatisticExpressionFactoryImplementation.java │ │ │ ├── StatisticsException.java │ │ │ ├── StatisticsIndexMap.java │ │ │ ├── StatisticsServices.java │ │ │ ├── StatisticsServicesImplementation.java │ │ │ ├── StatisticsSet.java │ │ │ ├── StatisticsSetFactory.java │ │ │ ├── StatisticsSetImplementation.java │ │ │ ├── StatisticsTable.java │ │ │ ├── StatisticsView.java │ │ │ ├── TestStatisticsMap.java │ │ │ ├── TestStatisticsQueries.java │ │ │ └── package.html │ │ │ ├── synchronisation │ │ │ ├── AbstractBarrierGroups.java │ │ │ ├── BarrierGroup.java │ │ │ ├── BarrierGroups.java │ │ │ ├── BarrierIdentityGenerator.java │ │ │ ├── BarrierImplementation.java │ │ │ ├── ClientBarrierGroups.java │ │ │ ├── LocalBarrierGroups.java │ │ │ ├── messages │ │ │ │ ├── AbstractBarrierGroupMessage.java │ │ │ │ ├── AddBarrierMessage.java │ │ │ │ ├── AddWaiterMessage.java │ │ │ │ ├── BarrierIdentity.java │ │ │ │ ├── CancelWaiterMessage.java │ │ │ │ ├── OpenBarrierMessage.java │ │ │ │ ├── RemoveBarriersMessage.java │ │ │ │ └── package.html │ │ │ └── package.html │ │ │ └── util │ │ │ ├── AbstractMainClass.java │ │ │ ├── AbstractMultiLineFormatter.java │ │ │ ├── AllocateLowestNumber.java │ │ │ ├── AllocateLowestNumberImplementation.java │ │ │ ├── AttributeStringParser.java │ │ │ ├── AttributeStringParserImplementation.java │ │ │ ├── BlockingClassLoader.java │ │ │ ├── BooleanProperty.java │ │ │ ├── ClassLoaderUtilities.java │ │ │ ├── DelayedCreationFileWriter.java │ │ │ ├── Directory.java │ │ │ ├── FileContents.java │ │ │ ├── FileExtensionMatcher.java │ │ │ ├── FixedWidthFormatter.java │ │ │ ├── InsecureSSLContextFactory.java │ │ │ ├── JVM.java │ │ │ ├── LessInsecureSSLContextFactory.java │ │ │ ├── ListenerSupport.java │ │ │ ├── MultiLineFormatter.java │ │ │ ├── NullMultiLineFormatter.java │ │ │ ├── Pair.java │ │ │ ├── Serialiser.java │ │ │ ├── SignificantFigureFormat.java │ │ │ ├── SimpleStringEscaper.java │ │ │ ├── Sleeper.java │ │ │ ├── SleeperImplementation.java │ │ │ ├── StandardTimeAuthority.java │ │ │ ├── StreamCopier.java │ │ │ ├── StringEscaper.java │ │ │ ├── TerminalColour.java │ │ │ ├── TimeAuthority.java │ │ │ ├── UnexpectedIOException.java │ │ │ ├── UniqueIdentityGenerator.java │ │ │ ├── WeakValueHashMap.java │ │ │ ├── html │ │ │ ├── AbstractHTMLNode.java │ │ │ ├── HTMLDocument.java │ │ │ ├── HTMLElement.java │ │ │ ├── HTMLText.java │ │ │ └── package.html │ │ │ ├── logback │ │ │ ├── BufferedEchoMessageEncoder.java │ │ │ ├── RollOnStartUp.java │ │ │ └── package.html │ │ │ ├── package.html │ │ │ ├── thread │ │ │ ├── BooleanCondition.java │ │ │ ├── Condition.java │ │ │ ├── ExecutorFactory.java │ │ │ ├── InterruptibleRunnable.java │ │ │ ├── InterruptibleRunnableAdapter.java │ │ │ └── package.html │ │ │ └── weave │ │ │ ├── Weaver.java │ │ │ ├── WeavingException.java │ │ │ ├── j2se6 │ │ │ ├── ASMTransformerFactory.java │ │ │ ├── DCRWeaver.java │ │ │ ├── PointCutRegistry.java │ │ │ ├── WeavingDetails.java │ │ │ └── package.html │ │ │ └── package.html │ └── resources │ │ ├── META-INF │ │ └── net.grinder.scriptengine │ │ ├── grinderBanner.txt │ │ ├── logback-worker.xml │ │ ├── logback.xml │ │ └── net │ │ └── grinder │ │ ├── common │ │ └── resources │ │ │ └── build.properties │ │ ├── console │ │ └── common │ │ │ └── resources │ │ │ ├── Console.properties │ │ │ ├── Console_de.properties │ │ │ ├── Console_es.properties │ │ │ ├── Console_fr.properties │ │ │ ├── Console_it.properties │ │ │ ├── Console_nl.properties │ │ │ ├── Console_pl.properties │ │ │ ├── Console_ru.properties │ │ │ ├── Console_zh.properties │ │ │ ├── about.html │ │ │ ├── close-file-rollover.png │ │ │ ├── close-file.png │ │ │ ├── deselect-properties-rollover.png │ │ │ ├── deselect-properties.png │ │ │ ├── directory-rollover.png │ │ │ ├── directory.png │ │ │ ├── distribute-files-rollover.png │ │ │ ├── distribute-files.png │ │ │ ├── files-small.xcf │ │ │ ├── graphs.png │ │ │ ├── grinder-2.xcf │ │ │ ├── grinder.svg │ │ │ ├── grinder.xcf │ │ │ ├── icons.xcf │ │ │ ├── logo-large.png │ │ │ ├── logo.png │ │ │ ├── marked-properties-small.png │ │ │ ├── marked-python-small.png │ │ │ ├── marked-script-small.png │ │ │ ├── new-file-rollover.png │ │ │ ├── new-file.png │ │ │ ├── open-file-external-rollover.png │ │ │ ├── open-file-external.png │ │ │ ├── open-file-rollover.png │ │ │ ├── open-file.png │ │ │ ├── options-rollover.png │ │ │ ├── options.png │ │ │ ├── process-status.png │ │ │ ├── properties-small.png │ │ │ ├── python-script-small.png │ │ │ ├── reset-processes-rollover.png │ │ │ ├── reset-processes.png │ │ │ ├── save-file-as-rollover.png │ │ │ ├── save-file-as.png │ │ │ ├── save-file-rollover.png │ │ │ ├── save-file.png │ │ │ ├── save-results-rollover.png │ │ │ ├── save-results.png │ │ │ ├── script-small.png │ │ │ ├── script.png │ │ │ ├── select-properties-rollover.png │ │ │ ├── select-properties.png │ │ │ ├── start-processes-rollover.png │ │ │ ├── start-processes.png │ │ │ ├── start-rollover.png │ │ │ ├── start.png │ │ │ ├── stop-processes-rollover.png │ │ │ ├── stop-processes.png │ │ │ ├── stop-rollover.png │ │ │ ├── stop.png │ │ │ └── summary.png │ │ └── engine │ │ └── agent │ │ └── resources │ │ └── FileStoreReadme.txt │ └── test │ ├── java │ ├── grinder │ │ └── test │ │ │ ├── Adder.java │ │ │ ├── MyClass.java │ │ │ └── MyExtendedClass.java │ └── net │ │ └── grinder │ │ ├── common │ │ ├── StubTest.java │ │ ├── TestAbstractTestSemantics.java │ │ ├── TestCloser.java │ │ ├── TestGrinderBuild.java │ │ ├── TestGrinderExceptions.java │ │ ├── TestGrinderProperties.java │ │ └── TestSSLContextFactory.java │ │ ├── communication │ │ ├── AbstractSenderAndReceiverSocketTests.java │ │ ├── AbstractSenderAndReceiverTests.java │ │ ├── BlockingActionThread.java │ │ ├── BlockingSenderWrapper.java │ │ ├── SendToEveryoneAddress.java │ │ ├── SimpleMessage.java │ │ ├── SocketAcceptorThread.java │ │ ├── StubAddress.java │ │ ├── StubConnector.java │ │ ├── TestAcceptor.java │ │ ├── TestClientReceiver.java │ │ ├── TestClientSender.java │ │ ├── TestClientSenderAndServerReceiver.java │ │ ├── TestCommunicationDefaults.java │ │ ├── TestConnectionIdentity.java │ │ ├── TestConnectionType.java │ │ ├── TestConnector.java │ │ ├── TestFanOutServerSender.java │ │ ├── TestFanOutServerSenderAndClientReceiver.java │ │ ├── TestFanOutStreamSender.java │ │ ├── TestFanOutStreamSenderAndStreamReceiver.java │ │ ├── TestIdleAwareSocketWrapper.java │ │ ├── TestIgnoreShutdownSender.java │ │ ├── TestInternalMessages.java │ │ ├── TestMessageDispatchSender.java │ │ ├── TestMessagePump.java │ │ ├── TestMessageQueue.java │ │ ├── TestQueuedSenderDecorator.java │ │ ├── TestResourcePool.java │ │ ├── TestResponseSender.java │ │ ├── TestServerReceiver.java │ │ ├── TestSocketWrapper.java │ │ ├── TestStreamReceiver.java │ │ ├── TestStreamSender.java │ │ ├── TestStreamSenderAndStreamReceiver.java │ │ └── TestTeeSender.java │ │ ├── console │ │ ├── TestConsoleFoundation.java │ │ ├── client │ │ │ ├── TestConsoleConnectionFactory.java │ │ │ └── TestConsoleConnectionImplementation.java │ │ ├── common │ │ │ ├── StubResources.java │ │ │ ├── TestDisplayMessageConsoleException.java │ │ │ ├── TestErrorQueue.java │ │ │ ├── TestProcessReportDescriptionFactory.java │ │ │ ├── TestResources.java │ │ │ └── processidentity │ │ │ │ ├── StubAgentProcessReport.java │ │ │ │ ├── StubWorkerProcessReport.java │ │ │ │ └── TestProcessReport.java │ │ ├── communication │ │ │ ├── StubProcessReports.java │ │ │ ├── TestConsoleCommunicationImplementation.java │ │ │ ├── TestProcessControl.java │ │ │ ├── TestProcessControlImplementation.java │ │ │ ├── TestProcessStatusImplementation.java │ │ │ └── server │ │ │ │ └── TestDispatchClientCommands.java │ │ ├── distribution │ │ │ ├── TestAgentCacheStateImplementation.java │ │ │ ├── TestCacheParametersImplementation.java │ │ │ ├── TestFileDistribution.java │ │ │ ├── TestFileDistributionHandlerImplementation.java │ │ │ └── TestWireFileDistribution.java │ │ ├── editor │ │ │ ├── StringTextSource.java │ │ │ ├── TestAbstractTextSource.java │ │ │ ├── TestBuffer.java │ │ │ ├── TestEditorModel.java │ │ │ ├── TestExternalEditor.java │ │ │ └── TouchClass.java │ │ ├── model │ │ │ ├── TestConsoleProperties.java │ │ │ ├── TestModelTestIndex.java │ │ │ ├── TestSampleModelImplementation.java │ │ │ └── TestSampleModelViewsImplementation.java │ │ ├── synchronisation │ │ │ ├── TestConsoleBarrierGroups.java │ │ │ ├── TestDistributedBarriers.java │ │ │ └── TestWireDistributedBarriers.java │ │ └── textui │ │ │ └── TestTextUI.java │ │ ├── engine │ │ ├── agent │ │ │ ├── EchoClass.java │ │ │ ├── MyCommandLine.java │ │ │ ├── ReadMessageEchoClass.java │ │ │ ├── StubAgentIdentity.java │ │ │ ├── TestAgentDaemon.java │ │ │ ├── TestAgentIdentityImplementation.java │ │ │ ├── TestAgentImplementation.java │ │ │ ├── TestDebugThreadWorker.java │ │ │ ├── TestDebugThreadWorkerFactory.java │ │ │ ├── TestFileStore.java │ │ │ ├── TestProcessWorker.java │ │ │ ├── TestProcessWorkerFactory.java │ │ │ ├── TestWorkerLauncher.java │ │ │ └── TestWorkerProcessCommandLine.java │ │ ├── common │ │ │ └── TestScriptLocation.java │ │ ├── communication │ │ │ └── TestConsoleListener.java │ │ ├── messages │ │ │ └── TestWorkerMessages.java │ │ └── process │ │ │ ├── ExternalLoggerScopeTunnel.java │ │ │ ├── ScriptEngineContainerScopeTunnel.java │ │ │ ├── StubTestRegistry.java │ │ │ ├── StubThreadContextLocator.java │ │ │ ├── TestExternalLogger.java │ │ │ ├── TestGrinderProcess.java │ │ │ ├── TestGrinderThread.java │ │ │ ├── TestMasterInstrumenter.java │ │ │ ├── TestPluginRegistryImplementation.java │ │ │ ├── TestRegisteredPlugin.java │ │ │ ├── TestSSLControlImplementation.java │ │ │ ├── TestScriptContextImplementation.java │ │ │ ├── TestScriptEngineContainer.java │ │ │ ├── TestScriptStatisticsImplementation.java │ │ │ ├── TestStatisticsForTestImplementation.java │ │ │ ├── TestStopWatchImplementation.java │ │ │ ├── TestTestData.java │ │ │ ├── TestTestRegistry.java │ │ │ ├── TestTestStatisticsHelperImplementation.java │ │ │ ├── TestThreadContextImplementation.java │ │ │ ├── TestThreadDataLogger.java │ │ │ └── dcr │ │ │ ├── AnotherClass.java │ │ │ ├── RecorderLocatorAccess.java │ │ │ ├── TestDCRContextImplementation.java │ │ │ └── TestRecorderLocator.java │ │ ├── messages │ │ ├── agent │ │ │ ├── StubCacheHighWaterMark.java │ │ │ └── TestAgentMessages.java │ │ └── console │ │ │ ├── TestAgentAddress.java │ │ │ └── TestConsoleMessages.java │ │ ├── plugininterface │ │ ├── StubGrinderPlugin.java │ │ └── TestPluginException.java │ │ ├── script │ │ └── TestTest.java │ │ ├── scriptengine │ │ ├── TestCompositeInstrumenter.java │ │ ├── clojure │ │ │ ├── TestClojureScriptEngine.java │ │ │ └── TestClojureScriptEngineService.java │ │ ├── java │ │ │ ├── TestJavaDCRInstrumenter.java │ │ │ └── TestJavaScriptEngineService.java │ │ └── jython │ │ │ ├── AbstractJythonScriptEngineServiceTests.java │ │ │ ├── TestJythonScriptEngine.java │ │ │ ├── TestJythonScriptEngineService.java │ │ │ ├── TestJythonScriptEngineServiceWithJython25.java │ │ │ ├── TestJythonScriptEngineWithJython25.java │ │ │ ├── TestJythonScriptExecutionException.java │ │ │ └── instrumentation │ │ │ ├── AbstractJythonInstrumenterTestCase.java │ │ │ └── dcr │ │ │ ├── AbstractJythonDCRInstrumenterTestCase.java │ │ │ ├── TestJython22Instrumenter.java │ │ │ └── TestJython25Instrumenter.java │ │ ├── statistics │ │ ├── StatisticsServicesTestFactory.java │ │ ├── TestCommonStatisticsViews.java │ │ ├── TestExpressionView.java │ │ ├── TestStatisticExpressionFactory.java │ │ ├── TestStatisticsIndexMap.java │ │ ├── TestStatisticsSetFactory.java │ │ ├── TestStatisticsSetImplementation.java │ │ ├── TestStatisticsTable.java │ │ ├── TestStatisticsView.java │ │ ├── TestTestStatisticsMap.java │ │ ├── TestTestStatisticsQueries.java │ │ └── testdata │ │ ├── synchronisation │ │ ├── TestBarrierIdentityGenerator.java │ │ ├── TestBarrierImplementation.java │ │ ├── TestClientBarrierGroups.java │ │ ├── TestLocalBarrierGroups.java │ │ └── messages │ │ │ └── TestBarrierGroupMessages.java │ │ ├── testutility │ │ ├── Jython21_22Runner.java │ │ ├── Jython25Runner.java │ │ └── JythonVersionRunner.java │ │ └── util │ │ ├── AnIsolatedClass.java │ │ ├── TestAbstractMainClass.java │ │ ├── TestAllocateLowestNumberImplementation.java │ │ ├── TestAttributeStringParserImplementation.java │ │ ├── TestBlockingClassLoader.java │ │ ├── TestBooleanProperty.java │ │ ├── TestClassLoaderUtilities.java │ │ ├── TestDelayedCreationFileWriter.java │ │ ├── TestDirectory.java │ │ ├── TestFileContents.java │ │ ├── TestFileExtensionMatcher.java │ │ ├── TestFixedWidthFormatter.java │ │ ├── TestInsecureSSLContextFactory.java │ │ ├── TestJVM.java │ │ ├── TestListenerSupport.java │ │ ├── TestPair.java │ │ ├── TestSerialiser.java │ │ ├── TestSignificantFigureFormat.java │ │ ├── TestSimpleStringEscaper.java │ │ ├── TestSleeper.java │ │ ├── TestUnexpectedIOException.java │ │ ├── TestUniqueIdentityGenerator.java │ │ ├── TestWeakValueHashMap.java │ │ ├── TimeAuthorityStubFactory.java │ │ ├── html │ │ └── TestHTML.java │ │ ├── logback │ │ ├── TestBufferedEchoMessageEncoder.java │ │ └── TestRollOnStartUp.java │ │ ├── thread │ │ ├── TestBooleanCondition.java │ │ └── TestMonitor.java │ │ └── weave │ │ └── j2se6 │ │ ├── TestASMTransformerFactory.java │ │ └── TestDCRWeaver.java │ └── resources │ ├── TestResources.properties │ └── net │ └── grinder │ ├── console │ └── common │ │ ├── TestDisplayMessageConsoleException.properties │ │ ├── TestResources.properties │ │ └── resources │ │ ├── helloworld.txt │ │ └── image.png │ └── engine │ └── process │ └── default.keystore ├── grinder-dcr-agent ├── .gitignore ├── pom.xml └── src │ └── main │ └── java │ └── net │ └── grinder │ └── util │ └── weave │ └── agent │ ├── ExposeInstrumentation.java │ └── package.html ├── grinder-http ├── .gitignore ├── pom.xml └── src │ ├── main │ ├── java │ │ └── net │ │ │ └── grinder │ │ │ ├── TCPProxy.java │ │ │ ├── package.html │ │ │ ├── plugin │ │ │ └── http │ │ │ │ ├── HTTPConnectionWrapper.java │ │ │ │ ├── HTTPPlugin.java │ │ │ │ ├── HTTPPluginConnection.java │ │ │ │ ├── HTTPPluginConnectionDefaults.java │ │ │ │ ├── HTTPPluginControl.java │ │ │ │ ├── HTTPPluginThreadState.java │ │ │ │ ├── HTTPRequest.java │ │ │ │ ├── HTTPUtilities.java │ │ │ │ ├── HTTPUtilitiesImplementation.java │ │ │ │ ├── SlowClientBandwidthLimiterFactory.java │ │ │ │ ├── TimeoutException.java │ │ │ │ ├── URLException.java │ │ │ │ ├── package.html │ │ │ │ └── tcpproxyfilter │ │ │ │ ├── ConnectionCache.java │ │ │ │ ├── ConnectionHandler.java │ │ │ │ ├── ConnectionHandlerFactory.java │ │ │ │ ├── ConnectionHandlerFactoryImplementation.java │ │ │ │ ├── ConnectionHandlerImplementation.java │ │ │ │ ├── HTTPFilterEventListener.java │ │ │ │ ├── HTTPRecording.java │ │ │ │ ├── HTTPRecordingImplementation.java │ │ │ │ ├── HTTPRecordingParameters.java │ │ │ │ ├── HTTPRecordingResultProcessor.java │ │ │ │ ├── HTTPRequestFilter.java │ │ │ │ ├── HTTPResponseFilter.java │ │ │ │ ├── IntGenerator.java │ │ │ │ ├── ParametersFromProperties.java │ │ │ │ ├── ProcessHTTPRecordingWithXSLT.java │ │ │ │ ├── ProcessRecording.java │ │ │ │ ├── RegularExpressions.java │ │ │ │ ├── RegularExpressionsImplementation.java │ │ │ │ ├── XSLTHelper.java │ │ │ │ └── package.html │ │ │ ├── tools │ │ │ └── tcpproxy │ │ │ │ ├── AbstractFilterDecorator.java │ │ │ │ ├── AbstractTCPProxyEngine.java │ │ │ │ ├── CommentSource.java │ │ │ │ ├── CommentSourceImplementation.java │ │ │ │ ├── CompositeFilter.java │ │ │ │ ├── ConnectionDetails.java │ │ │ │ ├── EchoFilter.java │ │ │ │ ├── EndPoint.java │ │ │ │ ├── HTTPMethodAbsoluteURIFilterDecorator.java │ │ │ │ ├── HTTPMethodRelativeURIFilterDecorator.java │ │ │ │ ├── HTTPProxyTCPProxyEngine.java │ │ │ │ ├── HTTPResponse.java │ │ │ │ ├── NullFilter.java │ │ │ │ ├── PortForwarderTCPProxyEngine.java │ │ │ │ ├── TCPProxyConsole.java │ │ │ │ ├── TCPProxyEngine.java │ │ │ │ ├── TCPProxyFilter.java │ │ │ │ ├── TCPProxySSLSocketFactory.java │ │ │ │ ├── TCPProxySSLSocketFactoryImplementation.java │ │ │ │ ├── TCPProxySocketFactory.java │ │ │ │ ├── TCPProxySocketFactoryImplementation.java │ │ │ │ ├── UpdatableCommentSource.java │ │ │ │ ├── VerboseConnectException.java │ │ │ │ └── package.html │ │ │ └── util │ │ │ └── http │ │ │ ├── URIParser.java │ │ │ ├── URIParserImplementation.java │ │ │ └── package.html │ └── resources │ │ └── net │ │ └── grinder │ │ ├── plugin │ │ └── http │ │ │ └── tcpproxyfilter │ │ │ └── resources │ │ │ ├── httpToClojureScript.xsl │ │ │ ├── httpToJythonScript.xsl │ │ │ ├── httpToJythonScriptOldInstrumentation.xsl │ │ │ └── httpToXML.xsl │ │ └── tools │ │ └── tcpproxy │ │ └── resources │ │ └── default.keystore │ └── test │ ├── java │ ├── HTTPClient │ │ ├── StubHTTPConnection.java │ │ ├── TestCookie.java │ │ └── TestDefaultBandwidthLimiter.java │ └── net │ │ └── grinder │ │ ├── TestTCPProxy.java │ │ ├── plugin │ │ └── http │ │ │ ├── HTTPRequestHandler.java │ │ │ ├── TestHTTPConnectionWrapper.java │ │ │ ├── TestHTTPPlugin.java │ │ │ ├── TestHTTPPluginConnectionDefaults.java │ │ │ ├── TestHTTPPluginControl.java │ │ │ ├── TestHTTPPluginThreadState.java │ │ │ ├── TestHTTPRequest.java │ │ │ ├── TestHTTPUtilitiesImplementation.java │ │ │ ├── TestSlowClientBandwidthLimiterFactory.java │ │ │ └── tcpproxyfilter │ │ │ ├── TestConnectionCache.java │ │ │ ├── TestConnectionHandlerFactoryImplementation.java │ │ │ ├── TestConnectionHandlerImplementation.java │ │ │ ├── TestHTTPRecordingImplementation.java │ │ │ ├── TestHTTPRequestFilter.java │ │ │ ├── TestHTTPResponseFilter.java │ │ │ ├── TestParametersFromProperties.java │ │ │ ├── TestProcessHTTPRecordingWithXSLT.java │ │ │ ├── TestRegularExpressionsImplementation.java │ │ │ └── TestXSLTHelper.java │ │ ├── testutility │ │ └── XMLBeansUtilities.java │ │ ├── tools │ │ └── tcpproxy │ │ │ ├── MyFilterStubFactory.java │ │ │ ├── TestCommentSourceImplementation.java │ │ │ ├── TestCompositeFilter.java │ │ │ ├── TestConnectionDetails.java │ │ │ ├── TestEchoFilter.java │ │ │ ├── TestEndPoint.java │ │ │ ├── TestHTTPMethodAbsoluteURIFilterDecorator.java │ │ │ ├── TestHTTPMethodRelativeURIFilterDecorator.java │ │ │ ├── TestHTTPProxyTCPProxyEngine.java │ │ │ ├── TestHTTPResponse.java │ │ │ ├── TestNullFilter.java │ │ │ ├── TestPortForwarderTCPProxyEngine.java │ │ │ ├── TestTCPProxyConsole.java │ │ │ └── TestTCPProxySocketFactories.java │ │ └── util │ │ └── http │ │ ├── TestAbstractParseListener.java │ │ └── TestURIParserImplementation.java │ └── resources │ └── net │ └── grinder │ └── plugin │ └── http │ ├── data │ ├── goodGET1 │ ├── goodGET2 │ └── goodPOST1 │ └── tcpproxyfilter │ └── resources │ └── identity.xsl ├── grinder-httpclient ├── .gitignore ├── pom.xml └── src │ └── main │ ├── java │ └── HTTPClient │ │ ├── AuthSchemeNotImplException.java │ │ ├── AuthorizationHandler.java │ │ ├── AuthorizationInfo.java │ │ ├── AuthorizationModule.java │ │ ├── AuthorizationPrompter.java │ │ ├── BufferedInputStream.java │ │ ├── CIHashtable.java │ │ ├── ChunkedInputStream.java │ │ ├── Codecs.java │ │ ├── ContentEncodingModule.java │ │ ├── ContentMD5Module.java │ │ ├── Cookie.java │ │ ├── Cookie2.java │ │ ├── CookieModule.java │ │ ├── CookiePolicyHandler.java │ │ ├── DefaultAuthHandler.java │ │ ├── DefaultModule.java │ │ ├── FilenameMangler.java │ │ ├── GlobalConstants.java │ │ ├── HTTPClientModule.java │ │ ├── HTTPClientModuleConstants.java │ │ ├── HTTPConnection.java │ │ ├── HTTPResponse.java │ │ ├── HashVerifier.java │ │ ├── HttpHeaderElement.java │ │ ├── HttpOutputStream.java │ │ ├── HttpURLConnection.java │ │ ├── IdempotentSequence.java │ │ ├── LinkedList.java │ │ ├── Log.java │ │ ├── MD5.java │ │ ├── MD5InputStream.java │ │ ├── ModuleException.java │ │ ├── NVPair.java │ │ ├── ParseException.java │ │ ├── ProtocolNotSuppException.java │ │ ├── RedirectionModule.java │ │ ├── Request.java │ │ ├── RespInputStream.java │ │ ├── Response.java │ │ ├── ResponseHandler.java │ │ ├── RetryException.java │ │ ├── RetryModule.java │ │ ├── RoRequest.java │ │ ├── RoResponse.java │ │ ├── SocksClient.java │ │ ├── SocksException.java │ │ ├── StreamDemultiplexor.java │ │ ├── TransferEncodingModule.java │ │ ├── URI.java │ │ ├── UncompressInputStream.java │ │ ├── Util.java │ │ ├── http │ │ └── Handler.java │ │ ├── https │ │ └── Handler.java │ │ ├── package.html │ │ └── shttp │ │ └── Handler.java │ └── resources │ └── META-INF │ └── LICENSE ├── grinder-swing-console ├── .gitignore ├── pom.xml └── src │ ├── main │ ├── java │ │ └── net │ │ │ └── grinder │ │ │ └── console │ │ │ └── swingui │ │ │ ├── BufferTreeModel.java │ │ │ ├── Colours.java │ │ │ ├── CompositeTreeModel.java │ │ │ ├── ConsoleUI.java │ │ │ ├── CumulativeStatisticsTableModel.java │ │ │ ├── CustomAction.java │ │ │ ├── CustomJButton.java │ │ │ ├── DynamicStatisticsTableModel.java │ │ │ ├── Editor.java │ │ │ ├── EditorControls.java │ │ │ ├── ErrorDialogHandler.java │ │ │ ├── FileTree.java │ │ │ ├── FileTreeModel.java │ │ │ ├── FrameBounds.java │ │ │ ├── Graph.java │ │ │ ├── IntegerField.java │ │ │ ├── JOptionPaneDialog.java │ │ │ ├── LabelledGraph.java │ │ │ ├── LookAndFeel.java │ │ │ ├── MnemonicHeuristics.java │ │ │ ├── OptionalConfirmDialog.java │ │ │ ├── OptionsDialogHandler.java │ │ │ ├── ProcessStatusTableModel.java │ │ │ ├── SampleStatisticsTableModel.java │ │ │ ├── SamplingControlPanel.java │ │ │ ├── SwingDispatcherFactory.java │ │ │ ├── SwingDispatcherFactoryImplementation.java │ │ │ ├── Table.java │ │ │ ├── TeeAction.java │ │ │ ├── TestGraphPanel.java │ │ │ └── package.html │ └── resources │ │ └── META-INF │ │ └── net.grinder.console │ └── test │ └── java │ └── net │ └── grinder │ └── console │ └── swingui │ ├── TestBufferTreeModel.java │ ├── TestCompositeTreeModel.java │ ├── TestCumulativeStatisticsTableModel.java │ ├── TestCustomAction.java │ ├── TestCustomJButton.java │ ├── TestFileTree.java │ ├── TestFileTreeModel.java │ ├── TestFrameBounds.java │ ├── TestGraph.java │ ├── TestIntegerField.java │ ├── TestMnemonicHeuristics.java │ ├── TestProcessStatusTableModel.java │ ├── TestSampleStatisticsTableModel.java │ ├── TestSwingDispatcherFactory.java │ └── TestTeeAction.java ├── grinder-test-support ├── .gitignore ├── pom.xml └── src │ └── main │ ├── java │ └── net │ │ └── grinder │ │ └── testutility │ │ ├── AbstractFileTestCase.java │ │ ├── AbstractJUnit4FileTestCase.java │ │ ├── AbstractStubFactory.java │ │ ├── AssertUtilities.java │ │ ├── CallAssertions.java │ │ ├── CallData.java │ │ ├── CallRecorder.java │ │ ├── CountingInputStream.java │ │ ├── DelegatingStubFactory.java │ │ ├── FileUtilities.java │ │ ├── IsolatedObjectFactory.java │ │ ├── MockingUtilities.java │ │ ├── OverrideInvocationHandlerDecorator.java │ │ ├── RandomObjectFactory.java │ │ ├── RandomStubFactory.java │ │ ├── RedirectStandardStreams.java │ │ ├── Serializer.java │ │ ├── SimpleEqualityDecoration.java │ │ ├── SocketUtilities.java │ │ ├── StreamCopier.java │ │ ├── StubPrintStream.java │ │ ├── StubPrintWriter.java │ │ ├── StubRelationshipsInvocationHandlerDecorator.java │ │ ├── StubTimer.java │ │ ├── TemporaryDirectory.java │ │ └── Time.java │ └── resources │ └── net │ └── grinder │ └── testutility │ └── resources │ └── SimpleObject.clazz ├── grinder-web-console ├── .gitignore ├── pom.xml └── src │ └── main │ ├── java │ └── net │ │ └── grinder │ │ └── console │ │ └── webui │ │ ├── ReverseLineInputStream.java │ │ ├── ServletConfig.java │ │ └── WebConsoleEndPoint.java │ └── resources │ ├── application.properties │ └── static │ ├── css │ └── grinder.css │ ├── favicon.ico │ ├── img │ ├── agent_grinder.png │ ├── back.png │ ├── delete.png │ ├── download.png │ ├── file.png │ ├── folder.png │ ├── grinder-logo.png │ ├── logo.png │ ├── nav-bg.gif │ ├── ori_select-properties-rollover.png │ ├── refresh.png │ ├── reset_grinder.png │ ├── select-properties-rollover.png │ ├── setPath.png │ ├── start_grinder.png │ └── stop_grinder.png │ ├── index.html │ ├── js │ ├── Chart.min.js │ ├── grinder.js │ ├── javascript │ │ ├── index.html │ │ ├── javascript.js │ │ ├── json-ld.html │ │ ├── test.js │ │ └── typescript.html │ └── jquery.min.js │ └── lib │ ├── codemirror.css │ └── codemirror.js ├── grinder-xmlbeans ├── .gitignore ├── pom.xml └── src │ └── main │ ├── xsd │ └── tcpproxy-http.xsd │ └── xsdconfig │ └── tcpproxy-http.xsdconfig ├── grinder ├── .gitignore ├── CHANGES ├── TODO.MD ├── contrib │ └── mq │ │ ├── AUTHORS │ │ ├── LICENSE │ │ ├── MQConnector.java │ │ ├── MQMsg.java │ │ ├── README │ │ ├── mq.py │ │ └── org.rextency.mq.jar ├── docs │ ├── .gitignore │ ├── Console.svg │ └── HTTPS and TCPProxyEngine.svg ├── examples │ ├── amazon.py │ ├── console.py │ ├── cookies.py │ ├── digestauthentication.py │ ├── ejb.py │ ├── email.py │ ├── fba.py │ ├── form.py │ ├── grinder.properties │ ├── helloworld.clj │ ├── helloworld.py │ ├── helloworldfunctions.py │ ├── http.py │ ├── httpg2.py │ ├── httpunit.py │ ├── jaxrpc.py │ ├── jdbc.py │ ├── jmsreceiver.py │ ├── jmssender.py │ ├── parallel.py │ ├── proportion.py │ ├── scenario.py │ ├── scriptlifecycle.py │ ├── sequence.py │ ├── slowClient.py │ ├── statistics.py │ ├── sync.py │ ├── threadrampup.py │ └── xml-rpc.py ├── lib │ ├── LICENSE-ASM │ ├── LICENSE-Jython │ ├── LICENSE-PicoContainer │ ├── LICENSE-Ring │ ├── LICENSE-SLF4J │ ├── LICENSE-Spring │ ├── LICENSE-clj-json │ ├── LICENSE-jEditSyntax │ └── License-ring-json-params ├── pom.xml └── src │ └── main │ └── assembly │ └── assembly.xml └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /cachedir 3 | /target/ 4 | /.i* 5 | /.g* 6 | /**/*.iml 7 | !/.gitignore 8 | .project 9 | .settings 10 | .vscode 11 | key 12 | 13 | -------------------------------------------------------------------------------- /.travis.settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | sonatype-nexus-snapshots 6 | ${env.SONATYPE_USERNAME} 7 | ${env.SONATYPE_PASSWORD} 8 | 9 | 10 | sonatype-nexus-staging 11 | ${env.SONATYPE_USERNAME} 12 | ${env.SONATYPE_PASSWORD} 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8u151-jdk-alpine3.7 2 | 3 | ENV GRINDER_VERSION 4.0.2-SNAPSHOT 4 | ENV GRINDER_BINARY grinder-${GRINDER_BINARY_VERSION}-binary.zip 5 | 6 | ENV GRINDER_BASE /opt 7 | ENV GRINDER_ROOT ${GRINDER_BASE}/grinder 8 | ENV GRINDER_WORKSPACE ${GRINDER_ROOT}/workspace 9 | 10 | RUN apk add --no-cache curl && \ 11 | mkdir ${GRINDER_BASE} && cd ${GRINDER_BASE} && \ 12 | curl https://oss.sonatype.org/service/local/repositories/snapshots/content/io/github/cossme/grinder/${GRINDER_VERSION}/${GRINDER_BINARY} --output ${GRINDER_BINARY} && \ 13 | unzip ${GRINDER_BINARY} && rm -rf ${GRINDER_BINARY} && \ 14 | ln -s ${GRINDER_BASE}/grinder-${GRINDER_VERSION} ${GRINDER_ROOT} && \ 15 | mkdir ${GRINDER_WORKSPACE} && \ 16 | touch ${GRINDER_WORKSPACE}/setGrinderEnv.sh && \ 17 | echo "grinder.console.propertiesFile=${GRINDER_WORKSPACE}/grinder.properties" > ~/.grinder_console && \ 18 | echo "grinder.console.scriptDistributionDirectory=${GRINDER_WORKSPACE}" >> ~/.grinder_console 19 | 20 | WORKDIR "${GRINDER_ROOT}" 21 | 22 | EXPOSE 6372 23 | EXPOSE 6373 24 | 25 | CMD . ${GRINDER_WORKSPACE}/setGrinderEnv.sh && java -cp ${CLASSPATH}:lib/grinder.jar ${GRINDER_PROPERTIES} net.grinder.Console 26 | -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem "github-pages", group: :jekyll_plugins 3 | gem "bigdecimal", group: :jekyll_plugins 4 | 5 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-midnight 2 | title: The Grinder 3 | description: A Java Load Testing Framework 4 | show_downloads: true 5 | download_url: https://github.com/cossme/grinder/releases/download/4.0.0/grinder-4.0.0-binary.zip 6 | #plugins: 7 | # - jekyll-seo-tag 8 | -------------------------------------------------------------------------------- /docs/_data/menuHeader.yaml: -------------------------------------------------------------------------------- 1 | docs_list_title: ACME Documentation 2 | entries: 3 | 4 | - title: Home 5 | url: /grinder/index.html 6 | 7 | - title: User Guide 8 | url: /grinder/guide/getting-started.html 9 | 10 | - title: FAQ 11 | url: /grinder/faq.html 12 | -------------------------------------------------------------------------------- /docs/download.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: grinder 3 | level: Index 4 | --- 5 | 6 |
7 |

Download The Grinder

8 | 9 |

The Grinder can be downloaded from SourceForge.net. 11 | The source code is also available. 12 |

13 | 14 |

The Grinder is distributed as two zip files which you should expand 15 | using unzip, WinZip or 16 | similar. Everything required to run The Grinder is in the zip file labelled 17 | grinder-version.zip. The remaining 18 | files that are needed to build The Grinder are distributed in the zip file 19 | labelled grinder-version-src.zip; 20 | these are mainly of interest to developers wanting to 21 | extend The Grinder. 22 |

23 |
24 | 25 |
26 |

What else do I need?

27 | 28 |

To run The Grinder: Java Standard Edition6, equivalent, or later

29 |
30 | 31 |
32 |

Downloading The Grinder using Maven

33 | 34 |

Some users will find it preferable to use Maven to manage The 35 | Grinder. On release, the jar files are deployed to the Sonatype OSS Nexus repository, and 37 | will be synchronised to Maven 38 | Central soon afterwards. You can choose either to depend on 39 | the the zip file, which should be identical to the Sourceforge 40 | download, or the individual jar files.

41 |
42 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/favicon.ico -------------------------------------------------------------------------------- /docs/images/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/banner.png -------------------------------------------------------------------------------- /docs/images/book-cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/book-cover.jpg -------------------------------------------------------------------------------- /docs/images/console-distribute-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/console-distribute-files.png -------------------------------------------------------------------------------- /docs/images/console-es-g3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/console-es-g3.png -------------------------------------------------------------------------------- /docs/images/console-sample-controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/console-sample-controls.png -------------------------------------------------------------------------------- /docs/images/console-screenshot-g3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/console-screenshot-g3.png -------------------------------------------------------------------------------- /docs/images/console-select-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/console-select-properties.png -------------------------------------------------------------------------------- /docs/images/console-start-and-reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/console-start-and-reset.png -------------------------------------------------------------------------------- /docs/images/grinder-analyzer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/grinder-analyzer.png -------------------------------------------------------------------------------- /docs/images/grinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/grinder.png -------------------------------------------------------------------------------- /docs/images/ie-cache-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/ie-cache-settings.png -------------------------------------------------------------------------------- /docs/images/processes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/processes.png -------------------------------------------------------------------------------- /docs/images/proxy-preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/proxy-preferences.png -------------------------------------------------------------------------------- /docs/images/tcpproxy-console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/tcpproxy-console.png -------------------------------------------------------------------------------- /docs/images/tcpproxy-proxy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/tcpproxy-proxy.gif -------------------------------------------------------------------------------- /docs/images/tcpproxy-ssl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/tcpproxy-ssl.gif -------------------------------------------------------------------------------- /docs/images/tcpproxy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/tcpproxy.gif -------------------------------------------------------------------------------- /docs/images/tcpproxy.vsd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/tcpproxy.vsd -------------------------------------------------------------------------------- /docs/images/webconsole-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/webconsole-graph.png -------------------------------------------------------------------------------- /docs/images/webconsole-process-control-stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/webconsole-process-control-stop.png -------------------------------------------------------------------------------- /docs/images/webconsole-process-control.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/webconsole-process-control.png -------------------------------------------------------------------------------- /docs/images/webconsole-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/webconsole-screenshot.png -------------------------------------------------------------------------------- /docs/images/webconsole-select-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/docs/images/webconsole-select-properties.png -------------------------------------------------------------------------------- /documentation/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | docs 3 | generated 4 | -------------------------------------------------------------------------------- /documentation/README: -------------------------------------------------------------------------------- 1 | This is the documentation source for The Grinder. It can be used to 2 | build The Grinder documentation, as shipped in The Grinder's binary 3 | distribution and published at http://grinder.sourceforge.net. 4 | 5 | For license and copyright information, please refer to the file LICENSE 6 | in the source tree, available from the SourceForge SVN repository. 7 | 8 | https://grinder.svn.sourceforge.net/svnroot/grinder/trunk/source/ 9 | 10 | The Grinder is a pure Java load-testing framework that is freely 11 | available under a BSD style open-source license. It was originally 12 | developed for the book Professional Java 2 Enterprise Edition with BEA 13 | WebLogic Server by Paco G�mez and Peter Zadrozny. Philip Aston took 14 | ownership of the code and reworked it to create The Grinder 2. Philip 15 | continues to enhance and maintain The Grinder. 16 | 17 | This documentation source is publicly available through the 18 | SourceForge SVN repository. 19 | 20 | https://grinder.svn.sourceforge.net/svnroot/grinder/trunk/documentation 21 | 22 | If you wish to contribute to the documentation, you need to be 23 | registered as a developer. Please request this via the grinder-use 24 | mailing list: https://sourceforge.net/mail/?group_id=18598 25 | 26 | 27 | -------------------------------------------------------------------------------- /documentation/etc/.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | -------------------------------------------------------------------------------- /documentation/etc/localpaths.properties: -------------------------------------------------------------------------------- 1 | # If you want to build The Grinder documentation, edit this file to 2 | # suite your local environment. 3 | 4 | forrest.home=/opt/forrest/apache-forrest-0.9 5 | 6 | jython.home=/opt/jython/jython2.5.2 7 | 8 | maven-ant-tasks.jar=/opt/maven-ant-tasks/maven-ant-tasks-2.1.3.jar 9 | 10 | mvn.home=/opt/maven/apache-maven-3.0.3/ 11 | -------------------------------------------------------------------------------- /documentation/etc/outline2xml.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | # Inspiration drawn from o2x (http://www.sabren.com/code/python/) 4 | 5 | from changes2xml import XMLOutput, quote 6 | 7 | def outline2xml(file): 8 | output = XMLOutput("todo") 9 | 10 | for line in file.readlines(): 11 | line = quote(line) 12 | 13 | if line[:3] == "-*-": continue 14 | 15 | if line and line[0] == "*": 16 | depth = 0 17 | while line[depth] == "*": depth = depth + 1 18 | 19 | output.closeToDepth(depth) 20 | 21 | # for difference in range(output._stack.depth(), depth): 22 | # output.openSection("", depth=difference) 23 | 24 | title = line[depth:].strip() 25 | output.openSection(title, title, depth = depth) 26 | else: 27 | output.addLine(line) 28 | 29 | return output.result() 30 | 31 | 32 | if __name__ == "__main__": 33 | import sys 34 | for f in sys.argv[1:]: 35 | print outline2xml(open(f, "r")) 36 | -------------------------------------------------------------------------------- /documentation/etc/scripts2XML.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | from changes2xml import XMLOutput, quote 4 | 5 | 6 | class Script: 7 | def __init__(self, filename): 8 | self.id = filename.split("/")[-1] 9 | 10 | suffix = filename.split(".")[-1] 11 | 12 | if suffix == "clj": 13 | self.language = "clojure" 14 | else: 15 | self.language = "jython" 16 | 17 | f = open(filename, "rt") 18 | self.title = "" 19 | 20 | self.text = quote(f.read(), replaceNewLines=0, hyperlinks=0) 21 | 22 | f.close() 23 | 24 | while 1: 25 | line, self.text = self.text.split("\n", 1) 26 | 27 | if line.strip().startswith("#"): 28 | line = line.split("#")[-1].strip() 29 | elif line.strip().startswith(";"): 30 | line = line.split(";")[-1].strip() 31 | 32 | if not line: break 33 | if self.title: self.title += " " 34 | self.title += line 35 | 36 | 37 | 38 | def scripts2xml(filenames): 39 | output = XMLOutput("scripts") 40 | 41 | for filename in filenames: 42 | script = Script(filename) 43 | output.addLiteral("script", script.text, id=script.id, title=script.title, language=script.language) 44 | 45 | return output.result() 46 | 47 | 48 | if __name__ == "__main__": 49 | 50 | import sys 51 | 52 | print scripts2xml(sys.argv[1:]) 53 | -------------------------------------------------------------------------------- /documentation/src/documentation/add-image-to-title.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 |
18 |

19 |

20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /documentation/src/documentation/changes2doc.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 |

12 | The Grinder Change Log 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | <xsl:value-of select="@name"/> 23 | 24 |

Released

25 |
26 | 27 |
28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /documentation/src/documentation/content/xdocs/g2/manual.ihtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

The Grinder User Manual

7 | 8 |

This is the user manual for the current stable version of The 9 | Grinder, The Grinder 2. It is incomplete and much of the 10 | material is still in note form. It will mature as and when I get time 11 | to write more.

12 | 13 |

In the meantime I refer you to the full tutorial on The Grinder 14 | given in the book. The book 15 | contains complete documentation of the console and is currently the 16 | only source on writing plug-ins for The Grinder.

17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /documentation/src/documentation/resources/image-sources/fuzzy-border-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/image-sources/fuzzy-border-settings.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/image-sources/grinder-logo.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/image-sources/grinder-logo.xcf -------------------------------------------------------------------------------- /documentation/src/documentation/resources/image-sources/pastedpic_09282008_091054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/image-sources/pastedpic_09282008_091054.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/image-sources/pastedpic_09282008_095323.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/image-sources/pastedpic_09282008_095323.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/PythonPoweredSmall.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/PythonPoweredSmall.gif -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/book-cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/book-cover.jpg -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/console-distribute-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/console-distribute-files.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/console-es-g3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/console-es-g3.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/console-es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/console-es.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/console-sample-controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/console-sample-controls.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/console-screenshot-g3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/console-screenshot-g3.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/console-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/console-screenshot.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/console-select-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/console-select-properties.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/console-start-and-reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/console-start-and-reset.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/grinder-analyzer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/grinder-analyzer.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/grinder-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/grinder-logo.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/grinder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/grinder.gif -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/grinder3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/grinder3.jpg -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/ie-cache-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/ie-cache-settings.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/logo.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/processes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/processes.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/proxy-preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/proxy-preferences.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/tcpproxy-console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/tcpproxy-console.png -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/tcpproxy-proxy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/tcpproxy-proxy.gif -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/tcpproxy-ssl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/tcpproxy-ssl.gif -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/tcpproxy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/tcpproxy.gif -------------------------------------------------------------------------------- /documentation/src/documentation/resources/images/tcpproxy.vsd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/resources/images/tcpproxy.vsd -------------------------------------------------------------------------------- /documentation/src/documentation/skins/common/images/fade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/common/images/fade.png -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/css/print.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | body { 18 | font-family: Georgia, Palatino, serif; 19 | font-size: 12pt; 20 | background: white; 21 | } 22 | 23 | #tabs, 24 | #menu, 25 | #content .toc { 26 | display: none; 27 | } 28 | 29 | #content { 30 | width: auto; 31 | padding: 0; 32 | float: none !important; 33 | color: black; 34 | background: inherit; 35 | } 36 | 37 | a:link, a:visited { 38 | color: #336699; 39 | background: inherit; 40 | text-decoration: underline; 41 | } 42 | 43 | #top .logo { 44 | padding: 0; 45 | margin: 0 0 2em 0; 46 | } 47 | 48 | #footer { 49 | margin-top: 4em; 50 | } 51 | 52 | acronym { 53 | border: 0; 54 | } 55 | -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/chapter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/chapter.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/chapter_open.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/chapter_open.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/current.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/current.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/error.png -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/header_white_line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/header_white_line.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/info.png -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/instruction_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/instruction_arrow.png -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/label.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/label.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/page.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/page.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/pdfdoc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/pdfdoc.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/printer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/printer.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/success.png -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/warning.png -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/images/xmldoc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/images/xmldoc.gif -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/note.txt: -------------------------------------------------------------------------------- 1 | Notes for developer: 2 | 3 | --Legend------------------- 4 | TODO -> blocker 5 | DONE -> blocker 6 | ToDo -> enhancement bug 7 | done -> enhancement bug 8 | 9 | --Issues------------------- 10 | - the corner images should be rendered through svg with the header color. 11 | -> DONE 12 | -> ToDo: get rid of the images and use only divs! 13 | 14 | - the menu points should be displayed "better". 15 | -> DONE 16 | -- Use the krysalis-site menu approach for the overall menu display. 17 | -> DONE 18 | -- Use the old lenya innermenu approch to further enhance the menu . 19 | -> DONE 20 | 21 | - the content area needs some attention. 22 | -> DONE 23 | -- introduce the heading scheme from krysalis () 24 | -> DONE 25 | -> ToDo: make box with round corners 26 | -> done: make underlined with variable border height 27 | -> ToDo: make underline with bottom round corner 28 | -- introduce the toc for each html-page 29 | -> DONE 30 | -- introduce the external-link-images. 31 | -> DONE 32 | 33 | - the publish note should be where now only a border is. 34 | Like
35 | -> DONE 36 | , but make it configurable. 37 | -> DONE 38 | - footer needs some attention 39 | -> DONE 40 | -- the footer do not have the color profile! Enable it! 41 | -> DONE 42 | -- the footer should as well contain a feedback link. 43 | See http://issues.apache.org/eyebrowse/ReadMsg?listName=forrest-user@xml.apache.org&msgNo=71 44 | -> DONE 45 | 46 | - introduce credits alternativ location 47 | -> DONE 48 | 49 | - border for published / breadtrail / menu /tab divs 50 | -> ToDo -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/scripts/sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/documentation/src/documentation/skins/pelt-grinder/scripts/sh -------------------------------------------------------------------------------- /documentation/src/documentation/skins/pelt-grinder/scripts/shAutoloader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SyntaxHighlighter 3 | * http://alexgorbatchev.com/SyntaxHighlighter 4 | * 5 | * SyntaxHighlighter is donationware. If you are using it, please donate. 6 | * http://alexgorbatchev.com/SyntaxHighlighter/donate.html 7 | * 8 | * @version 9 | * 3.0.83 (July 02 2010) 10 | * 11 | * @copyright 12 | * Copyright (C) 2004-2010 Alex Gorbatchev. 13 | * 14 | * @license 15 | * Dual licensed under the MIT and GPL licenses. 16 | */ 17 | eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(2(){1 h=5;h.I=2(){2 n(c,a){4(1 d=0;d 2 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /documentation/src/documentation/todo2doc.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | The Grinder To Do list 13 |
14 | 15 | 16 | 17 |
18 |
19 | 20 | 21 |
22 | <xsl:value-of select="@name"/> 23 | 24 |
25 |
26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 | -------------------------------------------------------------------------------- /grinder-console-service/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /lib 3 | /classes 4 | /checkouts 5 | /build 6 | *.jar 7 | *.class 8 | .lein-deps-sum 9 | .lein-failures 10 | .lein-plugins 11 | /.* 12 | !/.gitignore 13 | 14 | -------------------------------------------------------------------------------- /grinder-console-service/resources/META-INF/net.grinder.console: -------------------------------------------------------------------------------- 1 | # Register the dynamic console component. 2 | 3 | net.grinder.console.service.Bootstrap 4 | -------------------------------------------------------------------------------- /grinder-console-service/test/net/grinder/test/console/model/Wrapper.java: -------------------------------------------------------------------------------- 1 | package net.grinder.test.console.model; 2 | 3 | /** 4 | * Created by solcyr on 30/01/2018. 5 | */ 6 | class Wrapper { 7 | T value; 8 | 9 | public Wrapper() { 10 | value = null; 11 | } 12 | public Wrapper(T initialValue) { 13 | value = initialValue; 14 | } 15 | 16 | public T getValue() { 17 | return value; 18 | } 19 | 20 | public void setValue(T newValue) { 21 | value = newValue; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /grinder-core/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /cachedir 3 | /target/ 4 | /.* 5 | !/.gitignore 6 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/common/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Common interfaces and utility classes used throughout The Grinder. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/common/processidentity/AgentProcessReport.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2005 - 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.common.processidentity; 23 | 24 | 25 | /** 26 | * Interface for enquiring about an agent process. 27 | * 28 | * @author Philip Aston 29 | */ 30 | public interface AgentProcessReport extends ProcessReport { 31 | 32 | /** 33 | * Return the unique process identity. 34 | * 35 | * @return The process identity. 36 | */ 37 | AgentIdentity getAgentIdentity(); 38 | } 39 | 40 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/common/processidentity/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Interface representing process identity and status. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/communication/CloseCommunicationMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2000, 2001, 2002, 2003, 2004 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | 25 | /** 26 | * Message used to cleanly indicate that a unicast communication 27 | * channel should be terminated. 28 | * 29 | * @author Philip Aston 30 | */ 31 | final class CloseCommunicationMessage implements Message { 32 | private static final long serialVersionUID = -6184308536094181215L; 33 | } 34 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/communication/ConnectionType.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2003 - 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | 25 | /** 26 | * Constants that are used to discriminate between different types of 27 | * connections. 28 | * 29 | * @author Philip Aston 30 | */ 31 | public enum ConnectionType { 32 | 33 | /** Agent connection type. */ 34 | AGENT, 35 | 36 | /** Worker connection type. */ 37 | WORKER, 38 | 39 | /** Console client connection type. */ 40 | CONSOLE_CLIENT, 41 | } 42 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/communication/KeepAliveMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2012 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | 25 | /** 26 | * No-op message used to keep a connection alive. 27 | * 28 | * @author Philip Aston 29 | */ 30 | public final class KeepAliveMessage implements Message { 31 | private static final long serialVersionUID = 1; 32 | } 33 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/communication/Message.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2000, 2001, 2002, 2003 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | import java.io.Serializable; 25 | 26 | 27 | /** 28 | * Marker interface implemented by messages. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public interface Message extends Serializable { 33 | } 34 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/communication/NoResponseMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2006 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | 25 | /** 26 | * Message indicating that that a blocking send was not handled. 27 | * 28 | *

Package scope.

29 | * 30 | * @author Philip Aston 31 | */ 32 | class NoResponseMessage implements Message { 33 | private static final long serialVersionUID = 1; 34 | } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/communication/QueuedSender.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2000 - 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | 25 | /** 26 | * {@code Sender} that queues its messages. 27 | * 28 | * @author Philip Aston 29 | */ 30 | public interface QueuedSender extends Sender { 31 | 32 | /** 33 | * Send any pending messages queued with {@link #send}. 34 | * 35 | * @throws CommunicationException If an error occurs. 36 | */ 37 | void flush() throws CommunicationException; 38 | } 39 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/communication/Sender.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2000 - 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | 25 | /** 26 | * Interface for classes that manage the sending of messages. 27 | * 28 | * @author Philip Aston 29 | */ 30 | public interface Sender { 31 | 32 | /** 33 | * Send the given message. 34 | * 35 | * @param message A {@link Message}. 36 | * @throws CommunicationException If an error occurs. 37 | */ 38 | void send(Message message) throws CommunicationException; 39 | 40 | /** 41 | * Cleanly shut down the Sender. 42 | */ 43 | void shutdown(); 44 | } 45 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/communication/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The Grinder communication subsystem. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/client/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Client API for The Grinder console. 5 | 6 |

The current implementation builds up the standard grinder communications 7 | package, which can run over streams including process input/output streams and 8 | a custom TCP/IP socket protocol layer. The communication package uses Java 9 | Serialization for marshalling. To implement the client API, the communications 10 | package was extended to support a "blocking send" over TCP/IP. (Previously, 11 | only "one-way", asynchronous messaging had been required).

12 | 13 |

I decided that the console API required synchronous interaction since 14 | this provides a more natural API. In the future, I may extend it to include 15 | an asynchronus event channel for pushing data back to "subscribing" clients. 16 |

17 | 18 |

Some notes about the alternatives I rejected: 19 | 20 |

    21 |
  • Hessian not usable - requires a servlet engine.
  • 22 | 23 |
  • Java RMI - possible. 24 |
      25 |
    • Build process would need to invoke rmic.
    • 26 |
    • Bootstrapping issues are painful. Wouldn't want to run separate 27 | registry process. Really don't want to have new ports to contact 28 | the console - configuration more complext, would prevent simple 29 | tunnelling. Extending the grinder comms layer to provide bootstrapping 30 | is at least as work than implementing synchronous messaging ourselves. 31 |
    • 32 |
    33 |
  • 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/common/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Common classes used by the console implementation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Console communication. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/messages/GetNumberOfAgentsMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2007 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.console.communication.server.messages; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message requesting the number of live agents. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public final class GetNumberOfAgentsMessage implements Message { 33 | private static final long serialVersionUID = 1; 34 | } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/messages/ResetRecordingMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2006 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.console.communication.server.messages; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message indicating that the console recording should be reset. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public class ResetRecordingMessage implements Message { 33 | private static final long serialVersionUID = 1; 34 | } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/messages/ResetWorkerProcessesMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2007 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.console.communication.server.messages; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message indicating that all worker processes should be reset. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public class ResetWorkerProcessesMessage implements Message { 33 | private static final long serialVersionUID = 1; 34 | } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/messages/StartRecordingMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2006 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.console.communication.server.messages; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message indicating that the console recording should be started. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public class StartRecordingMessage implements Message { 33 | private static final long serialVersionUID = 1; 34 | } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/messages/StopAgentAndWorkerProcessesMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2007 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.console.communication.server.messages; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message indicating that all agent and worker processes should be stopped. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public class StopAgentAndWorkerProcessesMessage implements Message { 33 | private static final long serialVersionUID = 1; 34 | 35 | /** 36 | * Constructor. 37 | */ 38 | public StopAgentAndWorkerProcessesMessage() { 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/messages/StopRecordingMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2006 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.console.communication.server.messages; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message indicating that the console recording should be stopped. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public class StopRecordingMessage implements Message { 33 | private static final long serialVersionUID = 1; 34 | } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/messages/SuccessMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2006 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.console.communication.server.messages; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message indicating that a command completed successfully. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public class SuccessMessage implements Message { 33 | private static final long serialVersionUID = 1; 34 | } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/messages/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Messages used by the console client. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/communication/server/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Console code that dispatches messages received from console clients. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/distribution/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Code to handle the distribution of files to the agents. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/editor/EditorException.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2004 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.console.editor; 23 | 24 | import net.grinder.console.common.ConsoleException; 25 | 26 | 27 | /** 28 | * Exception that indicates an editor model related problem. 29 | * 30 | * @author Philip Aston. 31 | */ 32 | public class EditorException extends ConsoleException { 33 | EditorException(String message) { 34 | super(message); 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/editor/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The console model of the editor state. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/model/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The console model. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The Grinder console. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/synchronisation/ConsoleBarrierGroups.java: -------------------------------------------------------------------------------- 1 | package net.grinder.console.synchronisation; 2 | 3 | import java.util.Set; 4 | 5 | import net.grinder.console.communication.ConsoleCommunication; 6 | import net.grinder.synchronisation.LocalBarrierGroups; 7 | import net.grinder.synchronisation.BarrierGroup.Listener; 8 | import net.grinder.synchronisation.messages.BarrierIdentity; 9 | import net.grinder.synchronisation.messages.OpenBarrierMessage; 10 | 11 | 12 | /** 13 | * Centralised record of distributed barriers. 14 | * 15 | * @author Philip Aston 16 | */ 17 | final class ConsoleBarrierGroups extends LocalBarrierGroups { 18 | 19 | private final ConsoleCommunication m_communication; 20 | 21 | /** 22 | * Constructor. 23 | * 24 | * @param communication Console communication. 25 | */ 26 | public ConsoleBarrierGroups(ConsoleCommunication communication) { 27 | m_communication = communication; 28 | } 29 | 30 | /** 31 | * {@inheritDoc} 32 | */ 33 | @Override 34 | protected BarrierGroupImplementation createBarrierGroup(final String name) { 35 | final BarrierGroupImplementation group = super.createBarrierGroup(name); 36 | 37 | group.addListener(new Listener() { 38 | public void awaken(Set waiters) { 39 | m_communication.sendToAgents(new OpenBarrierMessage(name, waiters)); 40 | } 41 | }); 42 | 43 | return group; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/synchronisation/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Console support for distributed synchronisation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/console/textui/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Text UI for the console. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/agent/CommandLine.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.agent; 23 | 24 | import java.util.List; 25 | 26 | import net.grinder.util.Directory; 27 | 28 | /** 29 | * Command line arguments. 30 | * 31 | * @author Philip Aston 32 | */ 33 | interface CommandLine { 34 | 35 | /** 36 | * The command line. 37 | */ 38 | List getCommandList(); 39 | 40 | /** 41 | * The working directory to which this command line is relative. 42 | * 43 | * @return The working directory. 44 | */ 45 | Directory getWorkingDirectory(); 46 | } 47 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/agent/WorkerFactory.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2004 - 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.agent; 23 | 24 | import java.io.OutputStream; 25 | 26 | import net.grinder.engine.common.EngineException; 27 | 28 | 29 | /** 30 | * Interface implemented by classes that can start a worker. 31 | * 32 | * @author Philip Aston 33 | */ 34 | interface WorkerFactory { 35 | 36 | Worker create(OutputStream outputStream, OutputStream errorStream) 37 | throws EngineException; 38 | } 39 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/agent/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Agent process implementation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/common/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Common classes used by the Agent and Worker process implementations. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/communication/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Communication classes used by the Agent and Worker process implementations. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/messages/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Messages that can be sent to the worker processes. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The engine consists of the agent and worker processes. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/process/DispatchResultReporter.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2005 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.process; 23 | 24 | import net.grinder.common.Test; 25 | import net.grinder.statistics.StatisticsSet; 26 | 27 | /** 28 | * Something that can report the results of a test dispatch. 29 | * 30 | * @author Philip Aston 31 | */ 32 | interface DispatchResultReporter { 33 | 34 | void report(Test test, long startTime, StatisticsSet statistics); 35 | } 36 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/process/ShutdownException.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2003 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.process; 23 | 24 | import net.grinder.common.UncheckedGrinderException; 25 | 26 | /** 27 | * Exception used to indicate that the process has been shutdown. 28 | * 29 | * @author Philip Aston 30 | */ 31 | final class ShutdownException extends UncheckedGrinderException { 32 | public ShutdownException(String message) { 33 | super(message); 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/process/ThreadContextLocator.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2004 - 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.process; 23 | 24 | 25 | /** 26 | * Locator for an appropriate {@link ThreadContext} implementation. 27 | * 28 | * @author Philip Aston 29 | */ 30 | interface ThreadContextLocator { 31 | 32 | /** 33 | * Return an appropriate ThreadContext for the current 34 | * thread. 35 | * 36 | * @return The ThreadContext, or null if 37 | * no appropriate context could be found. 38 | */ 39 | ThreadContext get(); 40 | } 41 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/process/ThreadStarter.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.process; 23 | 24 | import net.grinder.engine.common.EngineException; 25 | import net.grinder.script.InvalidContextException; 26 | 27 | 28 | /** 29 | * Something that can start threads. 30 | * 31 | * @author Philip Aston 32 | */ 33 | interface ThreadStarter { 34 | int startThread(Object testRunner) 35 | throws EngineException, InvalidContextException; 36 | } 37 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/process/ThreadStopper.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.process; 23 | 24 | 25 | /** 26 | * Something that can stop threads. 27 | * 28 | * @author Philip Aston 29 | */ 30 | interface ThreadStopper { 31 | boolean stopThread(int threadNumber); 32 | } 33 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/process/dcr/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Instrumentation agents based on Dynamic Class Retransformation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/engine/process/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Worker process implementation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/messages/agent/ClearCacheMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2004 - 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.messages.agent; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message that instructs the agent to clear its file cache. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public final class ClearCacheMessage implements Message { 33 | 34 | private static final long serialVersionUID = 6451850661282525463L; 35 | 36 | /** 37 | * Constructor. 38 | */ 39 | public ClearCacheMessage() { 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/messages/agent/ResetGrinderMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2000 - 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.messages.agent; 23 | 24 | import net.grinder.communication.Message; 25 | 26 | 27 | /** 28 | * Message used to reset the Grinder processes. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public final class ResetGrinderMessage implements Message { 33 | private static final long serialVersionUID = 7654366493026824236L; 34 | } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/messages/agent/StopGrinderMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2000 Paco Gomez 2 | // Copyright (C) 2000 - 2008 Philip Aston 3 | // All rights reserved. 4 | // 5 | // This file is part of The Grinder software distribution. Refer to 6 | // the file LICENSE which is part of The Grinder distribution for 7 | // licensing details. The Grinder distribution is available on the 8 | // Internet at http://grinder.sourceforge.net/ 9 | // 10 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 11 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 12 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 13 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 14 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 15 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 16 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 17 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 18 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 19 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 20 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 21 | // OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | package net.grinder.messages.agent; 24 | 25 | import net.grinder.communication.Message; 26 | 27 | 28 | /** 29 | * Message used to stop the Grinder processes. 30 | * 31 | * @author Philip Aston 32 | */ 33 | public final class StopGrinderMessage implements Message { 34 | private static final long serialVersionUID = -8016761595308568610L; 35 | } 36 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/messages/agent/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Messages that can be sent to the agent process. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/messages/console/CacheStatusReport.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.messages.console; 23 | 24 | import net.grinder.messages.agent.CacheHighWaterMark; 25 | 26 | 27 | /** 28 | * Report of the cache status. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public interface CacheStatusReport { 33 | 34 | /** 35 | * Accessor for the cache status. 36 | * 37 | * @return The cache status. 38 | */ 39 | CacheHighWaterMark getCacheHighWaterMark(); 40 | } 41 | 42 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/messages/console/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Messages that can be sent to the console. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Top level package for The Grinder source. Contains all the classes 5 | that have main() entry methods. 6 | 7 | 8 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/plugininterface/PluginThreadListener.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2000 Paco Gomez 2 | // Copyright (C) 2000 - 2007 Philip Aston 3 | // All rights reserved. 4 | // 5 | // This file is part of The Grinder software distribution. Refer to 6 | // the file LICENSE which is part of The Grinder distribution for 7 | // licensing details. The Grinder distribution is available on the 8 | // Internet at http://grinder.sourceforge.net/ 9 | // 10 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 11 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 12 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 13 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 14 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 15 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 16 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 17 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 18 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 19 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 20 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 21 | // OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | package net.grinder.plugininterface; 24 | 25 | import net.grinder.common.ThreadLifeCycleListener; 26 | 27 | 28 | /** 29 | * This interface defines the callbacks that an individual Grinder 30 | * thread can make on a plugin. 31 | * 32 | * @author Philip Aston 33 | */ 34 | public interface PluginThreadListener extends ThreadLifeCycleListener { } 35 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/plugininterface/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Interface that plugins should implement. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/script/CancelledBarrierException.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.script; 23 | 24 | import net.grinder.common.GrinderException; 25 | 26 | 27 | /** 28 | * Exception thrown when attempting to wait on a cancelled barrier. 29 | * 30 | * @author Philip Aston 31 | * @since 3.6 32 | */ 33 | public class CancelledBarrierException extends GrinderException { 34 | /** 35 | * Creates a new {@code CancelledBarrierException} instance. 36 | * 37 | * @param m Exception message. 38 | */ 39 | public CancelledBarrierException(String m) { 40 | super(m); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/script/InternalScriptContext.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.script; 23 | 24 | import net.grinder.script.Grinder.ScriptContext; 25 | 26 | 27 | /** 28 | * Script context that should not be publicly documented. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public interface InternalScriptContext extends ScriptContext { 33 | 34 | /** 35 | * Access to the test registry. 36 | * 37 | * @return The test registry. 38 | */ 39 | TestRegistry getTestRegistry(); 40 | } 41 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/script/NoSuchStatisticException.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2006 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.script; 23 | 24 | import net.grinder.common.GrinderException; 25 | 26 | 27 | /** 28 | * Exception thrown if the requested statistic does not exist. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public class NoSuchStatisticException extends GrinderException { 33 | /** 34 | * Creates a new NoSuchStatisticException instance. 35 | * 36 | * @param s Exception message. 37 | */ 38 | public NoSuchStatisticException(String s) { 39 | super(s); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/script/overview.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

    Classes and interfaces that allow user scripts to obtain services from The Grinder.

    5 |

    6 | New script authors investigating the API are recommended to start 7 | with the following classes, in order: 8 | 9 |

      10 |
    • {@link net.grinder.script.Grinder.ScriptContext}
    • 11 |
    • {@link net.grinder.script.Test}
    • 12 |
    • {@link net.grinder.plugin.http.HTTPRequest}
    • 13 |
    • {@link net.grinder.plugin.http.HTTPPluginControl}
    • 14 |
    • {@link net.grinder.script.Statistics}
    • 15 |
    16 | 17 |

    18 | 19 | 20 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/script/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Interfaces and classes for use by scripts. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/scriptengine/clojure/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Clojure script engine. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/scriptengine/java/JavaScriptEngineService.java: -------------------------------------------------------------------------------- 1 | package net.grinder.scriptengine.java; 2 | 3 | import static java.util.Arrays.asList; 4 | import static java.util.Collections.emptyList; 5 | 6 | import java.util.List; 7 | 8 | import net.grinder.engine.common.EngineException; 9 | import net.grinder.engine.common.ScriptLocation; 10 | import net.grinder.scriptengine.DCRContext; 11 | import net.grinder.scriptengine.Instrumenter; 12 | import net.grinder.scriptengine.ScriptEngineService; 13 | 14 | 15 | /** 16 | * Java {@link ScriptEngineService} implementation. 17 | * 18 | * @author Philip Aston 19 | */ 20 | public final class JavaScriptEngineService implements ScriptEngineService { 21 | 22 | private final DCRContext m_dcrContext; 23 | 24 | /** 25 | * Constructor. 26 | * 27 | * @param dcrContext DCR context. 28 | */ 29 | public JavaScriptEngineService(DCRContext dcrContext) { 30 | m_dcrContext = dcrContext; 31 | } 32 | 33 | /** 34 | * Constructor used when DCR is unavailable. 35 | */ 36 | public JavaScriptEngineService() { 37 | this(null); 38 | } 39 | 40 | /** 41 | * {@inheritDoc} 42 | */ 43 | @Override public List createInstrumenters() 44 | throws EngineException { 45 | 46 | if (m_dcrContext != null) { 47 | return asList(new JavaDCRInstrumenter(m_dcrContext)); 48 | } 49 | 50 | return emptyList(); 51 | } 52 | 53 | /** 54 | * {@inheritDoc} 55 | */ 56 | @Override public ScriptEngine createScriptEngine(ScriptLocation script) 57 | throws EngineException { 58 | return null; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/scriptengine/java/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Java script engine. 5 | 6 |

    This currently provides the Java DCR instrumentation. In the future, it might 7 | dynamically compile and execute .java files.

    8 | 9 | 10 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/scriptengine/jython/instrumentation/dcr/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Jython instrumentation agents based on Dynamic Class Retransformation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/scriptengine/jython/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Jython script engine. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/scriptengine/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Common interface used by the worker process implementation and script engines. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/statistics/StatisticsException.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2005 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.statistics; 23 | 24 | import net.grinder.common.GrinderException; 25 | 26 | 27 | /** 28 | * Base type for exceptions raised by the statistics package. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public abstract class StatisticsException extends GrinderException { 33 | 34 | /** 35 | * Constructor. 36 | * 37 | * @param message Exception message. 38 | */ 39 | public StatisticsException(String message) { 40 | super(message); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/statistics/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The Grinder statistics engine. 5 | 6 |

    Statistics are attributes of the test results that appear in the 7 | console and the data logs.

    8 | 9 |

    This is an internal package. Scripts should use the 10 | the script API ({@link net.grinder.script.Statistics}).

    11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/synchronisation/BarrierGroups.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.synchronisation; 23 | 24 | 25 | /** 26 | * Collection of barrier groups. 27 | * 28 | * @author Philip Aston 29 | */ 30 | public interface BarrierGroups { 31 | 32 | /** 33 | * Obtain a barrier group. 34 | * 35 | * @param name Group name. 36 | * @return The barrier group. 37 | */ 38 | BarrierGroup getGroup(String name); 39 | } 40 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/synchronisation/messages/AddBarrierMessage.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.synchronisation.messages; 23 | 24 | 25 | /** 26 | * Barrier group message requesting that a barrier be added. 27 | * 28 | * @author Philip Aston 29 | */ 30 | public class AddBarrierMessage extends AbstractBarrierGroupMessage { 31 | 32 | private static final long serialVersionUID = 1L; 33 | 34 | /** 35 | * Constructor. 36 | * 37 | * @param name Barrier name. 38 | */ 39 | public AddBarrierMessage(String name) { 40 | super(name); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/synchronisation/messages/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Messages used by distributed implementations of the synchronisation classes. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/synchronisation/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Synchronisation classes. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/util/html/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Simple HTML document model. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/util/logback/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Utility classes for use with the Logback logging framework. 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/util/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Miscellaneous utility classes. 5 | 6 |

    These classes should only depend the 7 | net.grinder.common package.

    8 | 9 | 10 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/util/thread/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Threading utilities. 5 | 6 |

    This package should probably be deprecated in favour of JSR 166 / 7 | 8 | backport-util-concurrent..

    9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/util/weave/j2se6/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Weaving implementation that uses Java 6 dynamic class retransformation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/java/net/grinder/util/weave/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Code to apply instrumentation to test classes using AOP style "weaving". 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-core/src/main/resources/META-INF/net.grinder.scriptengine: -------------------------------------------------------------------------------- 1 | # Script engine implementations. 2 | # 3 | # The order of lines is important; see net.grinder.scriptengine.ScriptEngine. 4 | 5 | net.grinder.scriptengine.jython.JythonScriptEngineService 6 | net.grinder.scriptengine.clojure.ClojureScriptEngineService 7 | net.grinder.scriptengine.java.JavaScriptEngineService 8 | -------------------------------------------------------------------------------- /grinder-core/src/main/resources/logback-worker.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | ${PREFIX}.log 8 | 9 | 10 | %d %-5level %logger{0} %marker: %message%n 11 | 12 | 13 | 14 | ${PREFIX}.log%i 15 | 1 16 | 1 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | ${PREFIX}-data.log 26 | 27 | 28 | 29 | 30 | ${PREFIX}-data.log%i 31 | 1 32 | 1 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/common/resources/build.properties: -------------------------------------------------------------------------------- 1 | version=${project.version} 2 | -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/Console_es.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/Console_es.properties -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/close-file-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/close-file-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/close-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/close-file.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/deselect-properties-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/deselect-properties-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/deselect-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/deselect-properties.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/directory-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/directory-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/directory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/directory.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/distribute-files-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/distribute-files-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/distribute-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/distribute-files.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/files-small.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/files-small.xcf -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/graphs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/graphs.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/grinder-2.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/grinder-2.xcf -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/grinder.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/grinder.xcf -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/icons.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/icons.xcf -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/logo-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/logo-large.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/logo.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/marked-properties-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/marked-properties-small.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/marked-python-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/marked-python-small.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/marked-script-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/marked-script-small.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/new-file-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/new-file-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/new-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/new-file.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/open-file-external-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/open-file-external-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/open-file-external.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/open-file-external.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/open-file-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/open-file-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/open-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/open-file.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/options-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/options-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/options.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/process-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/process-status.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/properties-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/properties-small.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/python-script-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/python-script-small.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/reset-processes-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/reset-processes-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/reset-processes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/reset-processes.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/save-file-as-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/save-file-as-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/save-file-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/save-file-as.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/save-file-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/save-file-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/save-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/save-file.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/save-results-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/save-results-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/save-results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/save-results.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/script-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/script-small.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/script.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/select-properties-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/select-properties-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/select-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/select-properties.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/start-processes-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/start-processes-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/start-processes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/start-processes.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/start-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/start-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/start.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/stop-processes-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/stop-processes-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/stop-processes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/stop-processes.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/stop-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/stop-rollover.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/stop.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/console/common/resources/summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-core/src/main/resources/net/grinder/console/common/resources/summary.png -------------------------------------------------------------------------------- /grinder-core/src/main/resources/net/grinder/engine/agent/resources/FileStoreReadme.txt: -------------------------------------------------------------------------------- 1 | This file is in the Agent file store directory for The Grinder. The 2 | directory stores local copies of files received from the console. 3 | 4 | Deleting files from this directory will only affect The Grinder. Note, 5 | this README.txt file is used to identify file cache directories. 6 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/grinder/test/Adder.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2010 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package grinder.test; 23 | 24 | // Package scope. 25 | interface Adder { 26 | 27 | int addOne(int i); 28 | } 29 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/grinder/test/MyExtendedClass.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2009 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package grinder.test; 23 | 24 | /** 25 | * Test class used by 26 | * {@link net.grinder.scriptengine.jython.instrumentation.AbstractJythonInstrumenterTestCase}. 27 | * 28 | *

    29 | * Needs to be outside of the {@code net.grinder} package so it can be 30 | * instrumented. 31 | *

    32 | */ 33 | public class MyExtendedClass extends MyClass { 34 | 35 | public static MyClass create() { 36 | return new MyExtendedClass(); 37 | } 38 | 39 | public int addOne(int i) { 40 | return i + 2; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/communication/SendToEveryoneAddress.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | 25 | /** 26 | * Stub implementation of {@link Address}. 27 | * 28 | * @author Philip Aston 29 | */ 30 | public final class SendToEveryoneAddress implements Address { 31 | public boolean includes(Address address) { 32 | return true; 33 | } 34 | } -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/communication/TestInternalMessages.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2004 - 2009 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.communication; 23 | 24 | import junit.framework.TestCase; 25 | import net.grinder.testutility.Serializer; 26 | 27 | 28 | /** 29 | * Unit test case for application messages. 30 | * 31 | * @author Philip Aston 32 | */ 33 | public class TestInternalMessages extends TestCase { 34 | 35 | public void testCloseCommunicationMessage() throws Exception { 36 | Serializer.serialize(new CloseCommunicationMessage()); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/engine/agent/StubAgentIdentity.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2005 - 2008 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.agent; 23 | 24 | 25 | 26 | /** 27 | * An AgentIdentityImplementation that is public so unit tests from other 28 | * packages can use it. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public final class StubAgentIdentity extends AgentIdentityImplementation { 33 | 34 | public StubAgentIdentity(String name) { 35 | super(name); 36 | } 37 | 38 | public WorkerIdentityImplementation createWorkerIdentity() { 39 | return super.createWorkerIdentity(); 40 | } 41 | } -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/engine/process/ExternalLoggerScopeTunnel.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.process; 23 | 24 | import org.slf4j.Logger; 25 | 26 | 27 | /** 28 | * Allow unit tests in other packages to create an ExternalLogger. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public class ExternalLoggerScopeTunnel { 33 | 34 | public static Logger getExternalLogger(Logger processLogger) { 35 | final StubThreadContextLocator threadContextLocator = 36 | new StubThreadContextLocator(); 37 | 38 | return new ExternalLogger(processLogger, threadContextLocator); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/engine/process/dcr/AnotherClass.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2009 - 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.process.dcr; 23 | 24 | 25 | /** 26 | * Test class for {@link TestJavaDCRInstrumenter}. 27 | * 28 | * @author Philip Aston 29 | */ 30 | public class AnotherClass { 31 | public static int getOne() { 32 | return 1; 33 | } 34 | 35 | public int getTwo() { 36 | return 2; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/engine/process/dcr/RecorderLocatorAccess.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.engine.process.dcr; 23 | 24 | import net.grinder.engine.process.dcr.RecorderLocator; 25 | 26 | 27 | /** 28 | * Scope tunnel. 29 | */ 30 | public final class RecorderLocatorAccess { 31 | 32 | public static void clearRecorders() { 33 | RecorderLocator.clearRecorders(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/statistics/testdata: -------------------------------------------------------------------------------- 1 | A B A plus B A divided by 2 | B 3 | Test 3 1 2 3 0.50 "Test 3" 4 | Test 9 0 1 1 0.00 "Test 9" 5 | Test 113 2 3 5 0.67 "Another test" 6 | 7 | Totals 3 6 9 0.50 8 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/util/AnIsolatedClass.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2005 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.util; 23 | 24 | public class AnIsolatedClass { 25 | 26 | } 27 | -------------------------------------------------------------------------------- /grinder-core/src/test/java/net/grinder/util/TestUnexpectedIOException.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2012 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.util; 23 | 24 | import static org.junit.Assert.assertSame; 25 | 26 | import java.io.IOException; 27 | 28 | import org.junit.Test; 29 | 30 | /** 31 | * Unit tests for {@link UnexpectedIOException}. 32 | * 33 | * @author Philip Aston 34 | */ 35 | public class TestUnexpectedIOException { 36 | 37 | @Test 38 | public void testConstruction() { 39 | final IOException cause = new IOException(); 40 | 41 | assertSame(cause, 42 | new UnexpectedIOException(cause).getCause()); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /grinder-core/src/test/resources/TestResources.properties: -------------------------------------------------------------------------------- 1 | # Used by TestResources.java 2 | 3 | resourceFile=file2 4 | 5 | -------------------------------------------------------------------------------- /grinder-core/src/test/resources/net/grinder/console/common/TestDisplayMessageConsoleException.properties: -------------------------------------------------------------------------------- 1 | # Used by TestDisplayMessageConsoleException.java 2 | 3 | helloworld=Hello world 4 | 5 | sum={0} plus {1} is {2} 6 | numberOfFiles=There {0,choice,0#are no files|1#is one file|1 2 | 3 | 4 | Java agent that provides access to the JRE's instrumentation facilities. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-http/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /cachedir 3 | /target/ 4 | /.* 5 | !/.gitignore 6 | -------------------------------------------------------------------------------- /grinder-http/src/main/java/net/grinder/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Top level package for The Grinder source. Contains all the classes 5 | that have main() entry methods. 6 | 7 | 8 | -------------------------------------------------------------------------------- /grinder-http/src/main/java/net/grinder/plugin/http/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HTTP plug-in that provides a pool of connections per worker thread. 5 | 6 |

    See the documentation for more information.

    7 | 8 | 9 | -------------------------------------------------------------------------------- /grinder-http/src/main/java/net/grinder/plugin/http/tcpproxyfilter/ConnectionHandlerFactory.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2006 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.plugin.http.tcpproxyfilter; 23 | 24 | import net.grinder.tools.tcpproxy.ConnectionDetails; 25 | 26 | 27 | /** 28 | * Factory for {@link ConnectionHandler}s. 29 | * 30 | * @author Philip Aston 31 | */ 32 | public interface ConnectionHandlerFactory { 33 | 34 | /** 35 | * Factory method. 36 | * 37 | * @param connectionDetails Connection details. 38 | * @return A new ConnectionHandler. 39 | */ 40 | ConnectionHandler create(ConnectionDetails connectionDetails); 41 | } 42 | -------------------------------------------------------------------------------- /grinder-http/src/main/java/net/grinder/plugin/http/tcpproxyfilter/IntGenerator.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2005 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.plugin.http.tcpproxyfilter; 23 | 24 | 25 | /** 26 | * Simple ID generator. 27 | * 28 | * @author Philip Aston 29 | */ 30 | final class IntGenerator { 31 | private int m_value = -1; 32 | 33 | public synchronized int next() { 34 | return ++m_value; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /grinder-http/src/main/java/net/grinder/plugin/http/tcpproxyfilter/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | TCPProxy filters for the HTTP plug in. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-http/src/main/java/net/grinder/tools/tcpproxy/TCPProxyEngine.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2000 Phil Dawes 2 | // Copyright (C) 2000, 2001, 2002, 2003 Philip Aston 3 | // Copyright (C) 2003 Bertrand Ave 4 | // All rights reserved. 5 | // 6 | // This file is part of The Grinder software distribution. Refer to 7 | // the file LICENSE which is part of The Grinder distribution for 8 | // licensing details. The Grinder distribution is available on the 9 | // Internet at http://grinder.sourceforge.net/ 10 | // 11 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 12 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 13 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 14 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 15 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 16 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 17 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 18 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 19 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 20 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 21 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 22 | // OF THE POSSIBILITY OF SUCH DAMAGE. 23 | 24 | package net.grinder.tools.tcpproxy; 25 | 26 | /** 27 | * Interface for TCPProxy engines. 28 | * 29 | * @author Philip Aston 30 | * @author Bertrand Ave 31 | */ 32 | public interface TCPProxyEngine extends Runnable { 33 | 34 | // void run(); 35 | 36 | /** 37 | * Stop the engine. 38 | */ 39 | void stop(); 40 | } 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /grinder-http/src/main/java/net/grinder/tools/tcpproxy/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | TCPProxy implementation. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-http/src/main/java/net/grinder/util/http/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Utility classes for the HTTP plugin. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-http/src/main/resources/net/grinder/plugin/http/tcpproxyfilter/resources/httpToXML.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /grinder-http/src/main/resources/net/grinder/tools/tcpproxy/resources/default.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-http/src/main/resources/net/grinder/tools/tcpproxy/resources/default.keystore -------------------------------------------------------------------------------- /grinder-http/src/test/resources/net/grinder/plugin/http/data/goodGET1: -------------------------------------------------------------------------------- 1 | GET /over/it HTTP/1.1 2 | Host: localhost 3 | 4 | 5 | -------------------------------------------------------------------------------- /grinder-http/src/test/resources/net/grinder/plugin/http/data/goodGET2: -------------------------------------------------------------------------------- 1 | GET /out.of/here?query HTTP/1.1 2 | Host: somewhere 3 | 4 | 5 | -------------------------------------------------------------------------------- /grinder-http/src/test/resources/net/grinder/plugin/http/data/goodPOST1: -------------------------------------------------------------------------------- 1 | POST /somewhere/over/the/rainbow HTTP/1.1 2 | Content-Type: text/plain 3 | Host: localhost 4 | 5 | Blah blah blah 6 | Blah Blah Blah 7 | -------------------------------------------------------------------------------- /grinder-http/src/test/resources/net/grinder/plugin/http/tcpproxyfilter/resources/identity.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /grinder-httpclient/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /.classpath 3 | /.project 4 | /.settings 5 | -------------------------------------------------------------------------------- /grinder-httpclient/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 4.0.0 6 | grinder-httpclient 7 | jar 8 | ${project.artifactId} 9 | Modified version of HTTPClient used by The Grinder. The original 10 | can be found at http://www.innovation.ch/java/HTTPClient/. 11 | 12 | 13 | io.github.cossme 14 | grinder-parent 15 | 4.0.2-SNAPSHOT 16 | 17 | 18 | 19 | 20 | LGPL 21 | http://grinder.sourceforge.net/license.html#LGPL 22 | 23 | 24 | 25 | 26 | 27 | 28 | maven-compiler-plugin 29 | 30 | false 31 | false 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /grinder-httpclient/src/main/java/HTTPClient/package.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-httpclient/src/main/java/HTTPClient/package.html -------------------------------------------------------------------------------- /grinder-swing-console/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /cachedir 3 | /target/ 4 | /.* 5 | !/.gitignore 6 | -------------------------------------------------------------------------------- /grinder-swing-console/src/main/java/net/grinder/console/swingui/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Swing implementation of the console. 5 | 6 | 7 | -------------------------------------------------------------------------------- /grinder-swing-console/src/main/resources/META-INF/net.grinder.console: -------------------------------------------------------------------------------- 1 | net.grinder.console.swingui.ConsoleUI 2 | -------------------------------------------------------------------------------- /grinder-test-support/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /cachedir 3 | /target/ 4 | /.* 5 | !/.gitignore 6 | -------------------------------------------------------------------------------- /grinder-test-support/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 4.0.0 6 | grinder-test-support 7 | jar 8 | ${project.artifactId} 9 | http://grinder.sourceforge.net 10 | Common test classes used by The Grinder unit tests. 11 | 12 | 13 | io.github.cossme 14 | grinder-parent 15 | 4.0.2-SNAPSHOT 16 | 17 | 18 | 19 | 20 | ${project.groupId} 21 | grinder-dcr-agent 22 | 4.0.2-SNAPSHOT 23 | provided 24 | 25 | 26 | 27 | 28 | junit 29 | junit 30 | compile 31 | 4.13.1 32 | 33 | 34 | 35 | org.mockito 36 | mockito-all 37 | compile 38 | 39 | 40 | 41 | 42 | 43 | 44 | maven-compiler-plugin 45 | 46 | true 47 | true 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /grinder-test-support/src/main/java/net/grinder/testutility/SocketUtilities.java: -------------------------------------------------------------------------------- 1 | // Copyright (C) 2011 Philip Aston 2 | // All rights reserved. 3 | // 4 | // This file is part of The Grinder software distribution. Refer to 5 | // the file LICENSE which is part of The Grinder distribution for 6 | // licensing details. The Grinder distribution is available on the 7 | // Internet at http://grinder.sourceforge.net/ 8 | // 9 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 10 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 11 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 12 | // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 13 | // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 14 | // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 15 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 16 | // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 17 | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 18 | // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 20 | // OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | package net.grinder.testutility; 23 | 24 | import java.io.IOException; 25 | import java.net.ServerSocket; 26 | 27 | 28 | /** 29 | * Socket utilities for unit tests. 30 | * 31 | * @author Philip Aston 32 | */ 33 | public class SocketUtilities { 34 | 35 | public static int findFreePort() throws IOException { 36 | final ServerSocket socket = new ServerSocket(0); 37 | final int port = socket.getLocalPort(); 38 | socket.close(); 39 | 40 | return port; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /grinder-test-support/src/main/resources/net/grinder/testutility/resources/SimpleObject.clazz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-test-support/src/main/resources/net/grinder/testutility/resources/SimpleObject.clazz -------------------------------------------------------------------------------- /grinder-web-console/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /cachedir 3 | /target/ 4 | /.* 5 | !/.gitignore 6 | -------------------------------------------------------------------------------- /grinder-web-console/src/main/java/net/grinder/console/webui/ServletConfig.java: -------------------------------------------------------------------------------- 1 | package net.grinder.console.webui; 2 | 3 | 4 | import net.grinder.common.GrinderProperties; 5 | import net.grinder.console.ConsoleFoundation; 6 | import net.grinder.console.model.ConsoleProperties; 7 | import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; 8 | import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.context.annotation.Configuration; 11 | 12 | @Configuration 13 | public class ServletConfig { 14 | 15 | @Bean 16 | public EmbeddedServletContainerCustomizer containerCustomizer() { 17 | 18 | return new EmbeddedServletContainerCustomizer() { 19 | public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) { 20 | configurableEmbeddedServletContainer.setPort( 21 | ConsoleFoundation.PROPERTIES.getHttpPort()); 22 | } 23 | }; 24 | } 25 | } -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | # HTTP encoding (HttpEncodingProperties) 2 | spring.http.encoding.enabled=false 3 | spring.http.encoding.force=false -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/agent_grinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/agent_grinder.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/back.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/delete.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/download.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/file.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/folder.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/grinder-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/grinder-logo.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/logo.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/nav-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/nav-bg.gif -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/ori_select-properties-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/ori_select-properties-rollover.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/refresh.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/reset_grinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/reset_grinder.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/select-properties-rollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/select-properties-rollover.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/setPath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/setPath.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/start_grinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/start_grinder.png -------------------------------------------------------------------------------- /grinder-web-console/src/main/resources/static/img/stop_grinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder-web-console/src/main/resources/static/img/stop_grinder.png -------------------------------------------------------------------------------- /grinder-xmlbeans/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /.classpath 3 | /.project 4 | /.settings 5 | -------------------------------------------------------------------------------- /grinder-xmlbeans/src/main/xsdconfig/tcpproxy-http.xsdconfig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | net.grinder.plugin.http.xml 6 | 7 | -------------------------------------------------------------------------------- /grinder/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /cachedir 3 | /target/ 4 | /.* 5 | !/.gitignore 6 | -------------------------------------------------------------------------------- /grinder/contrib/mq/AUTHORS: -------------------------------------------------------------------------------- 1 | Phillip Mayhew -------------------------------------------------------------------------------- /grinder/contrib/mq/README: -------------------------------------------------------------------------------- 1 | Package Name Included 2 | -------------------------------------------------- 3 | org.rextency.mq Yes 4 | com.ibm.mqbind.jar No 5 | connector.jar No 6 | com.ibm.mq.jar No 7 | 8 | Intro: 9 | This is a library to help add MQ message sending functionality to The Grinder. 10 | The whole idea behind this was to make it easy to implement load testing with MQ messages. While 11 | org.rextency.mq library makes almost every MQ parameter adjustable, not all are. 12 | If you need to extend the functionality of the library, the source code has been included. If you 13 | make any changes and would like to have the changes submitted as part of the package please contact 14 | me with the changes you have made. Also, if there are any bugs you find in the implementation please 15 | contact me. 16 | 17 | Required Files: 18 | The three JAR files not included, are IBM jar files. If you have WebSphere MQ installed, then these JAR 19 | files by default are located in: x:\Program Files\IBM\WebSphere MQ\Java\lib on a Windows machine. 20 | 21 | Usage: 22 | Simply add ALL FOUR JAR files to your Grinder agent classpath and everything should be smooth sailing. 23 | I've also included a sample script to help get you started. 24 | 25 | Contact: 26 | Phillip Mayhew 27 | rextencygr@gmail.com -------------------------------------------------------------------------------- /grinder/contrib/mq/mq.py: -------------------------------------------------------------------------------- 1 | # A simple example using the MQ plugin that sends a mq message 2 | # and gets a response 3 | # 4 | # 5 | 6 | from net.grinder.script.Grinder import grinder 7 | from net.grinder.script import Test 8 | from com.ibm.mq import * 9 | from org.rextency.mq import MQMsg 10 | from org.rextency.mq import MQConnector 11 | 12 | mqTest = Test(1,"MQSend Test") 13 | mqex = mqTest.wrap(MQConnector()) 14 | mqmessage1 = MQMsg() 15 | log = grinder.logger.output 16 | 17 | class TestRunner: 18 | def __call__(self): 19 | mqmessage1.setReplyQueue("REPLYQ") 20 | mqmessage1.setReplyToQueue("REPLYQ") 21 | mqmessage1.setRequestQueue("REQUEST_Q") 22 | mqmessage1.setQueueManager("QueueManager") 23 | mqmessage1.setReplyToQueueManager("ReplyToQueueManager") 24 | mqmessage1.setMessage("MyMessage MyData 010101") 25 | mqex.init("myserver.com", "9050", "CHANNEL1", mqmessage1) 26 | mqex.SendMessage(mqmessage1) 27 | log(">>>") 28 | log(mqex.GetMessage(mqmessage1)) 29 | log(">>>") 30 | mqex.finish() 31 | 32 | -------------------------------------------------------------------------------- /grinder/contrib/mq/org.rextency.mq.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder/contrib/mq/org.rextency.mq.jar -------------------------------------------------------------------------------- /grinder/docs/.gitignore: -------------------------------------------------------------------------------- 1 | javadoc 2 | -------------------------------------------------------------------------------- /grinder/examples/console.py: -------------------------------------------------------------------------------- 1 | # Test script which generates some random data for testing the 2 | # console. 3 | 4 | from net.grinder.script.Grinder import grinder 5 | from net.grinder.script import Test 6 | from java.util import Random 7 | from java.lang import Math 8 | 9 | r = Random() 10 | 11 | class Tester: 12 | def __init__(self, i): 13 | self.i = i 14 | 15 | def __call__(self): 16 | t = 500 + r.nextGaussian() * self.i * 10 17 | grinder.sleep(int(t), 0) 18 | 19 | def createTester(i): 20 | result = Tester(i) 21 | Test(i, "Test %s" % i).record(result) 22 | return result 23 | 24 | testers = [ createTester(i) for i in range(0, 10) ] 25 | 26 | class TestRunner: 27 | def __call__(self): 28 | statistics = grinder.statistics 29 | 30 | # statistics.delayReports = 1 31 | 32 | for tester in testers: 33 | tester() 34 | 35 | 36 | -------------------------------------------------------------------------------- /grinder/examples/digestauthentication.py: -------------------------------------------------------------------------------- 1 | # HTTP digest authentication 2 | # 3 | # Basically delegates to HTTPClient's support for digest 4 | # authentication. 5 | # 6 | # Copyright (C) 2008 Matt Moran 7 | # Copyright (C) 2008 Philip Aston 8 | # Distributed under the terms of The Grinder license. 9 | 10 | from net.grinder.plugin.http import HTTPPluginControl 11 | from HTTPClient import AuthorizationInfo 12 | 13 | # Enable HTTPClient's authorisation module. 14 | HTTPPluginControl.getConnectionDefaults().useAuthorizationModule = 1 15 | 16 | test1 = Test(1, "Request resource") 17 | request1 = HTTPRequest() 18 | test1.record(request1) 19 | 20 | class TestRunner: 21 | def __call__(self): 22 | threadContextObject = HTTPPluginControl.getThreadHTTPClientContext() 23 | 24 | # Set the authorisation details for this worker thread. 25 | AuthorizationInfo.addDigestAuthorization( 26 | "www.my.com", 80, "myrealm", "myuserid", "mypw", threadContextObject) 27 | 28 | result = request1.GET('http://www.my.com/resource') 29 | -------------------------------------------------------------------------------- /grinder/examples/form.py: -------------------------------------------------------------------------------- 1 | # HTTP multipart form submission 2 | # 3 | # This script uses the HTTPClient.Codecs class to post itself to the 4 | # server as a multi-part form. Thanks to Marc Gemis. 5 | 6 | from net.grinder.script.Grinder import grinder 7 | from net.grinder.script import Test 8 | from net.grinder.plugin.http import HTTPRequest 9 | from HTTPClient import Codecs, NVPair 10 | from jarray import zeros 11 | 12 | test1 = Test(1, "Upload Image") 13 | request1 = HTTPRequest(url="http://localhost:7001/") 14 | test1.record(request1) 15 | 16 | class TestRunner: 17 | def __call__(self): 18 | 19 | files = ( NVPair("self", "form.py"), ) 20 | parameters = ( NVPair("run number", str(grinder.runNumber)), ) 21 | 22 | # This is the Jython way of creating an NVPair[] Java array 23 | # with one element. 24 | headers = zeros(1, NVPair) 25 | 26 | # Create a multi-part form encoded byte array. 27 | data = Codecs.mpFormDataEncode(parameters, files, headers) 28 | grinder.logger.output("Content type set to %s" % headers[0].value) 29 | 30 | # Call the version of POST that takes a byte array. 31 | result = request1.POST("/upload", data, headers) 32 | -------------------------------------------------------------------------------- /grinder/examples/helloworld.clj: -------------------------------------------------------------------------------- 1 | ;; Hello World in Clojure 2 | ;; 3 | ;; A simple Clojure script. 4 | (let [grinder net.grinder.script.Grinder/grinder] 5 | 6 | ; The script returns a factory function, called once by each worker 7 | ; thread. 8 | (fn [] 9 | 10 | ; The factory function returns test runner function. 11 | (fn [] 12 | (do 13 | (.. grinder (getLogger) (info "Hello World")))))) 14 | -------------------------------------------------------------------------------- /grinder/examples/helloworld.py: -------------------------------------------------------------------------------- 1 | # Hello World 2 | # 3 | # A minimal script that tests The Grinder logging facility. 4 | # 5 | # This script shows the recommended style for scripts, with a 6 | # TestRunner class. The script is executed just once by each worker 7 | # process and defines the TestRunner class. The Grinder creates an 8 | # instance of TestRunner for each worker thread, and repeatedly calls 9 | # the instance for each run of that thread. 10 | 11 | from net.grinder.script.Grinder import grinder 12 | from net.grinder.script import Test 13 | 14 | # A shorter alias for the grinder.logger.info() method. 15 | log = grinder.logger.info 16 | 17 | # Create a Test with a test number and a description. The test will be 18 | # automatically registered with The Grinder console if you are using 19 | # it. 20 | test1 = Test(1, "Log method") 21 | 22 | # Instrument the info() method with our Test. 23 | test1.record(log) 24 | 25 | # A TestRunner instance is created for each thread. It can be used to 26 | # store thread-specific data. 27 | class TestRunner: 28 | 29 | # This method is called for every run. 30 | def __call__(self): 31 | test1("Hello World") 32 | -------------------------------------------------------------------------------- /grinder/examples/helloworldfunctions.py: -------------------------------------------------------------------------------- 1 | # Hello World, with functions 2 | # 3 | # The Hello World example re-written using functions. 4 | # 5 | # In previous examples we've defined TestRunner as a class; calling 6 | # the class creates an instance and calling that instance invokes its 7 | # __call__ method. This script is for the Luddites amongst you and 8 | # shows how The Grinder engine is quite happy as long as the script 9 | # creates a callable thing called TestRunner that can be called to 10 | # create another callable thing. 11 | 12 | from net.grinder.script.Grinder import grinder 13 | from net.grinder.script import Test 14 | 15 | test1 = Test(1, "Log method") 16 | test1.record(grinder.logger.info) 17 | 18 | def doRun(): 19 | grinder.logger.info("Hello World") 20 | 21 | def TestRunner(): 22 | return doRun 23 | -------------------------------------------------------------------------------- /grinder/examples/http.py: -------------------------------------------------------------------------------- 1 | # Simple HTTP example 2 | # 3 | # A simple example using the HTTP plugin that shows the retrieval of a 4 | # single page via HTTP. The resulting page is written to a file. 5 | # 6 | # More complex HTTP scripts are best created with the TCPProxy. 7 | 8 | from net.grinder.script.Grinder import grinder 9 | from net.grinder.script import Test 10 | from net.grinder.plugin.http import HTTPRequest 11 | 12 | test1 = Test(1, "Request resource") 13 | request1 = HTTPRequest() 14 | test1.record(request1) 15 | 16 | class TestRunner: 17 | def __call__(self): 18 | result = request1.GET("http://localhost:7001/") 19 | 20 | # result is a HTTPClient.HTTPResult. We get the message body 21 | # using the getText() method. 22 | writeToFile(result.text) 23 | 24 | # Utility method that writes the given string to a uniquely named file. 25 | def writeToFile(text): 26 | filename = "%s-page-%d.html" % (grinder.processName, grinder.runNumber) 27 | 28 | file = open(filename, "w") 29 | print >> file, text 30 | file.close() 31 | -------------------------------------------------------------------------------- /grinder/examples/httpunit.py: -------------------------------------------------------------------------------- 1 | # Using The Grinder with other test frameworks 2 | # 3 | # Example showing how The Grinder can be used with HTTPUnit. 4 | # 5 | # Copyright (C) 2003, 2004 Tony Lodge 6 | # Copyright (C) 2004 Philip Aston 7 | # Distributed under the terms of The Grinder license. 8 | 9 | from net.grinder.script.Grinder import grinder 10 | from net.grinder.script import Test 11 | 12 | from com.zaplet.test.frontend.http import HttpTest 13 | 14 | # These correspond to method names on the test class. 15 | testNames = [ "testRedirect", 16 | "testRefresh", 17 | "testNegativeLogin", 18 | "testLogin", 19 | "testPortal", 20 | "testHeader", 21 | "testAuthoringLink", 22 | "testTemplateDesign", 23 | "testSearch", 24 | "testPreferences", 25 | "testAboutZaplet", 26 | "testHelp", 27 | "testLogoutLink", 28 | "testNavigationFrame", 29 | "testBlankFrame", 30 | "testContentFrame", 31 | "testLogout", ] 32 | 33 | tests=[] 34 | 35 | for name, i in zip(testNames, range(len(testNames))): 36 | t = HttpTest(name) 37 | Test(i, name).record(t) 38 | tests.append(t) 39 | 40 | # A TestRunner instance is created for each thread. It can be used to 41 | # store thread-specific data. 42 | class TestRunner: 43 | def __call__(self): 44 | for t in tests: 45 | result = t.run() 46 | 47 | -------------------------------------------------------------------------------- /grinder/examples/jaxrpc.py: -------------------------------------------------------------------------------- 1 | # JAX-RPC Web Service 2 | # 3 | # Exercise a basic Web Service from the BEA WebLogic Server 7.0 4 | # examples. 5 | # 6 | # Before running this example you will need to add the generated 7 | # JAX-RPC client classes and webserviceclient.jar to your CLASSPATH. 8 | 9 | from net.grinder.script.Grinder import grinder 10 | from net.grinder.script import Test 11 | from examples.webservices.basic.javaclass import HelloWorld_Impl 12 | from java.lang import System 13 | 14 | System.setProperty( "javax.xml.rpc.ServiceFactory", 15 | "weblogic.webservice.core.rpc.ServiceFactoryImpl") 16 | 17 | webService = HelloWorld_Impl("http://localhost:7001/basic_javaclass/HelloWorld?WSDL") 18 | 19 | port = webService.getHelloWorldPort() 20 | Test(1, "JAXP Port test").record(port) 21 | 22 | class TestRunner: 23 | def __call__(self): 24 | result = port.sayHello(grinder.threadNumber, grinder.grinderID) 25 | grinder.logger.info("Got '%s'" % result) 26 | -------------------------------------------------------------------------------- /grinder/examples/parallel.py: -------------------------------------------------------------------------------- 1 | # Run test scripts in parallel 2 | # 3 | # Run TestScript1 in 50% of threads, TestScript2 in 25% of threads, 4 | # and TestScript3 in 25% of threads. 5 | 6 | from net.grinder.script.Grinder import grinder 7 | 8 | scripts = ["TestScript1", "TestScript2", "TestScript3"] 9 | 10 | # Ensure modules are initialised in the process thread. 11 | for script in scripts: exec("import %s" % script) 12 | 13 | def createTestRunner(script): 14 | exec("x = %s.TestRunner()" % script) 15 | return x 16 | 17 | class TestRunner: 18 | def __init__(self): 19 | tid = grinder.threadNumber 20 | 21 | if tid % 4 == 2: 22 | self.testRunner = createTestRunner(scripts[1]) 23 | elif tid % 4 == 3: 24 | self.testRunner = createTestRunner(scripts[2]) 25 | else: 26 | self.testRunner = createTestRunner(scripts[0]) 27 | 28 | # This method is called for every run. 29 | def __call__(self): 30 | self.testRunner() -------------------------------------------------------------------------------- /grinder/examples/proportion.py: -------------------------------------------------------------------------------- 1 | # Run TestScript1 in 50% of threads, TestScript2 in 25% of threads, 2 | # and TestScript3 in 25% of threads. 3 | 4 | from net.grinder.script.Grinder import grinder 5 | 6 | scripts = ["TestScript1", "TestScript2", "TestScript3"] 7 | 8 | # Ensure modules are initialised in the process thread. 9 | for script in scripts: exec("import %s" % script) 10 | 11 | def createTestRunner(script): 12 | exec("x = %s.TestRunner()" % script) 13 | return x 14 | 15 | class TestRunner: 16 | def __init__(self): 17 | tid = grinder.threadNumber 18 | 19 | if tid % 4 == 2: 20 | self.testRunner = createTestRunner(scripts[1]) 21 | elif tid % 4 == 3: 22 | self.testRunner = createTestRunner(scripts[2]) 23 | else: 24 | self.testRunner = createTestRunner(scripts[0]) 25 | 26 | # This method is called for every run. 27 | def __call__(self): 28 | self.testRunner() 29 | -------------------------------------------------------------------------------- /grinder/examples/scenario.py: -------------------------------------------------------------------------------- 1 | # Recording many HTTP interactions as one test 2 | # 3 | # This example shows how many HTTP interactions can be grouped as a 4 | # single test by wrapping them in a function. 5 | 6 | from net.grinder.script.Grinder import grinder 7 | from net.grinder.script import Test 8 | from net.grinder.plugin.http import HTTPRequest 9 | from HTTPClient import NVPair 10 | 11 | # We declare a default URL for the HTTPRequest. 12 | request = HTTPRequest(url = "http://localhost:7001") 13 | 14 | def page1(): 15 | request.GET('/console') 16 | request.GET('/console/login/LoginForm.jsp') 17 | request.GET('/console/login/bea_logo.gif') 18 | 19 | Test(1, "First page").record(page1) 20 | 21 | class TestRunner: 22 | def __call__(self): 23 | page1() 24 | -------------------------------------------------------------------------------- /grinder/examples/sequence.py: -------------------------------------------------------------------------------- 1 | # Run test scripts in sequence 2 | # 3 | # Scripts are defined in Python modules (helloworld.py, goodbye.py) 4 | # specified in grinder.properties: 5 | # 6 | # script1=helloworld 7 | # script2=goodbye 8 | 9 | from net.grinder.script.Grinder import grinder 10 | 11 | from java.util import TreeMap 12 | 13 | # TreeMap is the simplest way to sort a Java map. 14 | scripts = TreeMap(grinder.properties.getPropertySubset("script")) 15 | 16 | # Ensure modules are initialised in the process thread. 17 | for module in scripts.values(): exec("import %s" % module) 18 | 19 | def createTestRunner(module): 20 | exec("x = %s.TestRunner()" % module) 21 | return x 22 | 23 | class TestRunner: 24 | def __init__(self): 25 | self.testRunners = [createTestRunner(m) for m in scripts.values()] 26 | 27 | # This method is called for every run. 28 | def __call__(self): 29 | for testRunner in self.testRunners: testRunner() 30 | -------------------------------------------------------------------------------- /grinder/examples/slowClient.py: -------------------------------------------------------------------------------- 1 | 2 | from net.grinder.script import Test 3 | from net.grinder.script.Grinder import grinder 4 | from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest 5 | from HTTPClient import NVPair 6 | 7 | requests = {} 8 | 9 | rates = (-1, 10000000, 1000000, 100000, 56000, 9600, 2400) 10 | 11 | i = 0 12 | 13 | for baud in rates: 14 | requests[baud] = HTTPRequest 15 | Test(i, "%d baud" % baud).record(requests[baud]) 16 | i = i + 1 17 | 18 | 19 | url = "http://slashdot.org/" 20 | 21 | grinder.statistics.registerDataLogExpression("BPS", "(* 8000 (/ httpplugin.responseLength (+ (sum timedTests) (* -1 httpplugin.firstByteTime))))") 22 | grinder.statistics.registerSummaryExpression("BPS", "(* 8000 (/ httpplugin.responseLength (+ (sum timedTests) (* -1 httpplugin.firstByteTime))))") 23 | 24 | class TestRunner: 25 | def __call__(self): 26 | 27 | c = HTTPPluginControl.getThreadConnection(url) 28 | 29 | for baud in rates: 30 | c.setBandwidthLimit(baud) 31 | requests[baud].GET(url) 32 | 33 | -------------------------------------------------------------------------------- /grinder/examples/sync.py: -------------------------------------------------------------------------------- 1 | from net.grinder.script.Grinder import grinder 2 | 3 | # You need to install Jython to access the threading package. See 4 | # http://grinder.sourceforge.net/faq.html#jython-libraries 5 | from threading import Condition 6 | 7 | 8 | # Global lock 9 | c = Condition() 10 | 11 | waiting = 0 12 | checkpointReachedForRun = -1 13 | numberOfThreads = int(grinder.properties["grinder.threads"]) 14 | 15 | 16 | class TestRunner: 17 | 18 | # This method is called for every run. 19 | def __call__(self): 20 | # Declare the global variables that we update. 21 | global checkpointReachedForRun, waiting 22 | 23 | # Locking ensures only a single thread can be active (not 24 | # waiting) in the section between the acquire() and the 25 | # release(). 26 | c.acquire() 27 | waiting += 1 28 | 29 | if waiting == numberOfThreads: 30 | # We're the last thread, wake everyone up. 31 | checkpointReachedForRun = grinder.runNumber 32 | waiting = 0 33 | c.notifyAll() 34 | else: 35 | while grinder.runNumber > checkpointReachedForRun: c.wait() 36 | 37 | c.release() 38 | 39 | grinder.logger.output("Hello World") 40 | 41 | # Sleep for a random amount of time around 10 seconds. 42 | grinder.sleep(10000) 43 | -------------------------------------------------------------------------------- /grinder/examples/threadrampup.py: -------------------------------------------------------------------------------- 1 | # Thread ramp up 2 | # 3 | # A simple way to start threads at different times. 4 | # 5 | 6 | from net.grinder.script.Grinder import grinder 7 | 8 | def log(message): 9 | grinder.logger.info(message) 10 | 11 | class TestRunner: 12 | def __init__(self): 13 | log("initialising") 14 | 15 | def initialSleep( self): 16 | sleepTime = grinder.threadNumber * 5000 # 5 seconds per thread 17 | grinder.sleep(sleepTime, 0) 18 | log("initial sleep complete, slept for around %d ms" % sleepTime) 19 | 20 | def __call__( self ): 21 | if grinder.runNumber == 0: self.initialSleep() 22 | 23 | grinder.sleep(500) 24 | log("in __call__()") 25 | -------------------------------------------------------------------------------- /grinder/examples/xml-rpc.py: -------------------------------------------------------------------------------- 1 | # XML-RPC Web Service 2 | # 3 | # A server should be running on the localhost. This script uses the 4 | # example from 5 | # http://xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto-java-server.html 6 | # 7 | # Copyright (C) 2004 Sebasti�n Fontana 8 | # Distributed under the terms of The Grinder license. 9 | 10 | from java.util import Vector 11 | from java.lang import Integer 12 | from net.grinder.script.Grinder import grinder 13 | from net.grinder.script import Test 14 | 15 | from org.apache.xmlrpc import XmlRpcClient 16 | 17 | test1 = Test(1, "XML-RPC example test") 18 | server_url = "http://localhost:8080/RPC2" 19 | 20 | client = XmlRpcClient(server_url) 21 | test1.record(client) 22 | 23 | class TestRunner: 24 | def __call__(self): 25 | params = Vector() 26 | params.addElement(Integer(6)) 27 | params.addElement(Integer(3)) 28 | 29 | result = client.execute("sample.sumAndDifference", params) 30 | sum = result.get("sum") 31 | 32 | grinder.logger.info("SUM %d" % sum) 33 | -------------------------------------------------------------------------------- /grinder/lib/LICENSE-ASM: -------------------------------------------------------------------------------- 1 | 2 | ASM: a very small and fast Java bytecode manipulation framework 3 | Copyright (c) 2000-2005 INRIA, France Telecom 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions 8 | are met: 9 | 1. Redistributions of source code must retain the above copyright 10 | notice, this list of conditions and the following disclaimer. 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in the 13 | documentation and/or other materials provided with the distribution. 14 | 3. Neither the name of the copyright holders nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 28 | THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /grinder/lib/LICENSE-Jython: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cossme/grinder/bec249fa126f6ecf8e34003967f87d1a60b73b86/grinder/lib/LICENSE-Jython -------------------------------------------------------------------------------- /grinder/lib/LICENSE-PicoContainer: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2005, PicoContainer Organization 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | Neither the name of the PicoContainer Organization nor the names of its 15 | contributors may be used to endorse or promote products derived from this 16 | software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /grinder/lib/LICENSE-Ring: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2010 Mark McGranaghan 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /grinder/lib/LICENSE-SLF4J: -------------------------------------------------------------------------------- 1 | Copyright (c) 2004-2011 QOS.ch 2 | All rights reserved. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /grinder/lib/LICENSE-clj-json: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 Mark McGranaghan 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Softwar1e is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /grinder/lib/LICENSE-jEditSyntax: -------------------------------------------------------------------------------- 1 | The jEdit 2.2.1 syntax highlighting package contains code that is 2 | Copyright 1998-1999 Slava Pestov, Artur Biesiadowski, Clancy Malcolm, 3 | Jonathan Revusky, Juha Lindfors and Mike Dillon. 4 | 5 | You may use and modify this package for any purpose. Redistribution is 6 | permitted, in both source and binary form, provided that this notice 7 | remains intact in all source distributions of this package. 8 | 9 | -- Slava Pestov 10 | 25 September 2000 11 | 12 | -------------------------------------------------------------------------------- /grinder/lib/License-ring-json-params: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2011 Mark McGranaghan 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | --------------------------------------------------------------------------------