├── .gitignore ├── .run └── YamlPlanSchemaGenerationTool.run.xml ├── LICENSE ├── README.md ├── Test Results - YamlPlanReaderTest.html ├── build_parameters.json ├── git-hooks └── commit-msg ├── logback-maven.xml ├── pom.xml ├── step-agent ├── .gitignore ├── Agent.launch ├── AgentRunner.run.xml ├── logback-local-run.xml ├── pom.xml └── src │ ├── main │ ├── java │ │ └── step │ │ │ └── grid │ │ │ └── agent │ │ │ └── AgentRunner.java │ └── resources │ │ └── .gitignore │ └── test │ ├── .gitignore │ └── resources │ └── AgentConf.json ├── step-automation-packages ├── pom.xml ├── step-automation-packages-client │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── automation │ │ └── packages │ │ └── client │ │ ├── AutomationPackageClient.java │ │ ├── AutomationPackageClientException.java │ │ └── RemoteAutomationPackageClientImpl.java ├── step-automation-packages-controller │ ├── .gitignore │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── automation │ │ │ └── packages │ │ │ ├── AutomationPackageExecutionPlugin.java │ │ │ ├── AutomationPackagePlugin.java │ │ │ ├── AutomationPackageServices.java │ │ │ ├── execution │ │ │ └── AutomationPackageRepositoriesPlugin.java │ │ │ ├── parameter │ │ │ └── AutomationPackageParameterPlugin.java │ │ │ └── scheduler │ │ │ ├── AutomationPackageSchedulerHook.java │ │ │ └── AutomationPackageSchedulerPlugin.java │ │ └── test │ │ ├── java │ │ └── step │ │ │ └── automation │ │ │ └── packages │ │ │ ├── AutomationPackageArchiveTest.java │ │ │ ├── AutomationPackageManagerOSTest.java │ │ │ ├── AutomationPackageReaderTest.java │ │ │ ├── AutomationPackageTestUtils.java │ │ │ └── MavenArtifactIdentifierFromXmlParserTest.java │ │ └── resources │ │ └── step │ │ └── automation │ │ └── packages │ │ ├── expectedTestpackDescriptor.yml │ │ ├── picture.png │ │ └── step-automation-packages.zip ├── step-automation-packages-junit-core │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ ├── automation │ │ └── packages │ │ │ └── junit │ │ │ ├── AbstractLocalPlanRunner.java │ │ │ ├── JUnitExecutionParametersProvider.java │ │ │ └── JUnitPlansProvider.java │ │ └── engine │ │ └── plugins │ │ ├── AutomationPackageLocalOSPlugin.java │ │ └── ParameterManagerLocalPlugin.java ├── step-automation-packages-junit-model │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ ├── automation │ │ └── packages │ │ │ └── junit │ │ │ ├── ExcludePlanCategories.java │ │ │ ├── ExcludePlans.java │ │ │ ├── IncludePlanCategories.java │ │ │ └── IncludePlans.java │ │ └── junit │ │ ├── categories │ │ └── LocalJMeter.java │ │ └── runners │ │ └── annotations │ │ ├── ExecutionParameters.java │ │ ├── Plan.java │ │ ├── PlanCategories.java │ │ └── Plans.java ├── step-automation-packages-junit │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── junit │ │ │ └── runner │ │ │ ├── AbstractStepRunner.java │ │ │ └── Step.java │ │ └── test │ │ ├── java │ │ └── step │ │ │ ├── automation │ │ │ └── packages │ │ │ │ └── junit │ │ │ │ ├── StepAutomationPackagePlanAnnotation.java │ │ │ │ ├── StepAutomationPackageRunAllTest.java │ │ │ │ ├── StepAutomationPackageRunSimpleTest.java │ │ │ │ ├── StepAutomationPackageRunWithCategories.java │ │ │ │ ├── StepAutomationPackageWithExecutionParameters.java │ │ │ │ └── StepAutomationPackagesPlanAnnotation.java │ │ │ └── client │ │ │ ├── StepRunnerTestKeywords.java │ │ │ ├── StepRunnerWithJMeterPlanTest.java │ │ │ ├── StepRunnerWithPlansAnnotationTest.java │ │ │ └── StepRunnerYamlPlanTest.java │ │ └── resources │ │ ├── automation-package.yml │ │ ├── jmeterProject1 │ │ └── jmeterProject1.jmx │ │ ├── jsProject │ │ └── jsSample.js │ │ ├── plans │ │ ├── assertsTest.plan │ │ ├── composite-simple-plan.yml │ │ ├── composite1.plan │ │ ├── plan1.plan │ │ ├── plan2.plan │ │ └── plan3.plan │ │ ├── testAutomation.plan │ │ └── testFolder │ │ └── file1 ├── step-automation-packages-junit5 │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── junit5 │ │ │ └── runner │ │ │ └── StepJUnit5.java │ │ └── test │ │ ├── java │ │ └── step │ │ │ └── junit5 │ │ │ └── runner │ │ │ ├── StepAutomationPackagePlanAnnotation.java │ │ │ ├── StepAutomationPackageRunAllTest.java │ │ │ ├── StepAutomationPackageRunSimpleTest.java │ │ │ ├── StepAutomationPackageRunWithCategories.java │ │ │ ├── StepAutomationPackagesPlanAnnotation.java │ │ │ ├── StepRunnerTestKeywords.java │ │ │ ├── StepRunnerWithPlansAnnotationTest.java │ │ │ ├── StepRunnerYamlPlanTest.java │ │ │ └── TestPlansAndKeywords.java │ │ └── resources │ │ ├── automation-package.yml │ │ ├── jmeterProject1 │ │ └── jmeterProject1.jmx │ │ ├── jsProject │ │ └── jsSample.js │ │ ├── plans │ │ ├── assertsTest.plan │ │ ├── composite-simple-plan.yml │ │ ├── composite1.plan │ │ ├── plan1.plan │ │ ├── plan2.plan │ │ └── plan3.plan │ │ ├── testAutomation.plan │ │ └── testFolder │ │ └── file1 ├── step-automation-packages-manager │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ ├── automation │ │ └── packages │ │ │ ├── AutomationPackageArchiveProvider.java │ │ │ ├── AutomationPackageFromClassLoaderProvider.java │ │ │ ├── AutomationPackageFromFolderProvider.java │ │ │ ├── AutomationPackageFromInputStreamProvider.java │ │ │ ├── AutomationPackageFromMavenProvider.java │ │ │ ├── AutomationPackageLinkEnricher.java │ │ │ ├── AutomationPackageLocks.java │ │ │ ├── AutomationPackageManager.java │ │ │ ├── AutomationPackageManagerException.java │ │ │ ├── AutomationPackageMavenConfig.java │ │ │ ├── AutomationPackagePlansAttributesApplier.java │ │ │ ├── AutomationPackageReader.java │ │ │ ├── accessor │ │ │ ├── AutomationPackageAccessorImpl.java │ │ │ └── InMemoryAutomationPackageAccessorImpl.java │ │ │ └── execution │ │ │ ├── AutomationPackageExecutor.java │ │ │ ├── IsolatedAutomationPackageRepository.java │ │ │ ├── LocalAutomationPackageRepository.java │ │ │ └── RepositoryWithAutomationPackageSupport.java │ │ └── junit │ │ └── runner │ │ ├── StepClassParser.java │ │ └── StepClassParserResult.java ├── step-automation-packages-samples │ ├── pom.xml │ ├── step-automation-packages-malformed │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── resources │ │ │ └── jmeterProject1 │ │ │ └── jmeterProject1.xml │ ├── step-automation-packages-sample-echo │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── resources │ │ │ ├── automation-package.yml │ │ │ ├── parameters.yml │ │ │ └── plans.yml │ ├── step-automation-packages-sample-junit │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── step │ │ │ │ │ └── automation │ │ │ │ │ └── packages │ │ │ │ │ └── functions │ │ │ │ │ └── MyKeywordLibraryAutopack.java │ │ │ └── resources │ │ │ │ ├── automation-package.yml │ │ │ │ ├── jmeterProject1 │ │ │ │ └── jmeterProject1.xml │ │ │ │ ├── keywords.yml │ │ │ │ ├── plan.plan │ │ │ │ ├── plans.yml │ │ │ │ └── schedules.yml │ │ │ └── test │ │ │ └── java │ │ │ └── step │ │ │ └── junit │ │ │ └── runner │ │ │ └── RunSampleTest.java │ ├── step-automation-packages-sample1-extended │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── step │ │ │ │ └── automation │ │ │ │ └── packages │ │ │ │ └── functions │ │ │ │ └── MyKeywordLibraryAutopack.java │ │ │ └── resources │ │ │ ├── automation-package.yml │ │ │ ├── jmeterProject1 │ │ │ └── jmeterProject1.xml │ │ │ ├── jmeterProject2 │ │ │ └── jmeterProject2.xml │ │ │ ├── jsProject │ │ │ └── jsSample.js │ │ │ ├── keywords.yml │ │ │ ├── lib │ │ │ └── fakeLib.jar │ │ │ ├── nodeProject │ │ │ └── nodeSample.ts │ │ │ ├── parameters.yml │ │ │ ├── plan.plan │ │ │ ├── plan2.plan │ │ │ ├── plans.yml │ │ │ ├── schedules.yml │ │ │ └── unknown.yml │ ├── step-automation-packages-sample1 │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── step │ │ │ │ └── automation │ │ │ │ └── packages │ │ │ │ └── functions │ │ │ │ └── MyKeywordLibraryAutopack.java │ │ │ └── resources │ │ │ ├── .apignore │ │ │ ├── automation-package.yml │ │ │ ├── ignored │ │ │ └── ignoredFile.txt │ │ │ ├── ignoredFile.yml │ │ │ ├── jmeterProject1 │ │ │ └── jmeterProject1.xml │ │ │ ├── jsProject │ │ │ └── jsSample.js │ │ │ ├── keywords.yml │ │ │ ├── lib │ │ │ └── fakeLib.jar │ │ │ ├── nodeProject │ │ │ └── nodeSample.ts │ │ │ ├── parameters.yml │ │ │ ├── plan.plan │ │ │ ├── plans │ │ │ ├── plan1.yml │ │ │ ├── plan2.plan │ │ │ └── plan2.yml │ │ │ ├── schedules.yml │ │ │ └── unknown.yml │ └── step-automation-packages-sample2 │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ └── resources │ │ ├── automation-package.yml │ │ ├── excel │ │ └── excel1.xlsx │ │ └── jmeterProject1 │ │ └── jmeterProject1.xml ├── step-automation-packages-schema │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── automation │ │ │ └── packages │ │ │ └── yaml │ │ │ └── schema │ │ │ ├── YamlAutomationPackageSchemaGenerator.java │ │ │ └── YamlKeywordSchemaGenerator.java │ │ └── test │ │ └── java │ │ └── step │ │ └── automation │ │ └── packages │ │ └── yaml │ │ └── schema │ │ └── YamlAutomationPackageSchemaGeneratorTest.java └── step-automation-packages-yaml │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── step │ │ │ └── automation │ │ │ └── packages │ │ │ └── yaml │ │ │ ├── AutomationPackageDescriptorReader.java │ │ │ ├── AutomationPackageKeywordsLookuper.java │ │ │ ├── YamlAutomationPackageVersions.java │ │ │ ├── deserialization │ │ │ ├── YamlAutomationPackageDescriptorDeserializer.java │ │ │ ├── YamlAutomationPackageFragmentDeserializer.java │ │ │ └── YamlKeywordDeserializer.java │ │ │ └── model │ │ │ ├── AbstractAutomationPackageFragmentYaml.java │ │ │ ├── AutomationPackageDescriptorYaml.java │ │ │ ├── AutomationPackageDescriptorYamlImpl.java │ │ │ ├── AutomationPackageFragmentYaml.java │ │ │ └── AutomationPackageFragmentYamlImpl.java │ └── resources │ │ └── step │ │ └── automation │ │ └── packages │ │ └── yaml │ │ └── step-automation-package-schema-os-1.1.0.json │ └── test │ ├── java │ └── step │ │ └── automation │ │ └── packages │ │ └── yaml │ │ └── AutomationPackageDescriptorReaderTest.java │ └── resources │ └── step │ └── automation │ └── packages │ └── yaml │ └── descriptors │ ├── completeDescriptor.yml │ ├── emptyKeywordDescriptor.yml │ └── jmeterKeywordDescriptor.yml ├── step-cli ├── pom.xml ├── step-cli-core │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── cli │ │ │ ├── AbstractCliTool.java │ │ │ ├── AbstractDeployAutomationPackageTool.java │ │ │ ├── AbstractExecuteAutomationPackageTool.java │ │ │ ├── CliToolLogging.java │ │ │ ├── ControllerVersionValidator.java │ │ │ ├── StepCliExecutionException.java │ │ │ └── reports │ │ │ ├── AggregatedReportCreator.java │ │ │ ├── JUnitReportCreator.java │ │ │ └── ReportCreator.java │ │ └── test │ │ └── java │ │ └── step │ │ └── cli │ │ ├── AbstractDeployAutomationPackageToolTest.java │ │ ├── AbstractExecuteAutomationPackageToolTest.java │ │ └── ControllerVersionValidatorTest.java └── step-cli-launcher │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── step │ │ └── cli │ │ ├── ApLocalExecuteCommandHandler.java │ │ ├── StepConsole.java │ │ ├── StepDefaultValuesProvider.java │ │ ├── StepExecutionExceptionHandler.java │ │ └── apignore │ │ └── ApIgnoreFileFilter.java │ └── test │ ├── java │ └── step │ │ └── cli │ │ ├── StepConsoleTest.java │ │ └── apignore │ │ └── ApIgnoreFileFilterTest.java │ └── resources │ ├── customCli.properties │ ├── customCli2.properties │ └── step │ └── cli │ └── apignore │ └── .apignore ├── step-commons ├── pom.xml └── src │ ├── main │ ├── java │ │ └── step │ │ │ ├── common │ │ │ └── managedoperations │ │ │ │ ├── Operation.java │ │ │ │ ├── OperationDetails.java │ │ │ │ └── OperationManager.java │ │ │ └── commons │ │ │ ├── activation │ │ │ ├── AbstractActivableObject.java │ │ │ ├── ActivableObject.java │ │ │ ├── Activator.java │ │ │ └── Expression.java │ │ │ ├── buffering │ │ │ ├── FilterIterator.java │ │ │ ├── ObjectFilter.java │ │ │ ├── TreeIterator.java │ │ │ └── TreeIteratorFactory.java │ │ │ └── iterators │ │ │ ├── SkipLimitIterator.java │ │ │ └── SkipLimitProvider.java │ └── resources │ │ └── logback-for-test.xml │ └── test │ └── java │ └── step │ └── commons │ ├── buffering │ ├── FilterIteratorTest.java │ ├── TestClass.java │ └── TreeIteratorTest.java │ └── iterators │ └── SkipLimitIteratorTest.java ├── step-controller-plugins ├── pom.xml ├── step-controller-plugins-measurement │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── plugins │ │ │ └── measurements │ │ │ ├── GaugeCollector.java │ │ │ ├── GaugeCollectorRegistry.java │ │ │ ├── Measurement.java │ │ │ ├── MeasurementControllerPlugin.java │ │ │ ├── MeasurementHandler.java │ │ │ ├── MeasurementPlugin.java │ │ │ └── PrometheusCollectorRegistry.java │ │ └── test │ │ └── java │ │ └── step │ │ └── plugins │ │ └── measurements │ │ └── MeasurementPluginTest.java ├── step-controller-plugins-raw-measurement │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── plugins │ │ │ └── measurements │ │ │ └── raw │ │ │ ├── MeasurementAccessor.java │ │ │ ├── RawMeasurementsControllerPlugin.java │ │ │ └── RawMeasurementsHandler.java │ │ └── test │ │ └── java │ │ └── step │ │ └── plugins │ │ └── measurements │ │ └── raw │ │ └── RawMeasurementsHandlerTest.java ├── step-controller-plugins-script-editor │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── plugins │ │ └── scripteditor │ │ ├── ScriptEditorPlugin.java │ │ └── ScriptEditorServices.java └── step-controller-plugins-timeseries │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── step │ │ └── plugins │ │ └── timeseries │ │ ├── AttributeValuesStats.java │ │ ├── DashboardsService.java │ │ ├── MetricsConstants.java │ │ ├── TimeSeriesBucketingHandler.java │ │ ├── TimeSeriesControllerPlugin.java │ │ ├── TimeSeriesExecutionPlugin.java │ │ ├── TimeSeriesHandler.java │ │ ├── TimeSeriesRebuildRequest.java │ │ ├── TimeSeriesRebuildResponse.java │ │ ├── TimeSeriesService.java │ │ ├── api │ │ ├── AttributeStats.java │ │ ├── BucketResponse.java │ │ ├── BucketResponseBuilder.java │ │ ├── FetchBucketsRequest.java │ │ ├── MeasurementsStats.java │ │ ├── OQLVerifyResponse.java │ │ ├── TimeSeriesAPIResponse.java │ │ └── TimeSeriesAPIResponseBuilder.java │ │ ├── dashboards │ │ ├── DashboardAccessor.java │ │ ├── DashboardsGenerator.java │ │ └── model │ │ │ ├── AxesColorizationType.java │ │ │ ├── AxesDisplayType.java │ │ │ ├── AxesSettings.java │ │ │ ├── ChartSettings.java │ │ │ ├── DashboardItem.java │ │ │ ├── DashboardView.java │ │ │ ├── DashletType.java │ │ │ ├── TableChartColumn.java │ │ │ ├── TableDashletSettings.java │ │ │ ├── TimeRange.java │ │ │ ├── TimeRangeRelativeSelection.java │ │ │ ├── TimeRangeSelection.java │ │ │ ├── TimeRangeSelectionType.java │ │ │ ├── TimeSeriesFilterItem.java │ │ │ └── TimeSeriesFilterItemType.java │ │ └── migration │ │ ├── MigrateAggregateTask.java │ │ ├── MigrateDashboardsTask.java │ │ └── MigrateResolutionsWithIgnoredFieldsTask.java │ └── test │ └── java │ └── step │ └── plugins │ └── timeseries │ ├── DashboardTest.java │ ├── TimeSeriesExecutionPluginTest.java │ ├── TimeSeriesHandlerTest.java │ └── migration │ └── MigrateDashboardsTest.java ├── step-controller ├── ControllerServer.run.xml ├── pom.xml ├── step-controller-backend │ ├── .gitignore │ ├── ControllerServer.launch │ ├── logback-local-run.xml │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── controller │ │ │ └── ControllerServer.java │ │ └── test │ │ ├── .gitignore │ │ ├── java │ │ └── step │ │ │ └── core │ │ │ └── export │ │ │ └── ExportManagerTest.java │ │ └── resources │ │ ├── ldap.jks │ │ ├── step.properties │ │ └── step │ │ └── core │ │ └── export │ │ ├── 3_12.json │ │ ├── 3_12_and_before.json │ │ ├── 3_13_textPlan.json │ │ ├── 3_13_visualPlan.json │ │ ├── ExportVisualPlan3_13.json │ │ ├── TestWithAssert_3_12.json │ │ ├── allParameters_3_15.sta │ │ ├── allParameters_3_15 │ │ └── export.json │ │ ├── dummyExcel.xls │ │ ├── export_3_15_7.sta │ │ └── export_3_16_1.sta ├── step-controller-base-plugins │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── plugins │ │ │ ├── bookmark │ │ │ ├── BookmarkAccessor.java │ │ │ ├── BookmarkAccessorImpl.java │ │ │ ├── BookmarkPlugin.java │ │ │ ├── BookmarkServices.java │ │ │ └── UserBookmark.java │ │ │ ├── datapool │ │ │ ├── DataPoolPlugin.java │ │ │ └── DataPoolPluginServices.java │ │ │ ├── encryption │ │ │ └── EncryptionManagerDependencyPlugin.java │ │ │ ├── entity │ │ │ └── EntityLockingPlugin.java │ │ │ ├── executiontypes │ │ │ └── BaseExecutionTypeControllerPlugin.java │ │ │ ├── interactive │ │ │ ├── InteractivePlugin.java │ │ │ └── InteractiveServices.java │ │ │ ├── parametermanager │ │ │ ├── ParameterManagerControllerPlugin.java │ │ │ └── ParameterServices.java │ │ │ ├── quotamanager │ │ │ ├── QuotaHandler.java │ │ │ ├── QuotaHandlerStatus.java │ │ │ ├── QuotaManager.java │ │ │ ├── QuotaManagerControllerPlugin.java │ │ │ ├── QuotaManagerPlugin.java │ │ │ ├── QuotaManagerServices.java │ │ │ ├── QuotaSemaphore.java │ │ │ └── config │ │ │ │ ├── Quota.java │ │ │ │ ├── QuotaManagerConfig.java │ │ │ │ └── QuotaManagerConfigParser.java │ │ │ ├── remote │ │ │ ├── RemoteCollectionPlugin.java │ │ │ └── RemoteCollectionServices.java │ │ │ ├── table │ │ │ ├── TableExportRequest.java │ │ │ ├── TableExportTask.java │ │ │ ├── TablePlugin.java │ │ │ └── TableService.java │ │ │ ├── threadmanager │ │ │ ├── ThreadManagerControllerPlugin.java │ │ │ ├── ThreadManagerPlugin.java │ │ │ └── ThreadManagerServices.java │ │ │ └── views │ │ │ ├── ViewControllerPlugin.java │ │ │ └── ViewPluginServices.java │ │ └── test │ │ ├── java │ │ └── step │ │ │ └── plugins │ │ │ ├── entity │ │ │ └── EntityLockingPluginTest.java │ │ │ ├── parametermanager │ │ │ ├── ParameterManagerPluginTest.java │ │ │ └── ParameterManagerTest.java │ │ │ ├── quotamanager │ │ │ ├── QuotaManagerMock.java │ │ │ └── QuotaManagerTest.java │ │ │ ├── table │ │ │ └── TableExportRunnableTest.java │ │ │ ├── threadmanager │ │ │ └── ThreadManagerPluginTest.java │ │ │ └── views │ │ │ └── functions │ │ │ ├── ErrorDistributionViewTest.java │ │ │ ├── ErrorRateViewTest.java │ │ │ └── ReportNodeStatisticsViewTest.java │ │ └── resources │ │ └── QuotaManagerConfig.xml ├── step-controller-multitenancy-model │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── controller │ │ └── multitenancy │ │ ├── Constants.java │ │ └── Tenant.java ├── step-controller-remote-client │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ ├── client │ │ │ ├── AbstractRemoteClient.java │ │ │ ├── ControllerClientException.java │ │ │ ├── accessors │ │ │ │ ├── AbstractRemoteAccessor.java │ │ │ │ ├── RemoteAccessors.java │ │ │ │ ├── RemoteExecutionAccessor.java │ │ │ │ ├── RemoteFunctionAccessor.java │ │ │ │ ├── RemoteParameterAccessor.java │ │ │ │ └── RemotePlanAccessor.java │ │ │ ├── collections │ │ │ │ └── remote │ │ │ │ │ ├── CountRequest.java │ │ │ │ │ ├── CountResponse.java │ │ │ │ │ ├── FindRequest.java │ │ │ │ │ ├── RemoteCollection.java │ │ │ │ │ └── RemoteCollectionFactory.java │ │ │ ├── controller │ │ │ │ └── ControllerServicesClient.java │ │ │ ├── credentials │ │ │ │ ├── ControllerCredentials.java │ │ │ │ ├── DefaultLocalCredentials.java │ │ │ │ └── SyspropCredendialsBuilder.java │ │ │ ├── executions │ │ │ │ ├── RemoteExecutionFuture.java │ │ │ │ └── RemoteExecutionManager.java │ │ │ ├── functions │ │ │ │ ├── RemoteFunctionExecutionService.java │ │ │ │ ├── RemoteFunctionManager.java │ │ │ │ └── RemoteFunctionManagerImpl.java │ │ │ ├── planrunners │ │ │ │ └── RemotePlanRunner.java │ │ │ ├── reports │ │ │ │ ├── RemoteExecutionProvider.java │ │ │ │ └── RemoteReportTreeAccessor.java │ │ │ ├── repository │ │ │ │ └── StagingRepositoryClient.java │ │ │ └── resources │ │ │ │ └── RemoteResourceManager.java │ │ │ ├── controller │ │ │ └── multitenancy │ │ │ │ └── client │ │ │ │ ├── MultitenancyClient.java │ │ │ │ └── RemoteMultitenancyClientImpl.java │ │ │ └── core │ │ │ └── deployment │ │ │ └── JacksonMapperProvider.java │ │ └── test │ │ └── java │ │ └── step │ │ └── client │ │ └── collections │ │ └── remote │ │ └── RemoteCollectionTest.java └── step-controller-server │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── step │ │ │ ├── controller │ │ │ ├── grid │ │ │ │ ├── GridConfigurationEditor.java │ │ │ │ ├── GridPlugin.java │ │ │ │ └── services │ │ │ │ │ ├── AbtractFunctionServices.java │ │ │ │ │ ├── AgentListEntry.java │ │ │ │ │ ├── FunctionServiceTokenWrapperOwner.java │ │ │ │ │ ├── FunctionServices.java │ │ │ │ │ └── GridServices.java │ │ │ └── services │ │ │ │ ├── async │ │ │ │ ├── AsyncTask.java │ │ │ │ ├── AsyncTaskHandle.java │ │ │ │ ├── AsyncTaskManager.java │ │ │ │ ├── AsyncTaskManagerPlugin.java │ │ │ │ ├── AsyncTaskServices.java │ │ │ │ └── AsyncTaskStatus.java │ │ │ │ └── entities │ │ │ │ └── AbstractEntityServices.java │ │ │ ├── core │ │ │ ├── Controller.java │ │ │ ├── GlobalContext.java │ │ │ ├── GlobalContextAware.java │ │ │ ├── access │ │ │ │ ├── InMemoryUserAccessor.java │ │ │ │ ├── Preferences.java │ │ │ │ ├── RoleProvider.java │ │ │ │ ├── User.java │ │ │ │ ├── UserAccessor.java │ │ │ │ └── UserAccessorImpl.java │ │ │ ├── accessors │ │ │ │ └── DefaultAccessorModule.java │ │ │ ├── controller │ │ │ │ ├── ApplicationConfiguration.java │ │ │ │ ├── ApplicationConfigurationBuilder.java │ │ │ │ ├── ApplicationConfigurationManager.java │ │ │ │ ├── ControllerSetting.java │ │ │ │ ├── ControllerSettingAccessor.java │ │ │ │ ├── ControllerSettingAccessorImpl.java │ │ │ │ ├── ControllerSettingHook.java │ │ │ │ ├── ControllerSettingHookRollbackException.java │ │ │ │ ├── ControllerSettingPlugin.java │ │ │ │ ├── InMemoryControllerSettingAccessor.java │ │ │ │ ├── SessionResponseBuilder.java │ │ │ │ ├── StepControllerPlugin.java │ │ │ │ ├── errorhandling │ │ │ │ │ └── ErrorFilter.java │ │ │ │ └── settings │ │ │ │ │ ├── AbstractScopedObject.java │ │ │ │ │ ├── AbstractScopedObjectAccessor.java │ │ │ │ │ ├── ObjectScopeHandler.java │ │ │ │ │ └── ObjectScopeRegistry.java │ │ │ ├── deployment │ │ │ │ ├── AbstractStepAsyncServices.java │ │ │ │ ├── AbstractStepServices.java │ │ │ │ ├── AnonymousAuthenticationFilter.java │ │ │ │ ├── ApplicationServices.java │ │ │ │ ├── AuthenticationException.java │ │ │ │ ├── AuthorizationException.java │ │ │ │ ├── ControllerServiceError.java │ │ │ │ ├── ControllerServiceException.java │ │ │ │ ├── ControllerServices.java │ │ │ │ ├── FindByCriteraParam.java │ │ │ │ ├── HttpSessionFactory.java │ │ │ │ ├── MoveArtefactData.java │ │ │ │ ├── NotMemberOfProjectException.java │ │ │ │ ├── ObjectHookControllerPlugin.java │ │ │ │ ├── ObjectHookInterceptor.java │ │ │ │ ├── SettingsServices.java │ │ │ │ ├── Unfiltered.java │ │ │ │ ├── UserAccountServices.java │ │ │ │ ├── UserActivityFilter.java │ │ │ │ └── WebApplicationConfigurationManager.java │ │ │ ├── execution │ │ │ │ ├── ExecutionPlugin.java │ │ │ │ ├── ExecutionServices.java │ │ │ │ ├── LeafReportNodesFilter.java │ │ │ │ ├── ReportNodesFilter.java │ │ │ │ ├── ReportNodesTableParameters.java │ │ │ │ ├── table │ │ │ │ │ ├── ExecutionSummaryProvider.java │ │ │ │ │ ├── ExecutionWrapper.java │ │ │ │ │ ├── LeafReportNodeTableFilterFactory.java │ │ │ │ │ ├── ReportNodeTableFilterFactory.java │ │ │ │ │ └── RootReportNodeProvider.java │ │ │ │ └── type │ │ │ │ │ └── ExecutionTypeControllerPlugin.java │ │ │ ├── export │ │ │ │ ├── ExportManagerPlugin.java │ │ │ │ └── ExportServices.java │ │ │ ├── imports │ │ │ │ ├── ImportServices.java │ │ │ │ └── converter │ │ │ │ │ └── ArtefactsToPlans.java │ │ │ ├── plans │ │ │ │ ├── PlanCompilationResult.java │ │ │ │ ├── PlanPlugin.java │ │ │ │ ├── PlanServices.java │ │ │ │ └── YamlEditorPlanPlugin.java │ │ │ ├── plugins │ │ │ │ ├── AbstractControllerPlugin.java │ │ │ │ ├── AbstractWebPlugin.java │ │ │ │ ├── ControllerPlugin.java │ │ │ │ ├── ControllerPluginManager.java │ │ │ │ └── Ng2WebPlugin.java │ │ │ ├── references │ │ │ │ ├── FindReferencesRequest.java │ │ │ │ ├── FindReferencesResponse.java │ │ │ │ ├── FindReferencesTreeVisitor.java │ │ │ │ ├── ReferenceFinderPlugin.java │ │ │ │ └── ReferenceFinderServices.java │ │ │ └── scheduler │ │ │ │ ├── ExecutionJob.java │ │ │ │ ├── ExecutionJobFactory.java │ │ │ │ ├── ExecutionScheduler.java │ │ │ │ ├── ExecutionSchedulerHook.java │ │ │ │ ├── Executor.java │ │ │ │ ├── LoggerJob.java │ │ │ │ ├── SchedulerPlugin.java │ │ │ │ ├── SchedulerServices.java │ │ │ │ └── housekeeping │ │ │ │ ├── HousekeepingJobFactory.java │ │ │ │ └── HousekeepingJobsManager.java │ │ │ ├── functions │ │ │ ├── editors │ │ │ │ ├── FunctionEditor.java │ │ │ │ └── FunctionEditorRegistry.java │ │ │ └── plugin │ │ │ │ └── FunctionControllerPlugin.java │ │ │ ├── migration │ │ │ └── tasks │ │ │ │ ├── FixPostgreSQLIndexes.java │ │ │ │ ├── MigrateAgentProvisioningConfiguration.java │ │ │ │ ├── MigrateArtefactsToPlans.java │ │ │ │ ├── MigrateAssertNegation.java │ │ │ │ ├── MigrateBeforeAfterAndPropertiesArtefactInPlans.java │ │ │ │ ├── MigrateFunctionCallsById.java │ │ │ │ ├── MigrateParametersToDynamicValues.java │ │ │ │ ├── MigrateSeleniumFunctions.java │ │ │ │ ├── MigrateSleepArtefactInPlans.java │ │ │ │ ├── MigrationManagerTasksPlugin.java │ │ │ │ ├── ParameterPriorityScreenInputMigrationTask.java │ │ │ │ ├── RemoveLocalFunctions.java │ │ │ │ ├── ScreenEntityIconMigrationTask.java │ │ │ │ ├── ScreenInputHtmlTemplateMigrationTask.java │ │ │ │ ├── ScreenTemplateArtefactTableMigrationTask.java │ │ │ │ ├── ScreenTemplateMigrationTask.java │ │ │ │ ├── ScreenTemplateMigrationTask25.java │ │ │ │ ├── SetSchedulerTaskAttributes.java │ │ │ │ ├── V27_4_DropResolvedPlanNodesIndexForPSQLMigrationTask.java │ │ │ │ └── V28_0_FixEmptyDefaultMavenSettingsMigrationTask.java │ │ │ ├── plugins │ │ │ ├── screentemplating │ │ │ │ ├── Input.java │ │ │ │ ├── InputType.java │ │ │ │ ├── Option.java │ │ │ │ ├── ScreenInput.java │ │ │ │ ├── ScreenInputAccessor.java │ │ │ │ ├── ScreenInputAccessorImpl.java │ │ │ │ ├── ScreenTemplateChangeListener.java │ │ │ │ ├── ScreenTemplateManager.java │ │ │ │ ├── ScreenTemplatePlugin.java │ │ │ │ └── ScreenTemplateService.java │ │ │ └── table │ │ │ │ └── settings │ │ │ │ ├── ColumnSettings.java │ │ │ │ ├── ScreenInputColumnSettings.java │ │ │ │ ├── TableSettings.java │ │ │ │ ├── TableSettingsAccessor.java │ │ │ │ ├── TableSettingsBuilder.java │ │ │ │ └── TableSettingsPlugin.java │ │ │ ├── repositories │ │ │ └── staging │ │ │ │ ├── StagingContext.java │ │ │ │ ├── StagingContextAccessorImpl.java │ │ │ │ ├── StagingRepository.java │ │ │ │ ├── StagingRepositoryPlugin.java │ │ │ │ └── StagingRepositoryServices.java │ │ │ └── resources │ │ │ ├── ResourceAccessorImpl.java │ │ │ ├── ResourceImporter.java │ │ │ ├── ResourceManagerControllerPlugin.java │ │ │ └── ResourceServices.java │ └── resources │ │ └── step │ │ └── expressions │ │ ├── GroovyFunctions.groovy │ │ └── placeholder │ │ ├── DateFunctions.groovy │ │ ├── DatePlaceholders.groovy │ │ └── TimeCategoryExpressionHandler.groovy │ └── test │ ├── java │ └── step │ │ ├── controller │ │ └── services │ │ │ └── async │ │ │ └── AsyncTaskManagerTest.java │ │ ├── core │ │ ├── GlobalContextBuilder.java │ │ ├── artefacts │ │ │ ├── MapDeserializerTest.java │ │ │ ├── TestBean.java │ │ │ ├── TestBean2.java │ │ │ └── reports │ │ │ │ └── ReportTreeVisitorTest.java │ │ ├── controller │ │ │ ├── ControllerSettingAccessorImplTest.java │ │ │ └── settings │ │ │ │ └── ObjectScopeRegistryTest.java │ │ ├── execution │ │ │ └── ReportTableTest.java │ │ ├── plans │ │ │ ├── builder │ │ │ │ └── PlanBuilderTest.java │ │ │ └── runner │ │ │ │ └── DefaultPlanRunnerTest.java │ │ ├── plugins │ │ │ └── ControllerPluginManagerTest.java │ │ └── scheduler │ │ │ ├── ExecutionSchedulerCronTest.java │ │ │ └── ExecutionSchedulerTest.java │ │ ├── datapool │ │ └── DataSetTest.java │ │ ├── expressions │ │ └── ExpressionHandlerTest.java │ │ ├── migration │ │ └── tasks │ │ │ ├── MigrateAgentProvisioningConfigurationTest.java │ │ │ ├── MigrateArtefactsToPlansTest.java │ │ │ ├── MigrateAssertNegationTest.java │ │ │ ├── MigrateBeforeAfterAndPropertiesArtefactInPlansTest.java │ │ │ ├── MigrateParametersToDynamicValueTest.java │ │ │ ├── MigrateSleepArtefactInPlansTest.java │ │ │ ├── MigrationTasksTest.java │ │ │ ├── RemoveLocalFunctionsTest.java │ │ │ ├── ScreenEntityIconMigrationTaskTest.java │ │ │ ├── ScreenInputHtmlTemplateMigrationTaskTest.java │ │ │ └── SetSchedulerTaskAttributesTest.java │ │ └── plugins │ │ ├── screentemplating │ │ └── ScreenTemplateManagerTest.java │ │ └── table │ │ └── settings │ │ └── TableSettingsTest.java │ └── resources │ ├── mongodb-queries │ └── step │ ├── core │ └── plans │ │ └── runner │ │ └── DefaultPlanRunnerTestExpected.txt │ ├── expressions │ └── GroovyTestFunctions.groovy │ └── migration │ └── tasks │ ├── newDBPlanWithBeforeAfter.json │ ├── oldDBPlanWithBeforeAfter.json │ ├── oldPlanWithAutoscalingSettingsAuto.json │ ├── oldPlanWithAutoscalingSettingsManual.json │ └── oldPlanWithAutoscalingSettingsOf.json ├── step-core-model ├── pom.xml └── src │ ├── main │ └── java │ │ └── step │ │ ├── artefacts │ │ ├── Comparator.java │ │ ├── Filter.java │ │ └── FilterType.java │ │ ├── attachments │ │ └── AttachmentMeta.java │ │ ├── core │ │ ├── ReflectionUtils.java │ │ ├── dynamicbeans │ │ │ ├── ContainsDynamicValues.java │ │ │ ├── DynamicValue.java │ │ │ ├── EvaluationResult.java │ │ │ └── ValueConverter.java │ │ ├── json │ │ │ └── JsonProviderCache.java │ │ ├── objectenricher │ │ │ └── EnricheableObject.java │ │ └── yaml │ │ │ ├── AbstractYamlModel.java │ │ │ ├── YamlFieldCustomCopy.java │ │ │ └── YamlModel.java │ │ ├── functions │ │ ├── EvaluationExpression.java │ │ └── Function.java │ │ ├── parameter │ │ ├── Parameter.java │ │ ├── ParameterScope.java │ │ └── automation │ │ │ └── AutomationPackageParameter.java │ │ ├── plugins │ │ └── events │ │ │ └── Event.java │ │ └── resources │ │ ├── CustomResourceType.java │ │ ├── Resource.java │ │ ├── ResourceRevision.java │ │ └── ResourceType.java │ └── test │ └── java │ └── step │ └── core │ └── dynamicbeans │ ├── TestBean.java │ └── ValueConverterTest.java ├── step-core ├── pom.xml └── src │ ├── main │ └── java │ │ └── step │ │ ├── attachments │ │ └── FileResolver.java │ │ ├── automation │ │ └── packages │ │ │ ├── AutomationPackage.java │ │ │ ├── AutomationPackageArchive.java │ │ │ ├── AutomationPackageArchiveType.java │ │ │ ├── AutomationPackageContent.java │ │ │ ├── AutomationPackageContext.java │ │ │ ├── AutomationPackageEntity.java │ │ │ ├── AutomationPackageHook.java │ │ │ ├── AutomationPackageHookException.java │ │ │ ├── AutomationPackageHookRegistry.java │ │ │ ├── AutomationPackageOperationMode.java │ │ │ ├── AutomationPackageReadingException.java │ │ │ ├── AutomationPackageResourceUploader.java │ │ │ ├── AutomationPackageStaging.java │ │ │ ├── AutomationPackageStatus.java │ │ │ ├── AutomationPackageUpdateResult.java │ │ │ ├── AutomationPackageUpdateStatus.java │ │ │ ├── ClassLoaderResourceFilesystem.java │ │ │ ├── ResourcePathMatchingResolver.java │ │ │ ├── accessor │ │ │ └── AutomationPackageAccessor.java │ │ │ ├── deserialization │ │ │ ├── AutomationPackageSerializationRegistry.java │ │ │ └── AutomationPackageSerializationRegistryAware.java │ │ │ ├── model │ │ │ ├── AbstractYamlFunction.java │ │ │ ├── AutomationPackageContextual.java │ │ │ ├── AutomationPackageKeyword.java │ │ │ ├── JavaAutomationPackageKeyword.java │ │ │ └── YamlAutomationPackageKeyword.java │ │ │ └── schema │ │ │ ├── AutomationPackageJsonSchemaExtension.java │ │ │ └── CommonAutomationPackageJsonSchemaExtension.java │ │ ├── core │ │ ├── AbstractStepContext.java │ │ ├── Constants.java │ │ ├── LazyInitializer.java │ │ ├── agents │ │ │ └── provisioning │ │ │ │ ├── AgentPoolConstants.java │ │ │ │ ├── AgentPoolProvisioningParameter.java │ │ │ │ ├── AgentPoolProvisioningParameters.java │ │ │ │ ├── AgentPoolProvisioningReport.java │ │ │ │ ├── AgentPoolRequirementSpec.java │ │ │ │ ├── AgentPoolSpec.java │ │ │ │ ├── AgentProvisioningLog.java │ │ │ │ ├── AgentProvisioningLogs.java │ │ │ │ ├── AgentProvisioningReport.java │ │ │ │ ├── AgentProvisioningRestrictions.java │ │ │ │ └── driver │ │ │ │ ├── AgentProvisioningDriver.java │ │ │ │ ├── AgentProvisioningDriverConfiguration.java │ │ │ │ ├── AgentProvisioningError.java │ │ │ │ ├── AgentProvisioningRequest.java │ │ │ │ ├── AgentProvisioningStatus.java │ │ │ │ └── AgentProvisioningStatusAccessor.java │ │ ├── artefacts │ │ │ ├── AbstractArtefact.java │ │ │ ├── Artefact.java │ │ │ ├── ArtefactFilter.java │ │ │ ├── ArtefactTypeCache.java │ │ │ ├── ArtefactTypeIdResolver.java │ │ │ ├── ChildrenBlock.java │ │ │ └── reports │ │ │ │ ├── ParentSource.java │ │ │ │ ├── ReportNode.java │ │ │ │ └── ReportNodeStatus.java │ │ ├── dynamicbeans │ │ │ ├── DynamicBeanResolver.java │ │ │ ├── DynamicJsonObjectResolver.java │ │ │ ├── DynamicJsonValueResolver.java │ │ │ └── DynamicValueResolver.java │ │ ├── encryption │ │ │ ├── EncryptionManager.java │ │ │ ├── EncryptionManagerException.java │ │ │ ├── MissingKeyPairException.java │ │ │ └── UnknownKeyPairException.java │ │ ├── entities │ │ │ ├── DependencyTreeVisitorHook.java │ │ │ ├── Entity.java │ │ │ ├── EntityDependencyTreeVisitor.java │ │ │ ├── EntityManager.java │ │ │ ├── EntityManagerSupplier.java │ │ │ ├── EntityReference.java │ │ │ └── EntityReferencesMap.java │ │ ├── export │ │ │ ├── ExportConfiguration.java │ │ │ ├── ExportContext.java │ │ │ ├── ExportManager.java │ │ │ └── ExportResult.java │ │ ├── functions │ │ │ ├── ArtefactFunction.java │ │ │ └── FunctionGroupHandle.java │ │ ├── imports │ │ │ ├── ImportConfiguration.java │ │ │ ├── ImportContext.java │ │ │ ├── ImportManager.java │ │ │ └── ImportResult.java │ │ ├── maven │ │ │ ├── MavenArtifactIdentifier.java │ │ │ └── MavenArtifactIdentifierFromXmlParser.java │ │ ├── plans │ │ │ ├── Plan.java │ │ │ ├── PlanFilter.java │ │ │ ├── PlanNavigator.java │ │ │ ├── agents │ │ │ │ └── configuration │ │ │ │ │ ├── AgentPoolProvisioningConfiguration.java │ │ │ │ │ ├── AgentProvisioningConfiguration.java │ │ │ │ │ ├── AgentProvisioningConfigurationDeserializer.java │ │ │ │ │ ├── AgentProvisioningConfigurationSerializer.java │ │ │ │ │ ├── AutomaticAgentProvisioningConfiguration.java │ │ │ │ │ └── ManualAgentProvisioningConfiguration.java │ │ │ └── filters │ │ │ │ ├── PlanByExcludedCategoriesFilter.java │ │ │ │ ├── PlanByExcludedNamesFilter.java │ │ │ │ ├── PlanByIncludedCategoriesFilter.java │ │ │ │ ├── PlanByIncludedNamesFilter.java │ │ │ │ └── PlanMultiFilter.java │ │ ├── repositories │ │ │ ├── ImportResult.java │ │ │ └── RepositoryObjectReference.java │ │ ├── resolvers │ │ │ └── Resolver.java │ │ ├── tables │ │ │ ├── ThresholdMap.java │ │ │ └── ViewCounterMap.java │ │ └── yaml │ │ │ ├── SerializationUtils.java │ │ │ ├── YamlArtefactsLookuper.java │ │ │ ├── YamlFields.java │ │ │ ├── YamlModelUtils.java │ │ │ ├── deserializers │ │ │ ├── NamedEntityYamlDeserializer.java │ │ │ ├── StepYamlDeserializer.java │ │ │ ├── StepYamlDeserializerAddOn.java │ │ │ ├── StepYamlDeserializersScanner.java │ │ │ └── YamlDynamicValueDeserializer.java │ │ │ ├── model │ │ │ ├── AbstractYamlArtefact.java │ │ │ ├── NamedYamlArtefact.java │ │ │ ├── SimpleYamlArtefact.java │ │ │ └── YamlChildrenBlock.java │ │ │ ├── schema │ │ │ ├── AggregatedJsonSchemaFieldProcessor.java │ │ │ ├── AggregatingFieldMetadataExtractor.java │ │ │ ├── CollectionFieldProcessor.java │ │ │ ├── CommonFilteredFieldProcessor.java │ │ │ ├── DynamicValueFieldProcessor.java │ │ │ ├── DynamicValueSchemaDefinitionCreator.java │ │ │ ├── EnumFieldProcessor.java │ │ │ ├── JsonSchemaDefinitionAddOn.java │ │ │ ├── JsonSchemaDefinitionExtension.java │ │ │ ├── JsonSchemaExtension.java │ │ │ ├── JsonSchemaFieldProcessingException.java │ │ │ └── YamlJsonSchemaHelper.java │ │ │ └── serializers │ │ │ ├── NamedEntityYamlSerializer.java │ │ │ ├── StepYamlSerializer.java │ │ │ ├── StepYamlSerializerAddOn.java │ │ │ ├── StepYamlSerializersScanner.java │ │ │ └── YamlDynamicValueSerializer.java │ │ ├── expressions │ │ ├── ExpressionHandler.java │ │ ├── GroovyPool.java │ │ ├── GroovyPoolEntry.java │ │ ├── GroovyPoolFactory.java │ │ └── GroovyPoolKey.java │ │ ├── parameter │ │ ├── ParameterAccessor.java │ │ ├── ParameterManager.java │ │ ├── ParameterManagerException.java │ │ └── automation │ │ │ └── AutomationPackageParameterJsonSchema.java │ │ ├── reports │ │ └── CustomReportType.java │ │ ├── repositories │ │ └── ArtifactRepositoryConstants.java │ │ ├── resources │ │ ├── InMemoryResourceAccessor.java │ │ ├── InMemoryResourceRevisionAccessor.java │ │ ├── InvalidResourceFormatException.java │ │ ├── LayeredResourceAccessor.java │ │ ├── LayeredResourceManager.java │ │ ├── LocalResourceManagerImpl.java │ │ ├── ResourceAccessor.java │ │ ├── ResourceEntity.java │ │ ├── ResourceManager.java │ │ ├── ResourceManagerImpl.java │ │ ├── ResourceMissingException.java │ │ ├── ResourceRevisionAccessor.java │ │ ├── ResourceRevisionAccessorImpl.java │ │ ├── ResourceRevisionContainer.java │ │ ├── ResourceRevisionContent.java │ │ ├── ResourceRevisionContentImpl.java │ │ ├── ResourceRevisionFileHandle.java │ │ ├── ResourceRevisionFileHandleImpl.java │ │ ├── ResourceUploadResponse.java │ │ └── SimilarResourceExistingException.java │ │ └── security │ │ └── SecurityManager.java │ └── test │ ├── java │ └── step │ │ ├── automation │ │ └── packages │ │ │ └── ClassLoaderResourceFilesystemTest.java │ │ ├── core │ │ ├── dynamicbeans │ │ │ ├── DynamicBeanResolverTest.java │ │ │ ├── DynamicJsonObjectResolverTest.java │ │ │ ├── DynamicValueResolverTest.java │ │ │ ├── DynamicValueSerializationTest.java │ │ │ ├── TestBean.java │ │ │ └── TestBean2.java │ │ ├── entities │ │ │ └── EntityDependencyTreeVisitorTest.java │ │ ├── plans │ │ │ └── filters │ │ │ │ └── PlanMultiFilterTests.java │ │ └── resolvers │ │ │ └── ResolverTest.java │ │ └── resources │ │ └── ResourceManagerImplTest.java │ └── resources │ ├── .gitignore │ ├── folder.zip │ └── step │ └── resources │ ├── TestResource.txt │ └── TestResource2.txt ├── step-functions-plugins ├── pom.xml ├── step-functions-plugins-composite │ ├── pom.xml │ ├── step-functions-plugins-composite-controller-def │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── step │ │ │ └── plugins │ │ │ └── functions │ │ │ └── types │ │ │ ├── CompositeFunctionTypeControllerPlugin.java │ │ │ └── composite │ │ │ └── services │ │ │ └── CompositeFunctionServices.java │ ├── step-functions-plugins-composite-def │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── step │ │ │ │ │ └── plugins │ │ │ │ │ └── functions │ │ │ │ │ └── types │ │ │ │ │ ├── CompositeFunctionType.java │ │ │ │ │ ├── CompositeFunctionTypePlugin.java │ │ │ │ │ └── CompositeFunctionUtils.java │ │ │ └── resources │ │ │ │ └── .gitignore │ │ │ └── test │ │ │ ├── java │ │ │ └── step │ │ │ │ └── plugins │ │ │ │ └── functions │ │ │ │ └── types │ │ │ │ └── CompositeResolvedPlanBuilderTest.java │ │ │ └── resources │ │ │ └── .gitignore │ ├── step-functions-plugins-composite-handler │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── step │ │ │ │ └── plugins │ │ │ │ └── functions │ │ │ │ └── types │ │ │ │ └── composite │ │ │ │ └── ArtefactFunctionHandler.java │ │ │ └── test │ │ │ └── java │ │ │ └── step │ │ │ └── plugins │ │ │ └── functions │ │ │ └── types │ │ │ └── composite │ │ │ └── ArtefactFunctionHandlerTest.java │ └── step-functions-plugins-local-composite │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── plugins │ │ └── functions │ │ └── types │ │ └── LocalCompositeFunctionPlugin.java ├── step-functions-plugins-defs-all-os │ └── pom.xml ├── step-functions-plugins-java │ ├── pom.xml │ ├── step-functions-plugins-java-controller-def │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── step │ │ │ │ │ └── plugins │ │ │ │ │ └── java │ │ │ │ │ └── GeneralScriptFunctionControllerPlugin.java │ │ │ └── resources │ │ │ │ └── .gitignore │ │ │ └── test │ │ │ └── resources │ │ │ └── .gitignore │ ├── step-functions-plugins-java-def │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── step │ │ │ │ │ └── plugins │ │ │ │ │ └── java │ │ │ │ │ ├── AbstractScriptFunctionType.java │ │ │ │ │ ├── GeneralFunctionScriptLanguage.java │ │ │ │ │ ├── GeneralScriptFunction.java │ │ │ │ │ ├── GeneralScriptFunctionPlugin.java │ │ │ │ │ ├── GeneralScriptFunctionType.java │ │ │ │ │ └── automation │ │ │ │ │ └── YamlGeneralScriptFunction.java │ │ │ └── resources │ │ │ │ └── .gitignore │ │ │ └── test │ │ │ ├── java │ │ │ └── step │ │ │ │ └── plugins │ │ │ │ └── java │ │ │ │ ├── JavaJarHandlerTest.java │ │ │ │ └── ScriptHandlerTest.java │ │ │ └── resources │ │ │ ├── .gitignore │ │ │ └── scripts │ │ │ ├── errorHandler.groovy │ │ │ ├── errorHandler.js │ │ │ ├── errorScript.js │ │ │ ├── errorScriptWithAttachment.groovy │ │ │ ├── invalidExtension.dummy │ │ │ ├── noextension │ │ │ ├── test1.js │ │ │ ├── testGroovy1.groovy │ │ │ ├── testGroovyUTF8.groovy │ │ │ ├── testPython.py │ │ │ └── throwable.groovy │ ├── step-functions-plugins-java-handler-test │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── step │ │ │ └── plugins │ │ │ └── java │ │ │ └── handler │ │ │ └── MyKeywordLibrary.java │ ├── step-functions-plugins-java-handler-test2 │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── step │ │ │ └── plugins │ │ │ └── java │ │ │ └── handler │ │ │ └── MyKeywordLibrary2.java │ ├── step-functions-plugins-java-handler │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── step │ │ │ │ │ └── plugins │ │ │ │ │ ├── java │ │ │ │ │ └── handler │ │ │ │ │ │ ├── GeneralScriptHandler.java │ │ │ │ │ │ └── JavaJarHandler.java │ │ │ │ │ └── js223 │ │ │ │ │ └── handler │ │ │ │ │ └── ScriptHandler.java │ │ │ └── resources │ │ │ │ └── .gitignore │ │ │ └── test │ │ │ ├── java │ │ │ └── step │ │ │ │ └── plugins │ │ │ │ └── java │ │ │ │ └── handler │ │ │ │ └── GeneralScriptHandlerTest.java │ │ │ └── resources │ │ │ ├── .gitignore │ │ │ └── scripts │ │ │ ├── errorHandler.groovy │ │ │ ├── errorScript.js │ │ │ ├── errorScriptWithAttachment.groovy │ │ │ ├── test1.js │ │ │ ├── testGroovyUTF8.groovy │ │ │ └── throwable.groovy │ └── step-functions-plugins-java-keyword-handler │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── plugins │ │ └── java │ │ └── handler │ │ └── KeywordHandler.java ├── step-functions-plugins-jmeter │ ├── pom.xml │ ├── step-functions-plugins-jmeter-controller-def │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── step │ │ │ └── plugins │ │ │ └── jmeter │ │ │ └── JMeterPlugin.java │ ├── step-functions-plugins-jmeter-def │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── step │ │ │ │ │ └── plugins │ │ │ │ │ └── jmeter │ │ │ │ │ ├── JMeterFunction.java │ │ │ │ │ ├── JMeterFunctionType.java │ │ │ │ │ ├── JMeterFunctionTypeLocalPlugin.java │ │ │ │ │ └── automation │ │ │ │ │ └── YamlJMeterFunction.java │ │ │ └── resources │ │ │ │ └── .gitignore │ │ │ └── test │ │ │ ├── java │ │ │ └── step │ │ │ │ └── plugins │ │ │ │ └── jmeter │ │ │ │ └── JMeterHandlerTest.java │ │ │ └── resources │ │ │ └── scripts │ │ │ └── Demo_JMeter.jmx │ ├── step-functions-plugins-jmeter-handler │ │ ├── dependency-reduced-pom.xml │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── step │ │ │ │ └── plugins │ │ │ │ └── jmeter │ │ │ │ └── JMeterHandler.java │ │ │ └── resources │ │ │ └── .gitignore │ └── step-functions-plugins-jmeter-local-handler │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ └── step │ │ │ └── plugins │ │ │ └── jmeter │ │ │ ├── JMeterLocalHandler.java │ │ │ ├── SampleListenerImpl.java │ │ │ └── StepAppender.java │ │ └── resources │ │ └── .gitignore └── step-functions-plugins-node │ ├── pom.xml │ ├── step-functions-plugins-node-controller-def │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── plugins │ │ └── node │ │ └── NodePlugin.java │ └── step-functions-plugins-node-def │ ├── pom.xml │ └── src │ └── main │ └── java │ └── step │ └── plugins │ └── node │ ├── NodeFunction.java │ ├── NodeFunctionType.java │ ├── NodeLocalPlugin.java │ └── automation │ └── YamlNodeFunction.java ├── step-functions ├── pom.xml ├── step-functions-client-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── functions │ │ ├── accessor │ │ ├── CachedFunctionAccessor.java │ │ ├── FunctionAccessor.java │ │ └── LayeredFunctionAccessor.java │ │ ├── execution │ │ ├── FunctionExecutionService.java │ │ ├── FunctionExecutionServiceException.java │ │ └── TokenLifecycleInterceptor.java │ │ ├── io │ │ └── FunctionInput.java │ │ ├── manager │ │ └── FunctionManager.java │ │ ├── services │ │ └── GetTokenHandleParameter.java │ │ └── type │ │ ├── AbstractFunctionType.java │ │ ├── FunctionExecutionException.java │ │ ├── FunctionTypeConfiguration.java │ │ ├── FunctionTypeException.java │ │ ├── FunctionTypeRegistry.java │ │ └── SetupFunctionException.java ├── step-functions-client │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── step │ │ │ │ └── functions │ │ │ │ ├── execution │ │ │ │ ├── ConfigurableTokenLifecycleStrategy.java │ │ │ │ ├── FunctionExecutionServiceImpl.java │ │ │ │ └── TokenErrorListener.java │ │ │ │ ├── manager │ │ │ │ └── FunctionManagerImpl.java │ │ │ │ ├── runner │ │ │ │ └── FunctionRunner.java │ │ │ │ └── type │ │ │ │ └── FunctionTypeRegistryImpl.java │ │ └── resources │ │ │ └── .gitignore │ │ └── test │ │ └── java │ │ └── step │ │ └── functions │ │ ├── execution │ │ ├── ConfigurableTokenLifecycleStrategyTest.java │ │ ├── FunctionExecutionServiceImplTest.java │ │ └── JakartaOutputBuilder.java │ │ └── runner │ │ ├── FunctionRunnerTest.java │ │ ├── TestFunction.java │ │ ├── TestFunctionHandler.java │ │ └── TestFunctionType.java ├── step-functions-handler │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ ├── org │ │ │ │ └── glassfish │ │ │ │ │ └── json │ │ │ │ │ ├── OutputJsonArrayBuilderImpl.java │ │ │ │ │ ├── OutputJsonBuilderFactoryImpl.java │ │ │ │ │ ├── OutputJsonObjectBuilderImpl.java │ │ │ │ │ ├── OutputJsonProviderImpl.java │ │ │ │ │ └── OutputJsonStringImpl.java │ │ │ └── step │ │ │ │ └── functions │ │ │ │ └── handler │ │ │ │ ├── AbstractFunctionHandler.java │ │ │ │ ├── FunctionHandlerFactory.java │ │ │ │ ├── FunctionIOJakartaObjectMapperFactory.java │ │ │ │ ├── FunctionIOJavaxObjectMapperFactory.java │ │ │ │ ├── FunctionMessageHandler.java │ │ │ │ ├── JsonBasedFunctionHandler.java │ │ │ │ ├── MeasureTypes.java │ │ │ │ ├── ProcessBasedFunctionHandler.java │ │ │ │ └── json │ │ │ │ └── JsonObjectDeserializer.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── javax.json.spi.JsonProvider │ │ └── test │ │ ├── java │ │ └── step │ │ │ └── functions │ │ │ ├── handler │ │ │ ├── FunctionMessageHandlerTest.java │ │ │ ├── SecondTestFunctionHandler.java │ │ │ ├── TestFunctionHandler.java │ │ │ ├── TestInput.java │ │ │ └── TestOutput.java │ │ │ └── io │ │ │ └── OutputSerializationTest.java │ │ └── resources │ │ └── testResource.jar ├── step-functions-package-client │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── functions │ │ └── packages │ │ ├── FunctionPackage.java │ │ └── client │ │ ├── FunctionPackageClient.java │ │ ├── LibFileReference.java │ │ └── RemoteFunctionPackageClientImpl.java ├── step-functions-package-controller │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── step │ │ └── functions │ │ └── packages │ │ ├── FunctionPackagePlugin.java │ │ ├── FunctionPackageServices.java │ │ └── migration │ │ └── MigrationTasksRegistrationPlugin.java └── step-functions-package │ ├── .gitignore │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── step │ │ └── functions │ │ └── packages │ │ ├── EmbeddedFunctionPackageImporter.java │ │ ├── FunctionPackageAccessor.java │ │ ├── FunctionPackageAccessorImpl.java │ │ ├── FunctionPackageChangeWatcher.java │ │ ├── FunctionPackageEntity.java │ │ ├── FunctionPackageHandler.java │ │ ├── FunctionPackageManager.java │ │ ├── InMemoryFunctionPackageAccessorImpl.java │ │ ├── UnsupportedFunctionPackageType.java │ │ ├── handlers │ │ ├── AbstractFunctionPackageHandler.java │ │ ├── FunctionList.java │ │ ├── FunctionPackageUtils.java │ │ ├── JavaFunctionPackageDaemon.java │ │ ├── JavaFunctionPackageHandler.java │ │ ├── ObjectMapperResolver.java │ │ └── RepositoryArtifactFunctionPackageHandler.java │ │ └── migration │ │ ├── PlansInCompositeFunctionsMigrationTask.java │ │ └── ScreenTemplateFunctionTableExtensionsMigrationTask.java │ └── test │ ├── java │ └── step │ │ └── functions │ │ └── packages │ │ ├── EmbeddedFunctionPackageImporterTest.java │ │ ├── FunctionPackageManagerTest.java │ │ └── handlers │ │ ├── JavaFunctionPackageDaemonTest.java │ │ └── RepositoryArtifactFunctionPackageHandlerTest.java │ └── resources │ └── local │ └── java-plugin-handler-test.jar.json ├── step-ide ├── .gitignore ├── IDE.launch ├── pom.xml └── src │ └── main │ └── java │ └── step │ └── plugins │ └── ide │ └── IDEControllerPlugin.java ├── step-json-schema ├── pom.xml └── src │ └── main │ └── java │ └── step │ └── jsonschema │ ├── DefaultFieldMetadataExtractor.java │ ├── JsonSchema.java │ ├── JsonSchemaDefaultValueProvider.java │ └── RefJsonSchemaFieldProcessor.java ├── step-libs-maven-client ├── pom.xml └── src │ ├── main │ └── java │ │ └── step │ │ └── repositories │ │ └── artifact │ │ ├── LazyAuthenticationSelector.java │ │ └── MavenArtifactClient.java │ └── test │ └── java │ └── step │ └── repositories │ └── artifact │ └── MavenArtifactClientTest.java ├── step-maven-plugin ├── pom.xml └── src │ ├── main │ └── java │ │ └── step │ │ └── plugins │ │ └── maven │ │ ├── AbstractStepPluginMojo.java │ │ ├── DeployAutomationPackageMojo.java │ │ ├── ExecuteAutomationPackageMojo.java │ │ ├── TenantHelper.java │ │ └── UploadKeywordsPackageMojo.java │ └── test │ ├── java │ └── step │ │ └── plugins │ │ └── maven │ │ ├── AbstractMojoTest.java │ │ ├── DeployAutomationPackageMojoTest.java │ │ ├── ExecuteAutomationPackageMojoTest.java │ │ └── UploadKeywordsPackageMojoTest.java │ └── resources │ └── step │ └── plugins │ └── maven │ ├── test-file-jar-with-dependencies.jar │ └── test-file-jar.jar ├── step-node ├── .editorconfig ├── .gitignore ├── LICENSE ├── examples │ ├── .gitignore │ └── my-keyword-library │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── AgentConf.json │ │ ├── index.js │ │ ├── keywords │ │ └── keywords.js │ │ └── package.json └── step-node-agent │ ├── .eslintrc.js │ ├── .gitignore │ ├── .vscode │ └── launch.json │ ├── AgentConf.json │ ├── AgentConf.yaml │ ├── README │ ├── api │ ├── controllers │ │ ├── controller.js │ │ └── output.js │ ├── filemanager │ │ └── filemanager.js │ ├── routes │ │ └── routes.js │ └── runner │ │ └── runner.js │ ├── bin │ └── step-node-agent │ ├── index.js │ ├── keywords │ └── keywords.js │ ├── package.json │ ├── server.js │ └── test │ └── test.js ├── step-plans ├── pom.xml ├── step-plans-base-artefacts │ ├── .gitignore │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ ├── artefacts │ │ │ ├── AbstractForBlock.java │ │ │ ├── AfterSequence.java │ │ │ ├── AfterThread.java │ │ │ ├── Aggregation.java │ │ │ ├── Aggregator.java │ │ │ ├── ArtefactQueue.java │ │ │ ├── Assert.java │ │ │ ├── BaseArtefactPlugin.java │ │ │ ├── BeforeSequence.java │ │ │ ├── BeforeThread.java │ │ │ ├── CallFunction.java │ │ │ ├── CallPlan.java │ │ │ ├── Case.java │ │ │ ├── Check.java │ │ │ ├── DataSetArtefact.java │ │ │ ├── Echo.java │ │ │ ├── Entry.java │ │ │ ├── Export.java │ │ │ ├── Failure.java │ │ │ ├── ForBlock.java │ │ │ ├── ForEachBlock.java │ │ │ ├── FunctionGroup.java │ │ │ ├── IfBlock.java │ │ │ ├── PerformanceAssert.java │ │ │ ├── Placeholder.java │ │ │ ├── RetryIfFails.java │ │ │ ├── Return.java │ │ │ ├── Script.java │ │ │ ├── Sequence.java │ │ │ ├── Set.java │ │ │ ├── Sleep.java │ │ │ ├── StreamingArtefact.java │ │ │ ├── Switch.java │ │ │ ├── Synchronized.java │ │ │ ├── TestCase.java │ │ │ ├── TestScenario.java │ │ │ ├── TestSet.java │ │ │ ├── ThreadGroup.java │ │ │ ├── TokenSelector.java │ │ │ ├── While.java │ │ │ ├── automation │ │ │ │ ├── AbstractYamlForBlock.java │ │ │ │ ├── YamlCallFunction.java │ │ │ │ ├── YamlCallPlan.java │ │ │ │ ├── YamlCheck.java │ │ │ │ ├── YamlDataSet.java │ │ │ │ ├── YamlDynamicInputDeserializer.java │ │ │ │ ├── YamlDynamicInputSerializer.java │ │ │ │ ├── YamlDynamicInputs.java │ │ │ │ ├── YamlForBlock.java │ │ │ │ ├── YamlForEachBlock.java │ │ │ │ ├── YamlFunctionGroup.java │ │ │ │ ├── YamlKeywordDefinition.java │ │ │ │ ├── YamlKeywordDefinitionDeserializer.java │ │ │ │ ├── YamlKeywordDefinitionSerializer.java │ │ │ │ ├── YamlPerformanceAssert.java │ │ │ │ ├── YamlReturn.java │ │ │ │ ├── YamlSequence.java │ │ │ │ ├── YamlThreadGroup.java │ │ │ │ ├── YamlTokenSelector.java │ │ │ │ └── datasource │ │ │ │ │ ├── AbstractYamlDataSource.java │ │ │ │ │ ├── NamedYamlDataSource.java │ │ │ │ │ ├── NamedYamlDataSourceDeserializer.java │ │ │ │ │ ├── NamedYamlDataSourceSerializer.java │ │ │ │ │ ├── YamlCsvDataSource.java │ │ │ │ │ ├── YamlDataSourceLookuper.java │ │ │ │ │ ├── YamlExcelDataSource.java │ │ │ │ │ ├── YamlFileDataSource.java │ │ │ │ │ ├── YamlFolderDataSource.java │ │ │ │ │ ├── YamlGSheetDataSource.java │ │ │ │ │ ├── YamlJsonArrayDataSource.java │ │ │ │ │ ├── YamlJsonDataSource.java │ │ │ │ │ ├── YamlSequenceDataSource.java │ │ │ │ │ └── YamlSqlDataSource.java │ │ │ ├── filters │ │ │ │ ├── TestCaseFilter.java │ │ │ │ └── TestCaseIdFilter.java │ │ │ ├── handlers │ │ │ │ ├── AbstractSessionArtefactHandler.java │ │ │ │ ├── AssertHandler.java │ │ │ │ ├── CallFunctionHandler.java │ │ │ │ ├── CallFunctionTokenWrapperOwner.java │ │ │ │ ├── CallPlanHandler.java │ │ │ │ ├── CaseHandler.java │ │ │ │ ├── CheckHandler.java │ │ │ │ ├── DataSetHandler.java │ │ │ │ ├── EchoHandler.java │ │ │ │ ├── ExportHandler.java │ │ │ │ ├── FailureHandler.java │ │ │ │ ├── ForBlockHandler.java │ │ │ │ ├── FunctionGroupHandler.java │ │ │ │ ├── FunctionLocator.java │ │ │ │ ├── IfBlockHandler.java │ │ │ │ ├── JsonSchemaValidator.java │ │ │ │ ├── OutputJsonObject.java │ │ │ │ ├── PerformanceAssertHandler.java │ │ │ │ ├── PlaceholderHandler.java │ │ │ │ ├── PlanLocator.java │ │ │ │ ├── RetryIfFailsHandler.java │ │ │ │ ├── ReturnHandler.java │ │ │ │ ├── ScriptHandler.java │ │ │ │ ├── SelectorHelper.java │ │ │ │ ├── SequenceHandler.java │ │ │ │ ├── SetHandler.java │ │ │ │ ├── SleepHandler.java │ │ │ │ ├── StreamingArtefactHandler.java │ │ │ │ ├── SwitchHandler.java │ │ │ │ ├── SynchronizedHandler.java │ │ │ │ ├── TestCaseHandler.java │ │ │ │ ├── TestScenarioHandler.java │ │ │ │ ├── TestSetHandler.java │ │ │ │ ├── ThreadGroupHandler.java │ │ │ │ ├── TokenSelectorHelper.java │ │ │ │ ├── UserFriendlyJsonObject.java │ │ │ │ ├── WhileHandler.java │ │ │ │ ├── asserts │ │ │ │ │ ├── AbstractOperatorHandler.java │ │ │ │ │ ├── AssertOperatorHandler.java │ │ │ │ │ ├── AssertResult.java │ │ │ │ │ ├── BeginsWithOperatorHandler.java │ │ │ │ │ ├── ContainsOperatorHandler.java │ │ │ │ │ ├── EndsWithOperatorHandler.java │ │ │ │ │ ├── EqualsOperatorHandler.java │ │ │ │ │ ├── GreaterThanOperatorHandler.java │ │ │ │ │ ├── GreaterThanOrEqualsOperatorHandler.java │ │ │ │ │ ├── IsNullOperatorHandler.java │ │ │ │ │ ├── LessThanOperatorHandler.java │ │ │ │ │ ├── LessThanOrEqualsOperatorHandler.java │ │ │ │ │ └── MatchesOperatorHandler.java │ │ │ │ ├── functions │ │ │ │ │ ├── FunctionGroupSession.java │ │ │ │ │ ├── MaxAndMultiplyingTokenForecastingContext.java │ │ │ │ │ ├── MultiplyingTokenForecastingContext.java │ │ │ │ │ ├── NoMatchingTokenPoolException.java │ │ │ │ │ ├── PreProvisioningTokenAffinityEvaluator.java │ │ │ │ │ ├── TokenForecastingContext.java │ │ │ │ │ ├── TokenForecastingExecutionPlugin.java │ │ │ │ │ └── TokenSelectionCriteriaMapBuilder.java │ │ │ │ ├── loadtesting │ │ │ │ │ └── Pacer.java │ │ │ │ └── scheduler │ │ │ │ │ ├── DefaultTestSetScheduler.java │ │ │ │ │ ├── TestCaseBundle.java │ │ │ │ │ └── TestSetScheduler.java │ │ │ └── reports │ │ │ │ ├── AssertReportNode.java │ │ │ │ ├── BeforeSequenceReportNode.java │ │ │ │ ├── BeforeThreadReportNode.java │ │ │ │ ├── CallFunctionReportNode.java │ │ │ │ ├── CheckReportNode.java │ │ │ │ ├── EchoReportNode.java │ │ │ │ ├── FailureReportNode.java │ │ │ │ ├── ForBlockReportNode.java │ │ │ │ ├── IfBlockReportNode.java │ │ │ │ ├── PerformanceAssertReportNode.java │ │ │ │ ├── RetryIfFailsReportNode.java │ │ │ │ ├── SetReportNode.java │ │ │ │ ├── SleepReportNode.java │ │ │ │ ├── TestCaseReportNode.java │ │ │ │ ├── ThreadReportNode.java │ │ │ │ └── WhileReportNode.java │ │ │ ├── core │ │ │ ├── artefacts │ │ │ │ └── reports │ │ │ │ │ └── junitxml │ │ │ │ │ └── JUnitXmlReportBuilder.java │ │ │ ├── execution │ │ │ │ └── ExecutionContextWrapper.java │ │ │ └── plans │ │ │ │ └── PlanEntity.java │ │ │ ├── datapool │ │ │ ├── DataPoolFactory.java │ │ │ ├── DataSources.java │ │ │ ├── excel │ │ │ │ ├── CellIndexParser.java │ │ │ │ ├── ExcelDataPool.java │ │ │ │ ├── ExcelDataPoolImpl.java │ │ │ │ ├── ExcelFileLookup.java │ │ │ │ ├── ExcelFunctions.java │ │ │ │ ├── FormulaPatch.java │ │ │ │ ├── StyleSyntax.java │ │ │ │ ├── WorkbookFile.java │ │ │ │ └── WorkbookSet.java │ │ │ ├── file │ │ │ │ ├── CSVDataPool.java │ │ │ │ ├── CSVReaderDataPool.java │ │ │ │ ├── DirectoryDataPool.java │ │ │ │ ├── FileDataPool.java │ │ │ │ ├── FileDataPoolImpl.java │ │ │ │ ├── FileReaderDataPool.java │ │ │ │ └── FlatFileReaderDataPool.java │ │ │ ├── gsheet │ │ │ │ ├── GoogleSheetv4DataPool.java │ │ │ │ └── GoogleSheetv4DataPoolConfiguration.java │ │ │ ├── inmemory │ │ │ │ ├── JsonStringDataPoolConfiguration.java │ │ │ │ └── JsonStringDataPoolImpl.java │ │ │ ├── jdbc │ │ │ │ ├── SQLTableDataPool.java │ │ │ │ └── SQLTableDataPoolConfiguration.java │ │ │ ├── json │ │ │ │ ├── JsonArrayDataPoolConfiguration.java │ │ │ │ └── JsonArrayDataPoolImpl.java │ │ │ └── sequence │ │ │ │ ├── IntSequenceDataPool.java │ │ │ │ └── IntSequenceDataPoolImpl.java │ │ │ ├── engine │ │ │ └── plugins │ │ │ │ ├── BasePlugin.java │ │ │ │ ├── FunctionPlugin.java │ │ │ │ └── LocalFunctionPlugin.java │ │ │ ├── functions │ │ │ └── accessor │ │ │ │ ├── FunctionAccessorImpl.java │ │ │ │ ├── FunctionEntity.java │ │ │ │ └── InMemoryFunctionAccessorImpl.java │ │ │ ├── planbuilder │ │ │ ├── BaseArtefacts.java │ │ │ └── FunctionArtefacts.java │ │ │ ├── plans │ │ │ ├── assertions │ │ │ │ ├── PerformanceAssertPlugin.java │ │ │ │ └── PerformanceAssertSession.java │ │ │ └── parser │ │ │ │ └── yaml │ │ │ │ ├── YamlPlan.java │ │ │ │ └── migrations │ │ │ │ └── AfterBeforeYamlMigrationTask.java │ │ │ ├── plugins │ │ │ ├── executiontypes │ │ │ │ ├── BaseExecutionTypePlugin.java │ │ │ │ ├── DefaultExecutionType.java │ │ │ │ └── TestSetExecutionType.java │ │ │ ├── functions │ │ │ │ └── types │ │ │ │ │ ├── CompositeFunction.java │ │ │ │ │ └── automation │ │ │ │ │ └── YamlCompositeFunction.java │ │ │ ├── parametermanager │ │ │ │ └── ParameterManagerPlugin.java │ │ │ └── views │ │ │ │ └── functions │ │ │ │ ├── AbstractTimeBasedModel.java │ │ │ │ ├── AbstractTimeBasedView.java │ │ │ │ ├── ErrorDistribution.java │ │ │ │ ├── ErrorDistributionView.java │ │ │ │ ├── ErrorMapDeserializer.java │ │ │ │ ├── ErrorMapSerializer.java │ │ │ │ ├── ErrorRateEntry.java │ │ │ │ ├── ErrorRateView.java │ │ │ │ ├── ReportNodeStatisticsEntry.java │ │ │ │ ├── ReportNodeStatisticsView.java │ │ │ │ ├── ReportNodeStatusDistribution.java │ │ │ │ ├── ReportNodeStatusDistributionView.java │ │ │ │ └── TestcaseStatusDistributionView.java │ │ │ ├── reporting │ │ │ ├── JUnit4ReportWriter.java │ │ │ ├── JUnitReport.java │ │ │ ├── Junit4ReportConfig.java │ │ │ ├── ReportAttachmentsInfo.java │ │ │ └── ReportMetadata.java │ │ │ └── repositories │ │ │ ├── LocalRepository.java │ │ │ └── LocalRepositoryPlugin.java │ │ └── test │ │ ├── java │ │ └── step │ │ │ ├── artefacts │ │ │ ├── AbstractArtefactTest.java │ │ │ └── handlers │ │ │ │ ├── AbstractArtefactHandlerTest.java │ │ │ │ ├── AbstractFunctionHandlerTest.java │ │ │ │ ├── AbstractPlanTest.java │ │ │ │ ├── AssertHandlerTest.java │ │ │ │ ├── CallFunctionHandlerTest.java │ │ │ │ ├── CallPlanHandlerTest.java │ │ │ │ ├── CheckHandlerTest.java │ │ │ │ ├── ExportHandlerTest.java │ │ │ │ ├── ForHandlerTest.java │ │ │ │ ├── FunctionGroupHandlerTest.java │ │ │ │ ├── FunctionLocatorTest.java │ │ │ │ ├── IfBlockHandlerTest.java │ │ │ │ ├── PerformanceAssertHandlerTest.java │ │ │ │ ├── PlanLocatorTest.java │ │ │ │ ├── RetryIfFailsHandlerTest.java │ │ │ │ ├── ScriptHandlerTest.java │ │ │ │ ├── SequenceHandlerTest.java │ │ │ │ ├── SetVarHandlerTest.java │ │ │ │ ├── SkipArtefactHandlerTest.java │ │ │ │ ├── SleepHandlerTest.java │ │ │ │ ├── SwitchHandlerTest.java │ │ │ │ ├── SynchronizedHandlerTest.java │ │ │ │ ├── TestGroupHandler.java │ │ │ │ ├── TestScenarioHandlerTest.java │ │ │ │ ├── TestSetHandlerTest.java │ │ │ │ ├── TestXMLtoJSON.java │ │ │ │ ├── ThreadGroupHandlerTest.java │ │ │ │ ├── UserFriendlyJsonObjectTest.java │ │ │ │ ├── WhileHandlerTest.java │ │ │ │ ├── asserts │ │ │ │ ├── EqualsOperatorHandlerTest.java │ │ │ │ ├── GreaterThanOperatorHandlerTest.java │ │ │ │ └── LessThanOperatorHandlerTest.java │ │ │ │ ├── functions │ │ │ │ ├── FunctionGroupSessionTest.java │ │ │ │ ├── TokenSelectionCriteriaMapBuilderTest.java │ │ │ │ └── test │ │ │ │ │ ├── MyFunction.java │ │ │ │ │ ├── MyFunctionHandler.java │ │ │ │ │ ├── MyFunctionType.java │ │ │ │ │ └── MyKeyword.java │ │ │ │ └── loadtesting │ │ │ │ └── PacerTest.java │ │ │ ├── core │ │ │ └── agents │ │ │ │ └── provisioning │ │ │ │ └── AgentPoolRequirementSpecTest.java │ │ │ ├── datapool │ │ │ ├── AbstractDataPoolTest.java │ │ │ ├── excel │ │ │ │ ├── ExcelDataPoolTest.java │ │ │ │ ├── ExcelDataSetArtefactsTest.java │ │ │ │ ├── ExcelFunctionsTest.java │ │ │ │ ├── WorkbookFileTest.java │ │ │ │ └── WorkbookSetTest.java │ │ │ ├── file │ │ │ │ ├── CSVDataSetArtefactTest.java │ │ │ │ ├── CSVReaderDataPoolTest.java │ │ │ │ ├── DirectoryDataPoolTest.java │ │ │ │ └── FlatFileReaderDataPoolTest.java │ │ │ ├── gsheet │ │ │ │ └── GoogleSheetv4DataPoolTest.java │ │ │ ├── inmemory │ │ │ │ ├── JsonStringDataPoolTest.java │ │ │ │ └── JsonStringDataSetArtefactsTest.java │ │ │ ├── jdbc │ │ │ │ ├── SQLDataSetArtefactsTest.java │ │ │ │ └── SQLTableDataSetTest.java │ │ │ ├── json │ │ │ │ └── JsonArrayDataPoolTest.java │ │ │ └── sequence │ │ │ │ └── IntSequenceDataPoolTest.java │ │ │ ├── engine │ │ │ └── plugins │ │ │ │ └── FunctionPluginTest.java │ │ │ ├── plans │ │ │ └── parser │ │ │ │ └── yaml │ │ │ │ └── YamlPlanSerializationTest.java │ │ │ └── reporting │ │ │ ├── JUnit4ReportWriterTest.java │ │ │ ├── JunitReportEntryCollectorTest.java │ │ │ └── ResolvedPlanBuilderTest.java │ │ └── resources │ │ ├── BigExcel.xlsx │ │ ├── Excel-XLOOKUP.xlsx │ │ ├── Excel-large2.xlsx │ │ ├── Excel1.xlsx │ │ ├── Excel2.xlsx │ │ ├── ExcelDataPool.xlsx │ │ ├── ExcelDataPoolImmutable.xlsx │ │ ├── ExcelDataPoolValueChanged.xlsx │ │ ├── File.csv │ │ ├── File.txt │ │ ├── File.xlsx │ │ ├── File2.csv │ │ ├── WriteTest.xlsx │ │ ├── WriteTest2.xlsx │ │ ├── empty.csv │ │ ├── emptyFolder │ │ └── .gitignore │ │ ├── exportTest │ │ └── test │ │ ├── folder │ │ ├── File.txt │ │ └── File2.txt │ │ ├── junitReport │ │ ├── JUnit.xsd │ │ └── junit-4.xsd │ │ └── step │ │ ├── datapool │ │ └── file │ │ │ ├── testCSVReaderDataPoolPut.csv │ │ │ └── testCSVReaderDataPoolPut.expected.csv │ │ └── reporting │ │ ├── TEST-JUnit4ReportWriterTest-testSeveralTestsuites-expected.xml │ │ ├── TEST-JUnit4ReportWriterTest-testSimpleSequence-expected.xml │ │ └── TEST-JUnit4ReportWriterTest-testTestset-expected.xml ├── step-plans-core │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ ├── core │ │ │ ├── artefacts │ │ │ │ ├── CheckArtefact.java │ │ │ │ ├── WorkArtefactFactory.java │ │ │ │ ├── handlers │ │ │ │ │ ├── ArtefactHandler.java │ │ │ │ │ ├── ArtefactHandlerManager.java │ │ │ │ │ ├── ArtefactHandlerRegistry.java │ │ │ │ │ ├── ArtefactPathHelper.java │ │ │ │ │ ├── AtomicReportNodeStatusComposer.java │ │ │ │ │ ├── CancellableSleep.java │ │ │ │ │ ├── CheckArtefactHandler.java │ │ │ │ │ ├── ReportNodeAttributesManager.java │ │ │ │ │ └── SequentialArtefactScheduler.java │ │ │ │ └── reports │ │ │ │ │ ├── InMemoryReportNodeAccessor.java │ │ │ │ │ ├── ReportNodeAccessor.java │ │ │ │ │ ├── ReportNodeAccessorImpl.java │ │ │ │ │ ├── ReportNodeVisitorEventHandler.java │ │ │ │ │ ├── ReportTreeAccessor.java │ │ │ │ │ ├── ReportTreeVisitor.java │ │ │ │ │ ├── aggregated │ │ │ │ │ ├── AbstractAggregatedReportView.java │ │ │ │ │ ├── AggregatedReport.java │ │ │ │ │ ├── AggregatedReportView.java │ │ │ │ │ ├── AggregatedReportViewBuilder.java │ │ │ │ │ ├── AggregatedReportViewRequest.java │ │ │ │ │ ├── FlatAggregatedReport.java │ │ │ │ │ ├── FlatAggregatedReportView.java │ │ │ │ │ └── ReportNodeTimeSeries.java │ │ │ │ │ └── resolvedplan │ │ │ │ │ ├── ResolvedChildren.java │ │ │ │ │ ├── ResolvedPlanBuilder.java │ │ │ │ │ ├── ResolvedPlanNode.java │ │ │ │ │ ├── ResolvedPlanNodeAccessor.java │ │ │ │ │ └── ResolvedPlanNodeCachedAccessor.java │ │ │ ├── execution │ │ │ │ ├── AbstractExecutionEngineContext.java │ │ │ │ ├── DeprovisioningException.java │ │ │ │ ├── EventManager.java │ │ │ │ ├── ExecutionContext.java │ │ │ │ ├── ExecutionContextBindings.java │ │ │ │ ├── ExecutionEngine.java │ │ │ │ ├── ExecutionEngineContext.java │ │ │ │ ├── ExecutionEngineException.java │ │ │ │ ├── ExecutionEngineRunner.java │ │ │ │ ├── ExecutionFactory.java │ │ │ │ ├── OperationMode.java │ │ │ │ ├── ProvisioningException.java │ │ │ │ ├── ReportNodeCache.java │ │ │ │ ├── ReportNodeEventListener.java │ │ │ │ ├── model │ │ │ │ │ ├── AutomationPackageExecutionParameters.java │ │ │ │ │ ├── CommonExecutionParameters.java │ │ │ │ │ ├── Execution.java │ │ │ │ │ ├── ExecutionAccessor.java │ │ │ │ │ ├── ExecutionAccessorImpl.java │ │ │ │ │ ├── ExecutionLauncher.java │ │ │ │ │ ├── ExecutionMode.java │ │ │ │ │ ├── ExecutionParameterMapDeserializer.java │ │ │ │ │ ├── ExecutionParameterMapSerializer.java │ │ │ │ │ ├── ExecutionParameters.java │ │ │ │ │ ├── ExecutionProvider.java │ │ │ │ │ ├── ExecutionStatus.java │ │ │ │ │ ├── InMemoryExecutionAccessor.java │ │ │ │ │ ├── IsolatedAutomationPackageExecutionParameters.java │ │ │ │ │ ├── ReportExport.java │ │ │ │ │ └── ReportExportStatus.java │ │ │ │ └── type │ │ │ │ │ ├── ExecutionType.java │ │ │ │ │ ├── ExecutionTypeManager.java │ │ │ │ │ └── ExecutionTypePlugin.java │ │ │ ├── miscellaneous │ │ │ │ ├── ReportNodeAttachmentManager.java │ │ │ │ └── ValidationException.java │ │ │ ├── plans │ │ │ │ ├── InMemoryPlanAccessor.java │ │ │ │ ├── LayeredPlanAccessor.java │ │ │ │ ├── PlanAccessor.java │ │ │ │ ├── PlanAccessorImpl.java │ │ │ │ ├── PlanCompilationError.java │ │ │ │ ├── PlanCompiler.java │ │ │ │ ├── PlanCompilerException.java │ │ │ │ ├── PlanType.java │ │ │ │ ├── PlanTypeRegistry.java │ │ │ │ ├── builder │ │ │ │ │ └── PlanBuilder.java │ │ │ │ └── runner │ │ │ │ │ ├── DefaultPlanRunner.java │ │ │ │ │ ├── PlanRunner.java │ │ │ │ │ ├── PlanRunnerResult.java │ │ │ │ │ └── PlanRunnerResultAssert.java │ │ │ ├── plugins │ │ │ │ ├── ExecutionCallbacks.java │ │ │ │ └── threadmanager │ │ │ │ │ └── ThreadManager.java │ │ │ ├── repositories │ │ │ │ ├── AbstractRepository.java │ │ │ │ ├── ArtefactInfo.java │ │ │ │ ├── Repository.java │ │ │ │ ├── RepositoryObjectManager.java │ │ │ │ ├── TestRunStatus.java │ │ │ │ └── TestSetStatusOverview.java │ │ │ ├── scheduler │ │ │ │ ├── CronExclusion.java │ │ │ │ ├── ExecutionTaskAccessor.java │ │ │ │ ├── ExecutionTaskAccessorImpl.java │ │ │ │ ├── ExecutiontTaskParameters.java │ │ │ │ ├── InMemoryExecutionTaskAccessor.java │ │ │ │ ├── ScheduleEntity.java │ │ │ │ └── automation │ │ │ │ │ ├── AutomationPackageSchedule.java │ │ │ │ │ ├── AutomationPackageScheduleJsonSchema.java │ │ │ │ │ └── AutomationPackageScheduleRegistration.java │ │ │ ├── timeseries │ │ │ │ ├── TimeSeriesCollectionsBuilder.java │ │ │ │ └── TimeSeriesCollectionsSettings.java │ │ │ ├── variables │ │ │ │ ├── ImmutableVariableException.java │ │ │ │ ├── SimpleStringMap.java │ │ │ │ ├── UndefinedVariableException.java │ │ │ │ ├── Variable.java │ │ │ │ ├── VariableType.java │ │ │ │ └── VariablesManager.java │ │ │ └── views │ │ │ │ ├── AbstractView.java │ │ │ │ ├── InMemoryViewModelAccessor.java │ │ │ │ ├── View.java │ │ │ │ ├── ViewManager.java │ │ │ │ ├── ViewModel.java │ │ │ │ ├── ViewModelAccessor.java │ │ │ │ ├── ViewModelAccessorImpl.java │ │ │ │ └── ViewPlugin.java │ │ │ ├── datapool │ │ │ ├── DataPoolConfiguration.java │ │ │ ├── DataPoolRow.java │ │ │ ├── DataSet.java │ │ │ ├── DataSetHandle.java │ │ │ └── Utils.java │ │ │ ├── engine │ │ │ ├── execution │ │ │ │ ├── ExecutionManager.java │ │ │ │ ├── ExecutionVeto.java │ │ │ │ └── ExecutionVetoer.java │ │ │ └── plugins │ │ │ │ ├── AbstractExecutionEnginePlugin.java │ │ │ │ └── ExecutionEnginePlugin.java │ │ │ ├── parameter │ │ │ └── automation │ │ │ │ ├── AutomationPackageParameterHook.java │ │ │ │ └── AutomationPackageParametersRegistration.java │ │ │ ├── reporting │ │ │ └── ReportWriter.java │ │ │ └── threadpool │ │ │ ├── IntegerSequenceIterator.java │ │ │ ├── ThreadPool.java │ │ │ ├── ThreadPoolPlugin.java │ │ │ └── WorkerItemConsumerFactory.java │ │ └── test │ │ └── java │ │ └── step │ │ ├── core │ │ ├── execution │ │ │ ├── ExecutionContextTests.java │ │ │ └── ExecutionEngineTest.java │ │ ├── repositories │ │ │ └── AbstractRepositoryTest.java │ │ └── timeseries │ │ │ └── ReportNodeTimeSeriesTest.java │ │ └── threadpool │ │ └── ThreadPoolTest.java ├── step-plans-parser │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── step │ │ │ │ ├── plans │ │ │ │ ├── automation │ │ │ │ │ ├── AutomationPackagePlainTextPlanJsonSchema.java │ │ │ │ │ └── YamlPlainTextPlan.java │ │ │ │ └── nl │ │ │ │ │ ├── RootArtefactType.java │ │ │ │ │ └── parser │ │ │ │ │ ├── PlanParser.java │ │ │ │ │ ├── PlanStep.java │ │ │ │ │ └── PlanStepParser.java │ │ │ │ └── repositories │ │ │ │ └── parser │ │ │ │ ├── AbstractStep.java │ │ │ │ ├── CustomDescriptionStepParser.java │ │ │ │ ├── CustomExpectedStepParser.java │ │ │ │ ├── ParsingContext.java │ │ │ │ ├── StepParser.java │ │ │ │ ├── StepParserExtension.java │ │ │ │ ├── StepsParser.java │ │ │ │ ├── annotated │ │ │ │ ├── AbstractDescriptionStepParser.java │ │ │ │ ├── AnnotatedStepParser.java │ │ │ │ ├── DefaultDescriptionStepParser.java │ │ │ │ ├── DefaultExpectedStepParser.java │ │ │ │ └── Step.java │ │ │ │ ├── description │ │ │ │ ├── DescriptionStep.g4 │ │ │ │ ├── DescriptionStep.tokens │ │ │ │ ├── DescriptionStepBaseListener.java │ │ │ │ ├── DescriptionStepBaseVisitor.java │ │ │ │ ├── DescriptionStepLexer.java │ │ │ │ ├── DescriptionStepLexer.tokens │ │ │ │ ├── DescriptionStepListener.java │ │ │ │ ├── DescriptionStepParser.java │ │ │ │ ├── DescriptionStepVisitor.java │ │ │ │ └── ParseGrammar - Description.launch │ │ │ │ ├── expected │ │ │ │ ├── Expected Gen Launch.run.xml │ │ │ │ ├── ExpectedStep.g4 │ │ │ │ ├── ExpectedStep.tokens │ │ │ │ ├── ExpectedStepBaseListener.java │ │ │ │ ├── ExpectedStepBaseVisitor.java │ │ │ │ ├── ExpectedStepLexer.java │ │ │ │ ├── ExpectedStepLexer.tokens │ │ │ │ ├── ExpectedStepListener.java │ │ │ │ ├── ExpectedStepParser.java │ │ │ │ ├── ExpectedStepVisitor.java │ │ │ │ └── ParseGrammar - Expected.launch │ │ │ │ ├── keyvalue │ │ │ │ ├── KeyValue.g4 │ │ │ │ ├── KeyValue.tokens │ │ │ │ ├── KeyValueBaseListener.java │ │ │ │ ├── KeyValueBaseVisitor.java │ │ │ │ ├── KeyValueLexer.java │ │ │ │ ├── KeyValueLexer.tokens │ │ │ │ ├── KeyValueListener.java │ │ │ │ ├── KeyValueParser.java │ │ │ │ ├── KeyValueVisitor.java │ │ │ │ └── ParseGrammar - KeyValue.launch │ │ │ │ └── steps │ │ │ │ ├── DescriptionStep.java │ │ │ │ ├── ExpectedStep.java │ │ │ │ └── SingleValueStep.java │ │ └── resources │ │ │ └── step │ │ │ └── repositories │ │ │ └── parser │ │ │ └── BaseScript.groovy │ │ └── test │ │ ├── java │ │ └── step │ │ │ ├── plans │ │ │ └── nl │ │ │ │ └── parser │ │ │ │ └── PlanParserTest.java │ │ │ └── repositories │ │ │ └── parser │ │ │ ├── AbstractDescriptionStepParserTest.java │ │ │ ├── AbstractStepParserTest.java │ │ │ ├── BaseScriptTest.java │ │ │ ├── CustomDescriptionStepParserTest.java │ │ │ ├── CustomExpectedStepParserTest.java │ │ │ ├── DefaultDescriptionStepParserTest.java │ │ │ ├── DefaultExpectedStepParserTest.java │ │ │ ├── StepsParserTest.java │ │ │ └── keyvalue │ │ │ └── KeyValueParserTest.java │ │ └── resources │ │ └── step │ │ └── plans │ │ └── nl │ │ └── parser │ │ ├── complexPlan.plan │ │ ├── test.plan │ │ ├── testAssert.expected.txt │ │ ├── testAssert.plan │ │ ├── testInnerFunctions.expected.txt │ │ └── testInnerFunctions.plan ├── step-plans-runners │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── step │ │ │ └── localrunner │ │ │ └── LocalPlanRunner.java │ │ └── test │ │ └── java │ │ ├── ResolvedPlanBuilderForCompositeKeywordTest.java │ │ └── step │ │ └── localrunner │ │ ├── LocalPlanRunnerTest.java │ │ ├── LocalRunnerTestLibrary.java │ │ └── TokenForecastingTest.java ├── step-plans-yaml-parser │ ├── YamlPlanConversionTool.run.xml │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── step │ │ │ │ └── plans │ │ │ │ └── parser │ │ │ │ └── yaml │ │ │ │ ├── YamlPlanConversionTool.java │ │ │ │ ├── YamlPlanFields.java │ │ │ │ ├── YamlPlanReader.java │ │ │ │ ├── YamlPlanReaderExtender.java │ │ │ │ ├── YamlPlanReaderExtension.java │ │ │ │ ├── deserializers │ │ │ │ ├── NamedYamlArtefactDeserializer.java │ │ │ │ └── UpgradableYamlPlanDeserializer.java │ │ │ │ ├── editor │ │ │ │ ├── LineNumberByJsonPointerResolver.java │ │ │ │ ├── YamlEditorPlan.java │ │ │ │ ├── YamlEditorPlanType.java │ │ │ │ └── YamlEditorPlanTypeCompiler.java │ │ │ │ ├── model │ │ │ │ └── YamlPlanVersions.java │ │ │ │ ├── schema │ │ │ │ ├── YamlPlanJsonSchemaGenerator.java │ │ │ │ ├── YamlPlanSchemaGenerationTool.java │ │ │ │ └── YamlPlanValidationException.java │ │ │ │ └── serializers │ │ │ │ └── NamedYamlArtefactSerializer.java │ │ └── resources │ │ │ └── step │ │ │ └── plans │ │ │ └── parser │ │ │ └── yaml │ │ │ └── step-yaml-plan-schema-os-1.1.0.json │ │ └── test │ │ ├── java │ │ └── step │ │ │ └── plans │ │ │ └── parser │ │ │ └── yaml │ │ │ ├── YamlPlanReaderTest.java │ │ │ ├── editor │ │ │ ├── LineNumberByJsonPointerResolverTest.java │ │ │ └── YamlEditorPlanTypeTest.java │ │ │ ├── migrations │ │ │ └── TestYamlPlanMigrationTaskV0.java │ │ │ └── schema │ │ │ └── YamlPlanJsonSchemaGeneratorTest.java │ │ └── resources │ │ └── step │ │ └── plans │ │ └── parser │ │ └── yaml │ │ ├── agents │ │ ├── test-agents-configuration-yaml.yml │ │ └── test-expected-agents-configuration-tech-plan.yml │ │ ├── basic │ │ ├── test-converted-plan.yml │ │ ├── test-expected-tech-plan.yml │ │ └── test.plan.yml │ │ ├── beforeAfterMigration │ │ ├── test-before-after-old-version-tech-plan.yml │ │ ├── test-before-after-old-version.yml │ │ ├── test-before-after-plan.yml │ │ └── test-before-after-tech-plan.yml │ │ ├── benchmark │ │ ├── test-benchmark-sample-plan.yml │ │ ├── test-converted-benchmark-sample-plan.yml │ │ └── test-expected-benchmark-sample-tech-plan.yml │ │ ├── build │ │ ├── test-build-tech-plan.yml │ │ ├── test-expected-build-plan.yml │ │ └── test-expected-build-tech-converted-plan.yml │ │ ├── call-plan │ │ ├── test-call-plan.yml │ │ ├── test-converted-from-tech-call-plan.yml │ │ └── test-expected-call-tech-plan.yml │ │ ├── check │ │ ├── test-check-plan.yml │ │ ├── test-converted-from-tech-check-plan.yml │ │ └── test-expected-check-tech-plan.yml │ │ ├── controls │ │ ├── test-controls-plan.yml │ │ └── test-expected-controls-tech-plan.yml │ │ ├── data-set │ │ ├── test-data-set-converted-plan.yml │ │ ├── test-data-set-plan.yml │ │ └── test-expected-data-set-tech-plan.yml │ │ ├── editor │ │ └── test-valid-source.yml │ │ ├── for-each │ │ ├── test-expected-for-each-tech-plan.yml │ │ ├── test-for-each-converted-plan.yml │ │ └── test-for-each-plan.yml │ │ ├── for │ │ ├── test-expected-for-tech-plan.yml │ │ ├── test-for-converted-plan.yml │ │ └── test-for-plan.yml │ │ ├── function-group │ │ ├── test-expected-function-group-tech-plan.yml │ │ ├── test-function-group-converted-plan.yml │ │ └── test-function-group-plan.yml │ │ ├── invalid │ │ ├── test-invalid-plan-1.yml │ │ └── test-invalid-plan-2.yml │ │ ├── migration │ │ ├── test-migration-expected-tech-plan.yml │ │ └── test-migration-plan.yml │ │ ├── plaintext │ │ ├── plaintext-expected-plan.yml │ │ └── plaintext.plan │ │ ├── return │ │ ├── test-expected-return-tech-plan.yml │ │ ├── test-return-converted-plan.yml │ │ └── test-return-plan.yml │ │ └── selection-criteria │ │ ├── test-expected-selection-criteria-tech-plan.yml │ │ ├── test-selection-criteria-converted-plan.yml │ │ └── test-selection-criteria-plan.yml └── step-plans-yaml-support │ ├── pom.xml │ └── src │ └── main │ └── java │ └── step │ └── plans │ └── parser │ └── yaml │ ├── migrations │ ├── AbstractYamlPlanMigrationTask.java │ └── YamlPlanMigration.java │ ├── model │ └── YamlResourceReference.java │ ├── schema │ └── YamlResourceReferenceSchemaDefinitionCreator.java │ └── serializers │ ├── YamlResourceReferenceDeserializer.java │ └── YamlResourceReferenceSerializer.java └── step-repositories ├── pom.xml └── step-repositories-artifact ├── .gitignore ├── pom.xml └── src ├── main └── java │ └── step │ └── repositories │ └── artifact │ ├── AbstractArtifactRepository.java │ ├── ArtifactRepositoryPlugin.java │ ├── MavenArtifactRepository.java │ └── ResourceArtifactRepository.java └── test ├── java └── step │ └── repositories │ └── artifact │ ├── AbstractMavenArtifactRepositoryTest.java │ ├── MavenArtifactRepositoryFormattingIssueTest.java │ ├── MavenArtifactRepositoryTest.java │ └── ResourceArtifactRepositoryTest.java └── resources └── step └── repositories └── artifact ├── plans-with-keywords.jar ├── step-junit-tests-invalid.jar └── step-junit-tests.jar /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | bin/ 3 | target/ 4 | .settings/ 5 | *.class 6 | *.log 7 | *.bak 8 | .classpath 9 | .project 10 | *.iml 11 | node_modules/ 12 | bower_components/ 13 | .DS_Store 14 | /step-agent-3.9.1-SNAPSHOT.zip 15 | /step-controller-3.9.1-SNAPSHOT.zip 16 | step-controller/step-controller-base-plugins/resources/ 17 | /step-automation-packages/step-automation-packages-reader/src/test/resources/step-automation-packages-sample1.jar 18 | /step-automation-packages/step-automation-packages-manager/resources/ 19 | /step-automation-packages/step-automation-packages-manager/src/test/resources/samples/ 20 | /step-cli/step-cli-launcher/src/test/resources/samples/ 21 | work/ 22 | /step-cli/step-cli-core/src/test/resources/testReports/ -------------------------------------------------------------------------------- /.run/YamlPlanSchemaGenerationTool.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /git-hooks/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Exense policy hook -- should be stored as "commit-msg" in the git hooks folder 4 | # 5 | # This hook ensures that commit messages always start with an issue number followed by a space and at least one more character. 6 | # Only the first line of the commit message is checked. 7 | # If for some reason, this policy should be ignored for a commit, you may pass the --no-verify flag. 8 | 9 | filtered="$(head -n 1 "$1" | egrep '[A-Z]{2,}-[0-9]+[ -].+$')" 10 | test "" = "$filtered" && { 11 | echo >&2 "POLICY REJECT: Commit message must start with issue number followed by space and message (e.g. 'SED-123 bugfix')" 12 | exit 1 13 | } 14 | exit 0 -------------------------------------------------------------------------------- /logback-maven.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /step-agent/.gitignore: -------------------------------------------------------------------------------- 1 | work/ 2 | resources/ -------------------------------------------------------------------------------- /step-agent/AgentRunner.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | -------------------------------------------------------------------------------- /step-agent/logback-local-run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /step-agent/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-agent/src/test/.gitignore: -------------------------------------------------------------------------------- 1 | work/filemanager -------------------------------------------------------------------------------- /step-agent/src/test/resources/AgentConf.json: -------------------------------------------------------------------------------- 1 | { 2 | "gridHost":"http://localhost:8081", 3 | "registrationPeriod":1000, 4 | "gridReadTimeout":20000, 5 | "workingDir":"src/test/work", 6 | "tokenGroups":[ 7 | { 8 | "capacity":10, 9 | "tokenConf":{ 10 | "attributes":{ 11 | "key":"val" 12 | }, 13 | "properties":{ 14 | 15 | } 16 | } 17 | } 18 | ], 19 | "properties":{ 20 | "plugins.jmeter.home":"/path/to/jmeter" 21 | } 22 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-client/src/main/java/step/automation/packages/client/AutomationPackageClientException.java: -------------------------------------------------------------------------------- 1 | package step.automation.packages.client; 2 | 3 | public class AutomationPackageClientException extends Exception { 4 | public AutomationPackageClientException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-controller/.gitignore: -------------------------------------------------------------------------------- 1 | src/test/resources/samples -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-controller/src/test/resources/step/automation/packages/expectedTestpackDescriptor.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 1.0.0 2 | name: "My package" 3 | keywords: 4 | - JMeter: 5 | name: "JMeter keyword from automation package" 6 | description: "JMeter keyword 1" 7 | executeLocally: false 8 | useCustomTemplate: true 9 | callTimeout: 1000 10 | jmeterTestplan: "jmeterProject1/jmeterProject1.xml" 11 | plans: 12 | - name: "Test excel plan" 13 | root: 14 | sequence: 15 | name: Sequence 16 | children: 17 | - forEach: 18 | description: "test excel" 19 | dataSource: 20 | excel: 21 | file: "excel/excel1.xlsx" 22 | worksheet: "myWorksheet" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-controller/src/test/resources/step/automation/packages/picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-controller/src/test/resources/step/automation/packages/picture.png -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-controller/src/test/resources/step/automation/packages/step-automation-packages.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-controller/src/test/resources/step/automation/packages/step-automation-packages.zip -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit-model/pom.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | ch.exense.step 13 | step-automation-packages 14 | 0.0.0-SNAPSHOT 15 | 16 | 17 | 4.0.0 18 | 19 | step-automation-packages-junit-model 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit-model/src/main/java/step/junit/categories/LocalJMeter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.junit.categories; 20 | 21 | public interface LocalJMeter { 22 | } 23 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/java/step/automation/packages/junit/StepAutomationPackageRunAllTest.java: -------------------------------------------------------------------------------- 1 | package step.automation.packages.junit; 2 | 3 | import org.junit.experimental.categories.Category; 4 | import org.junit.runner.RunWith; 5 | import step.junit.categories.LocalJMeter; 6 | import step.junit.runner.Step; 7 | import step.junit.runners.annotations.ExecutionParameters; 8 | 9 | @Category(LocalJMeter.class) 10 | @RunWith(Step.class) 11 | @ExecutionParameters({"PARAM_EXEC","Value","PARAM_EXEC2","Value","PARAM_EXEC3","Value"}) 12 | public class StepAutomationPackageRunAllTest { 13 | 14 | public void test() {} 15 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/java/step/automation/packages/junit/StepAutomationPackageRunSimpleTest.java: -------------------------------------------------------------------------------- 1 | package step.automation.packages.junit; 2 | 3 | import org.junit.runner.RunWith; 4 | import step.junit.runner.Step; 5 | 6 | @RunWith(Step.class) 7 | @IncludePlans(value = {"Test Plan", "General Script Plan", "Test Plan with Composite", "Plan with Call Plan"}) 8 | public class StepAutomationPackageRunSimpleTest { 9 | 10 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/java/step/automation/packages/junit/StepAutomationPackageRunWithCategories.java: -------------------------------------------------------------------------------- 1 | package step.automation.packages.junit; 2 | 3 | import org.junit.runner.RunWith; 4 | import step.junit.runner.Step; 5 | 6 | @RunWith(Step.class) 7 | @IncludePlanCategories(value = {"My Category A", "My Category B"}) 8 | @ExcludePlanCategories(value = {"My Category C", "My Category D"}) 9 | public class StepAutomationPackageRunWithCategories { 10 | 11 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/java/step/automation/packages/junit/StepAutomationPackagesPlanAnnotation.java: -------------------------------------------------------------------------------- 1 | package step.automation.packages.junit; 2 | 3 | import org.junit.experimental.categories.Category; 4 | import org.junit.runner.RunWith; 5 | import step.junit.categories.LocalJMeter; 6 | import step.junit.runner.Step; 7 | import step.junit.runners.annotations.Plans; 8 | 9 | /** 10 | * Tests that in plans listed in {@link Plans} we can call the keywords defined in current automation package 11 | * (i.e. in automation-package.yml descriptor). 12 | */ 13 | @Category(LocalJMeter.class) 14 | @RunWith(Step.class) 15 | @Plans({"testAutomation.plan"}) 16 | @IncludePlans({"testAutomation.plan"}) 17 | public class StepAutomationPackagesPlanAnnotation { 18 | 19 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/jsProject/jsSample.js: -------------------------------------------------------------------------------- 1 | var input = JSON.parse(inputJson) 2 | context.setPayloadJson(JSON.stringify(input)); -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/plans/assertsTest.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing Asserts" 3 | planWithAssert 4 | Assert key = "value" 5 | Assert key beginsWith "value" 6 | Assert key not beginsWith "value2" 7 | Assert missingKey isNull 8 | Assert key not isNull 9 | Assert intKey > 76 10 | Assert intKey < 78 11 | Assert intKey >= 76 12 | Assert intKey >= 77 13 | Assert intKey <= 78 14 | Assert intKey <= 77 15 | Assert intKey = 77 16 | Assert boolKey = true 17 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/plans/composite-simple-plan.yml: -------------------------------------------------------------------------------- 1 | name: "simple yaml plan" 2 | root: 3 | sequence: 4 | nodeName: Sequence 5 | children: 6 | - echo: 7 | nodeName: Echo 8 | text: "My composite from simple plan" 9 | - callKeyword: 10 | nodeName: CallKeyword 11 | keyword: "callExisting3" 12 | inputs: 13 | - stringInput: 14 | expression: "'abc'" 15 | - intInput: 777 -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/plans/composite1.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "My composite" 3 | callExisting2 4 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/plans/plan1.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing Plan1" 3 | callNonExisting 4 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/plans/plan2.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing Plan2" 3 | callExisting 4 | Echo "${PARAM_EXEC} exists" 5 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/plans/plan3.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing Plan3" 3 | MyCompoInPackage 4 | Echo "${PARAM_EXEC} exists" 5 | Check Expression = true 6 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/testAutomation.plan: -------------------------------------------------------------------------------- 1 | TestCase 2 | Echo "Testing Automation package functions" 3 | JMeterAutomation url="www.exense.ch" 4 | Echo "JMeterAutomation called" 5 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit/src/test/resources/testFolder/file1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-junit/src/test/resources/testFolder/file1 -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/java/step/junit5/runner/StepAutomationPackageRunAllTest.java: -------------------------------------------------------------------------------- 1 | package step.junit5.runner; 2 | 3 | import org.junit.experimental.categories.Category; 4 | import step.junit.categories.LocalJMeter; 5 | import step.junit.runners.annotations.ExecutionParameters; 6 | 7 | @Category(LocalJMeter.class) 8 | @ExecutionParameters({"PARAM_EXEC","Value","PARAM_EXEC2","Value","PARAM_EXEC3","Value"}) 9 | public class StepAutomationPackageRunAllTest extends StepJUnit5 { 10 | 11 | public void test() {} 12 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/java/step/junit5/runner/StepAutomationPackageRunSimpleTest.java: -------------------------------------------------------------------------------- 1 | package step.junit5.runner; 2 | 3 | import step.automation.packages.junit.IncludePlans; 4 | 5 | @IncludePlans(value = {"Test Plan", "General Script Plan", "Test Plan with Composite", "Plan with Call Plan"}) 6 | public class StepAutomationPackageRunSimpleTest extends StepJUnit5 { 7 | 8 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/java/step/junit5/runner/StepAutomationPackageRunWithCategories.java: -------------------------------------------------------------------------------- 1 | package step.junit5.runner; 2 | 3 | import step.automation.packages.junit.ExcludePlanCategories; 4 | import step.automation.packages.junit.IncludePlanCategories; 5 | 6 | @IncludePlanCategories(value = {"My Category A", "My Category B"}) 7 | @ExcludePlanCategories(value = {"My Category C", "My Category D"}) 8 | public class StepAutomationPackageRunWithCategories extends StepJUnit5 { 9 | 10 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/java/step/junit5/runner/StepAutomationPackagesPlanAnnotation.java: -------------------------------------------------------------------------------- 1 | package step.junit5.runner; 2 | 3 | import org.junit.experimental.categories.Category; 4 | import step.automation.packages.junit.IncludePlans; 5 | import step.junit.categories.LocalJMeter; 6 | import step.junit.runners.annotations.Plans; 7 | 8 | /** 9 | * Tests that in plans listed in {@link Plans} we can call the keywords defined in current automation package 10 | * (i.e. in automation-package.yml descriptor). 11 | */ 12 | @Category(LocalJMeter.class) 13 | @Plans({"testAutomation.plan"}) 14 | @IncludePlans({"testAutomation.plan"}) 15 | public class StepAutomationPackagesPlanAnnotation extends StepJUnit5 { 16 | 17 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/jsProject/jsSample.js: -------------------------------------------------------------------------------- 1 | var input = JSON.parse(inputJson) 2 | context.setPayloadJson(JSON.stringify(input)); -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/plans/assertsTest.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing Asserts" 3 | planWithAssert 4 | Assert key = "value" 5 | Assert key beginsWith "value" 6 | Assert key not beginsWith "value2" 7 | Assert missingKey isNull 8 | Assert key not isNull 9 | Assert intKey > 76 10 | Assert intKey < 78 11 | Assert intKey >= 76 12 | Assert intKey >= 77 13 | Assert intKey <= 78 14 | Assert intKey <= 77 15 | Assert intKey = 77 16 | Assert boolKey = true 17 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/plans/composite-simple-plan.yml: -------------------------------------------------------------------------------- 1 | name: "simple yaml plan" 2 | root: 3 | sequence: 4 | nodeName: Sequence 5 | children: 6 | - echo: 7 | nodeName: Echo 8 | text: "My composite from simple plan" 9 | - callKeyword: 10 | nodeName: CallKeyword 11 | keyword: "callExisting3" 12 | inputs: 13 | - stringInput: 14 | expression: "'abc'" 15 | - intInput: 777 -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/plans/composite1.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "My composite" 3 | callExisting2 4 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/plans/plan1.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing Plan1" 3 | callNonExisting 4 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/plans/plan2.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing Plan2" 3 | callExisting 4 | Echo "${PARAM_EXEC} exists" 5 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/plans/plan3.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing Plan3" 3 | MyCompoInPackage 4 | Echo "${PARAM_EXEC} exists" 5 | Check Expression = true 6 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/testAutomation.plan: -------------------------------------------------------------------------------- 1 | TestCase 2 | Echo "Testing Automation package functions" 3 | JMeterAutomation url="www.exense.ch" 4 | Echo "JMeterAutomation called" 5 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-junit5/src/test/resources/testFolder/file1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-junit5/src/test/resources/testFolder/file1 -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-manager/src/main/java/step/junit/runner/StepClassParserResult.java: -------------------------------------------------------------------------------- 1 | package step.junit.runner; 2 | 3 | import step.core.plans.Plan; 4 | 5 | public class StepClassParserResult { 6 | 7 | private final String name; 8 | private final Plan plan; 9 | private final Exception initializingException; 10 | 11 | public StepClassParserResult(String name, Plan plan, Exception initializingException) { 12 | super(); 13 | this.name = name; 14 | this.plan = plan; 15 | this.initializingException = initializingException; 16 | } 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public Plan getPlan() { 23 | return plan; 24 | } 25 | 26 | public Exception getInitializingException() { 27 | return initializingException; 28 | } 29 | } -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-malformed/src/main/resources/jmeterProject1/jmeterProject1.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-samples/step-automation-packages-malformed/src/main/resources/jmeterProject1/jmeterProject1.xml -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-echo/src/main/resources/automation-package.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 1.0.0 2 | name: "My package" 3 | fragments: 4 | - "plans.yml" 5 | - "parameters.yml" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-echo/src/main/resources/parameters.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | - key: myKey 3 | value: myValue 4 | description: some description 5 | activationScript: abc 6 | priority: 10 7 | protectedValue: true 8 | scope: APPLICATION 9 | scopeEntity: entity 10 | - key: mySimpleKey 11 | value: mySimpleValue -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-echo/src/main/resources/plans.yml: -------------------------------------------------------------------------------- 1 | plans: 2 | - name: Test Plan 3 | root: 4 | testCase: 5 | children: 6 | - echo: 7 | text: "Just echo" 8 | - echo: 9 | text: 10 | expression: "mySimpleKey" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-junit/src/main/resources/automation-package.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 1.0.0 2 | name: "My package" 3 | fragments: 4 | - "keywords.yml" 5 | - "plans.yml" 6 | - "schedules.yml" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-junit/src/main/resources/jmeterProject1/jmeterProject1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-junit/src/main/resources/keywords.yml: -------------------------------------------------------------------------------- 1 | keywords: 2 | - JMeter: 3 | name: "JMeter keyword from automation package" 4 | description: "JMeter keyword 1" 5 | executeLocally: false 6 | useCustomTemplate: true 7 | callTimeout: 1000 8 | jmeterTestplan: "jmeterProject1/jmeterProject1.xml" 9 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-junit/src/main/resources/plan.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing annotated plan" 3 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-junit/src/main/resources/plans.yml: -------------------------------------------------------------------------------- 1 | plans: 2 | - name: Test Plan 3 | root: 4 | testCase: 5 | children: 6 | - echo: 7 | text: "Just echo" 8 | - callKeyword: 9 | keyword: "MyKeyword2" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-junit/src/main/resources/schedules.yml: -------------------------------------------------------------------------------- 1 | schedules: 2 | - name: "firstSchedule" 3 | cron: "0 15 10 ? * *" 4 | planName: "Test Plan" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample-junit/src/test/java/step/junit/runner/RunSampleTest.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.junit.runner; 20 | 21 | import org.junit.runner.RunWith; 22 | 23 | @RunWith(Step.class) 24 | public class RunSampleTest { 25 | } 26 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/automation-package.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 1.0.0 2 | name: "My package" 3 | fragments: 4 | - "keywords.yml" 5 | - "plans.yml" 6 | - "schedules.yml" 7 | - "parameters.yml" 8 | - "unknown.yml" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/jmeterProject1/jmeterProject1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/jmeterProject2/jmeterProject2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/jsProject/jsSample.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/jsProject/jsSample.js -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/lib/fakeLib.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/lib/fakeLib.jar -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/nodeProject/nodeSample.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/nodeProject/nodeSample.ts -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/parameters.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | - key: myKey 3 | value: myValue 4 | description: some description 5 | activationScript: abc 6 | priority: 10 7 | protectedValue: true 8 | scope: GLOBAL -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/plan.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing annotated plan" 3 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/plan2.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing annotated plan" 3 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/plans.yml: -------------------------------------------------------------------------------- 1 | plans: 2 | - name: Test Plan 3 | root: 4 | testCase: 5 | children: 6 | - echo: 7 | text: "Just echo" 8 | - name: Test Plan with Composite 9 | root: 10 | testCase: 11 | children: 12 | - echo: 13 | text: "Calling composite" 14 | - callKeyword: 15 | keyword: "Composite keyword from AP" 16 | children: 17 | - check: 18 | expression: "output.output1.equals('value')" 19 | - check: 20 | expression: "output.output2.equals('some thing dynamic')" 21 | - name: Test Plan 2 22 | root: 23 | testCase: 24 | children: 25 | - echo: 26 | text: "Just echo" 27 | plansPlainText: 28 | - name: Plain text plan 29 | rootType: Sequence 30 | categories: 31 | - PlainTextPlan 32 | file: plan2.plan -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/schedules.yml: -------------------------------------------------------------------------------- 1 | schedules: 2 | - name: "firstSchedule" 3 | cron: "0 15 10 ? * *" 4 | planName: "Test Plan" 5 | - name: "secondSchedule" 6 | active: false 7 | cron: "0 15 11 ? * *" 8 | planName: "Test Plan 2" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1-extended/src/main/resources/unknown.yml: -------------------------------------------------------------------------------- 1 | unknown: 2 | - someFieldA: valueA 3 | someFieldB: valueB -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/.apignore: -------------------------------------------------------------------------------- 1 | /ignored 2 | /ignoredFile.yml -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/automation-package.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 1.0.0 2 | name: "My package" 3 | fragments: 4 | - "keywords.yml" 5 | - "plans/*.yml" 6 | - "schedules.yml" 7 | - "parameters.yml" 8 | - "unknown.yml" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/ignored/ignoredFile.txt: -------------------------------------------------------------------------------- 1 | This file should be ignored in AP -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/ignoredFile.yml: -------------------------------------------------------------------------------- 1 | #I should be ignored -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/jmeterProject1/jmeterProject1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/jsProject/jsSample.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/jsProject/jsSample.js -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/keywords.yml: -------------------------------------------------------------------------------- 1 | keywords: 2 | - JMeter: 3 | name: "JMeter keyword from automation package" 4 | description: "JMeter keyword 1" 5 | executeLocally: false 6 | useCustomTemplate: true 7 | callTimeout: 1000 8 | jmeterTestplan: "jmeterProject1/jmeterProject1.xml" 9 | - Composite: 10 | name: "Composite keyword from AP" 11 | plan: 12 | root: 13 | testCase: 14 | children: 15 | - echo: 16 | text: "Just echo" 17 | - return: 18 | output: 19 | - output1: "value" 20 | - output2: 21 | expression: "'some thing dynamic'" 22 | - GeneralScript: 23 | name: "GeneralScript keyword from AP" 24 | scriptLanguage: javascript 25 | scriptFile: "jsProject/jsSample.js" 26 | librariesFile: "lib/fakeLib.jar" 27 | - Node: 28 | name: "NodeAutomation" 29 | jsfile: "nodeProject/nodeSample.ts" 30 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/lib/fakeLib.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/lib/fakeLib.jar -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/nodeProject/nodeSample.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/nodeProject/nodeSample.ts -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/parameters.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | - key: myKey 3 | value: myValue 4 | description: some description 5 | activationScript: abc 6 | priority: 10 7 | protectedValue: true 8 | scope: APPLICATION 9 | scopeEntity: entity 10 | - key: mySimpleKey 11 | value: mySimpleValue 12 | - key: myDynamicParam 13 | value: 14 | expression: "mySimpleKey" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/plan.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing annotated plan" 3 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/plans/plan1.yml: -------------------------------------------------------------------------------- 1 | plans: 2 | - name: Test Plan 3 | categories: 4 | - Yaml Plan 5 | root: 6 | testCase: 7 | children: 8 | - echo: 9 | text: "Just echo" 10 | - echo: 11 | text: 12 | expression: "mySimpleKey" 13 | - callKeyword: 14 | nodeName: CallMyKeyword2 15 | keyword: "MyKeyword2" 16 | inputs: 17 | - myInput: "myValue" 18 | plansPlainText: 19 | - name: Plain text plan 20 | rootType: Sequence 21 | categories: 22 | - PlainTextPlan 23 | file: plans/plan2.plan -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/plans/plan2.plan: -------------------------------------------------------------------------------- 1 | Sequence 2 | Echo "Testing annotated plan" 3 | End -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/plans/plan2.yml: -------------------------------------------------------------------------------- 1 | plans: 2 | - name: Test Plan with Composite 3 | categories: 4 | - Yaml Plan 5 | - Composite 6 | root: 7 | testCase: 8 | children: 9 | - echo: 10 | text: "Calling composite" 11 | - callKeyword: 12 | keyword: "Composite keyword from AP" 13 | children: 14 | - check: 15 | expression: "output.output1.equals('value')" 16 | - check: 17 | expression: "output.output2.equals('some thing dynamic')" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/schedules.yml: -------------------------------------------------------------------------------- 1 | schedules: 2 | - name: "firstSchedule" 3 | cron: "0 15 10 ? * *" 4 | cronExclusions: 5 | - "0 0 9 25 * ?" 6 | - "0 0 9 20 * ?" 7 | planName: "Test Plan" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample1/src/main/resources/unknown.yml: -------------------------------------------------------------------------------- 1 | unknown: 2 | - someFieldA: valueA 3 | someFieldB: valueB -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample2/src/main/resources/automation-package.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 1.0.0 2 | name: "My package" 3 | keywords: 4 | - JMeter: 5 | name: "JMeter keyword from automation package" 6 | description: "JMeter keyword 1" 7 | executeLocally: false 8 | useCustomTemplate: true 9 | callTimeout: 1000 10 | jmeterTestplan: "jmeterProject1/jmeterProject1.xml" 11 | plans: 12 | - name: "Test excel plan" 13 | root: 14 | sequence: 15 | name: Sequence 16 | children: 17 | - forEach: 18 | description: "test excel" 19 | dataSource: 20 | excel: 21 | file: "excel/excel1.xlsx" 22 | worksheet: "myWorksheet" -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample2/src/main/resources/excel/excel1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-automation-packages/step-automation-packages-samples/step-automation-packages-sample2/src/main/resources/excel/excel1.xlsx -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-samples/step-automation-packages-sample2/src/main/resources/jmeterProject1/jmeterProject1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-yaml/src/test/resources/step/automation/packages/yaml/descriptors/emptyKeywordDescriptor.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 1.0.0 2 | name: "empty-package" 3 | -------------------------------------------------------------------------------- /step-automation-packages/step-automation-packages-yaml/src/test/resources/step/automation/packages/yaml/descriptors/jmeterKeywordDescriptor.yml: -------------------------------------------------------------------------------- 1 | schemaVersion: 1.0.0 2 | name: "jmeter-package" 3 | keywords: 4 | - JMeter: 5 | name: "JMeter keyword from automation package" 6 | description: "JMeter keyword 1" 7 | executeLocally: false 8 | useCustomTemplate: true 9 | callTimeout: 1000 10 | jmeterTestplan: "jmeterProject1/jmeterProject1.xml" 11 | routing: 12 | criteriaA: valueA 13 | criteriaB: valueB 14 | schema: 15 | type: object 16 | properties: 17 | firstName: 18 | type: string 19 | lastName: 20 | type: string 21 | required: [ "firstName", "lastName" ] 22 | -------------------------------------------------------------------------------- /step-cli/step-cli-core/src/main/java/step/cli/CliToolLogging.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.cli; 20 | 21 | public interface CliToolLogging { 22 | void logError(String errorText, Throwable e); 23 | 24 | void logInfo(String infoText, Throwable e); 25 | } 26 | -------------------------------------------------------------------------------- /step-cli/step-cli-launcher/src/test/resources/customCli.properties: -------------------------------------------------------------------------------- 1 | stepUrl=http://localhost:8081 2 | executionParameters=key2=defaultValue2|key3=defaultValue3|key4=defaultValue4 -------------------------------------------------------------------------------- /step-cli/step-cli-launcher/src/test/resources/customCli2.properties: -------------------------------------------------------------------------------- 1 | projectName=testProject 2 | token=abc 3 | executionParameters=key4=prioDefaultValue4 -------------------------------------------------------------------------------- /step-cli/step-cli-launcher/src/test/resources/step/cli/apignore/.apignore: -------------------------------------------------------------------------------- 1 | #* 2 | .dotIgnoreFile.txt 3 | ignoreFile.txt 4 | /.rootDotIgnoreFile.txt 5 | 6 | ignore-folder-or-file 7 | ignore-folder-pattern/ 8 | ignore-folder-pattern-for-file/ 9 | */any-sub-folder/ 10 | /root-ignore-folder 11 | *.exe 12 | **/any-nested-folder 13 | */test/**/aa 14 | 15 | -------------------------------------------------------------------------------- /step-commons/src/main/java/step/commons/buffering/ObjectFilter.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.commons.buffering; 20 | 21 | public interface ObjectFilter { 22 | 23 | boolean matches(T o); 24 | } 25 | -------------------------------------------------------------------------------- /step-commons/src/main/resources/logback-for-test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-measurement/src/main/java/step/plugins/measurements/MeasurementHandler.java: -------------------------------------------------------------------------------- 1 | package step.plugins.measurements; 2 | 3 | import step.core.execution.ExecutionContext; 4 | import step.core.execution.ExecutionEngineContext; 5 | 6 | import java.util.List; 7 | 8 | public interface MeasurementHandler { 9 | 10 | 11 | void initializeExecutionContext(ExecutionEngineContext executionEngineContext, ExecutionContext executionContext); 12 | void processMeasurements(List measurements); 13 | void processGauges( List measurements); 14 | void afterExecutionEnd(ExecutionContext context); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/AttributeValuesStats.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | import java.util.concurrent.atomic.AtomicInteger; 6 | 7 | public class AttributeValuesStats { 8 | 9 | private Map valuesCount = new HashMap<>(); 10 | private int totalCount; 11 | 12 | public Map getValuesCount() { 13 | return valuesCount; 14 | } 15 | 16 | public void incrementTotalCount() { 17 | totalCount++; 18 | } 19 | 20 | public int getTotalCount() { 21 | return totalCount; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/TimeSeriesRebuildRequest.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries; 2 | 3 | public class TimeSeriesRebuildRequest { 4 | 5 | private String executionId; 6 | 7 | public String getExecutionId() { 8 | return executionId; 9 | } 10 | 11 | public void setExecutionId(String executionId) { 12 | this.executionId = executionId; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/TimeSeriesRebuildResponse.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries; 2 | 3 | public class TimeSeriesRebuildResponse { 4 | 5 | private long numberOfMeasurementsProcessed; 6 | 7 | public TimeSeriesRebuildResponse(long numberOfMeasurementsProcessed) { 8 | this.numberOfMeasurementsProcessed = numberOfMeasurementsProcessed; 9 | } 10 | 11 | public long getNumberOfMeasurementsProcessed() { 12 | return numberOfMeasurementsProcessed; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/api/AttributeStats.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.api; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | 5 | import java.util.Map; 6 | 7 | public class AttributeStats { 8 | 9 | @NotNull 10 | private String name; 11 | 12 | @NotNull 13 | private double usagePercentage; 14 | 15 | public AttributeStats(String name, double usagePercentage) { 16 | this.name = name; 17 | this.usagePercentage = usagePercentage; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public double getUsagePercentage() { 25 | return usagePercentage; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/api/MeasurementsStats.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.api; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.Set; 8 | 9 | public class MeasurementsStats { 10 | 11 | @NotNull 12 | private long count; 13 | @NotNull 14 | private Set attributes; 15 | 16 | // attribute - values percentages 17 | private Map> values; 18 | 19 | public MeasurementsStats(long count, Set attributes, Map> values) { 20 | this.count = count; 21 | this.attributes = attributes; 22 | this.values = values; 23 | } 24 | 25 | public long getCount() { 26 | return count; 27 | } 28 | 29 | public Set getAttributes() { 30 | return attributes; 31 | } 32 | 33 | public Map> getValues() { 34 | return values; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/api/OQLVerifyResponse.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.api; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import jakarta.validation.constraints.NotNull; 5 | 6 | import java.util.Set; 7 | 8 | public class OQLVerifyResponse { 9 | 10 | @NotNull 11 | @JsonProperty("valid") 12 | private final boolean isValid; 13 | @NotNull 14 | @JsonProperty("hasUnknownFields") 15 | private final boolean hasUnknownFields; 16 | @NotNull 17 | private final Set fields; 18 | 19 | public OQLVerifyResponse(boolean isValid, boolean hasUnknownFields, Set fields) { 20 | this.isValid = isValid; 21 | this.hasUnknownFields = hasUnknownFields; 22 | this.fields = fields; 23 | } 24 | 25 | public boolean isValid() { 26 | return isValid; 27 | } 28 | 29 | public boolean hasUnknownFields() { 30 | return hasUnknownFields; 31 | } 32 | 33 | public Set getFields() { 34 | return fields; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/DashboardAccessor.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards; 2 | 3 | import step.core.accessors.AbstractAccessor; 4 | import step.core.collections.Collection; 5 | import step.core.collections.Filters; 6 | import step.plugins.timeseries.dashboards.model.DashboardView; 7 | 8 | import java.util.stream.Stream; 9 | 10 | public class DashboardAccessor extends AbstractAccessor { 11 | 12 | public DashboardAccessor(Collection collectionDriver) { 13 | super(collectionDriver); 14 | } 15 | 16 | public Stream findLegacyDashboards() { 17 | return collectionDriver.find(Filters.equals("metadata.isLegacy", true), null, null, null, 0); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/AxesColorizationType.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | public enum AxesColorizationType { 4 | 5 | STROKE, // only the stroke of each series is colorized 6 | FILL // each series is filled with color 7 | 8 | } 9 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/AxesDisplayType.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | public enum AxesDisplayType { 4 | 5 | LINE, 6 | BAR_CHART 7 | 8 | } 9 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/ChartSettings.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | import step.core.timeseries.metric.MetricAttribute; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | public class ChartSettings { 10 | 11 | 12 | @NotNull 13 | private AxesSettings primaryAxes; 14 | 15 | private AxesSettings secondaryAxes; 16 | 17 | 18 | public AxesSettings getPrimaryAxes() { 19 | return primaryAxes; 20 | } 21 | 22 | public ChartSettings setPrimaryAxes(AxesSettings primaryAxes) { 23 | this.primaryAxes = primaryAxes; 24 | return this; 25 | } 26 | 27 | public AxesSettings getSecondaryAxes() { 28 | return secondaryAxes; 29 | } 30 | 31 | public ChartSettings setSecondaryAxes(AxesSettings secondaryAxes) { 32 | this.secondaryAxes = secondaryAxes; 33 | return this; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/DashletType.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | public enum DashletType { 4 | CHART, 5 | TABLE, 6 | PIE_CHART 7 | } 8 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/TableChartColumn.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | public enum TableChartColumn { 4 | 5 | COUNT, 6 | SUM, 7 | AVG, 8 | MIN, 9 | MAX, 10 | PCL_1, 11 | PCL_2, 12 | PCL_3, 13 | TPS, 14 | TPH 15 | 16 | } 17 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/TimeRange.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | 5 | public class TimeRange { 6 | @NotNull 7 | private long from; 8 | @NotNull 9 | private long to; 10 | 11 | public long getFrom() { 12 | return from; 13 | } 14 | 15 | public TimeRange setFrom(long from) { 16 | this.from = from; 17 | return this; 18 | } 19 | 20 | public long getTo() { 21 | return to; 22 | } 23 | 24 | public TimeRange setTo(long to) { 25 | this.to = to; 26 | return this; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/TimeRangeRelativeSelection.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | 5 | public class TimeRangeRelativeSelection { 6 | private String label; 7 | @NotNull 8 | private Long timeInMs; 9 | 10 | public String getLabel() { 11 | return label; 12 | } 13 | 14 | public TimeRangeRelativeSelection setLabel(String label) { 15 | this.label = label; 16 | return this; 17 | } 18 | 19 | public Long getTimeInMs() { 20 | return timeInMs; 21 | } 22 | 23 | public TimeRangeRelativeSelection setTimeInMs(Long timeInMs) { 24 | this.timeInMs = timeInMs; 25 | return this; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/TimeRangeSelection.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | 5 | public class TimeRangeSelection { 6 | @NotNull 7 | private TimeRangeSelectionType type; 8 | private TimeRange absoluteSelection; 9 | private TimeRangeRelativeSelection relativeSelection; 10 | 11 | public TimeRangeSelectionType getType() { 12 | return type; 13 | } 14 | 15 | public TimeRangeSelection setType(TimeRangeSelectionType type) { 16 | this.type = type; 17 | return this; 18 | } 19 | 20 | public TimeRange getAbsoluteSelection() { 21 | return absoluteSelection; 22 | } 23 | 24 | public TimeRangeSelection setAbsoluteSelection(TimeRange absoluteSelection) { 25 | this.absoluteSelection = absoluteSelection; 26 | return this; 27 | } 28 | 29 | public TimeRangeRelativeSelection getRelativeSelection() { 30 | return relativeSelection; 31 | } 32 | 33 | public TimeRangeSelection setRelativeSelection(TimeRangeRelativeSelection relativeSelection) { 34 | this.relativeSelection = relativeSelection; 35 | return this; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/TimeRangeSelectionType.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | public enum TimeRangeSelectionType { 4 | FULL, 5 | ABSOLUTE, 6 | RELATIVE 7 | } 8 | -------------------------------------------------------------------------------- /step-controller-plugins/step-controller-plugins-timeseries/src/main/java/step/plugins/timeseries/dashboards/model/TimeSeriesFilterItemType.java: -------------------------------------------------------------------------------- 1 | package step.plugins.timeseries.dashboards.model; 2 | 3 | public enum TimeSeriesFilterItemType { 4 | OPTIONS, // this is a text with suggestions 5 | FREE_TEXT, 6 | EXECUTION, // custom behavior with picker for executions 7 | TASK, // custom behavior with picker for tasks 8 | PLAN, // custom behavior with picker for plans 9 | NUMERIC, 10 | DATE , 11 | } 12 | -------------------------------------------------------------------------------- /step-controller/ControllerServer.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 | -------------------------------------------------------------------------------- /step-controller/step-controller-backend/.gitignore: -------------------------------------------------------------------------------- 1 | attachments/ 2 | /resources/ 3 | /src/main/resources/webapp/doc/rest/favicon-16x16.png 4 | /src/main/resources/webapp/doc/rest/favicon-32x32.png 5 | /src/main/resources/webapp/doc/rest/oauth2-redirect.html 6 | /src/main/resources/webapp/doc/rest/swagger-ui.css 7 | /src/main/resources/webapp/doc/rest/swagger-ui.css.map 8 | /src/main/resources/webapp/doc/rest/swagger-ui.js 9 | /src/main/resources/webapp/doc/rest/swagger-ui.js.map 10 | /src/main/resources/webapp/doc/rest/swagger-ui-bundle.js 11 | /src/main/resources/webapp/doc/rest/swagger-ui-bundle.js.map 12 | /src/main/resources/webapp/doc/rest/swagger-ui-es-bundle.js 13 | /src/main/resources/webapp/doc/rest/swagger-ui-es-bundle.js.map 14 | /src/main/resources/webapp/doc/rest/swagger-ui-es-bundle-core.js 15 | /src/main/resources/webapp/doc/rest/swagger-ui-es-bundle-core.js.map 16 | /src/main/resources/webapp/doc/rest/swagger-ui-standalone-preset.js 17 | /src/main/resources/webapp/doc/rest/swagger-ui-standalone-preset.js.map 18 | -------------------------------------------------------------------------------- /step-controller/step-controller-backend/logback-local-run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /step-controller/step-controller-backend/src/main/java/step/controller/ControllerServer.java: -------------------------------------------------------------------------------- 1 | package step.controller; 2 | 3 | /*Wrapper class to avoid changing start scripts*/ 4 | public class ControllerServer { 5 | public static void main(String[] args) throws Exception { 6 | step.framework.server.ControllerServer.main(args); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /step-controller/step-controller-backend/src/test/.gitignore: -------------------------------------------------------------------------------- 1 | work/filemanager 2 | work/maven -------------------------------------------------------------------------------- /step-controller/step-controller-backend/src/test/resources/ldap.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-controller/step-controller-backend/src/test/resources/ldap.jks -------------------------------------------------------------------------------- /step-controller/step-controller-backend/src/test/resources/step/core/export/3_13_textPlan.json: -------------------------------------------------------------------------------- 1 | {"_class" : "step.plans.nl.PlainTextPlan","customFields" : null,"attributes" : { "name" : "ForEachSession", "project" : "5ecfaa00c9f407202cb53ee8"},"root" : null,"functions" : null,"subPlans" : null,"visible" : true,"source" : "","id" : "5eb2789c117dff15d2bc8bc0"} -------------------------------------------------------------------------------- /step-controller/step-controller-backend/src/test/resources/step/core/export/allParameters_3_15.sta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-controller/step-controller-backend/src/test/resources/step/core/export/allParameters_3_15.sta -------------------------------------------------------------------------------- /step-controller/step-controller-backend/src/test/resources/step/core/export/dummyExcel.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-controller/step-controller-backend/src/test/resources/step/core/export/dummyExcel.xls -------------------------------------------------------------------------------- /step-controller/step-controller-backend/src/test/resources/step/core/export/export_3_15_7.sta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-controller/step-controller-backend/src/test/resources/step/core/export/export_3_15_7.sta -------------------------------------------------------------------------------- /step-controller/step-controller-backend/src/test/resources/step/core/export/export_3_16_1.sta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-controller/step-controller-backend/src/test/resources/step/core/export/export_3_16_1.sta -------------------------------------------------------------------------------- /step-controller/step-controller-base-plugins/src/main/java/step/plugins/bookmark/BookmarkAccessor.java: -------------------------------------------------------------------------------- 1 | package step.plugins.bookmark; 2 | 3 | import step.core.access.User; 4 | 5 | public interface BookmarkAccessor { 6 | void deleteUserBookmarks(User user); 7 | } 8 | -------------------------------------------------------------------------------- /step-controller/step-controller-base-plugins/src/main/java/step/plugins/bookmark/BookmarkAccessorImpl.java: -------------------------------------------------------------------------------- 1 | package step.plugins.bookmark; 2 | 3 | import step.core.access.User; 4 | import step.core.accessors.AbstractAccessor; 5 | import step.core.collections.Collection; 6 | 7 | import java.util.Map; 8 | 9 | public class BookmarkAccessorImpl extends AbstractAccessor implements BookmarkAccessor { 10 | public BookmarkAccessorImpl(Collection collectionDriver) { 11 | super(collectionDriver); 12 | } 13 | 14 | @Override 15 | public void deleteUserBookmarks(User user) { 16 | this.findManyByCriteria(Map.of("userId", user.getId().toHexString())).forEach(b-> this.remove(b.getId())); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /step-controller/step-controller-base-plugins/src/main/java/step/plugins/bookmark/BookmarkServices.java: -------------------------------------------------------------------------------- 1 | package step.plugins.bookmark; 2 | 3 | import io.swagger.v3.oas.annotations.tags.Tag; 4 | import jakarta.inject.Singleton; 5 | import jakarta.ws.rs.Path; 6 | import step.controller.services.entities.AbstractEntityServices; 7 | import step.core.entities.EntityManager; 8 | import step.framework.server.security.SecuredContext; 9 | 10 | @Singleton 11 | @Path("bookmarks") 12 | @Tag(name = "Bookmarks") 13 | @Tag(name = "Entity=UserBookmark") 14 | @SecuredContext(key = "entity", value = "bookmark", allowAllSignedInUsers = true) // all users/role should have rights 15 | public class BookmarkServices extends AbstractEntityServices { 16 | public BookmarkServices() { 17 | super(EntityManager.bookmarks); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /step-controller/step-controller-base-plugins/src/main/java/step/plugins/bookmark/UserBookmark.java: -------------------------------------------------------------------------------- 1 | package step.plugins.bookmark; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | import step.core.accessors.AbstractOrganizableObject; 5 | 6 | public class UserBookmark extends AbstractOrganizableObject { 7 | 8 | @NotNull 9 | private String userId; 10 | @NotNull 11 | private String url; 12 | 13 | public UserBookmark() { 14 | } 15 | 16 | public String getUserId() { 17 | return userId; 18 | } 19 | 20 | public void setUserId(String userId) { 21 | this.userId = userId; 22 | } 23 | 24 | public String getUrl() { 25 | return url; 26 | } 27 | 28 | public void setUrl(String url) { 29 | this.url = url; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /step-controller/step-controller-base-plugins/src/main/java/step/plugins/encryption/EncryptionManagerDependencyPlugin.java: -------------------------------------------------------------------------------- 1 | package step.plugins.encryption; 2 | 3 | import step.core.encryption.EncryptionManager; 4 | import step.core.plugins.AbstractControllerPlugin; 5 | import step.core.plugins.Plugin; 6 | 7 | /** 8 | * Plugins requiring an {@link EncryptionManager} should depend on this plugin. 9 | * The initialization of the {@link EncryptionManager} is done by 3rd party plugins 10 | * that we'll be guaranteed to run before this plugin 11 | * 12 | */ 13 | @Plugin 14 | public class EncryptionManagerDependencyPlugin extends AbstractControllerPlugin { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /step-controller/step-controller-base-plugins/src/main/java/step/plugins/remote/RemoteCollectionPlugin.java: -------------------------------------------------------------------------------- 1 | package step.plugins.remote; 2 | 3 | import step.core.GlobalContext; 4 | import step.core.plugins.AbstractControllerPlugin; 5 | import step.core.plugins.Plugin; 6 | 7 | @Plugin 8 | public class RemoteCollectionPlugin extends AbstractControllerPlugin { 9 | @Override 10 | public void serverStart(GlobalContext context) { 11 | context.getServiceRegistrationCallback().registerService(RemoteCollectionServices.class); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /step-controller/step-controller-base-plugins/src/main/java/step/plugins/table/TableExportRequest.java: -------------------------------------------------------------------------------- 1 | package step.plugins.table; 2 | 3 | import step.framework.server.tables.service.TableRequest; 4 | 5 | import java.util.List; 6 | 7 | public class TableExportRequest { 8 | 9 | private TableRequest tableRequest; 10 | private List fields; 11 | 12 | public TableRequest getTableRequest() { 13 | return tableRequest; 14 | } 15 | 16 | public void setTableRequest(TableRequest tableRequest) { 17 | this.tableRequest = tableRequest; 18 | } 19 | 20 | public List getFields() { 21 | return fields; 22 | } 23 | 24 | public void setFields(List fields) { 25 | this.fields = fields; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-controller/step-controller-base-plugins/src/test/resources/QuotaManagerConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | node.getClass().getSimpleName().equals("TestCaseReportNode")?user:null 5 | 1 6 | 0 7 | 8 | 9 | -------------------------------------------------------------------------------- /step-controller/step-controller-multitenancy-model/src/main/java/step/controller/multitenancy/Constants.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.controller.multitenancy; 20 | 21 | public interface Constants { 22 | String TENANT_HEADER = "Step-Project"; 23 | } 24 | -------------------------------------------------------------------------------- /step-controller/step-controller-remote-client/src/main/java/step/client/collections/remote/CountRequest.java: -------------------------------------------------------------------------------- 1 | package step.client.collections.remote; 2 | 3 | import step.core.collections.Filter; 4 | 5 | public class CountRequest { 6 | 7 | private Filter filter; 8 | private Integer limit; 9 | 10 | public CountRequest(Filter filter, Integer limit) { 11 | super(); 12 | this.filter = filter; 13 | this.limit = limit; 14 | } 15 | 16 | public CountRequest() { 17 | super(); 18 | } 19 | 20 | public Filter getFilter() { 21 | return filter; 22 | } 23 | 24 | public void setFilter(Filter filter) { 25 | this.filter = filter; 26 | } 27 | 28 | public Integer getLimit() { 29 | return limit; 30 | } 31 | 32 | public void setLimit(Integer limit) { 33 | this.limit = limit; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /step-controller/step-controller-remote-client/src/main/java/step/client/collections/remote/CountResponse.java: -------------------------------------------------------------------------------- 1 | package step.client.collections.remote; 2 | 3 | public class CountResponse { 4 | 5 | private Long count; 6 | 7 | public CountResponse() { 8 | super(); 9 | } 10 | 11 | public CountResponse(Long count) { 12 | super(); 13 | this.count = count; 14 | } 15 | 16 | public Long getCount() { 17 | return count; 18 | } 19 | 20 | public void setCount(Long count) { 21 | this.count = count; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /step-controller/step-controller-remote-client/src/test/java/step/client/collections/remote/RemoteCollectionTest.java: -------------------------------------------------------------------------------- 1 | package step.client.collections.remote; 2 | 3 | import org.junit.Ignore; 4 | import step.client.credentials.ControllerCredentials; 5 | import step.core.collections.AbstractCollectionTest; 6 | 7 | @Ignore 8 | public class RemoteCollectionTest extends AbstractCollectionTest { 9 | public RemoteCollectionTest() { 10 | super(new RemoteCollectionFactory()); 11 | } 12 | 13 | public RemoteCollectionTest(ControllerCredentials credentials) { 14 | super(new RemoteCollectionFactory(credentials)); 15 | } 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/controller/grid/GridConfigurationEditor.java: -------------------------------------------------------------------------------- 1 | package step.controller.grid; 2 | 3 | import step.grid.GridImpl; 4 | 5 | import java.util.LinkedList; 6 | 7 | public interface GridConfigurationEditor { 8 | void editConfiguration(GridImpl.GridImplConfig config); 9 | 10 | class List extends LinkedList {} 11 | } 12 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/controller/services/async/AsyncTask.java: -------------------------------------------------------------------------------- 1 | package step.controller.services.async; 2 | 3 | @FunctionalInterface 4 | public interface AsyncTask { 5 | T apply(AsyncTaskHandle t) throws Exception; 6 | } 7 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/controller/services/async/AsyncTaskHandle.java: -------------------------------------------------------------------------------- 1 | package step.controller.services.async; 2 | 3 | import java.util.Set; 4 | 5 | public class AsyncTaskHandle { 6 | 7 | private final AsyncTaskStatus asyncTaskStatus; 8 | 9 | public AsyncTaskHandle(AsyncTaskStatus asyncTaskStatus) { 10 | this.asyncTaskStatus = asyncTaskStatus; 11 | } 12 | 13 | public void setWarnings(Set warnings) { 14 | asyncTaskStatus.setWarnings(warnings); 15 | } 16 | 17 | public void updateProgress(float progress) { 18 | asyncTaskStatus.setProgress(progress); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/GlobalContextAware.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core; 20 | 21 | public interface GlobalContextAware { 22 | 23 | public void setGlobalContext(GlobalContext context); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/access/RoleProvider.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.access; 20 | 21 | import java.util.List; 22 | 23 | public interface RoleProvider { 24 | 25 | public List getRoles(); 26 | } 27 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/controller/ApplicationConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package step.core.controller; 2 | 3 | import ch.exense.commons.app.Configuration; 4 | 5 | public class ApplicationConfigurationManager { 6 | 7 | public ApplicationConfigurationBuilder getDefaultBuilder(Configuration configuration) { 8 | return new ApplicationConfigurationBuilder() 9 | .setDebug(configuration.getPropertyAsBoolean("debug", false)) 10 | .setDemo(configuration.getPropertyAsBoolean("demo", false)) 11 | .setDefaultUrl(configuration.getProperty("ui.default.url", null)) 12 | .setAuthentication(false) 13 | .setNoLoginMask(true) 14 | .setUserManagement(false) 15 | .setRoleManagement(false) 16 | .setProjectMembershipManagement(false) 17 | .setPasswordManagement(false) 18 | .setTitle(configuration.getProperty("ui.title", "Step")) 19 | .setForceLegacyReporting(configuration.getPropertyAsBoolean("ui.reporting.force.legacy", false)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/controller/ControllerSettingAccessor.java: -------------------------------------------------------------------------------- 1 | package step.core.controller; 2 | 3 | import step.core.accessors.Accessor; 4 | 5 | import java.util.List; 6 | 7 | public interface ControllerSettingAccessor extends Accessor { 8 | 9 | ControllerSetting getSettingByKey(String key); 10 | 11 | ControllerSetting updateOrCreateSetting(String key, String value); 12 | 13 | boolean getSettingAsBoolean(String settingSchedulerEnabled); 14 | 15 | ControllerSetting save(ControllerSetting controllerSetting); 16 | 17 | ControllerSetting createSettingIfNotExisting(String settingSchedulerEnabled, String string); 18 | 19 | void addHook(String key, ControllerSettingHook hook); 20 | 21 | boolean removeHook(String key, ControllerSettingHook hook); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/controller/ControllerSettingHook.java: -------------------------------------------------------------------------------- 1 | package step.core.controller; 2 | 3 | import org.bson.types.ObjectId; 4 | 5 | public interface ControllerSettingHook { 6 | void onSettingSave(ControllerSetting setting); 7 | void onSettingRemove(ObjectId settingId, ControllerSetting removed); 8 | } 9 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/controller/ControllerSettingHookRollbackException.java: -------------------------------------------------------------------------------- 1 | package step.core.controller; 2 | 3 | public class ControllerSettingHookRollbackException extends RuntimeException { 4 | public ControllerSettingHookRollbackException(String message) { 5 | super(message); 6 | } 7 | 8 | public ControllerSettingHookRollbackException(String message, Throwable cause) { 9 | super(message, cause); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/controller/InMemoryControllerSettingAccessor.java: -------------------------------------------------------------------------------- 1 | package step.core.controller; 2 | 3 | import step.core.collections.inmemory.InMemoryCollection; 4 | 5 | public class InMemoryControllerSettingAccessor extends ControllerSettingAccessorImpl implements ControllerSettingAccessor { 6 | 7 | public InMemoryControllerSettingAccessor() { 8 | super(new InMemoryCollection()); 9 | } 10 | 11 | protected ControllerSetting copy(ControllerSetting controllerSetting){ 12 | if(controllerSetting != null) { 13 | ControllerSetting copy = new ControllerSetting(controllerSetting.getKey(), controllerSetting.getValue()); 14 | copy.setId(controllerSetting.getId()); 15 | return copy; 16 | } 17 | return null; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/controller/SessionResponseBuilder.java: -------------------------------------------------------------------------------- 1 | package step.core.controller; 2 | 3 | import step.framework.server.Session; 4 | 5 | import java.util.ArrayList; 6 | import java.util.HashMap; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.function.Function; 10 | 11 | public class SessionResponseBuilder { 12 | 13 | private final List>> hooks = new ArrayList<>(); 14 | 15 | public boolean registerHook(Function> sessionMapFunction) { 16 | return hooks.add(sessionMapFunction); 17 | } 18 | 19 | public Map build(Session session) { 20 | Map result = new HashMap<>(); 21 | hooks.forEach(h -> { 22 | Map hookProperties = h.apply(session); 23 | result.putAll(hookProperties); 24 | }); 25 | return result; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/deployment/ControllerServiceError.java: -------------------------------------------------------------------------------- 1 | package step.core.deployment; 2 | 3 | public class ControllerServiceError { 4 | 5 | private String errorName; 6 | private String errorMessage; 7 | 8 | public String getErrorName() { 9 | return errorName; 10 | } 11 | 12 | public void setErrorName(String errorName) { 13 | this.errorName = errorName; 14 | } 15 | 16 | public String getErrorMessage() { 17 | return errorMessage; 18 | } 19 | 20 | public void setErrorMessage(String errorMessage) { 21 | this.errorMessage = errorMessage; 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/deployment/WebApplicationConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package step.core.deployment; 2 | 3 | import step.framework.server.Session; 4 | 5 | import java.util.ArrayList; 6 | import java.util.HashMap; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.function.Function; 10 | 11 | public class WebApplicationConfigurationManager { 12 | 13 | private final List>> hooks = new ArrayList<>(); 14 | 15 | public boolean registerHook(Function> sessionMapFunction) { 16 | return hooks.add(sessionMapFunction); 17 | } 18 | 19 | public Map getConfiguration(Session session) { 20 | Map result = new HashMap<>(); 21 | hooks.forEach(h -> { 22 | Map hookProperties = h.apply(session); 23 | result.putAll(hookProperties); 24 | }); 25 | return result; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/execution/ReportNodesTableParameters.java: -------------------------------------------------------------------------------- 1 | package step.core.execution; 2 | 3 | import step.framework.server.tables.service.TableParameters; 4 | 5 | import java.util.List; 6 | 7 | public class ReportNodesTableParameters extends TableParameters { 8 | private String eid; 9 | private List testcases; 10 | 11 | public String getEid() { 12 | return eid; 13 | } 14 | 15 | public void setEid(String eid) { 16 | this.eid = eid; 17 | } 18 | 19 | public List getTestcases() { 20 | return testcases; 21 | } 22 | 23 | public void setTestcases(List testcases) { 24 | this.testcases = testcases; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/plugins/AbstractWebPlugin.java: -------------------------------------------------------------------------------- 1 | package step.core.plugins; 2 | 3 | public class AbstractWebPlugin { 4 | } 5 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/plugins/Ng2WebPlugin.java: -------------------------------------------------------------------------------- 1 | package step.core.plugins; 2 | 3 | public class Ng2WebPlugin extends AbstractWebPlugin { 4 | 5 | private String name; 6 | private String entryPoint; 7 | 8 | public String getName() { 9 | return name; 10 | } 11 | 12 | public void setName(String name) { 13 | this.name = name; 14 | } 15 | 16 | public String getEntryPoint() { 17 | return entryPoint; 18 | } 19 | 20 | public void setEntryPoint(String entryPoint) { 21 | this.entryPoint = entryPoint; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/references/FindReferencesRequest.java: -------------------------------------------------------------------------------- 1 | package step.core.references; 2 | 3 | public class FindReferencesRequest { 4 | public enum Type { 5 | PLAN_ID, 6 | PLAN_NAME, 7 | KEYWORD_ID, 8 | KEYWORD_NAME, 9 | RESOURCE_ID, 10 | RESOURCE_NAME 11 | } 12 | 13 | public Type searchType; 14 | public String searchValue; 15 | public boolean includeHiddenPlans; 16 | 17 | // Needed for Jax-WS 18 | public FindReferencesRequest() { 19 | } 20 | 21 | // Convenience constructor 22 | public FindReferencesRequest(Type searchType, String searchValue) { 23 | this.searchType = searchType; 24 | this.searchValue = searchValue; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/references/ReferenceFinderPlugin.java: -------------------------------------------------------------------------------- 1 | package step.core.references; 2 | 3 | import step.core.GlobalContext; 4 | import step.core.plugins.AbstractControllerPlugin; 5 | import step.core.plugins.Plugin; 6 | 7 | @Plugin 8 | public class ReferenceFinderPlugin extends AbstractControllerPlugin { 9 | @Override 10 | public void serverStart(GlobalContext context) throws Exception { 11 | context.getServiceRegistrationCallback().registerService(ReferenceFinderServices.class); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/scheduler/ExecutionSchedulerHook.java: -------------------------------------------------------------------------------- 1 | package step.core.scheduler; 2 | 3 | public interface ExecutionSchedulerHook { 4 | 5 | public void onRemoveExecutionTask(String taskExecutionId); 6 | } 7 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/core/scheduler/LoggerJob.java: -------------------------------------------------------------------------------- 1 | package step.core.scheduler; 2 | 3 | import org.quartz.Job; 4 | import org.quartz.JobExecutionContext; 5 | import org.quartz.JobExecutionException; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | 9 | public class LoggerJob implements Job { 10 | private static final Logger logger = LoggerFactory.getLogger(LoggerJob.class); 11 | private Exception e; 12 | private String msg; 13 | 14 | public LoggerJob(String msg, Exception e) { 15 | this.e = e; 16 | this.msg = msg; 17 | } 18 | @Override 19 | public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { 20 | logger.error(msg, e); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/java/step/plugins/screentemplating/ScreenTemplateChangeListener.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.plugins.screentemplating; 20 | 21 | public interface ScreenTemplateChangeListener { 22 | 23 | public void onChange(); 24 | } 25 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/main/resources/step/expressions/placeholder/TimeCategoryExpressionHandler.groovy: -------------------------------------------------------------------------------- 1 | package step.expressions.placeholder 2 | import groovy.time.TimeCategory; 3 | import java.text.SimpleDateFormat 4 | import step.core.interprete.* 5 | 6 | dat = DateFunctions.dat() 7 | last = DateFunctions.last(); 8 | first = DateFunctions.first(); 9 | today = dat; 10 | now = today; 11 | 12 | use (TimeCategory){ 13 | //_TimeCategoryExpression_// 14 | } 15 | 16 | /* Falls das Resultat ein Date ist, wird es formatiert. */ 17 | if (result instanceof Date) { 18 | if(input.contains("now")) { 19 | result = result.format("dd.MM.yyyy kk:mm:ss"); 20 | } else { 21 | result = result.format("dd.MM.yyyy"); 22 | } 23 | } else { 24 | result; 25 | } 26 | -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/test/resources/mongodb-queries: -------------------------------------------------------------------------------- 1 | db.reports.explain().find({$and:[{executionID:"584ed7a5a4b88c152c61e81a"},{$or:[{_class:"step.artefacts.reports.CallFunctionReportNode"},{"error.root":true}]}]}) -------------------------------------------------------------------------------- /step-controller/step-controller-server/src/test/resources/step/expressions/GroovyTestFunctions.groovy: -------------------------------------------------------------------------------- 1 | package step.expressions 2 | 3 | abstract class GroovyTestFunctions extends Script { 4 | 5 | def testArrays() { 6 | return new String[] {'foo','bar'}; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /step-core-model/src/main/java/step/artefacts/Comparator.java: -------------------------------------------------------------------------------- 1 | package step.artefacts; 2 | 3 | import java.util.function.BiFunction; 4 | 5 | public enum Comparator { 6 | 7 | EQUALS((v1,v2)->v1.doubleValue()==v2.doubleValue(), "equals to", "equal to"), 8 | HIGHER_THAN((v1,v2)->v1.doubleValue()>v2.doubleValue(), "higher than", "higher than"), 9 | LOWER_THAN((v1,v2)->v1.doubleValue() comparatorFunction; 12 | private final String description; 13 | private final String errorDescription; 14 | 15 | Comparator(BiFunction comparatorFunction, String description, String errorDescription) { 16 | this.comparatorFunction = comparatorFunction; 17 | this.description = description; 18 | this.errorDescription = errorDescription; 19 | } 20 | 21 | public BiFunction getComparatorFunction() { 22 | return comparatorFunction; 23 | } 24 | 25 | public String getDescription() { 26 | return description; 27 | } 28 | 29 | public String getErrorDescription() { 30 | return errorDescription; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /step-core-model/src/main/java/step/artefacts/FilterType.java: -------------------------------------------------------------------------------- 1 | package step.artefacts; 2 | 3 | import java.util.function.BiFunction; 4 | 5 | public enum FilterType { 6 | 7 | EQUALS(String::equals), 8 | REGEX(String::matches); 9 | 10 | private final BiFunction filterFunction; 11 | 12 | private FilterType(BiFunction filterFunction) { 13 | this.filterFunction = filterFunction; 14 | } 15 | 16 | public BiFunction getFilterFunction() { 17 | return filterFunction; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /step-core-model/src/main/java/step/core/objectenricher/EnricheableObject.java: -------------------------------------------------------------------------------- 1 | package step.core.objectenricher; 2 | 3 | import java.util.Map; 4 | 5 | public interface EnricheableObject { 6 | 7 | void addAttribute(String key, String value); 8 | 9 | String getAttribute(String key); 10 | 11 | Map getAttributes(); 12 | 13 | void setAttributes(Map attributes); 14 | } 15 | -------------------------------------------------------------------------------- /step-core-model/src/main/java/step/functions/EvaluationExpression.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.functions; 20 | 21 | import step.commons.activation.Expression; 22 | 23 | public interface EvaluationExpression { 24 | Expression getActivationExpression(); 25 | } 26 | -------------------------------------------------------------------------------- /step-core-model/src/main/java/step/resources/ResourceType.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.resources; 20 | 21 | public interface ResourceType { 22 | 23 | public boolean isEphemeral(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /step-core-model/src/test/java/step/core/dynamicbeans/TestBean.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.dynamicbeans; 20 | 21 | public class TestBean { 22 | 23 | @ContainsDynamicValues 24 | public void testMethod() { 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/automation/packages/AutomationPackageArchiveType.java: -------------------------------------------------------------------------------- 1 | package step.automation.packages; 2 | 3 | public enum AutomationPackageArchiveType { 4 | JAVA, 5 | DOTNET, 6 | ZIP, 7 | FOLDER 8 | } 9 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/automation/packages/AutomationPackageHookException.java: -------------------------------------------------------------------------------- 1 | package step.automation.packages; 2 | 3 | public class AutomationPackageHookException extends RuntimeException { 4 | 5 | public AutomationPackageHookException(String message) { 6 | super(message); 7 | } 8 | 9 | public AutomationPackageHookException(String message, Throwable cause) { 10 | super(message, cause); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/automation/packages/AutomationPackageOperationMode.java: -------------------------------------------------------------------------------- 1 | package step.automation.packages; 2 | 3 | /** 4 | * Automation package operation mode, indicating if an AutomationPackageManager 5 | * and its operations are in main (=production), isolated, or local context. 6 | */ 7 | public enum AutomationPackageOperationMode { 8 | MAIN, 9 | ISOLATED, 10 | LOCAL 11 | } 12 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/automation/packages/AutomationPackageStatus.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.automation.packages; 20 | 21 | public enum AutomationPackageStatus { 22 | DELAYED_UPDATE 23 | } 24 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/automation/packages/AutomationPackageUpdateStatus.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.automation.packages; 20 | 21 | public enum AutomationPackageUpdateStatus { 22 | CREATED, 23 | UPDATED, 24 | UPDATE_DELAYED 25 | } 26 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/Constants.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core; 20 | 21 | public interface Constants { 22 | String STEP_API_VERSION_STRING = "3.28.0"; 23 | Version STEP_API_VERSION = new Version(STEP_API_VERSION_STRING); 24 | } 25 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/LazyInitializer.java: -------------------------------------------------------------------------------- 1 | package step.core; 2 | 3 | 4 | public abstract class LazyInitializer { 5 | 6 | private static final Object NO_INIT = new Object(); 7 | private volatile T object; 8 | 9 | public LazyInitializer() { 10 | this.object = (T) NO_INIT; 11 | } 12 | 13 | public T get() { 14 | T result = this.object; 15 | if (result == NO_INIT) { 16 | synchronized(this) { 17 | result = this.object; 18 | if (result == NO_INIT) { 19 | this.object = result = this.initialize(); 20 | } 21 | } 22 | } 23 | 24 | return result; 25 | } 26 | 27 | protected abstract T initialize() ; 28 | 29 | public boolean isInitialized() { 30 | return this.object != NO_INIT; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/agents/provisioning/AgentProvisioningLogs.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024, exense GmbH 3 | * 4 | * This file is part of Step 5 | * 6 | * Step is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Step is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with Step. If not, see . 18 | */ 19 | 20 | package step.core.agents.provisioning; 21 | 22 | import java.util.HashMap; 23 | import java.util.List; 24 | 25 | public class AgentProvisioningLogs extends HashMap { 26 | 27 | public List stsEvents; 28 | } 29 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/agents/provisioning/AgentProvisioningRestrictions.java: -------------------------------------------------------------------------------- 1 | package step.core.agents.provisioning; 2 | 3 | /** 4 | * Class containing restrictions for the provisioning. 5 | * This is meant for situations where licensing is enabled, 6 | * and the number of concurrent agents and/or tokens that 7 | * the controller accepts might be limited. 8 | * 9 | * Limits are independent of each other, and if a limit is 10 | * present (not null), the controller will not handle 11 | * registration requests beyond the limit, instead ignoring 12 | * the requests. 13 | * 14 | * It is therefore advised to either only provision accordingly 15 | * to stay within the stated limits, or to reject a request 16 | * altogether if any of the limits would be exceeded. 17 | */ 18 | public class AgentProvisioningRestrictions { 19 | public Integer agentCountLimit; 20 | public Integer tokenCountLimit; 21 | 22 | @Override 23 | public String toString() { 24 | return "AgentProvisioningRestrictions{" + 25 | "agentCountLimit=" + agentCountLimit + 26 | ", tokenCountLimit=" + tokenCountLimit + 27 | '}'; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/agents/provisioning/driver/AgentProvisioningStatusAccessor.java: -------------------------------------------------------------------------------- 1 | package step.core.agents.provisioning.driver; 2 | 3 | import org.bson.types.ObjectId; 4 | import step.core.accessors.AbstractAccessor; 5 | import step.core.collections.Collection; 6 | import step.core.collections.Filters; 7 | 8 | import java.util.Objects; 9 | 10 | public class AgentProvisioningStatusAccessor extends AbstractAccessor { 11 | 12 | public AgentProvisioningStatusAccessor(Collection collectionDriver) { 13 | super(collectionDriver); 14 | } 15 | 16 | public void removeAgentProvisioningStatusByExecutionID(ObjectId executionID) { 17 | Objects.requireNonNull(executionID); 18 | collectionDriver.remove(Filters.equals("executionId", executionID.toHexString())); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/artefacts/reports/ParentSource.java: -------------------------------------------------------------------------------- 1 | package step.core.artefacts.reports; 2 | 3 | public enum ParentSource { 4 | BEFORE, 5 | BEFORE_THREAD, 6 | MAIN(false), 7 | SUB_PLAN(false), 8 | AFTER_THREAD, 9 | AFTER; 10 | 11 | public boolean printSource; 12 | 13 | ParentSource() { 14 | printSource=true; 15 | } 16 | 17 | ParentSource(boolean printSource) { 18 | this.printSource = printSource; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/encryption/EncryptionManager.java: -------------------------------------------------------------------------------- 1 | package step.core.encryption; 2 | 3 | public interface EncryptionManager { 4 | 5 | String encrypt(String value) throws EncryptionManagerException; 6 | 7 | String decrypt(String encryptedValue) throws EncryptionManagerException; 8 | 9 | /** 10 | * @return true if the key pair of this encryption manager has changed and that 11 | * a re-encryption is required 12 | */ 13 | boolean isKeyPairChanged(); 14 | 15 | /** 16 | * @return true if this encryption manager is starting for the first time and 17 | * that initial encryption is required 18 | */ 19 | boolean isFirstStart(); 20 | 21 | } -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/encryption/EncryptionManagerException.java: -------------------------------------------------------------------------------- 1 | package step.core.encryption; 2 | 3 | @SuppressWarnings("serial") 4 | public class EncryptionManagerException extends Exception { 5 | 6 | public EncryptionManagerException(String message, Throwable cause) { 7 | super(message, cause); 8 | } 9 | 10 | public EncryptionManagerException(String message) { 11 | super(message); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/encryption/MissingKeyPairException.java: -------------------------------------------------------------------------------- 1 | package step.core.encryption; 2 | 3 | @SuppressWarnings("serial") 4 | public class MissingKeyPairException extends Exception { 5 | 6 | public MissingKeyPairException(String message) { 7 | super(message); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/encryption/UnknownKeyPairException.java: -------------------------------------------------------------------------------- 1 | package step.core.encryption; 2 | 3 | @SuppressWarnings("serial") 4 | public class UnknownKeyPairException extends Exception { 5 | 6 | public UnknownKeyPairException(String message) { 7 | super(message); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/entities/EntityManagerSupplier.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.entities; 20 | 21 | public interface EntityManagerSupplier { 22 | EntityManager getEntityManager(); 23 | void setEntityManager(EntityManager entityManager); 24 | } 25 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/functions/ArtefactFunction.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.functions; 20 | 21 | import step.core.plans.Plan; 22 | 23 | public interface ArtefactFunction { 24 | Plan getPlan(); 25 | } 26 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/resolvers/Resolver.java: -------------------------------------------------------------------------------- 1 | package step.core.resolvers; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.Objects; 6 | import java.util.function.Function; 7 | 8 | public class Resolver { 9 | 10 | private final List> resolvers = new ArrayList<>(); 11 | 12 | public void register(Function resolver) { 13 | resolvers.add(resolver); 14 | } 15 | 16 | public String resolve(String expression) { 17 | return resolvers.stream().map(r -> r.apply(expression)).filter(Objects::nonNull).findFirst().orElse(expression); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/core/yaml/schema/JsonSchemaDefinitionExtension.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.yaml.schema; 20 | 21 | public interface JsonSchemaDefinitionExtension extends JsonSchemaExtension { 22 | } 23 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/parameter/ParameterAccessor.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.parameter; 20 | 21 | import step.core.accessors.Accessor; 22 | 23 | public interface ParameterAccessor extends Accessor { 24 | } 25 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/parameter/ParameterManagerException.java: -------------------------------------------------------------------------------- 1 | package step.parameter; 2 | 3 | import step.core.encryption.EncryptionManagerException; 4 | 5 | public class ParameterManagerException extends RuntimeException { 6 | public ParameterManagerException(String s) { 7 | super(s); 8 | } 9 | 10 | public ParameterManagerException(String message, Exception e) { 11 | super(message, e); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/resources/InvalidResourceFormatException.java: -------------------------------------------------------------------------------- 1 | package step.resources; 2 | 3 | public class InvalidResourceFormatException extends Exception { 4 | } 5 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/resources/ResourceAccessor.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.resources; 20 | 21 | import step.core.accessors.Accessor; 22 | 23 | public interface ResourceAccessor extends Accessor { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /step-core/src/main/java/step/security/SecurityManager.java: -------------------------------------------------------------------------------- 1 | package step.security; 2 | 3 | import java.util.Arrays; 4 | 5 | import step.expressions.ExpressionHandler; 6 | 7 | public class SecurityManager { 8 | 9 | public static void assertNotInExpressionHandler() { 10 | final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); 11 | boolean inExpressionHandler = Arrays.asList(stackTrace).stream() 12 | .filter(e -> e.getClassName().equals(ExpressionHandler.class.getName())).count() > 0; 13 | if(inExpressionHandler) { 14 | throw new SecurityException("This method cannot be called within custom expressions"); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /step-core/src/test/java/step/core/resolvers/ResolverTest.java: -------------------------------------------------------------------------------- 1 | package step.core.resolvers; 2 | 3 | import static org.junit.Assert.*; 4 | 5 | import org.junit.Test; 6 | 7 | public class ResolverTest { 8 | 9 | @Test 10 | public void test() { 11 | final Resolver resolver = new Resolver(); 12 | String resolve = resolver.resolve("test"); 13 | assertEquals("test", resolve); 14 | resolve = resolver.resolve(null); 15 | assertEquals(null, resolve); 16 | resolver.register(s -> "resolvedValue"); 17 | resolve = resolver.resolve("test"); 18 | assertEquals("resolvedValue", resolve); 19 | resolve = resolver.resolve(null); 20 | assertEquals("resolvedValue", resolve); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /step-core/src/test/resources/.gitignore: -------------------------------------------------------------------------------- 1 | /step-core-model-test.jar 2 | -------------------------------------------------------------------------------- /step-core/src/test/resources/folder.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-core/src/test/resources/folder.zip -------------------------------------------------------------------------------- /step-core/src/test/resources/step/resources/TestResource.txt: -------------------------------------------------------------------------------- 1 | TEST -------------------------------------------------------------------------------- /step-core/src/test/resources/step/resources/TestResource2.txt: -------------------------------------------------------------------------------- 1 | TEST2 -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-composite/step-functions-plugins-composite-def/src/main/java/step/plugins/functions/types/CompositeFunctionUtils.java: -------------------------------------------------------------------------------- 1 | package step.plugins.functions.types; 2 | 3 | import step.core.accessors.AbstractOrganizableObject; 4 | import step.core.plans.Plan; 5 | import step.handlers.javahandler.Keyword; 6 | 7 | import java.lang.reflect.Method; 8 | import java.util.HashMap; 9 | 10 | public class CompositeFunctionUtils { 11 | public static CompositeFunction createCompositeFunction(Keyword annotation, Method m, Plan plan) { 12 | CompositeFunction function = new CompositeFunction(); 13 | 14 | String functionName = annotation.name().length() > 0 ? annotation.name() : m.getName(); 15 | 16 | function.getCallTimeout().setValue(annotation.timeout()); 17 | function.setAttributes(new HashMap<>()); 18 | function.getAttributes().put(AbstractOrganizableObject.NAME, functionName); 19 | function.setPlan(plan); 20 | return function; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-composite/step-functions-plugins-composite-def/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-composite/step-functions-plugins-composite-def/src/test/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-controller-def/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-controller-def/src/test/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/errorHandler.groovy: -------------------------------------------------------------------------------- 1 | output.setError("Error handler called") -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/errorHandler.js: -------------------------------------------------------------------------------- 1 | Java.type('java.lang.System').getProperties().put("errorHandler", "executed"); 2 | output.setError(exception.getMessage()) -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/errorScript.js: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | *******************************************************************************/ 19 | INVALID SCRIPT -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/errorScriptWithAttachment.groovy: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | *******************************************************************************/ 19 | output.setError("E",new java.lang.Exception()); 20 | INVALID; -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/invalidExtension.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/invalidExtension.dummy -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/noextension: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/noextension -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/testGroovy1.groovy: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | *******************************************************************************/ 19 | output.add("key1",input.key1.getString()) -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/testGroovyUTF8.groovy: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | *******************************************************************************/ 19 | output.add('key1','kéÿ1') -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/testPython.py: -------------------------------------------------------------------------------- 1 | output.add("key1",input.getString("key1")) -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-def/src/test/resources/scripts/throwable.groovy: -------------------------------------------------------------------------------- 1 | assert false -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-handler/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-handler/src/test/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-handler/src/test/resources/scripts/errorHandler.groovy: -------------------------------------------------------------------------------- 1 | output.setError("Error handler called") -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-handler/src/test/resources/scripts/errorScript.js: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | *******************************************************************************/ 19 | INVALID SCRIPT -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-handler/src/test/resources/scripts/errorScriptWithAttachment.groovy: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | *******************************************************************************/ 19 | output.setError("E",new java.lang.Exception()); 20 | INVALID; -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-handler/src/test/resources/scripts/testGroovyUTF8.groovy: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | *******************************************************************************/ 19 | output.add('key1','kéÿ1') -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-java/step-functions-plugins-java-handler/src/test/resources/scripts/throwable.groovy: -------------------------------------------------------------------------------- 1 | assert false -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-jmeter/step-functions-plugins-jmeter-def/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-jmeter/step-functions-plugins-jmeter-handler/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions-plugins/step-functions-plugins-jmeter/step-functions-plugins-jmeter-local-handler/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions/step-functions-client-api/src/main/java/step/functions/execution/TokenLifecycleInterceptor.java: -------------------------------------------------------------------------------- 1 | package step.functions.execution; 2 | 3 | /** 4 | * Interface used for intercepting token creation and disposal. 5 | *

6 | * On returning a token (i.e., when the implementation has finished using the token), no complicated operations should be performed, 7 | * and are must be taken not to (inadvertently) throw Exceptions. 8 | *

9 | * On getting a token, the method may (knowingly) throw an exception, 10 | * in which case the entire token retrieval process is aborted, and thus the execution 11 | * will not take place. 12 | *

13 | */ 14 | public interface TokenLifecycleInterceptor { 15 | void onReturnTokenHandle(String tokenHandleId); 16 | 17 | void onGetTokenHandle(String tokenHandleId) throws Exception; 18 | } 19 | -------------------------------------------------------------------------------- /step-functions/step-functions-client/src/main/resources/.gitignore: -------------------------------------------------------------------------------- 1 | *.jar -------------------------------------------------------------------------------- /step-functions/step-functions-client/src/test/java/step/functions/runner/TestFunction.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.functions.runner; 20 | 21 | import step.functions.Function; 22 | 23 | public class TestFunction extends Function { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /step-functions/step-functions-handler/src/main/java/org/glassfish/json/OutputJsonProviderImpl.java: -------------------------------------------------------------------------------- 1 | package org.glassfish.json; 2 | 3 | import jakarta.json.JsonBuilderFactory; 4 | import org.glassfish.json.api.BufferPool; 5 | 6 | import java.util.Map; 7 | 8 | public class OutputJsonProviderImpl extends JsonProviderImpl { 9 | 10 | @Override 11 | public JsonBuilderFactory createBuilderFactory(Map config) { 12 | BufferPool pool = new BufferPoolImpl(); 13 | boolean rejectDuplicateKeys = false; 14 | if (config != null) { 15 | if (config.containsKey(BufferPool.class.getName())) { 16 | pool = (BufferPool) config.get(BufferPool.class.getName()); 17 | } 18 | rejectDuplicateKeys = JsonProviderImpl.isRejectDuplicateKeysEnabled(config); 19 | } 20 | return new OutputJsonBuilderFactoryImpl(pool, rejectDuplicateKeys); 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /step-functions/step-functions-handler/src/main/java/org/glassfish/json/OutputJsonStringImpl.java: -------------------------------------------------------------------------------- 1 | package org.glassfish.json; 2 | 3 | import jakarta.json.JsonString; 4 | import jakarta.json.JsonValue; 5 | 6 | public class OutputJsonStringImpl implements JsonString { 7 | 8 | private final String value; 9 | 10 | OutputJsonStringImpl(String value) { 11 | this.value = value; 12 | } 13 | 14 | @Override 15 | public String getString() { 16 | return value; 17 | } 18 | 19 | @Override 20 | public CharSequence getChars() { 21 | return value; 22 | } 23 | 24 | @Override 25 | public JsonValue.ValueType getValueType() { 26 | return JsonValue.ValueType.STRING; 27 | } 28 | 29 | @Override 30 | public int hashCode() { 31 | return getString().hashCode(); 32 | } 33 | 34 | @Override 35 | public boolean equals(Object obj) { 36 | if (this == obj){ 37 | return true; 38 | } 39 | if (!(obj instanceof JsonString)) { 40 | return false; 41 | } 42 | JsonString other = (JsonString)obj; 43 | return getString().equals(other.getString()); 44 | } 45 | 46 | @Override 47 | public String toString() { 48 | return value; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /step-functions/step-functions-handler/src/main/java/step/functions/handler/MeasureTypes.java: -------------------------------------------------------------------------------- 1 | package step.functions.handler; 2 | 3 | public class MeasureTypes { 4 | 5 | public static final String ATTRIBUTE_TYPE = "type"; 6 | public static final String TYPE_KEYWORD = "keyword"; 7 | public static final String TYPE_CUSTOM = "custom"; 8 | } 9 | -------------------------------------------------------------------------------- /step-functions/step-functions-handler/src/main/resources/META-INF/services/javax.json.spi.JsonProvider: -------------------------------------------------------------------------------- 1 | javax.org.glassfish.json.JsonProviderImpl -------------------------------------------------------------------------------- /step-functions/step-functions-handler/src/test/resources/testResource.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-functions/step-functions-handler/src/test/resources/testResource.jar -------------------------------------------------------------------------------- /step-functions/step-functions-package-client/pom.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 4.0.0 10 | 11 | step-functions-package-client 12 | jar 13 | 14 | 15 | ch.exense.step 16 | step-functions 17 | 0.0.0-SNAPSHOT 18 | 19 | 20 | 21 | 22 | ch.exense.step 23 | step-controller-remote-client 24 | ${project.version} 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /step-functions/step-functions-package-controller/src/main/java/step/functions/packages/migration/MigrationTasksRegistrationPlugin.java: -------------------------------------------------------------------------------- 1 | package step.functions.packages.migration; 2 | 3 | import step.core.GlobalContext; 4 | import step.core.plugins.AbstractControllerPlugin; 5 | import step.core.plugins.Plugin; 6 | import step.migration.MigrationManager; 7 | import step.migration.tasks.MigrationManagerTasksPlugin; 8 | 9 | /** 10 | * This plugin is responsible for the registration of the migration tasks 11 | */ 12 | @Plugin(dependencies= {MigrationManagerTasksPlugin.class}) 13 | public class MigrationTasksRegistrationPlugin extends AbstractControllerPlugin { 14 | 15 | @Override 16 | public void serverStart(GlobalContext context) throws Exception { 17 | MigrationManager migrationManager = context.get(MigrationManager.class); 18 | migrationManager.register(ScreenTemplateFunctionTableExtensionsMigrationTask.class); 19 | migrationManager.register(PlansInCompositeFunctionsMigrationTask.class); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /step-functions/step-functions-package/.gitignore: -------------------------------------------------------------------------------- 1 | temp/ 2 | /resources/ 3 | /src/test/resources/local/java-plugin-handler-test.jar 4 | -------------------------------------------------------------------------------- /step-functions/step-functions-package/src/main/java/step/functions/packages/FunctionPackageAccessor.java: -------------------------------------------------------------------------------- 1 | package step.functions.packages; 2 | 3 | import step.core.accessors.Accessor; 4 | 5 | public interface FunctionPackageAccessor extends Accessor { 6 | 7 | } -------------------------------------------------------------------------------- /step-functions/step-functions-package/src/main/java/step/functions/packages/FunctionPackageAccessorImpl.java: -------------------------------------------------------------------------------- 1 | package step.functions.packages; 2 | 3 | import step.core.accessors.AbstractAccessor; 4 | import step.core.collections.Collection; 5 | 6 | public class FunctionPackageAccessorImpl extends AbstractAccessor implements FunctionPackageAccessor { 7 | 8 | public FunctionPackageAccessorImpl(Collection collectionDriver) { 9 | super(collectionDriver); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /step-functions/step-functions-package/src/main/java/step/functions/packages/FunctionPackageHandler.java: -------------------------------------------------------------------------------- 1 | package step.functions.packages; 2 | 3 | import java.util.List; 4 | 5 | import step.core.objectenricher.ObjectEnricher; 6 | import step.functions.Function; 7 | 8 | public interface FunctionPackageHandler { 9 | 10 | boolean isValidForPackage(FunctionPackage functionPackage); 11 | 12 | List buildFunctions(FunctionPackage functionPackage, boolean preview, ObjectEnricher objectEnricher) throws Exception; 13 | 14 | } -------------------------------------------------------------------------------- /step-functions/step-functions-package/src/main/java/step/functions/packages/InMemoryFunctionPackageAccessorImpl.java: -------------------------------------------------------------------------------- 1 | package step.functions.packages; 2 | 3 | import step.core.accessors.AbstractAccessor; 4 | import step.core.collections.inmemory.InMemoryCollection; 5 | 6 | public class InMemoryFunctionPackageAccessorImpl extends AbstractAccessor 7 | implements FunctionPackageAccessor { 8 | 9 | public InMemoryFunctionPackageAccessorImpl() { 10 | super(new InMemoryCollection()); 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /step-functions/step-functions-package/src/main/java/step/functions/packages/UnsupportedFunctionPackageType.java: -------------------------------------------------------------------------------- 1 | package step.functions.packages; 2 | 3 | @SuppressWarnings("serial") 4 | public class UnsupportedFunctionPackageType extends Exception { 5 | 6 | public UnsupportedFunctionPackageType(String message) { 7 | super(message); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /step-functions/step-functions-package/src/main/java/step/functions/packages/handlers/FunctionList.java: -------------------------------------------------------------------------------- 1 | package step.functions.packages.handlers; 2 | 3 | import java.util.ArrayList; 4 | 5 | import step.functions.Function; 6 | 7 | public class FunctionList { 8 | 9 | public String exception; 10 | public ArrayList functions; 11 | 12 | public FunctionList() { 13 | super(); 14 | functions = new ArrayList(); 15 | } 16 | 17 | public ArrayList getFunctions() { 18 | return functions; 19 | } 20 | 21 | public void setFunctions(ArrayList functions) { 22 | this.functions = functions; 23 | } 24 | 25 | public String getException() { 26 | return exception; 27 | } 28 | 29 | public void setException(String exception) { 30 | this.exception = exception; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /step-functions/step-functions-package/src/test/resources/local/java-plugin-handler-test.jar.json: -------------------------------------------------------------------------------- 1 | { 2 | "attributes": { 3 | "attribute1": "@ref1", 4 | "attribute2": "value2", 5 | "attributeI18n": "Äöüßêï" 6 | } 7 | } -------------------------------------------------------------------------------- /step-ide/.gitignore: -------------------------------------------------------------------------------- 1 | db/ 2 | filemanager/ 3 | resources/ 4 | -------------------------------------------------------------------------------- /step-maven-plugin/src/test/resources/step/plugins/maven/test-file-jar-with-dependencies.jar: -------------------------------------------------------------------------------- 1 | jar-with-dependencies content -------------------------------------------------------------------------------- /step-maven-plugin/src/test/resources/step/plugins/maven/test-file-jar.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-maven-plugin/src/test/resources/step/plugins/maven/test-file-jar.jar -------------------------------------------------------------------------------- /step-node/.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | 10 | # Change these settings to your own preference 11 | indent_style = space 12 | indent_size = 2 13 | 14 | # We recommend you to keep these unchanged 15 | end_of_line = lf 16 | charset = utf-8 17 | trim_trailing_whitespace = true 18 | insert_final_newline = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | -------------------------------------------------------------------------------- /step-node/.gitignore: -------------------------------------------------------------------------------- 1 | examples/my-keyword-library/chromedriver.exe 2 | package-lock.json -------------------------------------------------------------------------------- /step-node/examples/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .npm 3 | !/bin -------------------------------------------------------------------------------- /step-node/examples/my-keyword-library/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'extends': 'standard' 3 | } 4 | -------------------------------------------------------------------------------- /step-node/examples/my-keyword-library/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .npm 3 | !/bin 4 | package-lock.json -------------------------------------------------------------------------------- /step-node/examples/my-keyword-library/AgentConf.json: -------------------------------------------------------------------------------- 1 | { 2 | "agentPort": "8082", 3 | "gridHost": "http://localhost:8081", 4 | "registrationPeriod": 1000, 5 | "tokenGroups": [ 6 | { 7 | "capacity": 10, 8 | "tokenConf": { 9 | "attributes": {}, 10 | "properties": {} 11 | } 12 | } 13 | ], 14 | "properties": { 15 | "keywords": "keywords/keywords.js;" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /step-node/examples/my-keyword-library/index.js: -------------------------------------------------------------------------------- 1 | const runner = require('step-node-agent').runner({'google.url':'http://www.google.com/ncr'}) 2 | const assert = require('assert') 3 | 4 | ;(async () => { 5 | var output = await runner.run('Open_Chrome', {}) 6 | assert.equal(output.payload.result, 'OK') 7 | output = await runner.run('Google_Search', { search: 'djigger' }) 8 | assert.equal(output.payload.result, 'OK') 9 | await runner.run('Google_Search', { search: 'exense step' }) 10 | assert.equal(output.payload.result, 'OK') 11 | })() 12 | -------------------------------------------------------------------------------- /step-node/examples/my-keyword-library/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-keyword-library", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "eslint": "node_modules/.bin/eslint .", 8 | "test": "node index.js" 9 | }, 10 | "author": "Jérôme Comte", 11 | "license": "ISC", 12 | "dependencies": { 13 | "npm": "^6.14.15", 14 | "selenium-webdriver": "^3.6.0", 15 | "step-node-agent": "^0.9.5" 16 | }, 17 | "devDependencies": { 18 | "eslint": "^4.18.2", 19 | "eslint-config-standard": "^11.0.0", 20 | "eslint-plugin-import": "^2.9.0", 21 | "eslint-plugin-node": "^6.0.1", 22 | "eslint-plugin-promise": "^3.7.0", 23 | "eslint-plugin-standard": "^3.0.1", 24 | "husky": "^0.14.3" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /step-node/step-node-agent/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'extends': 'standard' 3 | } 4 | -------------------------------------------------------------------------------- /step-node/step-node-agent/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .npm 3 | !/bin 4 | filemanager/work/ -------------------------------------------------------------------------------- /step-node/step-node-agent/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | 8 | { 9 | "name": "Attach To npm", 10 | "type": "node", 11 | "request": "attach", 12 | "port": 9229, 13 | "address": "localhost", 14 | "restart": false, 15 | "sourceMaps": false, 16 | "outDir": null, 17 | "localRoot": "${workspaceRoot}", 18 | "remoteRoot": "${workspaceRoot}" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /step-node/step-node-agent/AgentConf.json: -------------------------------------------------------------------------------- 1 | { 2 | "agentPort": "8082", 3 | "gridHost": "http://localhost:8081", 4 | "registrationPeriod": 1000, 5 | "tokenGroups": [ 6 | { 7 | "capacity": 10, 8 | "tokenConf": { 9 | "attributes": {}, 10 | "properties": {"myProp1":"myProp1"} 11 | } 12 | } 13 | ], 14 | "properties": { 15 | "myProp1":"myDefaultValue", 16 | "myProp2":"myValue2", 17 | "keywords": "keywords/keywords.js;" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /step-node/step-node-agent/AgentConf.yaml: -------------------------------------------------------------------------------- 1 | agentPort: '8082' 2 | gridHost: http://localhost:8081 3 | registrationPeriod: 1000 4 | tokenGroups: 5 | - capacity: 10 6 | tokenConf: 7 | attributes: {} 8 | properties: 9 | myProp1: myProp1 10 | properties: 11 | myProp1: myDefaultValue 12 | myProp2: myValue2 13 | keywords: keywords/keywords.js; -------------------------------------------------------------------------------- /step-node/step-node-agent/README: -------------------------------------------------------------------------------- 1 | Official documentation available at: https://step.exense.ch/knowledgebase/plugins/nodejs/ 2 | 3 | To run locally: npm i; npm start 4 | -------------------------------------------------------------------------------- /step-node/step-node-agent/api/routes/routes.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = function (app, agentContext) { 3 | const Controller = require('../controllers/controller') 4 | const FileManager = require('../filemanager/filemanager') 5 | const controller = new Controller(agentContext, new FileManager(agentContext)) 6 | 7 | app.route('/running').get(controller.isRunning) 8 | app.route('/token/:tokenId/reserve').get(controller.reserveToken) 9 | app.route('/token/:tokenId/release').get(controller.releaseToken) 10 | app.route('/token/:tokenId/process').post(controller.process) 11 | app.route('/token/:tokenId/interrupt-execution').post(controller.interruptExecution) 12 | } 13 | -------------------------------------------------------------------------------- /step-node/step-node-agent/api/runner/runner.js: -------------------------------------------------------------------------------- 1 | module.exports = function (properties = {}) { 2 | const tokenId = 'local' 3 | 4 | const agentContext = {tokens: [], tokenSessions: {}, properties: properties} 5 | agentContext.tokenSessions[tokenId] = {} 6 | 7 | var fileManager = { 8 | loadOrGetKeywordFile: function (url, fileId, fileVersion, keywordName) { 9 | return new Promise(function (resolve, reject) { 10 | resolve('.') 11 | }) 12 | } 13 | } 14 | 15 | const Controller = require('../controllers/controller') 16 | const controller = new Controller(agentContext, fileManager) 17 | 18 | const api = {} 19 | 20 | api.run = function (keywordName, input) { 21 | return new Promise(resolve => { 22 | controller.process_(tokenId, keywordName, input, properties, function (output) { resolve(output.payload) }) 23 | }) 24 | } 25 | 26 | return api 27 | } 28 | -------------------------------------------------------------------------------- /step-node/step-node-agent/bin/step-node-agent: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('../server.js'); -------------------------------------------------------------------------------- /step-node/step-node-agent/index.js: -------------------------------------------------------------------------------- 1 | const runner = require('./api/runner/runner') 2 | exports.runner = runner 3 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/.gitignore: -------------------------------------------------------------------------------- 1 | resources/ 2 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/main/java/step/artefacts/Aggregator.java: -------------------------------------------------------------------------------- 1 | package step.artefacts; 2 | 3 | import java.util.function.Function; 4 | 5 | public enum Aggregator { 6 | 7 | AVG(Aggregation::getAvg, "Average"), 8 | MAX(Aggregation::getMax, "Max"), 9 | MIN(Aggregation::getMin, "Min"), 10 | COUNT(Aggregation::getCount, "Count"), 11 | SUM(Aggregation::getSum, "Sum"); 12 | 13 | private Function valueFunction; 14 | private String description; 15 | 16 | private Aggregator(Function supplier, String description) { 17 | this.valueFunction = supplier; 18 | this.description = description; 19 | } 20 | 21 | public Function getValueFunction() { 22 | return valueFunction; 23 | } 24 | 25 | public String getDescription() { 26 | return description; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/main/java/step/artefacts/handlers/functions/NoMatchingTokenPoolException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024, exense GmbH 3 | * 4 | * This file is part of Step 5 | * 6 | * Step is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Step is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with Step. If not, see . 18 | */ 19 | 20 | package step.artefacts.handlers.functions; 21 | 22 | public class NoMatchingTokenPoolException extends Exception { 23 | } 24 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/main/java/step/artefacts/reports/BeforeSequenceReportNode.java: -------------------------------------------------------------------------------- 1 | package step.artefacts.reports; 2 | 3 | import step.core.artefacts.reports.ReportNode; 4 | 5 | /** 6 | * Required for the housekeeping job (executions created prior to the deprecation / removal of this class) 7 | * Used only for report node deserialization 8 | */ 9 | @Deprecated 10 | public class BeforeSequenceReportNode extends ReportNode { 11 | 12 | @Override 13 | public boolean setVariableInParentScope() { 14 | return true; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/main/java/step/artefacts/reports/BeforeThreadReportNode.java: -------------------------------------------------------------------------------- 1 | package step.artefacts.reports; 2 | 3 | import step.core.artefacts.reports.ReportNode; 4 | 5 | /** 6 | * Required for the housekeeping job (executions created prior to the deprecation / removal of this class) 7 | * Used only for report node deserialization 8 | */ 9 | @Deprecated 10 | public class BeforeThreadReportNode extends ReportNode { 11 | 12 | @Override 13 | public boolean setVariableInParentScope() { 14 | return true; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/main/java/step/artefacts/reports/PerformanceAssertReportNode.java: -------------------------------------------------------------------------------- 1 | package step.artefacts.reports; 2 | 3 | import step.core.artefacts.reports.ReportNode; 4 | 5 | public class PerformanceAssertReportNode extends ReportNode { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/main/java/step/plans/assertions/PerformanceAssertSession.java: -------------------------------------------------------------------------------- 1 | package step.plans.assertions; 2 | 3 | import java.util.Map.Entry; 4 | import java.util.Set; 5 | import java.util.concurrent.ConcurrentHashMap; 6 | 7 | import step.artefacts.Aggregation; 8 | import step.core.reports.Measure; 9 | 10 | public class PerformanceAssertSession { 11 | 12 | private final ConcurrentHashMap aggregations = new ConcurrentHashMap<>(); 13 | 14 | public final void addMeasure(Measure measure) { 15 | Aggregation aggregation = aggregations.computeIfAbsent(measure.getName(), name->new Aggregation(name)); 16 | aggregation.addMeasure(measure); 17 | } 18 | 19 | public Set> getAggregations() { 20 | return aggregations.entrySet(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/java/step/artefacts/handlers/functions/test/MyFunction.java: -------------------------------------------------------------------------------- 1 | package step.artefacts.handlers.functions.test; 2 | 3 | import step.functions.Function; 4 | import step.functions.io.Input; 5 | import step.functions.io.Output; 6 | 7 | import javax.json.JsonObject; 8 | 9 | public class MyFunction extends Function { 10 | 11 | private final java.util.function.Function, Output> handler; 12 | 13 | public MyFunction(java.util.function.Function, Output> handler) { 14 | this.handler = handler; 15 | } 16 | 17 | public java.util.function.Function, Output> getHandler() { 18 | return handler; 19 | } 20 | 21 | @Override 22 | public boolean requiresLocalExecution() { 23 | return false; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/java/step/artefacts/handlers/functions/test/MyFunctionHandler.java: -------------------------------------------------------------------------------- 1 | package step.artefacts.handlers.functions.test; 2 | 3 | import step.functions.handler.JsonBasedFunctionHandler; 4 | import step.functions.io.Input; 5 | import step.functions.io.Output; 6 | 7 | import javax.json.JsonObject; 8 | import java.util.Map; 9 | import java.util.UUID; 10 | import java.util.concurrent.ConcurrentHashMap; 11 | import java.util.function.Function; 12 | 13 | public class MyFunctionHandler extends JsonBasedFunctionHandler { 14 | 15 | public static final String HANDLER_ID = "handlerId"; 16 | private static Map, Output>> handlers = new ConcurrentHashMap<>(); 17 | 18 | public static String registerHandler(Function, Output> handler) { 19 | String id = UUID.randomUUID().toString(); 20 | handlers.put(id, handler); 21 | return id; 22 | } 23 | 24 | @Override 25 | public Output handle(Input input) throws Exception { 26 | return handlers.remove(input.getProperties().get(HANDLER_ID)).apply(input); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/java/step/artefacts/handlers/functions/test/MyFunctionType.java: -------------------------------------------------------------------------------- 1 | package step.artefacts.handlers.functions.test; 2 | 3 | import step.core.AbstractStepContext; 4 | import step.functions.type.AbstractFunctionType; 5 | 6 | import java.util.Map; 7 | 8 | public class MyFunctionType extends AbstractFunctionType { 9 | 10 | @Override 11 | public String getHandlerChain(MyFunction function) { 12 | return MyFunctionHandler.class.getName(); 13 | } 14 | 15 | @Override 16 | public HandlerProperties getHandlerProperties(MyFunction function, AbstractStepContext executionContext) { 17 | String handlerId = MyFunctionHandler.registerHandler(function.getHandler()); 18 | return new HandlerProperties(Map.of(MyFunctionHandler.HANDLER_ID, handlerId)); 19 | } 20 | 21 | @Override 22 | public MyFunction newFunction() { 23 | return new MyFunction(null); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/java/step/artefacts/handlers/functions/test/MyKeyword.java: -------------------------------------------------------------------------------- 1 | package step.artefacts.handlers.functions.test; 2 | 3 | import step.handlers.javahandler.AbstractKeyword; 4 | import step.handlers.javahandler.Keyword; 5 | 6 | public class MyKeyword extends AbstractKeyword { 7 | 8 | @Keyword 9 | public void test() { 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/BigExcel.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/BigExcel.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/Excel-XLOOKUP.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/Excel-XLOOKUP.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/Excel-large2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/Excel-large2.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/Excel1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/Excel1.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/Excel2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/Excel2.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/ExcelDataPool.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/ExcelDataPool.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/ExcelDataPoolImmutable.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/ExcelDataPoolImmutable.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/ExcelDataPoolValueChanged.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/ExcelDataPoolValueChanged.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/File.csv: -------------------------------------------------------------------------------- 1 | Col1,Col2 2 | row11,row12 3 | row21,row22 -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/File.txt: -------------------------------------------------------------------------------- 1 | Line 1 2 | Line 2 3 | Line 3 -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/File.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/File.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/File2.csv: -------------------------------------------------------------------------------- 1 | Col1,Col2,Col3,Col4,Col5 2 | row11,row12,row13,, 3 | row21,row22,row23,, -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/WriteTest.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/WriteTest.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/WriteTest2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/WriteTest2.xlsx -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/empty.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/empty.csv -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/emptyFolder/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/exportTest/test: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-plans/step-plans-base-artefacts/src/test/resources/exportTest/test -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/folder/File.txt: -------------------------------------------------------------------------------- 1 | Line 1 2 | Line 2 3 | Line 3 -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/folder/File2.txt: -------------------------------------------------------------------------------- 1 | Line 1 2 | Line 2 3 | Line 3 -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/step/reporting/TEST-JUnit4ReportWriterTest-testSeveralTestsuites-expected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /step-plans/step-plans-base-artefacts/src/test/resources/step/reporting/TEST-JUnit4ReportWriterTest-testSimpleSequence-expected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/artefacts/reports/aggregated/AggregatedReport.java: -------------------------------------------------------------------------------- 1 | package step.core.artefacts.reports.aggregated; 2 | 3 | public class AggregatedReport { 4 | public AggregatedReportView aggregatedReportView; 5 | public String resolvedPartialPath; 6 | 7 | public AggregatedReport(AggregatedReportView aggregatedReportView) { 8 | this.aggregatedReportView = aggregatedReportView; 9 | } 10 | 11 | public AggregatedReport() { 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/artefacts/reports/aggregated/FlatAggregatedReport.java: -------------------------------------------------------------------------------- 1 | package step.core.artefacts.reports.aggregated; 2 | 3 | import java.util.List; 4 | 5 | public class FlatAggregatedReport { 6 | public List aggregatedReportViews; 7 | 8 | public FlatAggregatedReport(List aggregatedReportViews) { 9 | this.aggregatedReportViews = aggregatedReportViews; 10 | } 11 | 12 | public FlatAggregatedReport() { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/artefacts/reports/resolvedplan/ResolvedChildren.java: -------------------------------------------------------------------------------- 1 | package step.core.artefacts.reports.resolvedplan; 2 | 3 | import step.core.artefacts.AbstractArtefact; 4 | import step.core.artefacts.reports.ParentSource; 5 | 6 | import java.util.List; 7 | 8 | public class ResolvedChildren { 9 | 10 | public ParentSource parentSource; 11 | public List children; 12 | public String artefactPath; 13 | 14 | public ResolvedChildren(ParentSource parentSource, List children, String artefactPath) { 15 | this.parentSource = parentSource; 16 | this.children = children; 17 | this.artefactPath = artefactPath; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/execution/DeprovisioningException.java: -------------------------------------------------------------------------------- 1 | package step.core.execution; 2 | 3 | import step.core.plugins.exceptions.PluginCriticalException; 4 | 5 | public class DeprovisioningException extends PluginCriticalException { 6 | public DeprovisioningException(String string, Throwable e) { 7 | super(string, e); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/execution/OperationMode.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.execution; 20 | 21 | public enum OperationMode { 22 | 23 | CONTROLLER, 24 | 25 | LOCAL; 26 | } 27 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/execution/ProvisioningException.java: -------------------------------------------------------------------------------- 1 | package step.core.execution; 2 | 3 | import step.core.plugins.exceptions.PluginCriticalException; 4 | 5 | public class ProvisioningException extends PluginCriticalException { 6 | 7 | public ProvisioningException(String message) { 8 | super(message); 9 | } 10 | 11 | public ProvisioningException(String string, Throwable e) { 12 | super(string, e); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/execution/ReportNodeEventListener.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.execution; 20 | 21 | public interface ReportNodeEventListener { 22 | 23 | public void onUpdate(); 24 | 25 | public void onDestroy(); 26 | } 27 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/execution/model/ExecutionLauncher.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.execution.model; 20 | 21 | public interface ExecutionLauncher { 22 | String execute(ExecutionParameters executionParameters); 23 | } 24 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/execution/model/ExecutionMode.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.execution.model; 20 | 21 | public enum ExecutionMode { 22 | 23 | RUN, 24 | 25 | SIMULATION; 26 | } 27 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/execution/model/ExecutionProvider.java: -------------------------------------------------------------------------------- 1 | package step.core.execution.model; 2 | 3 | public interface ExecutionProvider { 4 | 5 | Execution get(String executionId); 6 | } 7 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/execution/model/ReportExportStatus.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.execution.model; 20 | 21 | public enum ReportExportStatus { 22 | 23 | SUCCESSFUL, 24 | 25 | FAILED; 26 | } 27 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/plans/PlanCompiler.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.plans; 20 | 21 | public interface PlanCompiler { 22 | 23 | public T compile(T plan) throws PlanCompilerException; 24 | } 25 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/scheduler/CronExclusion.java: -------------------------------------------------------------------------------- 1 | package step.core.scheduler; 2 | 3 | public class CronExclusion { 4 | 5 | private String cronExpression; 6 | private String description; 7 | 8 | public CronExclusion() { 9 | } 10 | 11 | public CronExclusion(String cronExpression, String description) { 12 | this.cronExpression = cronExpression; 13 | this.description = description; 14 | } 15 | 16 | public String getCronExpression() { 17 | return cronExpression; 18 | } 19 | 20 | public void setCronExpression(String cronExpression) { 21 | this.cronExpression = cronExpression; 22 | } 23 | 24 | public String getDescription() { 25 | return description; 26 | } 27 | 28 | public void setDescription(String description) { 29 | this.description = description; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/core/variables/VariableType.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.core.variables; 20 | 21 | public enum VariableType { 22 | 23 | IMMUTABLE, 24 | 25 | NORMAL; 26 | } 27 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/datapool/DataSetHandle.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (C) 2020, exense GmbH 3 | * 4 | * This file is part of STEP 5 | * 6 | * STEP is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU Affero General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * STEP is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU Affero General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Affero General Public License 17 | * along with STEP. If not, see . 18 | ******************************************************************************/ 19 | package step.datapool; 20 | 21 | public interface DataSetHandle { 22 | 23 | public Object next(); 24 | 25 | public void addRow(Object row); 26 | } 27 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/engine/execution/ExecutionVeto.java: -------------------------------------------------------------------------------- 1 | package step.engine.execution; 2 | 3 | public class ExecutionVeto { 4 | public final String reason; 5 | 6 | public ExecutionVeto(String reason) { 7 | this.reason = reason; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /step-plans/step-plans-core/src/main/java/step/engine/execution/ExecutionVetoer.java: -------------------------------------------------------------------------------- 1 | package step.engine.execution; 2 | 3 | import step.core.execution.ExecutionContext; 4 | 5 | import java.util.List; 6 | 7 | public interface ExecutionVetoer { 8 | List getExecutionVetoes(ExecutionContext context); 9 | } 10 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/plans/nl/RootArtefactType.java: -------------------------------------------------------------------------------- 1 | package step.plans.nl; 2 | 3 | import step.core.artefacts.AbstractArtefact; 4 | 5 | import java.util.function.Supplier; 6 | 7 | /** 8 | * Enumeration defining the supported root artefacts for plain-text plans. 9 | * This corresponds to the selections available in the UI. 10 | */ 11 | public enum RootArtefactType { 12 | // Note: The names are Camel-cased by design, so they align with the class and template names used in the UI. 13 | Sequence(step.artefacts.Sequence::new), 14 | TestCase(step.artefacts.TestCase::new), 15 | TestScenario(step.artefacts.TestScenario::new), 16 | TestSet(step.artefacts.TestSet::new), 17 | ThreadGroup(step.artefacts.ThreadGroup::new); 18 | 19 | private final Supplier artefactConstructor; 20 | 21 | public AbstractArtefact createRootArtefact() { 22 | return artefactConstructor.get(); 23 | } 24 | 25 | RootArtefactType(Supplier artefactConstructor) { 26 | this.artefactConstructor = artefactConstructor; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/description/DescriptionStep.g4: -------------------------------------------------------------------------------- 1 | grammar DescriptionStep; 2 | 3 | @header { 4 | package step.repositories.parser.description; 5 | } 6 | 7 | parse 8 | : expr EOF 9 | ; 10 | 11 | expr 12 | : (keywordExpression|setExpression|functionDeclarationExpression|functionDeclarationEndExpression) 13 | ; 14 | 15 | /* Expressions */ 16 | keywordExpression : keywordName keywordParameter*; 17 | setExpression : 'Set' assignment+; 18 | functionDeclarationExpression : 'Function' keywordParameter*; 19 | functionDeclarationEndExpression : 'EndFunction'; 20 | 21 | assignment : attributeName EQ setValue; 22 | 23 | keywordParameter 24 | : attributeName EQ attributeValue 25 | ; 26 | 27 | keywordName : (STRING|WORD); 28 | 29 | attributeName : (WORD|STRING); 30 | 31 | attributeValue : STRING; 32 | 33 | setValue : (WORD|STRING); 34 | 35 | EQ : '='; 36 | 37 | WORD: (~[=" \u00A0\t\r\n])+ ; 38 | 39 | STRING 40 | : '"' (~["\r\n] | EscapeSequence)* '"' 41 | ; 42 | 43 | fragment EscapeSequence 44 | : '\\' ["] 45 | ; 46 | 47 | SPACE 48 | : [ \u00A0\t\r\n] -> skip 49 | ; -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/description/DescriptionStep.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | T__1=2 3 | T__2=3 4 | EQ=4 5 | WORD=5 6 | STRING=6 7 | SPACE=7 8 | 'Set'=1 9 | 'Function'=2 10 | 'EndFunction'=3 11 | '='=4 12 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/description/DescriptionStepLexer.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | T__1=2 3 | T__2=3 4 | EQ=4 5 | WORD=5 6 | STRING=6 7 | SPACE=7 8 | 'Set'=1 9 | 'Function'=2 10 | 'EndFunction'=3 11 | '='=4 12 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/description/ParseGrammar - Description.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/expected/Expected Gen Launch.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/expected/ExpectedStep.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | T__1=2 3 | NOT=3 4 | EQ=4 5 | REGEX=5 6 | CONTAINS=6 7 | BEGINS=7 8 | ENDS=8 9 | GREATER_THAN_OR_EQUALS=9 10 | GREATER_THAN=10 11 | LESS_THAN_OR_EQUALS=11 12 | LESS_THAN=12 13 | IS_NULL=13 14 | NUM=14 15 | BOOL=15 16 | WORD=16 17 | STRING=17 18 | SPACE=18 19 | 'Set'=1 20 | 'Export'=2 21 | '='=4 22 | '~'=5 23 | 'contains'=6 24 | 'beginsWith'=7 25 | 'endsWith'=8 26 | '>='=9 27 | '>'=10 28 | '<='=11 29 | '<'=12 30 | 'isNull'=13 31 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/expected/ExpectedStepLexer.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | T__1=2 3 | NOT=3 4 | EQ=4 5 | REGEX=5 6 | CONTAINS=6 7 | BEGINS=7 8 | ENDS=8 9 | GREATER_THAN_OR_EQUALS=9 10 | GREATER_THAN=10 11 | LESS_THAN_OR_EQUALS=11 12 | LESS_THAN=12 13 | IS_NULL=13 14 | NUM=14 15 | BOOL=15 16 | WORD=16 17 | STRING=17 18 | SPACE=18 19 | 'Set'=1 20 | 'Export'=2 21 | '='=4 22 | '~'=5 23 | 'contains'=6 24 | 'beginsWith'=7 25 | 'endsWith'=8 26 | '>='=9 27 | '>'=10 28 | '<='=11 29 | '<'=12 30 | 'isNull'=13 31 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/expected/ParseGrammar - Expected.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/keyvalue/KeyValue.g4: -------------------------------------------------------------------------------- 1 | grammar KeyValue; 2 | 3 | @header { 4 | package step.repositories.parser.keyvalue; 5 | } 6 | 7 | parse 8 | : keyValueList EOF 9 | ; 10 | 11 | keyValueList 12 | : keyValue* 13 | ; 14 | 15 | keyValue 16 | : key EQ value 17 | ; 18 | 19 | key : WORD|STRING; 20 | 21 | value : WORD|STRING|DYNAMIC_EXPRESSION; 22 | 23 | EQ : '='; 24 | 25 | WORD: (~[|=" \u00A0\t\r\n])+ ; 26 | 27 | STRING 28 | : '"' (~["\r\n] | '""')* '"' 29 | ; 30 | 31 | DYNAMIC_EXPRESSION 32 | : '|' (~[|] | '||')* '|' 33 | ; 34 | 35 | SPACE 36 | : [ \u00A0\t\r\n] -> skip 37 | ; -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/keyvalue/KeyValue.tokens: -------------------------------------------------------------------------------- 1 | EQ=1 2 | WORD=2 3 | STRING=3 4 | DYNAMIC_EXPRESSION=4 5 | SPACE=5 6 | '='=1 7 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/main/java/step/repositories/parser/keyvalue/KeyValueLexer.tokens: -------------------------------------------------------------------------------- 1 | EQ=1 2 | WORD=2 3 | STRING=3 4 | DYNAMIC_EXPRESSION=4 5 | SPACE=5 6 | '='=1 7 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/test/resources/step/plans/nl/parser/complexPlan.plan: -------------------------------------------------------------------------------- 1 | //For loop 2 | For 1 to 2 3 | //Call a keyword 4 | CallFunction 5 | //Assert - City equals Basel 6 | Assert City = "Basel" 7 | //BeforeSequence 8 | BeforeSequence 9 | //some echo in before sequence 10 | Echo "${counter}" 11 | //before sequence end 12 | End 13 | //some echo in iteration 14 | Echo "${counter}" 15 | //AfterSequence 16 | AfterSequence 17 | //some echo in afterSequence 18 | Echo "${counter}" 19 | //after sequence end 20 | End 21 | //After section 22 | After 23 | //some echo in after section 24 | Echo in after 25 | //After end 26 | End 27 | //some other echo in iteration 28 | Echo "${counter}" 29 | //For end 30 | End 31 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/test/resources/step/plans/nl/parser/test.plan: -------------------------------------------------------------------------------- 1 | For 1 to 10 2 | // My Echo 3 | // with some description 4 | Echo "Hello" 5 | End -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/test/resources/step/plans/nl/parser/testAssert.expected.txt: -------------------------------------------------------------------------------- 1 | TestCase:PASSED: 2 | Session:PASSED: 3 | CallKeyword:PASSED: 4 | Sequence:PASSED: 5 | Script:PASSED: 6 | Assert:PASSED: 7 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/test/resources/step/plans/nl/parser/testAssert.plan: -------------------------------------------------------------------------------- 1 | Function name="test1" 2 | Script output.add("Name",input.getString('Name')) 3 | EndFunction 4 | 5 | test1 Name="Franz" 6 | Assert Name="Franz" -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/test/resources/step/plans/nl/parser/testInnerFunctions.expected.txt: -------------------------------------------------------------------------------- 1 | TestCase:PASSED: 2 | Session:PASSED: 3 | Set:PASSED: 4 | CallKeyword:PASSED: 5 | Sequence:PASSED: 6 | CallKeyword:PASSED: 7 | Sequence:PASSED: 8 | CallKeyword:PASSED: 9 | Sequence:PASSED: 10 | Echo:PASSED: 11 | -------------------------------------------------------------------------------- /step-plans/step-plans-parser/src/test/resources/step/plans/nl/parser/testInnerFunctions.plan: -------------------------------------------------------------------------------- 1 | Set var = "hallo" 2 | 3 | Function name="test2" 4 | test3 vorname = "Franz" Name = "${input.getString('Name')}" 5 | 6 | Function name="test3" 7 | Echo "$var ${input.getString('vorname')} ${input.getString('Name')}" 8 | EndFunction 9 | EndFunction 10 | 11 | Function name="test1" 12 | test2 Name = "${input.getString('Name')}" 13 | EndFunction 14 | 15 | test1 Name="Muster" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/YamlPlanConversionTool.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/agents/test-agents-configuration-yaml.yml: -------------------------------------------------------------------------------- 1 | version: 1.0.0 2 | name: "test plan" 3 | agents: 4 | - pool: "myPool" 5 | replicas: 1 6 | - pool: "myPool2" 7 | replicas: 2 8 | image: "test-image" 9 | root: 10 | sequence: 11 | children: [] -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/benchmark/test-benchmark-sample-plan.yml: -------------------------------------------------------------------------------- 1 | version: 1.0.0 2 | name: "Performance assert example" 3 | root: 4 | testCase: 5 | children: 6 | - threadGroup: 7 | users: 1 8 | pacing: 0 9 | maxDuration: 0 10 | iterations: 10 11 | children: 12 | - callKeyword: 13 | keyword: "Buy MacBook in OpenCart" 14 | - performanceAssert: 15 | measurementName: "Buy MacBook in OpenCart" 16 | expectedValue: 10000 -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/benchmark/test-converted-benchmark-sample-plan.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.0" 3 | name: "Performance assert example" 4 | root: 5 | testCase: 6 | nodeName: "Performance assert example" 7 | children: 8 | - threadGroup: 9 | children: 10 | - callKeyword: 11 | keyword: "Buy MacBook in OpenCart" 12 | iterations: 10 13 | pacing: 0 14 | after: 15 | continueOnError: false 16 | steps: 17 | - performanceAssert: 18 | measurementName: "Buy MacBook in OpenCart" 19 | expectedValue: 10000 -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/call-plan/test-call-plan.yml: -------------------------------------------------------------------------------- 1 | name: "Plan1" 2 | root: 3 | testCase: 4 | nodeName: "Plan1" 5 | skipNode: false 6 | instrumentNode: false 7 | continueParentNodeExecutionOnError: false 8 | children: 9 | - callPlan: 10 | selectionAttributes: 11 | - name: "Plan2" 12 | input: 13 | - inputtest: "some other value" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/call-plan/test-converted-from-tech-call-plan.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.0" 3 | name: "Plan1" 4 | root: 5 | testCase: 6 | nodeName: "Plan1" 7 | children: 8 | - callPlan: 9 | selectionAttributes: 10 | - name: "Plan2" 11 | input: 12 | - inputtest: "some other value" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/check/test-check-plan.yml: -------------------------------------------------------------------------------- 1 | name: "test check artefact" 2 | root: 3 | sequence: 4 | name: Sequence 5 | children: 6 | - check: 7 | nodeName: Check 8 | expression: "'true'" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/check/test-converted-from-tech-check-plan.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.0" 3 | name: "test check artefact" 4 | root: 5 | sequence: 6 | nodeName: "test check artefact" 7 | children: 8 | - check: 9 | expression: "'true'" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/data-set/test-data-set-converted-plan.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.0" 3 | name: "test plan" 4 | root: 5 | sequence: 6 | nodeName: "test plan" 7 | children: 8 | - dataSet: 9 | description: "test excel" 10 | dataSource: 11 | excel: 12 | forWrite: true 13 | file: 14 | id: "644fbe4e38a61e07cc3a4df9" 15 | worksheet: "myWorksheet" 16 | headers: true -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/data-set/test-data-set-plan.yml: -------------------------------------------------------------------------------- 1 | name: "test plan" 2 | root: 3 | sequence: 4 | name: Sequence 5 | children: 6 | - dataSet: 7 | description: "test excel" 8 | dataSource: 9 | excel: 10 | file: 11 | id: "644fbe4e38a61e07cc3a4df9" 12 | headers: true 13 | worksheet: "myWorksheet" 14 | forWrite: true -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/editor/test-valid-source.yml: -------------------------------------------------------------------------------- 1 | version: "1.1.0" 2 | name: "myPlan" 3 | root: 4 | sequence: 5 | nodeName: "myPlan" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/for/test-for-converted-plan.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.0" 3 | name: "test plan" 4 | root: 5 | sequence: 6 | nodeName: "test plan" 7 | children: 8 | - for: 9 | description: "test for" 10 | item: "testCounter" 11 | maxFailedLoops: 3 12 | threads: 2 13 | globalCounter: "testGCounter" 14 | userItem: "testUserId" 15 | start: 10 16 | end: 20 17 | inc: 5 -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/for/test-for-plan.yml: -------------------------------------------------------------------------------- 1 | name: "test plan" 2 | root: 3 | sequence: 4 | name: Sequence 5 | children: 6 | - for: 7 | description: "test for" 8 | start: 10 9 | end: 20 10 | inc: 5 11 | threads: 2 12 | maxFailedLoops: 3 13 | userItem: "testUserId" 14 | globalCounter: "testGCounter" 15 | item: "testCounter" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/function-group/test-function-group-converted-plan.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.0" 3 | name: "test plan" 4 | root: 5 | sequence: 6 | nodeName: "test plan" 7 | children: 8 | - session: 9 | routing: 10 | - criteria1: "criteriaValue1" 11 | - criteria2: "criteriaValue2" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/function-group/test-function-group-plan.yml: -------------------------------------------------------------------------------- 1 | name: "test plan" 2 | root: 3 | sequence: 4 | name: Sequence 5 | children: 6 | - session: 7 | nodeName: Session 8 | routing: 9 | - criteria1: "criteriaValue1" 10 | - criteria2: "criteriaValue2" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/invalid/test-invalid-plan-1.yml: -------------------------------------------------------------------------------- 1 | root: 2 | sequence: 3 | name: Sequence 4 | children: 5 | - if: 6 | nodeName: "IfBlock" 7 | condition: true 8 | description: "my description" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/invalid/test-invalid-plan-2.yml: -------------------------------------------------------------------------------- 1 | version: "1.0.0" 2 | name: "test plan" 3 | root: 4 | sequence: 5 | nodeName: Sequence 6 | children: 7 | - wrongArtefact: 8 | nodeName: "wrong" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/migration/test-migration-plan.yml: -------------------------------------------------------------------------------- 1 | version: "0.0.0" 2 | name: "test plan" 3 | root: 4 | oldSequence: 5 | nodeName: Sequence 6 | children: 7 | - oldAssert: 8 | nodeName: Assert 9 | oldOperator: "EQUALS" 10 | actual: 11 | expression: "'status'" 12 | expected: "ok" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/plaintext/plaintext-expected-plan.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.0" 3 | name: "converted plaintext plan" 4 | root: 5 | testCase: 6 | nodeName: "converted plaintext plan" 7 | children: 8 | - set: 9 | key: "key" 10 | value: 11 | expression: "\"value with space\"" 12 | - set: 13 | key: "key2" 14 | value: 15 | expression: "\"value2\"" 16 | - check: 17 | nodeName: "works" 18 | expression: "key2.toString().equals('value2')" 19 | - check: 20 | nodeName: "compile error" 21 | expression: "key2.toString().equals(\"value2\")" 22 | - check: 23 | nodeName: "compile error" 24 | expression: "key.toString().equals('value with space')" 25 | - check: 26 | expression: "key.toString().equals('value with space')" 27 | - callKeyword: 28 | children: 29 | - assert: 30 | actual: "isSendSuccess" 31 | operator: "EQUALS" 32 | expected: 33 | expression: "\"true\"" 34 | keyword: "GroovyCheck" 35 | -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/plaintext/plaintext.plan: -------------------------------------------------------------------------------- 1 | Set key="value with space" 2 | Set key2="value2" 3 | //works 4 | Check Expression = key2.toString().equals('value2') 5 | //compile error 6 | Check key2.toString().equals("value2") 7 | //compile error 8 | Check key.toString().equals('value with space') 9 | Check Expression = |key.toString().equals('value with space')| 10 | GroovyCheck 11 | Assert isSendSuccess="true" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/return/test-return-converted-plan.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "1.1.0" 3 | name: "Plan with return" 4 | root: 5 | sequence: 6 | nodeName: "Plan with return" 7 | children: 8 | - return: 9 | output: 10 | - output1: "value" 11 | - output2: 12 | expression: "'some thing dynamic'" -------------------------------------------------------------------------------- /step-plans/step-plans-yaml-parser/src/test/resources/step/plans/parser/yaml/return/test-return-plan.yml: -------------------------------------------------------------------------------- 1 | name: "Plan with return" 2 | root: 3 | sequence: 4 | children: 5 | - return: 6 | output: 7 | - output1: "value" 8 | - output2: 9 | expression: "'some thing dynamic'" -------------------------------------------------------------------------------- /step-repositories/step-repositories-artifact/.gitignore: -------------------------------------------------------------------------------- 1 | maven/ -------------------------------------------------------------------------------- /step-repositories/step-repositories-artifact/src/test/resources/step/repositories/artifact/plans-with-keywords.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-repositories/step-repositories-artifact/src/test/resources/step/repositories/artifact/plans-with-keywords.jar -------------------------------------------------------------------------------- /step-repositories/step-repositories-artifact/src/test/resources/step/repositories/artifact/step-junit-tests-invalid.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-repositories/step-repositories-artifact/src/test/resources/step/repositories/artifact/step-junit-tests-invalid.jar -------------------------------------------------------------------------------- /step-repositories/step-repositories-artifact/src/test/resources/step/repositories/artifact/step-junit-tests.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exense/step/e4da4083b2fa165e0e93d1211c46ce40121d65f1/step-repositories/step-repositories-artifact/src/test/resources/step/repositories/artifact/step-junit-tests.jar --------------------------------------------------------------------------------