├── .builds-darwin.goreleaser.yml
├── .builds-linux.goreleaser.yml
├── .builds-windows.goreleaser.yml
├── .codecov.yaml
├── .dockerignore
├── .env
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── enhancement.md
│ ├── feature_request.md
│ └── manage_tech_debt.md
├── dependabot.yml
├── pull_request_template.md
├── sandbox-comment-template.md
└── workflows
│ ├── agent-test-update-dispatch.yaml
│ ├── codeql-analysis.yml
│ ├── docker-build-api-executors-tag.yaml
│ ├── lint.yaml
│ ├── lint_pr.yaml
│ ├── new-build.yaml
│ ├── release-dev.yaml
│ ├── release.yaml
│ ├── sandbox-deletion.yaml
│ ├── sandbox.yaml
│ ├── scorecard.yml
│ └── test.yaml
├── .gitignore
├── .golangci.yml
├── .goreleaser-dev.yml
├── .goreleaser.yml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DESIGN.md
├── LICENSE
├── Makefile
├── README.md
├── api
└── v1
│ └── testkube.yaml
├── assets
├── architecture.png
├── favicon.png
├── grafana-dasboard.json
├── imageFailed.png
├── imagePassed.png
├── imagePending.png
├── intro-to-testkube.jpeg
├── intro-to-testkube.jpg
├── logo-dark-text-full.png
├── logo-dark-text.png
├── logo-rect-blue.png
├── logo-rect-dark.png
├── logo-rect-white.png
├── logo-white-text-full.png
├── logo-white-text.png
├── logo.svg
├── squishies.png
├── testkube-color-dark.png
├── testkube-color-gray.png
├── testkube-color-white.png
└── testkube-intro.gif
├── bin
└── .gitkeep
├── build
├── _local
│ ├── agent-server.Dockerfile
│ ├── testworkflow-init.Dockerfile
│ ├── testworkflow-toolkit.Dockerfile
│ └── values.dev.tpl.yaml
├── api-server
│ └── Dockerfile
├── installer
│ └── windows
│ │ ├── teskube.nuspec
│ │ ├── testkube.bat
│ │ ├── testkube.wxs
│ │ └── tk.bat
├── kind
│ ├── entrypoint.sh
│ └── kind.Dockerfile
├── kubectl-testkube
│ └── Dockerfile
├── logs-server
│ └── Dockerfile
├── logs-sidecar
│ └── Dockerfile
├── new
│ ├── api-server.Dockerfile
│ ├── tw-init.Dockerfile
│ └── tw-toolkit.Dockerfile
├── testworkflow-init
│ └── Dockerfile
└── testworkflow-toolkit
│ └── Dockerfile
├── choco
├── testkube.nuspec
├── tools
│ ├── LICENSE.txt
│ ├── VERIFICATION.txt
│ └── chocolateyInstall.ps1
└── update.ps1
├── cmd
├── api-server
│ ├── commons
│ │ ├── commons.go
│ │ ├── deprecated.go
│ │ ├── mock_deprecatedclients.go
│ │ └── mock_deprecatedrepositories.go
│ ├── main.go
│ └── services
│ │ ├── controlplane.go
│ │ ├── deprecatedsystem.go
│ │ ├── executionworker.go
│ │ └── telemetry.go
├── choco-stub
│ └── main.go
├── debug-server
│ ├── Dockerfile
│ ├── kube.yaml
│ └── main.go
├── kubectl-testkube
│ ├── commands
│ │ ├── abort.go
│ │ ├── agent.go
│ │ ├── agent
│ │ │ ├── debug.go
│ │ │ └── migrate.go
│ │ ├── agents
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── enable.go
│ │ │ ├── get.go
│ │ │ ├── install.go
│ │ │ ├── update.go
│ │ │ └── utils.go
│ │ ├── artifacts
│ │ │ └── artifacts.go
│ │ ├── cloud.go
│ │ ├── common
│ │ │ ├── agents.go
│ │ │ ├── client.go
│ │ │ ├── cloudcontext.go
│ │ │ ├── content.go
│ │ │ ├── crd.go
│ │ │ ├── environments.go
│ │ │ ├── errors.go
│ │ │ ├── flags.go
│ │ │ ├── helper.go
│ │ │ ├── masterFlags_test.go
│ │ │ ├── organizations.go
│ │ │ ├── render
│ │ │ │ ├── common.go
│ │ │ │ ├── list.go
│ │ │ │ └── obj.go
│ │ │ ├── repository.go
│ │ │ ├── uri.go
│ │ │ ├── validator
│ │ │ │ ├── cloudcontext.go
│ │ │ │ ├── directory.go
│ │ │ │ ├── dns1123subdomain.go
│ │ │ │ ├── executionid.go
│ │ │ │ ├── executionidfilename.go
│ │ │ │ ├── testsuitename.go
│ │ │ │ ├── version.go
│ │ │ │ └── version_test.go
│ │ │ ├── version.go
│ │ │ └── webhook.go
│ │ ├── config.go
│ │ ├── config
│ │ │ ├── api_server_name.go
│ │ │ ├── api_server_port.go
│ │ │ ├── api_uri.go
│ │ │ ├── headers.go
│ │ │ └── namespace.go
│ │ ├── constants.go
│ │ ├── context
│ │ │ ├── get.go
│ │ │ └── set.go
│ │ ├── crds
│ │ │ └── tests_crds.go
│ │ ├── create.go
│ │ ├── createticket.go
│ │ ├── dashboard.go
│ │ ├── debug.go
│ │ ├── debug
│ │ │ ├── agent.go
│ │ │ ├── controlplane.go
│ │ │ ├── features.go
│ │ │ ├── oss.go
│ │ │ └── utils.go
│ │ ├── delete.go
│ │ ├── diagnostics.go
│ │ ├── diagnostics
│ │ │ ├── install.go
│ │ │ └── license.go
│ │ ├── disable.go
│ │ ├── docker.go
│ │ ├── docker
│ │ │ └── init.go
│ │ ├── download.go
│ │ ├── enable.go
│ │ ├── executors
│ │ │ ├── common.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── get.go
│ │ │ └── update.go
│ │ ├── generate.go
│ │ ├── generate
│ │ │ └── docs.go
│ │ ├── get.go
│ │ ├── github
│ │ │ ├── issue.go
│ │ │ └── issue_test.go
│ │ ├── help.go
│ │ ├── init.go
│ │ ├── install.go
│ │ ├── migrate.go
│ │ ├── pro.go
│ │ ├── pro
│ │ │ ├── connect.go
│ │ │ ├── disconnect.go
│ │ │ ├── init.go
│ │ │ └── login.go
│ │ ├── purge.go
│ │ ├── renderer
│ │ │ ├── labels.go
│ │ │ └── variables.go
│ │ ├── root.go
│ │ ├── run.go
│ │ ├── set.go
│ │ ├── status.go
│ │ ├── telemetry
│ │ │ ├── disable.go
│ │ │ ├── enable.go
│ │ │ └── status.go
│ │ ├── templates
│ │ │ ├── common.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── get.go
│ │ │ └── update.go
│ │ ├── tests
│ │ │ ├── abort.go
│ │ │ ├── common.go
│ │ │ ├── common_test.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── executions.go
│ │ │ ├── get.go
│ │ │ ├── migrate.go
│ │ │ ├── renderer
│ │ │ │ ├── execution_obj.go
│ │ │ │ └── test_obj.go
│ │ │ ├── run.go
│ │ │ ├── update.go
│ │ │ └── watch.go
│ │ ├── testsources
│ │ │ ├── common.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── get.go
│ │ │ ├── renderer
│ │ │ │ └── testsource_obj.go
│ │ │ └── update.go
│ │ ├── testsuites
│ │ │ ├── abort.go
│ │ │ ├── common.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── executions.go
│ │ │ ├── get.go
│ │ │ ├── migrate.go
│ │ │ ├── renderer
│ │ │ │ ├── execution_obj.go
│ │ │ │ └── testsuite_obj.go
│ │ │ ├── run.go
│ │ │ ├── update.go
│ │ │ └── watch.go
│ │ ├── testworkflows
│ │ │ ├── abort.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── executions.go
│ │ │ ├── get.go
│ │ │ ├── renderer
│ │ │ │ ├── testworkflow_obj.go
│ │ │ │ └── testworkflowexecution_obj.go
│ │ │ ├── rerun.go
│ │ │ ├── run.go
│ │ │ ├── run_test.go
│ │ │ └── watch.go
│ │ ├── testworkflowtemplates
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── get.go
│ │ │ └── renderer
│ │ │ │ └── testworkflow_obj.go
│ │ ├── update.go
│ │ ├── upgrade.go
│ │ ├── version.go
│ │ ├── watch.go
│ │ ├── webhooks
│ │ │ ├── common.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── get.go
│ │ │ └── update.go
│ │ └── webhooktemplates
│ │ │ ├── common.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── get.go
│ │ │ └── update.go
│ ├── config
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── data.go
│ │ ├── master.go
│ │ └── storage.go
│ ├── debugger
│ │ ├── debugger.go
│ │ ├── events.go
│ │ └── job.go
│ └── main.go
├── logs-server
│ └── main.go
├── logs-sidecar
│ └── main.go
├── proxy
│ └── main.go
├── tcl
│ ├── README.md
│ ├── devbox-binary-storage
│ │ └── main.go
│ ├── devbox-mutating-webhook
│ │ └── main.go
│ ├── kubectl-testkube
│ │ └── devbox
│ │ │ ├── README.md
│ │ │ ├── command.go
│ │ │ └── devutils
│ │ │ ├── agent.go
│ │ │ ├── binary.go
│ │ │ ├── binarypatch.go
│ │ │ ├── binarystorage.go
│ │ │ ├── certificates.go
│ │ │ ├── cloud.go
│ │ │ ├── cluster.go
│ │ │ ├── crdfssync.go
│ │ │ ├── find.go
│ │ │ ├── forwarding.go
│ │ │ ├── fswatcher.go
│ │ │ ├── gitopsagent.go
│ │ │ ├── grafana.go
│ │ │ ├── interceptor.go
│ │ │ ├── minio.go
│ │ │ ├── mongo.go
│ │ │ ├── namespace.go
│ │ │ ├── pods.go
│ │ │ ├── prometheus.go
│ │ │ ├── resources.go
│ │ │ └── runneragent.go
│ └── testworkflow-toolkit
│ │ ├── commands
│ │ ├── execute.go
│ │ ├── kill.go
│ │ ├── parallel.go
│ │ └── services.go
│ │ ├── common
│ │ ├── combinations.go
│ │ ├── combinations_test.go
│ │ └── labels.go
│ │ ├── execute
│ │ └── execute.go
│ │ └── spawn
│ │ ├── constants.go
│ │ ├── registry.go
│ │ └── utils.go
├── testworkflow-init
│ ├── commands
│ │ ├── run.go
│ │ └── setup.go
│ ├── constants
│ │ ├── addr.go
│ │ ├── codes.go
│ │ ├── commands.go
│ │ ├── formats.go
│ │ ├── instructions.go
│ │ ├── names.go
│ │ ├── paths.go
│ │ └── statuses.go
│ ├── control
│ │ ├── client.go
│ │ ├── options.go
│ │ └── server.go
│ ├── data
│ │ ├── client.go
│ │ ├── expressions.go
│ │ ├── global.go
│ │ ├── outputProcessor.go
│ │ ├── state.go
│ │ └── stepData.go
│ ├── instructions
│ │ └── emit.go
│ ├── main.go
│ ├── obfuscator
│ │ ├── obfuscator.go
│ │ ├── obfuscator_test.go
│ │ ├── replacers.go
│ │ ├── replacers_test.go
│ │ └── searchtree.go
│ ├── orchestration
│ │ ├── control.go
│ │ ├── executions.go
│ │ ├── processes.go
│ │ ├── setup.go
│ │ ├── setup_test.go
│ │ ├── testdata
│ │ │ ├── config.json
│ │ │ ├── signature.json
│ │ │ └── spec.json
│ │ └── timeout.go
│ ├── output
│ │ ├── fail.go
│ │ ├── printer.go
│ │ └── stream.go
│ └── runtime
│ │ └── machine.go
├── testworkflow-toolkit
│ ├── artifacts
│ │ ├── cloud_uploader.go
│ │ ├── direct_processor.go
│ │ ├── handler.go
│ │ ├── handler_test.go
│ │ ├── internalartifactstorage.go
│ │ ├── junit_post_processor.go
│ │ ├── junit_post_processor_test.go
│ │ ├── mimetype.go
│ │ ├── options.go
│ │ ├── processor.go
│ │ ├── tar_processor.go
│ │ ├── tar_stream.go
│ │ ├── tarcached_processor.go
│ │ ├── uploader.go
│ │ └── walker.go
│ ├── commands
│ │ ├── artifacts.go
│ │ ├── artifacts_test.go
│ │ ├── clone.go
│ │ ├── root.go
│ │ ├── tarball.go
│ │ ├── testdata
│ │ │ ├── junit.xml
│ │ │ └── test.log
│ │ ├── transfer.go
│ │ └── utils.go
│ ├── common
│ │ ├── tarball.go
│ │ └── testdata
│ │ │ └── junit.go
│ ├── env
│ │ ├── client.go
│ │ └── config
│ │ │ └── config.go
│ ├── main.go
│ └── transfer
│ │ ├── server.go
│ │ └── utils.go
└── tools
│ ├── commands
│ ├── common.go
│ ├── release.go
│ ├── root.go
│ └── versions.go
│ └── main.go
├── codecov.yaml
├── common.UiGetNamespace
├── config
├── executors.json
├── job-container-template.yml
├── job-scraper-template.yml
├── job-template.yml
├── pvc-template.yml
├── slack-config.json
├── slack-template.json
└── slave-pod-template.yml
├── contrib
├── container
│ ├── README.md
│ ├── kubent
│ │ └── executor.yaml
│ └── pytest
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── container-executor-pytest.yaml
│ │ ├── failed_sample.py
│ │ ├── passed_sample.py
│ │ └── pytest_test.yaml
├── docker
│ └── jmeter
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── jmeter5.5.ubi8.8.Dockerfile
└── executor
│ ├── artillery
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── artillery-executor.yaml
│ │ ├── postcodes.csv
│ │ ├── simple.yaml
│ │ └── test.yaml
│ └── pkg
│ │ ├── README.md
│ │ ├── artillery
│ │ └── artillerydetector.go
│ │ └── runner
│ │ ├── artillery.go
│ │ ├── artillery_helper.go
│ │ └── artillery_test.go
│ ├── curl
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── example_execution.json
│ │ └── example_with_templates.json
│ └── pkg
│ │ ├── README.md
│ │ ├── curl
│ │ ├── curltest.go
│ │ └── curltest_test.go
│ │ └── runner
│ │ ├── runner.go
│ │ ├── runner_input.go
│ │ ├── template.go
│ │ └── template_test.go
│ ├── cypress
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ ├── Dockerfile.cypress10
│ │ │ ├── Dockerfile.cypress11
│ │ │ ├── Dockerfile.cypress12
│ │ │ ├── Dockerfile.cypress13
│ │ │ ├── Dockerfile.cypress8
│ │ │ ├── Dockerfile.cypress9
│ │ │ ├── Dockerfile.npm
│ │ │ └── Dockerfile.yarn
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── cypress.config.js
│ │ ├── cypress
│ │ │ ├── e2e
│ │ │ │ └── simple.cy.js
│ │ │ ├── fixtures
│ │ │ │ ├── example.json
│ │ │ │ ├── profile.json
│ │ │ │ └── users.json
│ │ │ ├── plugins
│ │ │ │ └── index.js
│ │ │ └── support
│ │ │ │ ├── commands.js
│ │ │ │ └── e2e.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── test-git-dir.json
│ │ └── test-string.json
│ ├── pkg
│ │ ├── README.md
│ │ ├── cypress
│ │ │ └── cypress.go
│ │ └── runner
│ │ │ ├── cypress.go
│ │ │ └── cypress_test.go
│ └── skeleton
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── cypress.json
│ │ ├── cypress
│ │ ├── integration
│ │ │ └── test.js
│ │ ├── plugins
│ │ │ └── index.js
│ │ └── support
│ │ │ ├── commands.js
│ │ │ └── index.js
│ │ ├── package-lock.json
│ │ └── package.json
│ ├── example
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ ├── agent
│ │ │ └── Dockerfile
│ │ └── kube
│ │ │ └── executor.yaml
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ └── pkg
│ │ ├── README.md
│ │ └── runner
│ │ ├── runner.go
│ │ └── runner_test.go
│ ├── ginkgo
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── other
│ │ │ ├── other_suite_test.go
│ │ │ └── url_test.go
│ │ └── testkube-api
│ │ │ ├── api_test.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── testkube_api_suite_test.go
│ └── pkg
│ │ ├── README.md
│ │ ├── ginkgo
│ │ └── ginkgo.go
│ │ └── runner
│ │ ├── runner.go
│ │ ├── runner_integration_test.go
│ │ └── runner_test.go
│ ├── gradle
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ ├── Dockerfile.jdk11
│ │ │ ├── Dockerfile.jdk17
│ │ │ ├── Dockerfile.jdk18
│ │ │ ├── Dockerfile.jdk21
│ │ │ └── Dockerfile.jdk8
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── gradle-executor.yaml
│ │ ├── hello-gradle-jdk18
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── settings.gradle
│ │ │ └── src
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── gradle
│ │ │ │ └── LibraryTest.java
│ │ ├── hello-gradle
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── settings.gradle
│ │ │ └── src
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── gradle
│ │ │ │ └── LibraryTest.java
│ │ ├── hello-gradlew-failing
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── settings.gradle
│ │ │ └── src
│ │ │ │ ├── main
│ │ │ │ └── java
│ │ │ │ │ └── hello
│ │ │ │ │ └── gradlew
│ │ │ │ │ └── Library.java
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── gradlew
│ │ │ │ └── LibraryTest.java
│ │ ├── hello-gradlew-jdk18
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── settings.gradle
│ │ │ └── src
│ │ │ │ ├── main
│ │ │ │ └── java
│ │ │ │ │ └── hello
│ │ │ │ │ └── gradlew
│ │ │ │ │ └── Library.java
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── gradlew
│ │ │ │ └── LibraryTest.java
│ │ └── hello-gradlew
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── settings.gradle
│ │ │ └── src
│ │ │ ├── main
│ │ │ └── java
│ │ │ │ ├── hello
│ │ │ │ └── gradlew
│ │ │ │ │ └── Library.java
│ │ │ │ └── other
│ │ │ │ └── Library.java
│ │ │ └── test
│ │ │ └── java
│ │ │ ├── hello
│ │ │ └── gradlew
│ │ │ │ └── LibraryTest.java
│ │ │ └── other
│ │ │ └── LibraryTest.java
│ └── pkg
│ │ ├── README.md
│ │ ├── gradle
│ │ └── gradle.go
│ │ └── runner
│ │ ├── runner.go
│ │ └── runner_integration_test.go
│ ├── init
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ └── pkg
│ │ ├── README.md
│ │ └── runner
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ └── testdir
│ │ ├── .gitkeep
│ │ ├── command.sh
│ │ ├── entrypoint.sh
│ │ ├── postrun.sh
│ │ └── prerun.sh
│ ├── jmeter
│ ├── .dockerignore
│ ├── .env.sample
│ ├── .gitignore
│ ├── .golangci.yml
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ ├── Dockerfile
│ │ │ └── local.Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── executor.yaml
│ │ ├── jmeter.log
│ │ ├── kubeshop.jmx
│ │ ├── kubeshop_failed.jmx
│ │ └── results.jtl
│ ├── lib
│ │ └── jmeter-plugins-cmn-jmeter-0.6.jar
│ ├── pkg
│ │ ├── README.md
│ │ ├── jmeter
│ │ │ └── jmeter.go
│ │ ├── parser
│ │ │ ├── jtl.go
│ │ │ ├── jtl_test.go
│ │ │ ├── xjtl.go
│ │ │ ├── xjtl_test.go
│ │ │ └── xunit.go
│ │ └── runner
│ │ │ ├── runner.go
│ │ │ ├── runner_integration_test.go
│ │ │ └── runner_test.go
│ ├── plugins
│ │ ├── jmeter-plugins-functions-2.1.jar
│ │ └── jmeter-plugins-manager-1.3.jar
│ └── scripts
│ │ └── entrypoint.sh
│ ├── jmeterd
│ ├── .dockerignore
│ ├── .env.sample
│ ├── .gitignore
│ ├── .golangci.yml
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ ├── agent
│ │ │ ├── Dockerfile
│ │ │ └── local.Dockerfile
│ │ └── slaves
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── executor.yaml
│ │ ├── gitflow
│ │ │ ├── README.md
│ │ │ ├── csvdata
│ │ │ │ └── Credentials.csv
│ │ │ ├── jmeter-properties-external.jmx
│ │ │ ├── plugins
│ │ │ │ ├── JMeterPlugins-Extras.jar
│ │ │ │ ├── jmeter-parallel-0.11.jar
│ │ │ │ ├── jmeter-plugins-dummy-0.4.jar
│ │ │ │ ├── jmeter-plugins-functions-2.2.jar
│ │ │ │ └── jmeter-plugins-manager-1.9.jar
│ │ │ └── user.properties
│ │ ├── jmeter.log
│ │ ├── kubeshop.jmx
│ │ ├── kubeshop_failed.jmx
│ │ └── results.jtl
│ ├── pkg
│ │ ├── README.md
│ │ ├── parser
│ │ │ ├── csvjtl.go
│ │ │ ├── csvjtl_test.go
│ │ │ ├── mapper.go
│ │ │ ├── parser.go
│ │ │ ├── parser_test.go
│ │ │ ├── xmljtl.go
│ │ │ ├── xmljtl_test.go
│ │ │ └── xunit.go
│ │ ├── runner
│ │ │ ├── helpers.go
│ │ │ ├── helpers_test.go
│ │ │ ├── runner.go
│ │ │ └── runner_test.go
│ │ └── slaves
│ │ │ ├── client.go
│ │ │ ├── env.go
│ │ │ ├── interface.go
│ │ │ ├── meta.go
│ │ │ ├── meta_test.go
│ │ │ ├── utils.go
│ │ │ └── utils_test.go
│ └── scripts
│ │ ├── entrypoint.sh
│ │ ├── jmeter-master.sh
│ │ └── jmeter-slaves.sh
│ ├── k6
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── SECURITY.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── k6-executor.yaml
│ │ ├── k6-influxdb-grafana.yaml
│ │ ├── k6-test-environment.js
│ │ ├── k6-test-failing-script.js
│ │ ├── k6-test-scenarios.js
│ │ ├── k6-test-scenarios.txt
│ │ ├── k6-test-script.js
│ │ ├── k6-test-summary.js
│ │ ├── k6-test-summary.txt
│ │ └── k6-test-thresholds.js
│ └── pkg
│ │ ├── README.md
│ │ ├── k6detector
│ │ ├── k6.go
│ │ └── k6_test.go
│ │ └── runner
│ │ ├── runner.go
│ │ ├── runner_integration_test.go
│ │ └── runner_test.go
│ ├── kubepug
│ ├── .gitignore
│ ├── .golangci.yml
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ └── pkg
│ │ ├── kubepug
│ │ └── kubepug.go
│ │ └── runner
│ │ ├── result.go
│ │ ├── result_test.go
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ └── test-files
│ │ ├── manifest-deprecated.yaml
│ │ └── manifest-valid
│ │ └── manifest.yaml
│ ├── maven
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ ├── Dockerfile.jdk11
│ │ │ ├── Dockerfile.jdk17
│ │ │ ├── Dockerfile.jdk18
│ │ │ └── Dockerfile.jdk8
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── hello-maven-jdk18
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── maven
│ │ │ │ └── LibraryTest.java
│ │ ├── hello-maven-jdk8
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── maven
│ │ │ │ └── LibraryTest.java
│ │ ├── hello-maven-settings
│ │ │ ├── pom.xml
│ │ │ ├── settings.xml
│ │ │ └── src
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── maven
│ │ │ │ └── LibraryTest.java
│ │ ├── hello-maven
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── maven
│ │ │ │ └── LibraryTest.java
│ │ ├── hello-mvnw
│ │ │ ├── .mvn
│ │ │ │ └── wrapper
│ │ │ │ │ ├── maven-wrapper.jar
│ │ │ │ │ └── maven-wrapper.properties
│ │ │ ├── mvnw
│ │ │ ├── mvnw.cmd
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── hello
│ │ │ │ └── maven
│ │ │ │ └── LibraryTest.java
│ │ └── maven-executor.yaml
│ └── pkg
│ │ ├── README.md
│ │ ├── maven
│ │ └── maven.go
│ │ └── runner
│ │ ├── runner.go
│ │ └── runner_integration_test.go
│ ├── playwright
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ ├── Dockerfile.npm
│ │ │ ├── Dockerfile.pnpm
│ │ │ └── Dockerfile.yarn
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ ├── package.json
│ │ ├── playwright.config.js
│ │ └── tests
│ │ │ └── example.spec.js
│ └── pkg
│ │ ├── README.md
│ │ ├── playwright
│ │ └── playwright.go
│ │ └── runner
│ │ ├── playwright.go
│ │ └── playwright_test.go
│ ├── postman
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ ├── Dockerfile
│ │ │ └── Dockerfile.node21
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── examples
│ │ └── example_postman_collection.json
│ └── pkg
│ │ ├── README.md
│ │ ├── postman
│ │ ├── postmancollection.go
│ │ └── postmancollection_test.go
│ │ └── runner
│ │ └── newman
│ │ ├── envfile.go
│ │ ├── executionresult.go
│ │ ├── mapper.go
│ │ ├── mapper_test.go
│ │ ├── metadata.go
│ │ ├── newman.go
│ │ └── newman_test.go
│ ├── scraper
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ └── pkg
│ │ ├── README.md
│ │ └── runner
│ │ ├── runner.go
│ │ └── runner_test.go
│ ├── soapui
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ ├── executor.yaml
│ └── pkg
│ │ ├── mock
│ │ ├── doc.go
│ │ └── scraper.go
│ │ ├── runner
│ │ ├── doc.go
│ │ ├── example
│ │ │ ├── REST-Failing-Project-1-soapui-project.xml
│ │ │ └── REST-Project-1-soapui-project.xml
│ │ ├── runner.go
│ │ └── runner_test.go
│ │ └── soapui
│ │ └── soapui.go
│ ├── template
│ ├── .gitignore
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ └── Dockerfile
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ └── pkg
│ │ ├── README.md
│ │ └── runner
│ │ ├── runner.go
│ │ └── runner_test.go
│ ├── tracetest
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── build
│ │ └── agent
│ │ │ ├── Dockerfile
│ │ │ └── docker-bake.hcl
│ ├── cmd
│ │ ├── agent
│ │ │ └── main.go
│ │ └── tools
│ │ │ └── main.go
│ └── pkg
│ │ ├── command
│ │ └── command.go
│ │ ├── model
│ │ └── result.go
│ │ ├── runner
│ │ ├── runner.go
│ │ ├── runner_integration_test.go
│ │ ├── runner_test.go
│ │ ├── tracetest_core_runner.go
│ │ └── tracetest_runner.go
│ │ └── testing
│ │ ├── docker-compose-tracetest-cloud.yaml
│ │ ├── docker-compose-tracetest-core.yaml
│ │ ├── tracetest-config.yaml
│ │ ├── tracetest-provision.yaml
│ │ └── tracetest-test-script.yaml
│ └── zap
│ ├── Makefile
│ ├── README.md
│ ├── build
│ └── agent
│ │ └── Dockerfile
│ ├── cmd
│ ├── agent
│ │ └── main.go
│ └── tools
│ │ └── main.go
│ ├── examples
│ ├── test-api-fail-on-warn.yaml
│ ├── test-api-fail.yaml
│ ├── test-api-pass.yaml
│ ├── test-api-warn.yaml
│ ├── test-baseline-pass.yaml
│ ├── test-baseline-warn.yaml
│ ├── test-full-fail.yaml
│ ├── zap-api.conf
│ ├── zap-api.yaml
│ ├── zap-baseline.conf
│ ├── zap-baseline.yaml
│ ├── zap-executor.yaml
│ ├── zap-full.conf
│ ├── zap-full.yaml
│ ├── zap-tk-api.conf
│ ├── zap-tk-api.yaml
│ ├── zap-tk-baseline.conf
│ ├── zap-tk-baseline.yaml
│ ├── zap-tk-full.conf
│ └── zap-tk-full.yaml
│ ├── pkg
│ └── runner
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ ├── zap.go
│ │ └── zap_test.go
│ └── zap
│ ├── .gitignore
│ ├── zap-api-scan.py
│ ├── zap-baseline.py
│ └── zap-full-scan.py
├── data.json
├── depot.json
├── docker-bake.hcl
├── docs
└── README.md
├── go.mod
├── go.sum
├── goreleaser_files
├── .goreleaser-docker-build-api.yml
├── .goreleaser-docker-build-executor-cypress.yml
├── .goreleaser-docker-build-executor-gradle.yml
├── .goreleaser-docker-build-executor-jmeter.yml
├── .goreleaser-docker-build-executor-jmeterd.yml
├── .goreleaser-docker-build-executor-maven.yml
├── .goreleaser-docker-build-executor-playwright.yml
├── .goreleaser-docker-build-executor-postman-node21.yml
├── .goreleaser-docker-build-executor.yml
├── .goreleaser-docker-build-logs-services.yml
├── .goreleaser-docker-build-testworkflow-init.yml
└── .goreleaser-docker-build-testworkflow-toolkit.yml
├── gqlgen.yml
├── install.sh
├── internal
├── app
│ └── api
│ │ ├── apiutils
│ │ └── utils.go
│ │ ├── debug
│ │ └── server.go
│ │ ├── deprecatedv1
│ │ ├── executions.go
│ │ ├── executions_test.go
│ │ ├── executor.go
│ │ ├── graphql.go
│ │ ├── handlers.go
│ │ ├── server.go
│ │ ├── slack_oauth.go
│ │ ├── template.go
│ │ ├── tests.go
│ │ ├── tests_test.go
│ │ ├── testsource.go
│ │ ├── testsuites.go
│ │ ├── uploads.go
│ │ └── uploads_test.go
│ │ ├── metrics
│ │ └── metrics.go
│ │ └── v1
│ │ ├── configs.go
│ │ ├── debug.go
│ │ ├── events.go
│ │ ├── events_test.go
│ │ ├── handlers.go
│ │ ├── labels_tags.go
│ │ ├── repository.go
│ │ ├── secret.go
│ │ ├── server.go
│ │ ├── testtriggers.go
│ │ ├── testworkflowexecutions.go
│ │ ├── testworkflowmetrics.go
│ │ ├── testworkflows.go
│ │ ├── testworkflowtemplates.go
│ │ ├── testworkflowwithexecutions.go
│ │ ├── utils.go
│ │ ├── webhook.go
│ │ └── webhooktemplate.go
├── common
│ ├── common.go
│ └── mode.go
├── config
│ ├── config.go
│ ├── config_test.go
│ └── procontext.go
├── crdcommon
│ ├── crd.go
│ └── crd_test.go
├── db-migrations
│ ├── 01_create_indexes.down.json
│ ├── 01_create_indexes.up.json
│ ├── 02_execution_search_indexes.down.json
│ ├── 02_execution_search_indexes.up.json
│ ├── 03_testworkflow_indexes.down.json
│ ├── 03_testworkflow_indexes.up.json
│ └── fs.go
├── graphql
│ ├── gen
│ │ └── generated.go
│ ├── resolvers
│ │ ├── executors_resolver.go
│ │ ├── executors_resolver_test.go
│ │ ├── resolver.go
│ │ ├── root_resolver.go
│ │ └── test_client.go
│ ├── scalars
│ │ └── maps.go
│ ├── schemas
│ │ ├── executors.graphqls
│ │ └── root.graphqls
│ ├── server.go
│ ├── services
│ │ ├── common.go
│ │ ├── executors.go
│ │ ├── executors_test.go
│ │ ├── mock_executors.go
│ │ ├── mock_service.go
│ │ ├── service.go
│ │ └── service_base.go
│ └── tools.go
└── template
│ ├── parser.go
│ └── parser_test.go
├── licenses
├── MIT.txt
└── TCL.txt
├── package-lock.json
├── pkg
├── README.md
├── agent
│ ├── agent.go
│ ├── agent_test.go
│ ├── client
│ │ └── client.go
│ ├── events.go
│ ├── events_test.go
│ ├── logs.go
│ ├── logs_test.go
│ └── utils.go
├── api
│ ├── README.md
│ └── v1
│ │ ├── client
│ │ ├── api.go
│ │ ├── api_test.go
│ │ ├── apiconfig.go
│ │ ├── cloud_client.go
│ │ ├── common.go
│ │ ├── common_test.go
│ │ ├── config.go
│ │ ├── direct_client.go
│ │ ├── executor.go
│ │ ├── factory.go
│ │ ├── factory_test.go
│ │ ├── interface.go
│ │ ├── mock_client.go
│ │ ├── proxy_client.go
│ │ ├── shared.go
│ │ ├── template.go
│ │ ├── test.go
│ │ ├── testsource.go
│ │ ├── testsuite.go
│ │ ├── testtriggers.go
│ │ ├── testworkflow.go
│ │ ├── testworkflowtemplate.go
│ │ ├── uploads.go
│ │ ├── webhook.go
│ │ └── webhooktemplate.go
│ │ └── testkube
│ │ ├── common.go
│ │ ├── model_affinity.go
│ │ ├── model_app_armor_profile.go
│ │ ├── model_artifact.go
│ │ ├── model_artifact_extended.go
│ │ ├── model_artifact_request.go
│ │ ├── model_artifact_update_request.go
│ │ ├── model_artifact_updt_request_extended.go
│ │ ├── model_assertion_result.go
│ │ ├── model_aws_elastic_block_store_volume_source.go
│ │ ├── model_azure_disk_volume_source.go
│ │ ├── model_azure_file_volume_source.go
│ │ ├── model_boxed_boolean.go
│ │ ├── model_boxed_integer.go
│ │ ├── model_boxed_string.go
│ │ ├── model_boxed_string_list.go
│ │ ├── model_ceph_fs_volume_source.go
│ │ ├── model_claim_source.go
│ │ ├── model_config.go
│ │ ├── model_config_map_env_source.go
│ │ ├── model_config_map_ref.go
│ │ ├── model_config_map_volume_source.go
│ │ ├── model_config_map_volume_source_items.go
│ │ ├── model_content_git_auth_type.go
│ │ ├── model_csi_volume_source.go
│ │ ├── model_debug_info.go
│ │ ├── model_debug_info_execution_logs.go
│ │ ├── model_debug_info_extended.go
│ │ ├── model_download_artifact_options.go
│ │ ├── model_empty_dir_volume_source.go
│ │ ├── model_env_from_source.go
│ │ ├── model_env_reference.go
│ │ ├── model_env_var.go
│ │ ├── model_env_var_source.go
│ │ ├── model_env_var_source_config_map_key_ref.go
│ │ ├── model_env_var_source_field_ref.go
│ │ ├── model_env_var_source_resource_field_ref.go
│ │ ├── model_env_var_source_secret_key_ref.go
│ │ ├── model_event.go
│ │ ├── model_event_extended.go
│ │ ├── model_event_extended_test.go
│ │ ├── model_event_resource.go
│ │ ├── model_event_resource_extended.go
│ │ ├── model_event_result.go
│ │ ├── model_event_result_extended.go
│ │ ├── model_event_type.go
│ │ ├── model_event_type_extended.go
│ │ ├── model_event_type_extended_test.go
│ │ ├── model_exec_action.go
│ │ ├── model_execution.go
│ │ ├── model_execution_core.go
│ │ ├── model_execution_extended.go
│ │ ├── model_execution_request.go
│ │ ├── model_execution_result.go
│ │ ├── model_execution_result_extended.go
│ │ ├── model_execution_result_reports.go
│ │ ├── model_execution_result_step.go
│ │ ├── model_execution_result_step_assertion.go
│ │ ├── model_execution_status.go
│ │ ├── model_execution_status_extended.go
│ │ ├── model_execution_step_result.go
│ │ ├── model_execution_summary.go
│ │ ├── model_execution_target.go
│ │ ├── model_execution_update_request.go
│ │ ├── model_executions_metrics.go
│ │ ├── model_executions_metrics_executions.go
│ │ ├── model_executions_result.go
│ │ ├── model_executions_result_extended.go
│ │ ├── model_executions_totals.go
│ │ ├── model_executor.go
│ │ ├── model_executor_details.go
│ │ ├── model_executor_details_extended.go
│ │ ├── model_executor_extended.go
│ │ ├── model_executor_meta.go
│ │ ├── model_executor_meta_update.go
│ │ ├── model_executor_meta_updt_extended.go
│ │ ├── model_executor_output.go
│ │ ├── model_executor_update_request.go
│ │ ├── model_executor_upsert_request.go
│ │ ├── model_executor_upsert_request_extended.go
│ │ ├── model_features.go
│ │ ├── model_field_ref.go
│ │ ├── model_gce_persistent_disk_volume_source.go
│ │ ├── model_grpc_action.go
│ │ ├── model_host_alias.go
│ │ ├── model_host_path_volume_source.go
│ │ ├── model_http_get_action.go
│ │ ├── model_http_header.go
│ │ ├── model_image_pull_policy.go
│ │ ├── model_io_k8s_apimachinery_pkg_apis_meta_v1_label_selector.go
│ │ ├── model_io_k8s_apimachinery_pkg_apis_meta_v1_label_selector_requirement.go
│ │ ├── model_key_value.go
│ │ ├── model_label_selector.go
│ │ ├── model_label_selector_requirement.go
│ │ ├── model_local_object_reference.go
│ │ ├── model_log_v1.go
│ │ ├── model_log_v2.go
│ │ ├── model_nfs_volume_source.go
│ │ ├── model_node_affinity.go
│ │ ├── model_node_selector.go
│ │ ├── model_node_selector_requirement.go
│ │ ├── model_node_selector_term.go
│ │ ├── model_object_ref.go
│ │ ├── model_persistent_volume_claim_volume_source.go
│ │ ├── model_pod_affinity.go
│ │ ├── model_pod_affinity_term.go
│ │ ├── model_pod_dns_config.go
│ │ ├── model_pod_dns_config_option.go
│ │ ├── model_pod_request.go
│ │ ├── model_pod_resource_claim.go
│ │ ├── model_pod_resources_request.go
│ │ ├── model_pod_resources_update_request.go
│ │ ├── model_pod_scheduling_gate.go
│ │ ├── model_pod_security_context.go
│ │ ├── model_pod_update_request.go
│ │ ├── model_pod_updt_request_extended.go
│ │ ├── model_preferred_scheduling_term.go
│ │ ├── model_probe.go
│ │ ├── model_problem.go
│ │ ├── model_projected_volume_source.go
│ │ ├── model_projected_volume_source_cluster_trust_bundle.go
│ │ ├── model_projected_volume_source_config_map.go
│ │ ├── model_projected_volume_source_downward_api.go
│ │ ├── model_projected_volume_source_downward_api_items.go
│ │ ├── model_projected_volume_source_secret.go
│ │ ├── model_projected_volume_source_service_account_token.go
│ │ ├── model_projected_volume_source_sources.go
│ │ ├── model_repository.go
│ │ ├── model_repository_extended.go
│ │ ├── model_repository_parameters.go
│ │ ├── model_repository_update.go
│ │ ├── model_repository_update_parameters.go
│ │ ├── model_repository_updt_exetended.go
│ │ ├── model_resource_field_ref.go
│ │ ├── model_resource_request.go
│ │ ├── model_resource_update_request.go
│ │ ├── model_running_context.go
│ │ ├── model_running_context_extended.go
│ │ ├── model_se_linux_options.go
│ │ ├── model_seccomp_profile.go
│ │ ├── model_secret.go
│ │ ├── model_secret_config.go
│ │ ├── model_secret_env_source.go
│ │ ├── model_secret_input.go
│ │ ├── model_secret_owner.go
│ │ ├── model_secret_ref.go
│ │ ├── model_secret_ref_extended.go
│ │ ├── model_secret_update.go
│ │ ├── model_secret_volume_source.go
│ │ ├── model_secret_volume_source_items.go
│ │ ├── model_security_context.go
│ │ ├── model_server_info.go
│ │ ├── model_server_info_extended.go
│ │ ├── model_slaves_meta.go
│ │ ├── model_sysctl.go
│ │ ├── model_tcp_socket_action.go
│ │ ├── model_template.go
│ │ ├── model_template_create_request.go
│ │ ├── model_template_extended.go
│ │ ├── model_template_type.go
│ │ ├── model_template_update_request.go
│ │ ├── model_test+workflow_spec_extended.go
│ │ ├── model_test_base.go
│ │ ├── model_test_base_extended.go
│ │ ├── model_test_content.go
│ │ ├── model_test_content_extended.go
│ │ ├── model_test_content_request.go
│ │ ├── model_test_content_update.go
│ │ ├── model_test_content_update_request.go
│ │ ├── model_test_execution_cr.go
│ │ ├── model_test_execution_status_cr.go
│ │ ├── model_test_source.go
│ │ ├── model_test_source_batch_request.go
│ │ ├── model_test_source_batch_result.go
│ │ ├── model_test_source_extended.go
│ │ ├── model_test_source_update.go
│ │ ├── model_test_source_update_request.go
│ │ ├── model_test_source_upsert_request.go
│ │ ├── model_test_status.go
│ │ ├── model_test_suite.go
│ │ ├── model_test_suite_base_extended.go
│ │ ├── model_test_suite_batch_step.go
│ │ ├── model_test_suite_batch_step_execution_result.go
│ │ ├── model_test_suite_batch_step_execution_result_extended.go
│ │ ├── model_test_suite_batch_step_execution_summary.go
│ │ ├── model_test_suite_execution.go
│ │ ├── model_test_suite_execution_core.go
│ │ ├── model_test_suite_execution_cr.go
│ │ ├── model_test_suite_execution_extended.go
│ │ ├── model_test_suite_execution_request.go
│ │ ├── model_test_suite_execution_status.go
│ │ ├── model_test_suite_execution_status_cr.go
│ │ ├── model_test_suite_execution_summary.go
│ │ ├── model_test_suite_execution_update_request.go
│ │ ├── model_test_suite_executions_result.go
│ │ ├── model_test_suite_executions_result_extended.go
│ │ ├── model_test_suite_status.go
│ │ ├── model_test_suite_status_extended.go
│ │ ├── model_test_suite_step.go
│ │ ├── model_test_suite_step_delay_v2.go
│ │ ├── model_test_suite_step_delay_v2_extended.go
│ │ ├── model_test_suite_step_execute_test_v2.go
│ │ ├── model_test_suite_step_execute_test_v2_extended.go
│ │ ├── model_test_suite_step_execution_request.go
│ │ ├── model_test_suite_step_execution_result.go
│ │ ├── model_test_suite_step_execution_result_extended.go
│ │ ├── model_test_suite_step_execution_result_v2.go
│ │ ├── model_test_suite_step_execution_summary.go
│ │ ├── model_test_suite_step_extended.go
│ │ ├── model_test_suite_step_type.go
│ │ ├── model_test_suite_step_type_extended.go
│ │ ├── model_test_suite_step_v2.go
│ │ ├── model_test_suite_step_v2_extended.go
│ │ ├── model_test_suite_update_request.go
│ │ ├── model_test_suite_update_request_v2.go
│ │ ├── model_test_suite_update_request_v2_extended.go
│ │ ├── model_test_suite_upsert_request.go
│ │ ├── model_test_suite_upsert_request_extended.go
│ │ ├── model_test_suite_upsert_request_v2.go
│ │ ├── model_test_suite_upsert_request_v2_exetended.go
│ │ ├── model_test_suite_v2.go
│ │ ├── model_test_suite_with_execution.go
│ │ ├── model_test_suite_with_execution_summary.go
│ │ ├── model_test_suite_with_execution_summary_base_extended.go
│ │ ├── model_test_trigger.go
│ │ ├── model_test_trigger_action_parameters.go
│ │ ├── model_test_trigger_actions.go
│ │ ├── model_test_trigger_concurrency_policies.go
│ │ ├── model_test_trigger_condition.go
│ │ ├── model_test_trigger_condition_spec.go
│ │ ├── model_test_trigger_condition_statuses.go
│ │ ├── model_test_trigger_executions.go
│ │ ├── model_test_trigger_extended.go
│ │ ├── model_test_trigger_key_map.go
│ │ ├── model_test_trigger_probe.go
│ │ ├── model_test_trigger_probe_spec.go
│ │ ├── model_test_trigger_resources.go
│ │ ├── model_test_trigger_selector.go
│ │ ├── model_test_trigger_upsert_request.go
│ │ ├── model_test_update_request.go
│ │ ├── model_test_update_request_extended.go
│ │ ├── model_test_upsert_request.go
│ │ ├── model_test_upsert_request_extended.go
│ │ ├── model_test_with_execution.go
│ │ ├── model_test_with_execution_summary.go
│ │ ├── model_test_with_execution_summary_base_extended.go
│ │ ├── model_test_workflow.go
│ │ ├── model_test_workflow_container_config.go
│ │ ├── model_test_workflow_content.go
│ │ ├── model_test_workflow_content_file.go
│ │ ├── model_test_workflow_content_git.go
│ │ ├── model_test_workflow_content_tarball.go
│ │ ├── model_test_workflow_cron_job_config.go
│ │ ├── model_test_workflow_event.go
│ │ ├── model_test_workflow_execution.go
│ │ ├── model_test_workflow_execution_config.go
│ │ ├── model_test_workflow_execution_config_value.go
│ │ ├── model_test_workflow_execution_cr.go
│ │ ├── model_test_workflow_execution_extended.go
│ │ ├── model_test_workflow_execution_notification.go
│ │ ├── model_test_workflow_execution_request.go
│ │ ├── model_test_workflow_execution_request_target.go
│ │ ├── model_test_workflow_execution_resource_aggregations.go
│ │ ├── model_test_workflow_execution_resource_aggregations_report.go
│ │ ├── model_test_workflow_execution_resource_aggregations_scope.go
│ │ ├── model_test_workflow_execution_status_cr.go
│ │ ├── model_test_workflow_execution_step_resource_aggregations.go
│ │ ├── model_test_workflow_execution_summary.go
│ │ ├── model_test_workflow_execution_summary_extended.go
│ │ ├── model_test_workflow_execution_tags.go
│ │ ├── model_test_workflow_execution_tags_extended.go
│ │ ├── model_test_workflow_executions_result.go
│ │ ├── model_test_workflow_extended.go
│ │ ├── model_test_workflow_extended_test.go
│ │ ├── model_test_workflow_independent_service_spec.go
│ │ ├── model_test_workflow_independent_step.go
│ │ ├── model_test_workflow_independent_step_parallel.go
│ │ ├── model_test_workflow_job_config.go
│ │ ├── model_test_workflow_output.go
│ │ ├── model_test_workflow_parameter_schema.go
│ │ ├── model_test_workflow_parameter_type.go
│ │ ├── model_test_workflow_pause.go
│ │ ├── model_test_workflow_pod_config.go
│ │ ├── model_test_workflow_pvc_config.go
│ │ ├── model_test_workflow_ref.go
│ │ ├── model_test_workflow_report.go
│ │ ├── model_test_workflow_report_summary.go
│ │ ├── model_test_workflow_resources.go
│ │ ├── model_test_workflow_resources_list.go
│ │ ├── model_test_workflow_result.go
│ │ ├── model_test_workflow_result_extended.go
│ │ ├── model_test_workflow_result_summary.go
│ │ ├── model_test_workflow_retry_policy.go
│ │ ├── model_test_workflow_running_context.go
│ │ ├── model_test_workflow_running_context_actor.go
│ │ ├── model_test_workflow_running_context_actor_type.go
│ │ ├── model_test_workflow_running_context_interface.go
│ │ ├── model_test_workflow_running_context_interface_type.go
│ │ ├── model_test_workflow_service_spec.go
│ │ ├── model_test_workflow_signature.go
│ │ ├── model_test_workflow_signature_extended.go
│ │ ├── model_test_workflow_spec.go
│ │ ├── model_test_workflow_status.go
│ │ ├── model_test_workflow_status_extended.go
│ │ ├── model_test_workflow_status_summary.go
│ │ ├── model_test_workflow_step.go
│ │ ├── model_test_workflow_step_artifacts.go
│ │ ├── model_test_workflow_step_artifacts_compression.go
│ │ ├── model_test_workflow_step_control.go
│ │ ├── model_test_workflow_step_execute.go
│ │ ├── model_test_workflow_step_execute_strategy.go
│ │ ├── model_test_workflow_step_execute_test_execution_request.go
│ │ ├── model_test_workflow_step_execute_test_ref.go
│ │ ├── model_test_workflow_step_execute_test_workflow_ref.go
│ │ ├── model_test_workflow_step_extended.go
│ │ ├── model_test_workflow_step_operations.go
│ │ ├── model_test_workflow_step_parallel.go
│ │ ├── model_test_workflow_step_parallel_extended.go
│ │ ├── model_test_workflow_step_parallel_fetch.go
│ │ ├── model_test_workflow_step_parallel_transfer.go
│ │ ├── model_test_workflow_step_result.go
│ │ ├── model_test_workflow_step_result_extended.go
│ │ ├── model_test_workflow_step_run.go
│ │ ├── model_test_workflow_step_status.go
│ │ ├── model_test_workflow_step_status_extended.go
│ │ ├── model_test_workflow_summary.go
│ │ ├── model_test_workflow_summary_extended.go
│ │ ├── model_test_workflow_system.go
│ │ ├── model_test_workflow_tag_schema.go
│ │ ├── model_test_workflow_tarball_file_pattern.go
│ │ ├── model_test_workflow_tarball_request.go
│ │ ├── model_test_workflow_target.go
│ │ ├── model_test_workflow_template.go
│ │ ├── model_test_workflow_template_extended.go
│ │ ├── model_test_workflow_template_ref.go
│ │ ├── model_test_workflow_template_spec.go
│ │ ├── model_test_workflow_with_execution.go
│ │ ├── model_test_workflow_with_execution_extended.go
│ │ ├── model_test_workflow_with_execution_summary.go
│ │ ├── model_test_workflow_with_execution_summary_extended.go
│ │ ├── model_toleration.go
│ │ ├── model_topology_spread_constraint.go
│ │ ├── model_typed_local_object_reference.go
│ │ ├── model_typed_object_reference.go
│ │ ├── model_variable.go
│ │ ├── model_variable_extended.go
│ │ ├── model_variable_type.go
│ │ ├── model_variable_type_extended.go
│ │ ├── model_variables_extended.go
│ │ ├── model_volume.go
│ │ ├── model_volume_mount.go
│ │ ├── model_volume_source.go
│ │ ├── model_webhook.go
│ │ ├── model_webhook_config_value.go
│ │ ├── model_webhook_create_request.go
│ │ ├── model_webhook_create_request_extended.go
│ │ ├── model_webhook_extended.go
│ │ ├── model_webhook_parameter_schema.go
│ │ ├── model_webhook_template.go
│ │ ├── model_webhook_template_create_request.go
│ │ ├── model_webhook_template_create_request_extended.go
│ │ ├── model_webhook_template_extended.go
│ │ ├── model_webhook_template_ref.go
│ │ ├── model_webhook_template_update_request.go
│ │ ├── model_webhook_update_request.go
│ │ ├── model_weighted_pod_affinity_term.go
│ │ └── model_windows_security_context_options.go
├── archive
│ ├── archive.go
│ ├── tarball.go
│ └── tarball_test.go
├── bufferedstream
│ ├── bufferedstream.go
│ └── bufferedstream_test.go
├── cache
│ ├── cache.go
│ ├── inmem.go
│ └── inmem_test.go
├── capabilities
│ └── capabilities.go
├── cloud
│ ├── client
│ │ ├── agents.go
│ │ ├── client_mock_test.go
│ │ ├── environments.go
│ │ ├── environments_test.go
│ │ ├── organizations.go
│ │ ├── organizations_test.go
│ │ └── rest.go
│ ├── data
│ │ ├── artifact
│ │ │ ├── artifacts_storage.go
│ │ │ ├── artifacts_storage_models.go
│ │ │ ├── commands.go
│ │ │ ├── scraper_integration_test.go
│ │ │ ├── scraper_model.go
│ │ │ ├── uploader.go
│ │ │ ├── uploader_int_test.go
│ │ │ └── uploader_test.go
│ │ ├── config
│ │ │ ├── commands.go
│ │ │ └── config_models.go
│ │ ├── executor
│ │ │ ├── executor.go
│ │ │ └── mock_executor.go
│ │ ├── result
│ │ │ ├── commands.go
│ │ │ ├── result.go
│ │ │ ├── result_models.go
│ │ │ └── result_test.go
│ │ ├── testresult
│ │ │ ├── commands.go
│ │ │ ├── testresult.go
│ │ │ ├── testresult_models.go
│ │ │ └── testresult_test.go
│ │ ├── testworkflow
│ │ │ ├── commands.go
│ │ │ ├── execution.go
│ │ │ ├── execution_models.go
│ │ │ ├── output.go
│ │ │ ├── output_models.go
│ │ │ └── utils.go
│ │ └── webhook
│ │ │ ├── commands.go
│ │ │ ├── mock_webhook.go
│ │ │ ├── models.go
│ │ │ ├── webhook.go
│ │ │ └── webhook_test.go
│ ├── service.pb.go
│ └── service_grpc.pb.go
├── cloudlogin
│ └── login.go
├── configmap
│ ├── client.go
│ └── mock_client.go
├── controller
│ ├── testexecutionexecutor.go
│ ├── testsuiteexecutionexecutor.go
│ ├── testworkflowexecutionexecutor.go
│ └── testworkflowexecutionexecutor_test.go
├── controlplane
│ ├── errors.go
│ ├── server.go
│ └── utils.go
├── controlplaneclient
│ ├── client.go
│ ├── errors.go
│ ├── execution.go
│ ├── execution_self.go
│ ├── metadata.go
│ ├── mock_client.go
│ ├── mock_runnerrequest.go
│ ├── runner.go
│ ├── runnerrequest.go
│ ├── testworkflows.go
│ ├── testworkflowtemplates.go
│ └── utils.go
├── crd
│ ├── crd.go
│ ├── crd_test.go
│ └── templates
│ │ ├── executor.tmpl
│ │ ├── template.tmpl
│ │ ├── test.tmpl
│ │ ├── testsource.tmpl
│ │ ├── testsuite.tmpl
│ │ ├── testtrigger.tmpl
│ │ ├── webhook.tmpl
│ │ └── webhooktemplate.tmpl
├── crdstorage
│ ├── interface.go
│ ├── testworkflows.go
│ └── testworkflowtemplates.go
├── credentials
│ ├── expressions.go
│ ├── mock_repository.go
│ └── repository.go
├── cronjob
│ ├── executor.go
│ ├── executor_test.go
│ ├── mock_scheduler.go
│ ├── scheduler.go
│ ├── test.go
│ ├── test_test.go
│ ├── testsuite.go
│ ├── testsuite_test.go
│ ├── testworkflow.go
│ └── testworkflow_test.go
├── data
│ └── set
│ │ ├── set.go
│ │ └── set_test.go
├── datefilter
│ ├── filter.go
│ └── filter_test.go
├── dbmigrator
│ ├── database.go
│ ├── dbmigrator.go
│ ├── dbmigrator_test.go
│ └── mock_database.go
├── diagnostics
│ ├── diagnostics.go
│ ├── loader
│ │ └── license_loader.go
│ ├── renderer
│ │ ├── cli.go
│ │ ├── interface.go
│ │ └── json.go
│ └── validators
│ │ ├── deps
│ │ ├── errors.go
│ │ ├── helm_binary.go
│ │ ├── kuebctl_binary.go
│ │ └── utils.go
│ │ ├── error.go
│ │ ├── group.go
│ │ ├── interface.go
│ │ ├── kinds.go
│ │ ├── license
│ │ ├── client.go
│ │ ├── client_test.go
│ │ ├── errors.go
│ │ ├── file_validator.go
│ │ ├── keygensh_validator.go
│ │ ├── offline_key_validator.go
│ │ ├── offline_license_validator.go
│ │ ├── offline_license_validator_test.go
│ │ ├── online_key_validator.go
│ │ └── validator_test.go
│ │ ├── mock
│ │ ├── invalid.go
│ │ ├── invalid_multi.go
│ │ └── valid.go
│ │ ├── requirements.go
│ │ └── result.go
├── envs
│ └── variables.go
├── event
│ ├── bus
│ │ ├── interface.go
│ │ ├── mock_bus.go
│ │ ├── nats.go
│ │ ├── nats_integration_test.go
│ │ ├── testserver.go
│ │ └── testserver_test.go
│ ├── emitter.go
│ ├── emitter_integration_test.go
│ ├── emitter_test.go
│ ├── kind
│ │ ├── cdevent
│ │ │ ├── listener.go
│ │ │ ├── listener_test.go
│ │ │ ├── loader.go
│ │ │ └── loader_test.go
│ │ ├── common
│ │ │ ├── interface_test.go
│ │ │ ├── interfaces.go
│ │ │ ├── name.go
│ │ │ └── name_test.go
│ │ ├── dummy
│ │ │ ├── listener.go
│ │ │ └── loader.go
│ │ ├── k8sevent
│ │ │ ├── listener.go
│ │ │ ├── listener_test.go
│ │ │ ├── loader.go
│ │ │ └── loader_test.go
│ │ ├── slack
│ │ │ ├── listener.go
│ │ │ ├── loader.go
│ │ │ └── loader_test.go
│ │ ├── testworkflowexecutionmetrics
│ │ │ ├── listener.go
│ │ │ └── loader.go
│ │ ├── testworkflowexecutions
│ │ │ ├── listener.go
│ │ │ └── loader.go
│ │ ├── testworkflowexecutiontelemetry
│ │ │ ├── listener.go
│ │ │ ├── loader.go
│ │ │ ├── testworkflowtelemetry.go
│ │ │ ├── utils.go
│ │ │ └── utils_test.go
│ │ ├── webhook
│ │ │ ├── listener.go
│ │ │ ├── listener_test.go
│ │ │ ├── loader.go
│ │ │ ├── loader_test.go
│ │ │ └── templatevars.go
│ │ └── websocket
│ │ │ ├── listener.go
│ │ │ ├── listener_test.go
│ │ │ ├── loader.go
│ │ │ ├── loader_test.go
│ │ │ └── websocket.go
│ ├── lazy.go
│ ├── loader.go
│ ├── loader_test.go
│ ├── server.go
│ └── server_test.go
├── executor
│ ├── agent
│ │ └── agent.go
│ ├── client
│ │ ├── .keep
│ │ ├── common.go
│ │ ├── interface.go
│ │ ├── job.go
│ │ └── mock_executor.go
│ ├── common.go
│ ├── common_test.go
│ ├── containerexecutor
│ │ ├── containerexecutor.go
│ │ ├── containerexecutor_test.go
│ │ ├── logs.go
│ │ ├── templates
│ │ │ └── job.tmpl
│ │ └── tmpl.go
│ ├── content
│ │ ├── fetcher.go
│ │ ├── fetcher_test.go
│ │ ├── interface.go
│ │ └── uploads.go
│ ├── env
│ │ └── manager.go
│ ├── output
│ │ ├── output.go
│ │ ├── parser.go
│ │ ├── parser_test.go
│ │ ├── writer.go
│ │ └── writer_test.go
│ ├── process.go
│ ├── runner
│ │ └── interface.go
│ └── scraper
│ │ ├── factory
│ │ └── factory.go
│ │ ├── filesystem_extractor.go
│ │ ├── filesystem_extractor_integration_test.go
│ │ ├── filesystem_extractor_test.go
│ │ ├── minio_scraper_integration_test.go
│ │ ├── minio_uploader.go
│ │ ├── minio_uploader_integration_test.go
│ │ ├── mock_scraper.go
│ │ ├── scraper.go
│ │ └── scrapertypes
│ │ ├── extractor.go
│ │ ├── mock_extractor.go
│ │ ├── mock_uploader.go
│ │ └── uploader.go
├── expressions
│ ├── README.md
│ ├── accessor.go
│ ├── call.go
│ ├── conditional.go
│ ├── convert.go
│ ├── expression.go
│ ├── finalizer.go
│ ├── generic.go
│ ├── generic_test.go
│ ├── intstr.go
│ ├── libs
│ │ ├── fs.go
│ │ └── fs_test.go
│ ├── machine.go
│ ├── machineutils.go
│ ├── math.go
│ ├── mock_expression.go
│ ├── mock_machine.go
│ ├── mock_staticvalue.go
│ ├── negative.go
│ ├── parse.go
│ ├── parse_test.go
│ ├── propertyaccessor.go
│ ├── static.go
│ ├── static_test.go
│ ├── stdlib.go
│ ├── tokenize.go
│ ├── tokenize_test.go
│ ├── tokens.go
│ ├── typechecking.go
│ └── utils.go
├── featureflags
│ ├── featureflags.go
│ └── featureflags_test.go
├── filesystem
│ ├── filesystem.go
│ ├── mock_file.go
│ ├── mock_fileinfo.go
│ ├── mock_filesystem.go
│ ├── os_filesystem.go
│ └── os_filesystem_test.go
├── git
│ ├── checkout.go
│ └── checkout_test.go
├── helm
│ ├── chart.go
│ └── chart_test.go
├── http
│ ├── client.go
│ ├── client_test.go
│ └── interface.go
├── imageinspector
│ ├── configmapstorage.go
│ ├── configmapstorage_test.go
│ ├── cranefetcher.go
│ ├── cranefetcher_test.go
│ ├── inspector.go
│ ├── inspector_test.go
│ ├── memorystorage.go
│ ├── memorystorage_test.go
│ ├── mock_infofetcher.go
│ ├── mock_inspector.go
│ ├── mock_secretfetcher.go
│ ├── mock_storage.go
│ ├── secretfetcher.go
│ ├── secretfetcher_test.go
│ ├── serialization.go
│ └── types.go
├── k8sclient
│ ├── k8sclient.go
│ └── k8sclient_test.go
├── keymap
│ └── triggers
│ │ └── triggers.go
├── log
│ ├── log.go
│ └── trace.go
├── logs
│ ├── adapter
│ │ ├── cloud.go
│ │ ├── cloud_test.go
│ │ ├── debug.go
│ │ ├── interface.go
│ │ ├── minio.go
│ │ ├── minio_test.go
│ │ ├── minio_v2.go
│ │ ├── minio_v2_test.go
│ │ └── test-bla
│ ├── client
│ │ ├── client.go
│ │ ├── interface.go
│ │ ├── mock_client.go
│ │ ├── mock_initializedstreamgetter.go
│ │ ├── mock_initializedstreampusher.go
│ │ ├── mock_namer.go
│ │ ├── mock_stream.go
│ │ ├── mock_streamgetter.go
│ │ ├── stream.go
│ │ └── stream_test.go
│ ├── config
│ │ ├── logs_config.go
│ │ └── logs_config_test.go
│ ├── events.go
│ ├── events
│ │ ├── events.go
│ │ └── events_test.go
│ ├── events_test.go
│ ├── healthcheck.go
│ ├── healthcheck_test.go
│ ├── logsserver.go
│ ├── logsserver_test.go
│ ├── pb
│ │ ├── logs.pb.go
│ │ ├── logs.proto
│ │ ├── logs_grpc.pb.go
│ │ └── mapper.go
│ ├── repository
│ │ ├── factory.go
│ │ ├── interface.go
│ │ ├── jetstream.go
│ │ ├── minio.go
│ │ └── minio_test.go
│ ├── service.go
│ ├── service_test.go
│ ├── sidecar
│ │ └── proxy.go
│ └── state
│ │ ├── interface.go
│ │ ├── nats.go
│ │ ├── state.go
│ │ └── state_test.go
├── mapper
│ ├── cdevents
│ │ ├── mapper.go
│ │ └── mapper_test.go
│ ├── common
│ │ ├── grpc.go
│ │ ├── kube_openapi.go
│ │ └── openapi_kube.go
│ ├── daemonsets
│ │ └── mapper.go
│ ├── deployments
│ │ └── mapper.go
│ ├── executions
│ │ ├── summary.go
│ │ └── summary_test.go
│ ├── executors
│ │ └── mapper.go
│ ├── k8sevents
│ │ └── mapper.go
│ ├── keymap
│ │ └── triggers
│ │ │ └── kube_openapi.go
│ ├── pods
│ │ └── mapper.go
│ ├── secrets
│ │ └── mapper.go
│ ├── services
│ │ └── mapper.go
│ ├── statefulsets
│ │ └── mapper.go
│ ├── templates
│ │ └── mapper.go
│ ├── testexecutions
│ │ └── mapper.go
│ ├── tests
│ │ ├── kube_openapi.go
│ │ ├── kube_openapi_test.go
│ │ └── openapi_kube.go
│ ├── testsources
│ │ └── mapper.go
│ ├── testsuiteexecutions
│ │ ├── mapper.go
│ │ ├── summary.go
│ │ └── summary_test.go
│ ├── testsuites
│ │ ├── kube_openapi.go
│ │ ├── kube_openapi_test.go
│ │ └── openapi_kube.go
│ ├── testtriggers
│ │ ├── kube_openapi.go
│ │ └── openapi_kube.go
│ ├── testworkflows
│ │ ├── kube.go
│ │ ├── kube_openapi.go
│ │ ├── mappers_test.go
│ │ └── openapi_kube.go
│ ├── webhooks
│ │ └── mapper.go
│ └── webhooktemplates
│ │ └── mapper.go
├── newclients
│ ├── testworkflowclient
│ │ ├── cloud.go
│ │ ├── interface.go
│ │ ├── kubernetes.go
│ │ └── mock_interface.go
│ └── testworkflowtemplateclient
│ │ ├── cloud.go
│ │ ├── interface.go
│ │ ├── kubernetes.go
│ │ └── mock_interface.go
├── oauth
│ ├── github.go
│ ├── interface.go
│ └── oauth.go
├── problem
│ └── problem.go
├── process
│ └── exec.go
├── rand
│ ├── names.go
│ └── string.go
├── reconciler
│ └── reconciler.go
├── repository
│ ├── channels
│ │ └── channels.go
│ ├── common
│ │ ├── metrics.go
│ │ └── metrics_test.go
│ ├── config
│ │ ├── configmap.go
│ │ ├── interface.go
│ │ ├── mock_repository.go
│ │ ├── mongo.go
│ │ └── mongo_test.go
│ ├── result
│ │ ├── filter.go
│ │ ├── interface.go
│ │ ├── minio_output.go
│ │ ├── minio_output_test.go
│ │ ├── mock_output_repository.go
│ │ ├── mock_repository.go
│ │ ├── mongo.go
│ │ ├── mongo_integration_test.go
│ │ └── mongo_output.go
│ ├── sequence
│ │ ├── interface.go
│ │ ├── mock_repository.go
│ │ ├── mongo.go
│ │ └── mongo_integration_test.go
│ ├── storage
│ │ └── mongo.go
│ ├── testresult
│ │ ├── filter.go
│ │ ├── interface.go
│ │ ├── mock_repository.go
│ │ ├── mongo.go
│ │ └── mongo_test.go
│ └── testworkflow
│ │ ├── filter.go
│ │ ├── interface.go
│ │ ├── minio_output_repository.go
│ │ ├── mock_output_repository.go
│ │ ├── mock_repository.go
│ │ ├── mongo.go
│ │ └── mongo_integration_test.go
├── resourcepattern
│ ├── resourcepattern.go
│ └── resourcepattern_test.go
├── runner
│ ├── agent.go
│ ├── executionlogswriter.go
│ ├── executionsaver.go
│ ├── globaltemplate.go
│ ├── lazy.go
│ ├── mock_executionsaver.go
│ ├── mock_runner.go
│ ├── runner.go
│ ├── service.go
│ └── utils.go
├── scheduler
│ ├── service.go
│ ├── test_scheduler.go
│ ├── test_scheduler_test.go
│ └── testsuite_scheduler.go
├── secret
│ ├── client.go
│ └── mock_client.go
├── secretmanager
│ ├── batch.go
│ └── manager.go
├── semver
│ ├── version.go
│ └── version_test.go
├── server
│ ├── config.go
│ ├── endpoints.go
│ ├── httpserver.go
│ └── pager.go
├── slack
│ ├── config.go
│ ├── config_test.go
│ ├── set.go
│ └── slack.go
├── storage
│ ├── artifacts.go
│ ├── artifacts_mock.go
│ ├── minio
│ │ ├── artifacts_storage.go
│ │ ├── artifacts_storage_integration_test.go
│ │ ├── helpers.go
│ │ ├── minio.go
│ │ ├── minio_connecter.go
│ │ └── minio_test.go
│ ├── storage.go
│ └── storage_mock.go
├── tcl
│ ├── README.md
│ ├── checktcl
│ │ └── organization_plan.go
│ ├── mappertcl
│ │ ├── testexecutions
│ │ │ └── mapper.go
│ │ ├── tests
│ │ │ ├── kube_openapi.go
│ │ │ └── openapi_kube.go
│ │ ├── testsuiteexecutions
│ │ │ └── mapper.go
│ │ └── testworkflows
│ │ │ └── openapi_kube.go
│ ├── schedulertcl
│ │ └── test_scheduler.go
│ └── testworkflowstcl
│ │ ├── cmd
│ │ ├── cmd.go
│ │ └── cmd_test.go
│ │ ├── cronjob
│ │ └── executor.go
│ │ ├── mapper
│ │ └── cdevents.go
│ │ ├── testworkflowprocessor
│ │ └── operations.go
│ │ └── triggers
│ │ └── executor.go
├── telemetry
│ ├── generators.go
│ ├── license.go
│ ├── payload.go
│ ├── payload_test.go
│ ├── sender_ga4.go
│ ├── sender_sio.go
│ ├── sender_sio_test.go
│ ├── sender_tka.go
│ ├── telemetry.go
│ └── telemetry_test.go
├── test
│ └── detector
│ │ ├── detector.go
│ │ ├── detector_test.go
│ │ ├── detector_test_examples.go
│ │ └── interface.go
├── testworkflows
│ ├── executionworker
│ │ ├── controller
│ │ │ ├── channel.go
│ │ │ ├── cleanup.go
│ │ │ ├── control.go
│ │ │ ├── controller.go
│ │ │ ├── logs.go
│ │ │ ├── logs_test.go
│ │ │ ├── notification.go
│ │ │ ├── notifier.go
│ │ │ ├── store
│ │ │ │ ├── list.go
│ │ │ │ ├── update.go
│ │ │ │ └── value.go
│ │ │ ├── utils.go
│ │ │ ├── watchers
│ │ │ │ ├── commons.go
│ │ │ │ ├── containerevents.go
│ │ │ │ ├── events_watcher.go
│ │ │ │ ├── executionstate.go
│ │ │ │ ├── executionwatcher.go
│ │ │ │ ├── job.go
│ │ │ │ ├── job_watcher.go
│ │ │ │ ├── jobevents.go
│ │ │ │ ├── pod.go
│ │ │ │ ├── pod_watcher.go
│ │ │ │ └── podevents.go
│ │ │ └── watchinstrumentedpod.go
│ │ ├── engines.go
│ │ ├── executionworkertypes
│ │ │ ├── interface.go
│ │ │ ├── mock_worker.go
│ │ │ └── notificationswatcher.go
│ │ ├── kubernetesworker
│ │ │ ├── interface.go
│ │ │ └── worker.go
│ │ ├── registry
│ │ │ ├── controllers.go
│ │ │ ├── errors.go
│ │ │ ├── ips.go
│ │ │ └── namespaces.go
│ │ └── utils
│ │ │ └── logsreader.go
│ ├── testworkflowconfig
│ │ ├── config.go
│ │ └── expressions.go
│ ├── testworkflowexecutor
│ │ ├── executor.go
│ │ ├── mock_executor.go
│ │ ├── mock_scheduler.go
│ │ ├── prepared.go
│ │ ├── scheduler.go
│ │ ├── secrethandler.go
│ │ ├── testworkflowfetcher.go
│ │ ├── testworkflowtemplatefetcher.go
│ │ ├── testworkflowtemplatefetcher_test.go
│ │ └── utils.go
│ ├── testworkflowprocessor
│ │ ├── action
│ │ │ ├── actiontypes
│ │ │ │ ├── action.go
│ │ │ │ ├── analysis.go
│ │ │ │ ├── lite
│ │ │ │ │ ├── action.go
│ │ │ │ │ └── utils.go
│ │ │ │ ├── mutations.go
│ │ │ │ └── utils.go
│ │ │ ├── containerize.go
│ │ │ ├── containerize_test.go
│ │ │ ├── finalize.go
│ │ │ ├── group.go
│ │ │ ├── group_test.go
│ │ │ ├── optimize.go
│ │ │ ├── process.go
│ │ │ ├── process_test.go
│ │ │ └── sort.go
│ │ ├── bundle.go
│ │ ├── configmapfiles.go
│ │ ├── constants
│ │ │ └── constants.go
│ │ ├── intermediate.go
│ │ ├── mock_intermediate.go
│ │ ├── mock_internalprocessor.go
│ │ ├── mock_processor.go
│ │ ├── operations.go
│ │ ├── presets
│ │ │ ├── presets.go
│ │ │ └── processor_test.go
│ │ ├── processor.go
│ │ ├── refcounter.go
│ │ ├── secretmachine.go
│ │ ├── secretmachine_test.go
│ │ ├── stage
│ │ │ ├── container.go
│ │ │ ├── containerstage.go
│ │ │ ├── groupstage.go
│ │ │ ├── mock_container.go
│ │ │ ├── mock_stage.go
│ │ │ ├── signature.go
│ │ │ ├── stage.go
│ │ │ ├── stagelifecycle.go
│ │ │ ├── stagemetadata.go
│ │ │ └── utils.go
│ │ └── utils.go
│ ├── testworkflowresolver
│ │ ├── analyze.go
│ │ ├── analyze_test.go
│ │ ├── apply.go
│ │ ├── apply_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── dedupe.go
│ │ ├── merge.go
│ │ ├── secrets.go
│ │ └── secrets_test.go
│ └── utils.go
├── tmp
│ ├── files.go
│ └── files_test.go
├── triggers
│ ├── diff.go
│ ├── event.go
│ ├── executor.go
│ ├── executor_test.go
│ ├── lease.go
│ ├── lease_backend.go
│ ├── lease_backend_test.go
│ ├── lease_test.go
│ ├── matcher.go
│ ├── matcher_test.go
│ ├── mock_lease_backend.go
│ ├── scraper.go
│ ├── scraper_test.go
│ ├── service.go
│ ├── service_test.go
│ ├── status.go
│ ├── status_test.go
│ ├── util.go
│ ├── watcher.go
│ └── watcher_test.go
├── types
│ ├── duration.go
│ └── duration_test.go
├── ui
│ ├── colors.go
│ ├── config.go
│ ├── confirm.go
│ ├── errors.go
│ ├── icons.go
│ ├── logo.go
│ ├── printers.go
│ ├── select.go
│ ├── specifics.go
│ ├── spinner.go
│ ├── table.go
│ ├── textinput.go
│ ├── ui.go
│ └── uicrd
│ │ └── crd.go
├── utilization
│ ├── core
│ │ ├── aggregations.go
│ │ ├── aggregations_test.go
│ │ ├── formatters.go
│ │ ├── formatters_test.go
│ │ ├── group.go
│ │ ├── group_test.go
│ │ ├── metadata.go
│ │ ├── metadata_test.go
│ │ ├── parsers.go
│ │ ├── parsers_test.go
│ │ ├── testdata
│ │ │ ├── metrics_no_metadata.influx
│ │ │ └── metrics_valid_metadata.influx
│ │ ├── utils.go
│ │ ├── utils_test.go
│ │ ├── writers.go
│ │ └── writers_test.go
│ ├── format.go
│ ├── instrument.go
│ ├── instrument_test.go
│ └── utilisation.go
├── utils
│ ├── consts.go
│ ├── test
│ │ └── integration.go
│ ├── text
│ │ ├── obfuscate.go
│ │ ├── obfuscate_test.go
│ │ ├── slug.go
│ │ ├── slug_test.go
│ │ ├── tostr.go
│ │ └── tostr_test.go
│ ├── utils.go
│ └── utils_test.go
├── version
│ └── version.go
└── workerpool
│ ├── service.go
│ └── service_test.go
├── proto
└── service.proto
├── skaffold.yaml
└── test
├── artillery
└── executor-smoke
│ ├── artillery-smoke-test-negative.yaml
│ ├── artillery-smoke-test.yaml
│ ├── crd-workflow
│ └── smoke.yaml
│ └── crd
│ └── crd.yaml
├── cli-tests
├── .babelrc
├── .env
├── .gitignore
├── helpers
│ ├── api-helpers.js
│ ├── output-validators.js
│ └── test-data-handlers.js
├── package-lock.json
├── package.json
├── test-data
│ └── tests.json
└── tests
│ ├── create-test.js
│ ├── run-test.js
│ └── test-results.js
├── container-executor
└── executor-smoke
│ └── crd
│ ├── curl.yaml
│ ├── cypress.yaml
│ ├── gradle.yaml
│ ├── jmeter.yaml
│ ├── k6.yaml
│ ├── maven.yaml
│ ├── playwright.yaml
│ ├── postman.yaml
│ └── soapui.yaml
├── curl
├── curl.json
└── executor-tests
│ ├── crd-workflow
│ └── smoke.yaml
│ ├── crd
│ └── smoke.yaml
│ ├── curl-smoke-test-negative.json
│ └── curl-smoke-test.json
├── cypress
└── executor-tests
│ ├── crd-workflow
│ └── smoke.yaml
│ ├── crd
│ ├── crd.yaml
│ └── other.yaml
│ ├── cypress-12
│ ├── .gitignore
│ ├── cypress.config.js
│ ├── cypress
│ │ ├── e2e
│ │ │ ├── smoke.cy.js
│ │ │ └── smoke2.cy.js
│ │ ├── fixtures
│ │ │ └── .gitkeep
│ │ └── support
│ │ │ ├── .gitkeep
│ │ │ └── e2e.js
│ ├── package-lock.json
│ └── package.json
│ ├── cypress-13
│ ├── .gitignore
│ ├── cypress.config.js
│ ├── cypress
│ │ ├── e2e
│ │ │ ├── demo-page.cy.js
│ │ │ ├── smoke.cy.js
│ │ │ └── smoke2.cy.js
│ │ ├── fixtures
│ │ │ └── .gitkeep
│ │ └── support
│ │ │ ├── .gitkeep
│ │ │ └── e2e.js
│ ├── package-lock.json
│ └── package.json
│ ├── cypress-14
│ ├── .gitignore
│ ├── cypress.config.js
│ ├── cypress
│ │ ├── e2e
│ │ │ ├── demo-page.cy.js
│ │ │ ├── smoke.cy.js
│ │ │ └── smoke2.cy.js
│ │ ├── fixtures
│ │ │ └── .gitkeep
│ │ └── support
│ │ │ ├── .gitkeep
│ │ │ └── e2e.js
│ ├── package-lock.json
│ └── package.json
│ ├── cypress-9
│ ├── .gitignore
│ ├── cypress.json
│ ├── cypress
│ │ ├── fixtures
│ │ │ └── .gitkeep
│ │ ├── integration
│ │ │ └── dummy_test.spec.js
│ │ ├── plugins
│ │ │ └── .gitkeep
│ │ └── support
│ │ │ └── .gitkeep
│ ├── package-lock.json
│ └── package.json
│ └── cypress-without-envs
│ ├── .gitignore
│ ├── cypress.config.js
│ ├── cypress
│ ├── e2e
│ │ ├── smoke-without-envs-2.cy.js
│ │ └── smoke-without-envs.cy.js
│ ├── fixtures
│ │ └── .gitkeep
│ └── support
│ │ ├── .gitkeep
│ │ └── e2e.js
│ ├── package-lock.json
│ └── package.json
├── examples
├── cloud-demo
│ ├── test-workflows
│ │ ├── cypress.yaml
│ │ ├── gradle.yaml
│ │ ├── jmeter.yaml
│ │ ├── k6.yaml
│ │ ├── playwright.yaml
│ │ └── postman.yaml
│ └── tests
│ │ ├── cypress.yaml
│ │ ├── gradle.yaml
│ │ ├── jmeter.yaml
│ │ ├── k6.yaml
│ │ ├── playwright.yaml
│ │ ├── postman.yaml
│ │ └── testsuites
│ │ └── k6.yaml
├── example-demo-page
│ ├── testkube-test-page-login
│ │ ├── demo.html
│ │ └── index.html
│ └── testkube-test-page
│ │ └── index.html
├── k6-perf
│ ├── k6-crd.yaml
│ └── prometheus-grafana
│ │ ├── values-grafana.yaml
│ │ └── values-prometheus.yaml
├── kubecon
│ ├── test-workflows
│ │ ├── cypress.yaml
│ │ ├── gradle.yaml
│ │ ├── jmeter.yaml
│ │ ├── k6.yaml
│ │ ├── playwright.yaml
│ │ └── postman.yaml
│ └── tests
│ │ ├── cypress.yaml
│ │ ├── gradle.yaml
│ │ ├── jmeter.yaml
│ │ ├── k6.yaml
│ │ ├── playwright.yaml
│ │ ├── postman.yaml
│ │ └── testsuites
│ │ └── k6.yaml
├── showcase
│ └── crd.yaml
└── status-page
│ └── crd.yaml
├── executors
├── container-executor-curl.yaml
├── container-executor-cypress.yaml
├── container-executor-gradle.yaml
├── container-executor-jmeter.yaml
├── container-executor-k6.yaml
├── container-executor-large-artifacts.yaml
├── container-executor-large-logs.yaml
├── container-executor-maven.yaml
├── container-executor-playwright.yaml
├── container-executor-postman.yaml
├── container-executor-soapui.yaml
├── cypress.yaml
├── gradle.yaml
├── local-postman.yaml
└── maven.yaml
├── ginkgo
└── executor-tests
│ ├── crd
│ └── smoke.yaml
│ ├── smoke-negative
│ ├── go.mod
│ ├── go.sum
│ ├── smoke_negative_test.go
│ └── smoke_suite_negative_test.go
│ └── smoke
│ ├── go.mod
│ ├── go.sum
│ ├── smoke_suite_test.go
│ └── smoke_test.go
├── gradle
└── executor-smoke
│ ├── crd-workflow
│ └── smoke.yaml
│ └── crd
│ └── crd.yaml
├── integration
└── crd-workflow
│ └── testkube-integration-tests.yaml
├── jmeter
└── executor-tests
│ ├── crd-workflow
│ └── smoke.yaml
│ ├── crd
│ ├── other.yaml
│ ├── smoke.yaml
│ └── special-cases.yaml
│ ├── jmeter-executor-smoke-2.jmx
│ ├── jmeter-executor-smoke-correct-url-failed-assertion.jmx
│ ├── jmeter-executor-smoke-env-and-property.jmx
│ ├── jmeter-executor-smoke-incorrect-url-2.jmx
│ ├── jmeter-executor-smoke-incorrect-url.jmx
│ ├── jmeter-executor-smoke-negative.jmx
│ └── jmeter-executor-smoke.jmx
├── junit
├── crd-workflow
│ └── smoke.yaml
└── junit5-project
│ ├── pom.xml
│ └── src
│ └── test
│ └── java
│ ├── TestSmoke1.java
│ ├── TestSmoke2.java
│ └── TestSmokeFail.java
├── k6
└── executor-tests
│ ├── crd-workflow
│ └── smoke.yaml
│ ├── crd
│ ├── other.yaml
│ └── smoke.yaml
│ ├── k6-perf-test-gcp-discard-response-bodies.js
│ ├── k6-perf-test-gcp.js
│ ├── k6-perf-test.js
│ ├── k6-smoke-test-negative.js
│ ├── k6-smoke-test-without-envs.js
│ └── k6-smoke-test.js
├── kubepug
└── executor-smoke
│ ├── crd
│ └── crd.yaml
│ └── kubepug-smoke-test-negative.yaml
├── locust
├── crd-workflow
│ └── smoke.yaml
└── locust-project
│ ├── locust_test.py
│ └── requirements.txt
├── maven
└── executor-smoke
│ ├── crd-workflow
│ └── smoke.yaml
│ └── crd
│ └── crd.yaml
├── nunit
├── crd-workflow
│ └── crd.yaml
└── nunit-project
│ └── ExampleProject
│ ├── ExampleProject.csproj
│ ├── ExampleTest1.cs
│ └── GlobalUsings.cs
├── pact
└── pact-js-project
│ ├── .gitignore
│ ├── crd
│ └── smoke.yaml
│ ├── jest.config.js
│ ├── package-lock.json
│ ├── package.json
│ └── pact
│ ├── consumer
│ └── user
│ │ └── user.pact.test.js
│ ├── logs
│ └── .gitkeep
│ └── pacts
│ └── .gitkeep
├── perf
├── api-server.js
└── testkube-homepage.js
├── playwright
└── executor-tests
│ ├── crd-workflow
│ └── smoke.yaml
│ ├── crd
│ └── crd.yaml
│ └── playwright-project
│ ├── package-lock.json
│ ├── package.json
│ ├── playwright.config.js
│ └── tests
│ ├── smoke.spec.js
│ └── smoke2.spec.js
├── postman
├── Health.postman_collection.json
├── Kubeshop.postman_collection.json
├── Local-API-Health.postman_collection.json
├── LocalHealth.postman_collection.json
├── LongRun.postman_collection.json
├── Params-test.postman_collection.json
├── TODO.postman_collection.json
├── TestKube-Sanity.postman_collection.json
├── Testkube-API-Failing.postman_collection.json
├── Testkube-API.postman_collection.json
├── Variables test.postman_collection.json
├── VeryLong.postman_collection.json
├── Video-Chuck-Test.postman_collection.json
├── env.postman_environment.json
├── executor-tests
│ ├── crd-workflow
│ │ └── smoke.yaml
│ ├── crd
│ │ └── crd.yaml
│ ├── postman-executor-smoke-negative.postman_collection.json
│ ├── postman-executor-smoke-without-envs.postman_collection.json
│ └── postman-executor-smoke.postman_collection.json
├── hello-postman.postman_collection.json
├── test.postman_collection.json
└── testkube-api-server-health.postman_collection.json
├── pytest
├── crd-workflow
│ └── smoke.yaml
└── pytest-project
│ ├── pytest.ini
│ ├── requirements.txt
│ └── tests
│ ├── fail
│ └── smoke-3-fail_test.py
│ └── success
│ ├── smoke-2_test.py
│ └── smoke_test.py
├── scripts
└── executor-tests
│ └── run.sh
├── soapui
└── executor-smoke
│ ├── crd-workflow
│ └── smoke.yaml
│ ├── crd
│ └── crd.yaml
│ ├── soapui-smoke-test-negative.xml
│ └── soapui-smoke-test.xml
├── special-cases
├── edge-cases-expected-fails.yaml
├── large-artifacts.yaml
├── large-logs.yaml
└── test-workflows
│ ├── edge-cases-expected-fails.yaml
│ ├── file-read-write.yaml
│ ├── junit-reports.yaml
│ ├── junit-reports
│ ├── high-level-failure.xml
│ ├── high-level-testcase-both-error-and-failure.xml
│ └── high-level-without-testcases.xml
│ └── large.yaml
├── suites
├── demo-testsuite.json
├── executor-artillery-smoke-tests.yaml
├── executor-common-smoke-tests.json
├── executor-container-curl-smoke-tests.yaml
├── executor-container-cypress-smoke-tests.yaml
├── executor-container-gradle-smoke-tests.yaml
├── executor-container-jmeter-smoke-tests.yaml
├── executor-container-k6-smoke-tests.yaml
├── executor-container-maven-smoke-tests.yaml
├── executor-container-playwright-smoke-tests.yaml
├── executor-container-postman-smoke-tests.yaml
├── executor-container-soapui-smoke-tests.yaml
├── executor-curl-smoke-tests.yaml
├── executor-cypress-smoke-tests.yaml
├── executor-ginkgo-smoke-tests.yaml
├── executor-gradle-smoke-tests.yaml
├── executor-jmeter-other-tests.yaml
├── executor-jmeter-smoke-tests.yaml
├── executor-k6-other-tests.yaml
├── executor-k6-smoke-tests.yaml
├── executor-kubepug-smoke-tests.yaml
├── executor-maven-smoke-tests.yaml
├── executor-playwright-smoke-tests.yaml
├── executor-postman-smoke-tests.yaml
├── executor-soapui-smoke-tests.yaml
├── special-cases
│ ├── edge-cases-expected-fails.yaml
│ ├── expected-failure-parallel-testsuite-delays.yaml
│ ├── jmeter-special-cases.yaml
│ ├── k6-parallel-example.yaml
│ ├── large-artifacts.yaml
│ ├── large-logs.yaml
│ ├── parallel-testsuite-2.yaml
│ ├── parallel-testsuite-delays.yaml
│ ├── parallel-testsuite-downloadArtifacts.yaml
│ ├── parallel-testsuite-downloadArtifacts2.yaml
│ ├── parallel-testsuite-large-logs.yaml
│ └── test-workflows
│ │ └── edge-cases-expected-fails.yaml
├── staging-testsuite.json
├── test-workflows
│ ├── artillery-workflow.yaml
│ ├── combined-workflow-test.yaml
│ ├── cron
│ │ ├── dev
│ │ │ ├── full-smoke-cron.yaml
│ │ │ ├── small-smoke-cron.yaml
│ │ │ └── testkube-multiagent-targets-workflow-cron.yaml
│ │ └── sandbox
│ │ │ └── small-smoke-cron.yaml
│ ├── curl-workflow.yaml
│ ├── cypress-workflow.yaml
│ ├── full-smoke.yaml
│ ├── gradle-workflow.yaml
│ ├── jmeter-workflow.yaml
│ ├── junit-workflow.yaml
│ ├── k6-workflow.yaml
│ ├── locust-workflow.yaml
│ ├── maven-workflow.yaml
│ ├── nunit-workflow.yaml
│ ├── pact-workflow.yaml
│ ├── playwright-workflow.yaml
│ ├── postman-workflow.yaml
│ ├── pytest-workflow.yaml
│ ├── small-smoke.yaml
│ ├── soapui-workflow.yaml
│ └── testkube-multiagent-targets-workflow.yaml
├── testsuite-example-1.json
├── testsuite-example-2.json
├── testsuite-example-3.json
├── testsuite-testkube-failing-sof.json
├── testsuite-testkube-failing.json
└── testsuite-testkube.json
└── testkube
├── installation-tests
├── crd
│ ├── enterprise-installation.yaml
│ ├── oss-installation.yaml
│ └── setup-dind-kind-cluster-template.yaml
└── enterprise-installation-expect-file.exp
└── ui-e2e
└── crd
└── cloud-ui-e2e.yaml
/.codecov.yaml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - "cmd/**"
3 |
4 | coverage:
5 | status:
6 | project: false
7 | patch: false
8 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | .git
2 | .gitignore
3 | .github
4 | README.md
5 | Makefile
6 | build
7 | docs
8 | assets
9 | config
10 | choco
11 | test
12 | skaffold.yaml
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/enhancement.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Enhancement
3 | about: Suggest an enhancement to existing Testkube functionality
4 | title: ''
5 | labels: 'enhancement 🚀'
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the enhancement you'd like to see**
11 | A clear and concise description of what you want to happen, and why.
12 |
13 | **Additional context**
14 | Add any other context, CLI input/output, etc. about the enhancement here.
15 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/manage_tech_debt.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Tech debt manage / Refactorings
3 | about: Fix shortcuts / reorder code / introduce tests / improve stuff
4 | title: ''
5 | labels: 'tech-debt 🙈'
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Why should it be implemented?**
11 | Add short and concise description why we need this improvement?
12 |
13 | **Describe the improvement**
14 | A clear and concise description of what the bug is.
15 |
16 | **Additional context**
17 | Add any other context about the problem here if needed.
18 |
19 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | ## Pull request description
2 |
3 |
4 |
5 | ## Checklist (choose whats happened)
6 |
7 | - [ ] breaking change! (describe)
8 | - [ ] tested locally
9 | - [ ] tested on cluster
10 | - [ ] added new dependencies
11 | - [ ] updated the docs
12 | - [ ] added a test
13 |
14 | ## Breaking changes
15 |
16 | -
17 |
18 | ## Changes
19 |
20 | -
21 |
22 | ## Fixes
23 |
24 | -
--------------------------------------------------------------------------------
/.github/sandbox-comment-template.md:
--------------------------------------------------------------------------------
1 | Sandbox environment for `{{ .branch_ref }}` has been created.
2 |
3 | ## URLs
4 |
5 | - **Dashboard**: https://dashboard.{{ .branch_ref }}.testkube.dev
6 | - **API**: https://api.{{ .branch_ref }}.testkube.dev
7 | - **Agent**: https://agent.{{ .branch_ref }}.testkube.dev
8 | - **Storage**: https://storage.{{ .branch_ref }}.testkube.dev
9 | - **Websockets**: https://websockets.{{ .branch_ref }}.testkube.dev
10 |
--------------------------------------------------------------------------------
/.github/workflows/agent-test-update-dispatch.yaml:
--------------------------------------------------------------------------------
1 | name: Dispatch - update tests at dev agent
2 |
3 | on:
4 | push:
5 | branches:
6 | - develop
7 | paths:
8 | - test/**
9 |
10 | jobs:
11 | dispatch:
12 | name: Dispatch - update tests at dev agent
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Update tests at dev agent
16 | uses: peter-evans/repository-dispatch@v3
17 | with:
18 | repository: kubeshop/testkube-cloud-api
19 | event-type: create_update_tests
20 |
--------------------------------------------------------------------------------
/.golangci.yml:
--------------------------------------------------------------------------------
1 | # .golangci.yml
2 |
3 | run:
4 | build-tags:
5 | - integration
6 |
7 | linters:
8 | disable-all: true
9 | enable:
10 | - goimports
11 | - revive
12 | - govet
13 | - unused
14 | - staticcheck
15 |
16 | linters-settings:
17 | govet:
18 | check-shadowing: false
19 | revive:
20 | ignore-generated-header: true
21 | goimports:
22 | local-prefixes: github.com/kubeshop/testkube
23 |
24 | issues:
25 | exclude-use-default: false
26 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Source code in this repository is variously licensed under the Testkube
2 | Community License (TCL) and the MIT license.
3 |
4 | Source code in a given file is licensed under the applicable license
5 | for that source code. Source code is licensed under the MIT license
6 | unless otherwise indicated in the header referenced at the beginning
7 | of the file or specified by a LICENSE file in the same containing
8 | folder as the file.
9 |
--------------------------------------------------------------------------------
/assets/architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/architecture.png
--------------------------------------------------------------------------------
/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/favicon.png
--------------------------------------------------------------------------------
/assets/imageFailed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/imageFailed.png
--------------------------------------------------------------------------------
/assets/imagePassed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/imagePassed.png
--------------------------------------------------------------------------------
/assets/imagePending.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/imagePending.png
--------------------------------------------------------------------------------
/assets/intro-to-testkube.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/intro-to-testkube.jpeg
--------------------------------------------------------------------------------
/assets/intro-to-testkube.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/intro-to-testkube.jpg
--------------------------------------------------------------------------------
/assets/logo-dark-text-full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/logo-dark-text-full.png
--------------------------------------------------------------------------------
/assets/logo-dark-text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/logo-dark-text.png
--------------------------------------------------------------------------------
/assets/logo-rect-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/logo-rect-blue.png
--------------------------------------------------------------------------------
/assets/logo-rect-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/logo-rect-dark.png
--------------------------------------------------------------------------------
/assets/logo-rect-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/logo-rect-white.png
--------------------------------------------------------------------------------
/assets/logo-white-text-full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/logo-white-text-full.png
--------------------------------------------------------------------------------
/assets/logo-white-text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/logo-white-text.png
--------------------------------------------------------------------------------
/assets/squishies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/squishies.png
--------------------------------------------------------------------------------
/assets/testkube-color-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/testkube-color-dark.png
--------------------------------------------------------------------------------
/assets/testkube-color-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/testkube-color-gray.png
--------------------------------------------------------------------------------
/assets/testkube-color-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/testkube-color-white.png
--------------------------------------------------------------------------------
/assets/testkube-intro.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/assets/testkube-intro.gif
--------------------------------------------------------------------------------
/bin/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/bin/.gitkeep
--------------------------------------------------------------------------------
/build/_local/values.dev.tpl.yaml:
--------------------------------------------------------------------------------
1 | testkube-dashboard:
2 | enabled: false
3 | mongodb:
4 | enabled: false
5 | testkube-api:
6 | cloud:
7 | url: testkube-enterprise-api:8089
8 | tls:
9 | enabled: false
10 | existingSecret:
11 | name: testkube-default-agent-token
12 | key: agent-token
--------------------------------------------------------------------------------
/build/api-server/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | ARG ALPINE_IMAGE
3 | FROM ${ALPINE_IMAGE}
4 | RUN apk --no-cache add ca-certificates libssl3 git
5 | WORKDIR /root/
6 | COPY testkube-api-server /bin/app
7 | USER 1001
8 | EXPOSE 8088
9 | ENTRYPOINT ["/bin/app"]
10 |
--------------------------------------------------------------------------------
/build/installer/windows/teskube.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Testkube
5 | 0.11.0
6 | Kubernetes-native framework for test definition and execution.
7 | Kubeshop
8 | MIT
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/build/installer/windows/testkube.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | echo.
3 | kubectl-testkube.exe %*
--------------------------------------------------------------------------------
/build/installer/windows/tk.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | echo.
3 | kubectl-testkube.exe %*
--------------------------------------------------------------------------------
/build/logs-server/Dockerfile:
--------------------------------------------------------------------------------
1 | ARG ALPINE_IMAGE
2 | FROM ${ALPINE_IMAGE} as certs
3 | # hadolint ignore=DL3018
4 | RUN apk --no-cache --update add ca-certificates && (rm -rf /var/cache/apk/* || 0)
5 |
6 | WORKDIR /root/
7 |
8 | COPY testkube-logs-server /bin/app
9 | USER 1001
10 | EXPOSE 8088
11 | ENTRYPOINT ["/bin/app"]
12 |
--------------------------------------------------------------------------------
/build/logs-sidecar/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | ARG ALPINE_IMAGE
3 | FROM ${ALPINE_IMAGE}
4 | RUN apk --no-cache add ca-certificates
5 | WORKDIR /root/
6 | COPY testkube-logs-sidecar /bin/app
7 | USER 1001
8 | EXPOSE 8088
9 | ENTRYPOINT ["/bin/app"]
10 |
--------------------------------------------------------------------------------
/build/testworkflow-init/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | ARG BUSYBOX_IMAGE
3 | FROM ${BUSYBOX_IMAGE}
4 | RUN cp -rf /bin /.tktw-bin
5 | COPY testworkflow-init /init
6 | USER 1001
7 | ENTRYPOINT ["/init"]
8 |
--------------------------------------------------------------------------------
/build/testworkflow-toolkit/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | ARG BUSYBOX_IMAGE
3 | ARG ALPINE_IMAGE
4 |
5 | FROM ${BUSYBOX_IMAGE} AS busybox
6 | FROM ${ALPINE_IMAGE}
7 | RUN apk --no-cache add ca-certificates libssl3 git openssh-client
8 | COPY --from=busybox /bin /.tktw-bin
9 | COPY testworkflow-toolkit /toolkit
10 | COPY testworkflow-init /init
11 | RUN adduser --disabled-password --home / --no-create-home --uid 1001 default
12 | USER 1001
13 | ENTRYPOINT ["/toolkit"]
14 |
--------------------------------------------------------------------------------
/cmd/choco-stub/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | )
6 |
7 | func main() {
8 | hint := `
9 | Dear users,
10 | Please note that we moved to a new Chocolatey registry that can be found at https://chocolatey.kubeshop.io/
11 |
12 | Please add this URL to the list of Chocolatey sources and use it to install and upgrade Testkube package.
13 | Installation instruction can be found at: https://docs.testkube.io/articles/step1-installing-cli#macos
14 | `
15 | fmt.Println(hint)
16 | }
17 |
--------------------------------------------------------------------------------
/cmd/debug-server/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM golang:1.23
3 | WORKDIR /build
4 | COPY . .
5 | ENV CGO_ENABLED=0
6 | ENV GOOS=linux
7 |
8 | RUN go build -o /app main.go
9 |
10 | ARG ALPINE_IMAGE
11 | FROM ${ALPINE_IMAGE}
12 | RUN apk --no-cache add ca-certificates libssl1.1
13 | WORKDIR /root/
14 | COPY --from=0 /app /bin/app
15 | EXPOSE 8080
16 | CMD ["/bin/app"]
17 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/agent/debug.go:
--------------------------------------------------------------------------------
1 | package agent
2 |
3 | import (
4 | "github.com/spf13/cobra"
5 | )
6 |
7 | func NewDebugAgentCmd() *cobra.Command {
8 | cmd := &cobra.Command{
9 | Use: "debug",
10 | Short: "Debug Agent info",
11 | Deprecated: "use `testkube debug agent` instead",
12 | }
13 |
14 | return cmd
15 | }
16 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/agent/migrate.go:
--------------------------------------------------------------------------------
1 | package agent
2 |
3 | import (
4 | "github.com/spf13/cobra"
5 | )
6 |
7 | func NewMigrateAgentCmd() *cobra.Command {
8 | cmd := &cobra.Command{
9 | Use: "agent",
10 | Short: "manual migrate agent command",
11 | Long: `migrate agent command will run agent migrations greater or equals current version`,
12 | Run: func(cmd *cobra.Command, args []string) {
13 | // TODO: Delete, as we don't have any migrations
14 | },
15 | }
16 |
17 | return cmd
18 | }
19 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/common/validator/directory.go:
--------------------------------------------------------------------------------
1 | package validator
2 |
3 | import (
4 | "errors"
5 |
6 | "github.com/spf13/cobra"
7 | )
8 |
9 | func ManifestsDirectory(cmd *cobra.Command, args []string) error {
10 | if len(args) < 1 {
11 | return errors.New("please pass directory with manifest files as argument")
12 | }
13 | return nil
14 | }
15 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/common/validator/executionid.go:
--------------------------------------------------------------------------------
1 | package validator
2 |
3 | import (
4 | "errors"
5 |
6 | "github.com/spf13/cobra"
7 | )
8 |
9 | func ExecutionName(cmd *cobra.Command, args []string) error {
10 | if len(args) < 1 {
11 | return errors.New("please pass execution name as argument")
12 | }
13 | return nil
14 | }
15 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/common/validator/executionidfilename.go:
--------------------------------------------------------------------------------
1 | package validator
2 |
3 | import (
4 | "errors"
5 |
6 | "github.com/spf13/cobra"
7 | )
8 |
9 | func ExecutionIDAndFileNames(cmd *cobra.Command, args []string) error {
10 | if len(args) < 3 {
11 | return errors.New("please pass 'Execution ID' ,'Filename' and 'Destination Directory' as arguments")
12 | }
13 | return nil
14 | }
15 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/common/validator/testsuitename.go:
--------------------------------------------------------------------------------
1 | package validator
2 |
3 | import (
4 | "errors"
5 |
6 | "github.com/spf13/cobra"
7 | )
8 |
9 | func TestSuiteName(cmd *cobra.Command, args []string) error {
10 | // TODO validate test name as valid kubernetes resource name
11 |
12 | if len(args) < 1 {
13 | return errors.New("please pass valid test suite name")
14 | }
15 | return nil
16 | }
17 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/common/version.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | var (
4 | Commit string
5 | Version string
6 | BuiltBy string
7 | Date string
8 | )
9 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/constants.go:
--------------------------------------------------------------------------------
1 | package commands
2 |
3 | import (
4 | apiclient "github.com/kubeshop/testkube/pkg/api/v1/client"
5 | )
6 |
7 | const (
8 | ApiVersion string = "v1"
9 | DashboardURI string = "http://dashboard.testkube.io"
10 | CurrentApiVersion string = apiclient.Version
11 | DashboardLocalPort int = 8080
12 | )
13 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/commands/renderer/labels.go:
--------------------------------------------------------------------------------
1 | package renderer
2 |
3 | import (
4 | "github.com/kubeshop/testkube/pkg/api/v1/testkube"
5 | "github.com/kubeshop/testkube/pkg/ui"
6 | )
7 |
8 | func RenderStringArray(title string, a []string) {
9 | if len(a) > 0 {
10 | ui.Warn(title+":", a...)
11 | }
12 | }
13 |
14 | func RenderStringMap(title string, m map[string]string) {
15 | if len(m) > 0 {
16 | ui.Warn(title+":", testkube.MapToString(m))
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/cmd/kubectl-testkube/config/config.go:
--------------------------------------------------------------------------------
1 | package config
2 |
3 | // defaultDirectory is the default directory for the config file
4 | var defaultDirectory = ""
5 |
6 | func Load() (Data, error) {
7 | storage, err := GetStorage(defaultDirectory)
8 | if err != nil {
9 | return Data{}, err
10 | }
11 | return storage.Load()
12 | }
13 |
14 | func Save(data Data) error {
15 | storage, err := GetStorage(defaultDirectory)
16 | if err != nil {
17 | return err
18 | }
19 | return storage.Save(data)
20 | }
21 |
--------------------------------------------------------------------------------
/cmd/tcl/README.md:
--------------------------------------------------------------------------------
1 | # Testkube - TCL Package
2 |
3 | This folder contains special code with the Testkube Community license.
4 |
5 | ## License
6 |
7 | The code in this folder is licensed under the Testkube Community License. Please see the [LICENSE](../../licenses/TCL.txt) file for more information.
8 |
--------------------------------------------------------------------------------
/cmd/tcl/testworkflow-toolkit/spawn/constants.go:
--------------------------------------------------------------------------------
1 | // Copyright 2024 Testkube.
2 | //
3 | // Licensed as a Testkube Pro file under the Testkube Community
4 | // License (the "License"); you may not use this file except in compliance with
5 | // the License. You may obtain a copy of the License at
6 | //
7 | // https://github.com/kubeshop/testkube/blob/main/licenses/TCL.txt
8 |
9 | package spawn
10 |
11 | const (
12 | DefaultParallelism = 1000
13 | )
14 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/constants/addr.go:
--------------------------------------------------------------------------------
1 | package constants
2 |
3 | const (
4 | ControlServerPort = 60434
5 | )
6 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/constants/codes.go:
--------------------------------------------------------------------------------
1 | package constants
2 |
3 | const (
4 | CodeAborted uint8 = 137
5 | CodeInputError uint8 = 155
6 | CodeInternal uint8 = 190
7 | )
8 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/constants/formats.go:
--------------------------------------------------------------------------------
1 | package constants
2 |
3 | const (
4 | PreciseTimeFormat = "2006-01-02T15:04:05.000000000Z"
5 | )
6 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/constants/instructions.go:
--------------------------------------------------------------------------------
1 | package constants
2 |
3 | const (
4 | InstructionStart = "start"
5 | InstructionEnd = "end"
6 | InstructionExecution = "execution"
7 | InstructionPause = "pause"
8 | InstructionResume = "resume"
9 | InstructionIteration = "iteration"
10 | )
11 |
12 | type ExecutionResult struct {
13 | ExitCode uint8 `json:"code"`
14 | Details string `json:"details,omitempty"`
15 | Iteration int `json:"iteration,omitempty"`
16 | }
17 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/constants/names.go:
--------------------------------------------------------------------------------
1 | package constants
2 |
3 | const (
4 | InitStepName = "tktw-init"
5 | )
6 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/constants/paths.go:
--------------------------------------------------------------------------------
1 | package constants
2 |
3 | import "path/filepath"
4 |
5 | const (
6 | InternalPath = "/.tktw"
7 | TerminationLogPath = "/dev/termination-log"
8 | )
9 |
10 | var (
11 | InternalBinPath = filepath.Join(InternalPath, "bin")
12 | InitPath = filepath.Join(InternalPath, "init")
13 | ToolkitPath = filepath.Join(InternalPath, "toolkit")
14 | StatePath = filepath.Join(InternalPath, "state")
15 | )
16 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/control/options.go:
--------------------------------------------------------------------------------
1 | package control
2 |
3 | import "time"
4 |
5 | type ServerOptions struct {
6 | HandlePause func(ts time.Time) error
7 | HandleResume func(ts time.Time) error
8 | }
9 |
10 | func (p ServerOptions) Pause(ts time.Time) error {
11 | return p.HandlePause(ts)
12 | }
13 |
14 | func (p ServerOptions) Resume(ts time.Time) error {
15 | return p.HandleResume(ts)
16 | }
17 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/obfuscator/replacers.go:
--------------------------------------------------------------------------------
1 | package obfuscator
2 |
3 | func FullReplace(value string) func([]byte) []byte {
4 | replacement := []byte(value)
5 | return func(_ []byte) []byte {
6 | return replacement
7 | }
8 | }
9 |
10 | func ShowLastCharacters(prefix string, visibleChars int) func([]byte) []byte {
11 | replacement := []byte(prefix)
12 | return func(v []byte) []byte {
13 | if len(v) <= visibleChars {
14 | return v
15 | }
16 | return append(replacement, v[len(v)-visibleChars:]...)
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/cmd/testworkflow-init/output/fail.go:
--------------------------------------------------------------------------------
1 | package output
2 |
3 | import "os"
4 |
5 | func ExitErrorf(exitCode uint8, message string, args ...interface{}) {
6 | // Print message
7 | Std.Printf(message+"\n", args...)
8 |
9 | // Exit
10 | os.Exit(int(exitCode))
11 | }
12 |
13 | func UnsafeExitErrorf(exitCode uint8, message string, args ...interface{}) {
14 | // Print message
15 | Std.Direct().Printf(message+"\n", args...)
16 |
17 | // Exit
18 | os.Exit(int(exitCode))
19 | }
20 |
--------------------------------------------------------------------------------
/cmd/testworkflow-toolkit/artifacts/mimetype.go:
--------------------------------------------------------------------------------
1 | package artifacts
2 |
3 | import (
4 | "path/filepath"
5 |
6 | "github.com/h2non/filetype"
7 | )
8 |
9 | func DetectMimetype(filePath string) string {
10 | ext := filepath.Ext(filePath)
11 |
12 | // Remove the dot from the file extension
13 | if len(ext) > 0 && ext[0] == '.' {
14 | ext = ext[1:]
15 | }
16 | t := filetype.GetType(ext)
17 | if t == filetype.Unknown {
18 | return ""
19 | }
20 | return t.MIME.Value
21 | }
22 |
--------------------------------------------------------------------------------
/cmd/testworkflow-toolkit/artifacts/processor.go:
--------------------------------------------------------------------------------
1 | package artifacts
2 |
3 | import "io/fs"
4 |
5 | type Processor interface {
6 | Start() error
7 | Add(uploader Uploader, path string, file fs.File, stat fs.FileInfo) error
8 | End() error
9 | }
10 |
11 | type PostProcessor interface {
12 | Start() error
13 | Add(path string) error
14 | End() error
15 | }
16 |
--------------------------------------------------------------------------------
/cmd/testworkflow-toolkit/artifacts/uploader.go:
--------------------------------------------------------------------------------
1 | package artifacts
2 |
3 | import (
4 | "io"
5 | )
6 |
7 | type Uploader interface {
8 | Start() error
9 | Add(path string, file io.Reader, size int64) error
10 | End() error
11 | }
12 |
--------------------------------------------------------------------------------
/cmd/testworkflow-toolkit/commands/testdata/test.log:
--------------------------------------------------------------------------------
1 | some log
2 | log line 2
3 | log line 3
4 | foo
--------------------------------------------------------------------------------
/cmd/testworkflow-toolkit/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "errors"
5 |
6 | "github.com/kubeshop/testkube/cmd/testworkflow-toolkit/commands"
7 | "github.com/kubeshop/testkube/cmd/testworkflow-toolkit/env/config"
8 | "github.com/kubeshop/testkube/pkg/ui"
9 | )
10 |
11 | func main() {
12 | // Set verbosity
13 | ui.SetVerbose(config.Debug())
14 |
15 | // Validate provided data
16 | if config.Namespace() == "" || config.Ref() == "" {
17 | ui.Fail(errors.New("environment is misconfigured"))
18 | }
19 |
20 | commands.Execute()
21 | }
22 |
--------------------------------------------------------------------------------
/cmd/testworkflow-toolkit/transfer/utils.go:
--------------------------------------------------------------------------------
1 | package transfer
2 |
3 | import (
4 | "crypto/sha256"
5 | "encoding/json"
6 | "fmt"
7 | )
8 |
9 | func SourceID(dirPath string, files []string) string {
10 | v, err := json.Marshal(map[string]interface{}{"p": dirPath, "v": files})
11 | if err != nil {
12 | panic(fmt.Sprintf("error while serializing data for building checksum for transfer: %s", err.Error()))
13 | }
14 | return fmt.Sprintf("%x", sha256.Sum256(v))
15 | }
16 |
--------------------------------------------------------------------------------
/cmd/tools/commands/common.go:
--------------------------------------------------------------------------------
1 | package commands
2 |
3 | var kind string
4 | var dev bool
5 |
--------------------------------------------------------------------------------
/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/codecov.yaml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - "cmd/**/*"
3 | - "**/*_mock.go"
4 | - "**/mock_*.go"
5 |
6 | coverage:
7 | status:
8 | project: false
9 | patch: false
10 |
--------------------------------------------------------------------------------
/common.UiGetNamespace:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/common.UiGetNamespace
--------------------------------------------------------------------------------
/contrib/container/README.md:
--------------------------------------------------------------------------------
1 | Container executor CRDs
2 |
--------------------------------------------------------------------------------
/contrib/container/kubent/executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: kubent
5 | namespace: testkube
6 | spec:
7 | types:
8 | - kubent
9 | executor_type: container
10 | image: ghcr.io/doitintl/kube-no-trouble:latest
11 |
--------------------------------------------------------------------------------
/contrib/container/pytest/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.8.17-alpine3.18
2 |
3 | RUN set -ex \
4 | && python3 -m pip install --upgrade --no-cache-dir pip \
5 | && python3 -m pip install \
6 | --no-cache-dir \
7 | --upgrade pipenv \
8 | --upgrade requests \
9 | --upgrade pytest
10 |
--------------------------------------------------------------------------------
/contrib/container/pytest/container-executor-pytest.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: container-executor-pytest
5 | namespace: testkube
6 | spec:
7 | image: pytest-executor:latest
8 | executor_type: container
9 | types:
10 | - container-executor-pytest/test
11 |
--------------------------------------------------------------------------------
/contrib/container/pytest/failed_sample.py:
--------------------------------------------------------------------------------
1 | import pytest
2 |
3 | def inc(x):
4 | return x + 1
5 |
6 | def test_answer():
7 | assert inc(3) == 5
8 |
--------------------------------------------------------------------------------
/contrib/container/pytest/passed_sample.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | import requests
3 |
4 | from requests.exceptions import ConnectionError
5 |
6 | def is_responsive():
7 | try:
8 | response = requests.get("https://testkube.io")
9 | if response.status_code == 200:
10 | return True
11 | except ConnectionError:
12 | return False
13 |
14 | def test_status():
15 | assert is_responsive()
16 |
--------------------------------------------------------------------------------
/contrib/executor/artillery/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 | .vscode
30 |
--------------------------------------------------------------------------------
/contrib/executor/artillery/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | #syntax=docker/dockerfile:1
2 | FROM node:21.4.0-bookworm-slim
3 | RUN apt-get update && apt-get install -y git && \
4 | npm install -g artillery@2.0.3 && \
5 | useradd -m -d /home/artillery -s /bin/bash -u 1001 -r -g root artillery
6 |
7 |
8 | COPY artillery /bin/runner
9 |
10 | USER 1001
11 |
12 | EXPOSE 8082
13 | WORKDIR /home/artillery
14 |
15 | ENTRYPOINT ["/bin/runner"]
16 |
--------------------------------------------------------------------------------
/contrib/executor/artillery/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/artillery/examples/artillery-executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: artillery-executor
5 | namespace: testkube
6 | spec:
7 | image: kubeshop/testkube-executor-artilleryr:latest
8 | types:
9 | - artillery/test
10 | content_types:
11 | - git-file
12 | - git-dir
13 | - string
14 | - uri-file
15 |
--------------------------------------------------------------------------------
/contrib/executor/artillery/examples/postcodes.csv:
--------------------------------------------------------------------------------
1 | 33162
2 | 33170
3 | 33190
--------------------------------------------------------------------------------
/contrib/executor/artillery/examples/simple.yaml:
--------------------------------------------------------------------------------
1 | config:
2 | target: "http://testkube-api-server:8088"
3 | phases:
4 | - duration: 6
5 | arrivalRate: 5
6 | name: Warm up
7 | - duration: 120
8 | arrivalRate: 5
9 | rampTo: 50
10 | name: Ramp up load
11 | - duration: 60
12 | arrivalRate: 50
13 | name: Sustained load
14 | scenarios:
15 | - name: "Check health endpoint"
16 | flow:
17 | - get:
18 | url: "/health"
19 |
--------------------------------------------------------------------------------
/contrib/executor/artillery/examples/test.yaml:
--------------------------------------------------------------------------------
1 | config:
2 | target: "https://api.zippopotam.us"
3 | phases:
4 | - duration: 10
5 | arrivalRate: 5
6 | name: Warm up
7 | - duration: 20
8 | arrivalRate: 5
9 | rampTo: 50
10 | name: Ramp up load
11 | payload:
12 | path: "postcodes.csv"
13 | fields:
14 | - "postcode"
15 |
16 | scenarios:
17 | - name: "Get Zip Code Info"
18 | flow:
19 | - get:
20 | url: "/us/{{ postcode }}"
--------------------------------------------------------------------------------
/contrib/executor/curl/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
--------------------------------------------------------------------------------
/contrib/executor/curl/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 |
3 | # This version of curl built with the following configure options
4 | # --enable-static --disable-ldap --enable-ipv6 --enable-unix-sockets --with-ssl --with-libssh2 --with-nghttp2=/usr \
5 | # --prefix=/usr/local --with-gssapi
6 |
7 | FROM curlimages/curl
8 | COPY curl /bin/runner
9 | WORKDIR /root/
10 | USER 1001
11 | ENTRYPOINT ["/bin/runner"]
12 |
--------------------------------------------------------------------------------
/contrib/executor/curl/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/curl/examples/example_execution.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "blablablablabla",
3 | "name": "some-testing-exec",
4 | "content": {
5 | "type": "string",
6 | "data":"{ \"command\": [ \"curl\", \"https://reqbin.com/echo/get/json\", \"-H\", \"'Accept: application/json'\" ], \"expected_status\": \"200\", \"expected_body\": \"{\\\"success\\\":\\\"true\\\"}\" }"
7 | }
8 | }
--------------------------------------------------------------------------------
/contrib/executor/curl/examples/example_with_templates.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "blablablablabla",
3 | "name": "some-testing-exec",
4 | "content": {
5 | "type": "string",
6 | "data": "{ \"command\": [ \"curl\", \"{{.url}}\", \"-H\", \"'{{.header}}'\" ], \"expected_status\": {{.status}}, \"expected_body\": \"{{.body}}\" }"
7 | }
8 | }
--------------------------------------------------------------------------------
/contrib/executor/cypress/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/examples/cypress.config.js:
--------------------------------------------------------------------------------
1 | const { defineConfig } = require('cypress')
2 |
3 | module.exports = defineConfig({
4 | e2e: {
5 | // We've imported your old cypress plugins here.
6 | // You may want to clean this up later by importing these.
7 | setupNodeEvents(on, config) {
8 | return require('./cypress/plugins/index.js')(on, config)
9 | },
10 | },
11 | })
12 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/examples/cypress/e2e/simple.cy.js:
--------------------------------------------------------------------------------
1 | describe("The Home Page", () => {
2 | it("successfully loads", () => {
3 | cy.visit("https://testkube-test-page-lipsum.pages.dev/");
4 |
5 | cy.contains("Testkube");
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/examples/cypress/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io",
4 | "body": "Fixtures are a great way to mock data for responses to routes"
5 | }
6 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/examples/cypress/fixtures/profile.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": 8739,
3 | "name": "Jane",
4 | "email": "jane@example.com"
5 | }
--------------------------------------------------------------------------------
/contrib/executor/cypress/examples/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cypress-example-test",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "simple-test.js",
6 | "scripts": {
7 | "test": "cypress run simple-test.js"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "cypress": "^10.4.0"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/skeleton/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/skeleton/README.md:
--------------------------------------------------------------------------------
1 | # Cypress test skeleton for one file tests
2 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/skeleton/cypress.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/skeleton/cypress/integration/test.js:
--------------------------------------------------------------------------------
1 | describe("test", () => {});
2 |
--------------------------------------------------------------------------------
/contrib/executor/cypress/skeleton/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "cypress": "^8.7.0"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/contrib/executor/example/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
--------------------------------------------------------------------------------
/contrib/executor/example/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | ARG ALPINE_IMAGE
3 | FROM ${ALPINE_IMAGE}
4 | COPY example /bin/runner
5 |
6 | RUN apk --no-cache add ca-certificates git curl
7 | WORKDIR /root/
8 | ENTRYPOINT ["/bin/runner"]
9 |
--------------------------------------------------------------------------------
/contrib/executor/example/build/kube/executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: example-executor
5 | namespace: testkube
6 | spec:
7 | executor_type: job
8 | image: kubeshop/testkube-example-executor:0.0.1 # pass your repository and tag
9 | types:
10 | - example/test
11 | volume_mount_path: /mnt/artifacts-storage
12 | volume_quantity: 10Gix
13 |
--------------------------------------------------------------------------------
/contrib/executor/example/cmd/agent/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "context"
5 | "os"
6 |
7 | "github.com/kubeshop/testkube/contrib/executor/example/pkg/runner"
8 | "github.com/kubeshop/testkube/pkg/executor/agent"
9 | )
10 |
11 | func main() {
12 | agent.Run(context.Background(), runner.NewRunner(), os.Args)
13 | }
14 |
--------------------------------------------------------------------------------
/contrib/executor/example/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/ginkgo/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM golang:1.23-alpine as base
3 |
4 | RUN apk update;
5 | RUN go install -mod=mod github.com/onsi/ginkgo/v2/ginkgo
6 | RUN cp `which ginkgo` /bin/ginkgo
7 | RUN apk --no-cache add gcc musl-dev gcompat ca-certificates git curl
8 |
9 | COPY ginkgo /bin/runner
10 | WORKDIR /root/
11 |
12 | RUN go version && ginkgo version
13 |
14 | ENTRYPOINT ["/bin/runner"]
15 |
--------------------------------------------------------------------------------
/contrib/executor/ginkgo/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/ginkgo/examples/other/url_test.go:
--------------------------------------------------------------------------------
1 | package other
2 |
3 | import (
4 | "fmt"
5 | "net/http"
6 |
7 | . "github.com/onsi/ginkgo/v2"
8 | . "github.com/onsi/gomega"
9 | )
10 |
11 | var _ = Describe("Try URL for a 200", func() {
12 | It("should return 200", func() {
13 | resp, requestErr := http.Get(fmt.Sprintf("https://%s", baseURL))
14 | Expect(requestErr).To(BeNil())
15 | Expect(resp.StatusCode).To(Equal(200))
16 | })
17 | })
18 |
--------------------------------------------------------------------------------
/contrib/executor/ginkgo/examples/testkube-api/testkube_api_suite_test.go:
--------------------------------------------------------------------------------
1 | package testkube_api_test
2 |
3 | import (
4 | "testing"
5 |
6 | . "github.com/onsi/ginkgo/v2"
7 | . "github.com/onsi/gomega"
8 | )
9 |
10 | func TestTestkubeApi(t *testing.T) {
11 | RegisterFailHandler(Fail)
12 | RunSpecs(t, "TestkubeApi Suite")
13 | }
14 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
30 | .dccache
31 | .vscode/
--------------------------------------------------------------------------------
/contrib/executor/gradle/build/agent/Dockerfile.jdk11:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM gradle:8.5.0-jdk11
3 | COPY gradle /bin/runner
4 |
5 | RUN chown -R 1001:1001 /home/gradle
6 | ENV GRADLE_USER_HOME /home/gradle
7 |
8 | USER 1001
9 |
10 | ENTRYPOINT ["/bin/runner"]
11 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/build/agent/Dockerfile.jdk17:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM gradle:8.5.0-jdk17
3 | COPY gradle /bin/runner
4 |
5 | RUN chown -R 1001:1001 /home/gradle
6 | ENV GRADLE_USER_HOME /home/gradle
7 |
8 | USER 1001
9 |
10 | ENTRYPOINT ["/bin/runner"]
11 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/build/agent/Dockerfile.jdk18:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM gradle:8.5.0-jdk18
3 | COPY gradle /bin/runner
4 |
5 | RUN chown -R 1001:1001 /home/gradle
6 | ENV GRADLE_USER_HOME /home/gradle
7 |
8 | USER 1001
9 |
10 | ENTRYPOINT ["/bin/runner"]
11 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/build/agent/Dockerfile.jdk21:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | # alpine is without critical security issues
3 | FROM kubeshop/testkube-gradle-executor:gradle8.5.0-jk21-base
4 | COPY gradle /bin/runner
5 |
6 | RUN chown -R 1001:1001 /home/gradle
7 | ENV GRADLE_USER_HOME /home/gradle
8 |
9 | USER 1001
10 |
11 | ENTRYPOINT ["/bin/runner"]
12 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/build/agent/Dockerfile.jdk8:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM gradle:8.5.0-jdk8
3 | COPY gradle /bin/runner
4 |
5 | RUN chown -R 1001:1001 /home/gradle
6 | ENV GRADLE_USER_HOME /home/gradle
7 |
8 | USER 1001
9 |
10 | ENTRYPOINT ["/bin/runner"]
11 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/gradle-executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: gradle-executor
5 | namespace: testkube
6 | spec:
7 | executor_type: job
8 | image: testkube/testkube-gradle-executor:latest
9 | types:
10 | - gradle/project
11 | - gradle/test
12 | - gradle/integrationTest
13 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradle-jdk18/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore Gradle project-specific cache directory
2 | .gradle
3 |
4 | # Ignore Gradle build output directory
5 | build
6 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradle-jdk18/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'hello-gradle'
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradle-jdk18/src/test/java/hello/gradle/LibraryTest.java:
--------------------------------------------------------------------------------
1 | package hello.gradle;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import static org.junit.jupiter.api.Assertions.*;
5 |
6 | class LibraryTest {
7 | @Test void someLibraryMethodReturnsTrue() {
8 | String env = System.getenv("TESTKUBE_GRADLE");
9 | assertTrue(Boolean.parseBoolean(env), "TESTKUBE_GRADLE env should be true");
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradle/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore Gradle project-specific cache directory
2 | .gradle
3 |
4 | # Ignore Gradle build output directory
5 | build
6 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradle/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'java-library'
3 | }
4 |
5 | repositories {
6 | mavenCentral()
7 | }
8 |
9 | dependencies {
10 | testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
11 | }
12 |
13 | tasks.named('test') {
14 | useJUnitPlatform()
15 | }
16 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradle/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'hello-gradle'
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradle/src/test/java/hello/gradle/LibraryTest.java:
--------------------------------------------------------------------------------
1 | package hello.gradle;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import static org.junit.jupiter.api.Assertions.*;
5 |
6 | class LibraryTest {
7 | @Test void someLibraryMethodReturnsTrue() {
8 | String env = System.getenv("TESTKUBE_GRADLE");
9 | assertTrue(Boolean.parseBoolean(env), "TESTKUBE_GRADLE env should be true");
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-failing/.gitattributes:
--------------------------------------------------------------------------------
1 | #
2 | # https://help.github.com/articles/dealing-with-line-endings/
3 | #
4 | # These are explicitly windows files and should use crlf
5 | *.bat text eol=crlf
6 |
7 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-failing/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore Gradle project-specific cache directory
2 | .gradle
3 |
4 | # Ignore Gradle build output directory
5 | build
6 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-failing/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'java-library'
3 | }
4 |
5 | repositories {
6 | mavenCentral()
7 | }
8 |
9 | dependencies {
10 | testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
11 | }
12 |
13 | tasks.named('test') {
14 | useJUnitPlatform()
15 | }
16 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-failing/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/gradle/examples/hello-gradlew-failing/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-failing/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-failing/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'hello-gradlew'
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-failing/src/main/java/hello/gradlew/Library.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This Java source file was generated by the Gradle 'init' task.
3 | */
4 | package hello.gradlew;
5 |
6 | public class Library {
7 | public boolean someLibraryMethod() {
8 | return false;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-jdk18/.gitattributes:
--------------------------------------------------------------------------------
1 | #
2 | # https://help.github.com/articles/dealing-with-line-endings/
3 | #
4 | # These are explicitly windows files and should use crlf
5 | *.bat text eol=crlf
6 |
7 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-jdk18/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore Gradle project-specific cache directory
2 | .gradle
3 |
4 | # Ignore Gradle build output directory
5 | build
6 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-jdk18/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/gradle/examples/hello-gradlew-jdk18/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-jdk18/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-jdk18/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'hello-gradlew'
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew-jdk18/src/main/java/hello/gradlew/Library.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This Java source file was generated by the Gradle 'init' task.
3 | */
4 | package hello.gradlew;
5 |
6 | public class Library {
7 | public boolean someLibraryMethod() {
8 | return true;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/.gitattributes:
--------------------------------------------------------------------------------
1 | #
2 | # https://help.github.com/articles/dealing-with-line-endings/
3 | #
4 | # These are explicitly windows files and should use crlf
5 | *.bat text eol=crlf
6 |
7 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore Gradle project-specific cache directory
2 | .gradle
3 |
4 | # Ignore Gradle build output directory
5 | build
6 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'java-library'
3 | }
4 |
5 | repositories {
6 | mavenCentral()
7 | }
8 |
9 | dependencies {
10 | testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
11 | }
12 |
13 | tasks.named('test') {
14 | useJUnitPlatform()
15 | }
16 |
17 | test {
18 | reports {
19 | html.required = false
20 | junitXml{
21 | required = true
22 | outputPerTestCase = false
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/gradle/examples/hello-gradlew/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'hello-gradlew'
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/src/main/java/hello/gradlew/Library.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This Java source file was generated by the Gradle 'init' task.
3 | */
4 | package hello.gradlew;
5 |
6 | public class Library {
7 | public boolean someLibraryMethod() {
8 | return true;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/src/main/java/other/Library.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This Java source file was generated by the Gradle 'init' task.
3 | */
4 | package other;
5 |
6 | public class Library {
7 | public boolean someLibraryMethod() {
8 | return true;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/src/test/java/hello/gradlew/LibraryTest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This Java source file was generated by the Gradle 'init' task.
3 | */
4 | package hello.gradlew;
5 |
6 | import org.junit.jupiter.api.Test;
7 | import static org.junit.jupiter.api.Assertions.*;
8 |
9 | class LibraryTest {
10 | @Test void someLibraryMethodReturnsTrue() {
11 | Library classUnderTest = new Library();
12 | assertTrue(classUnderTest.someLibraryMethod(), "someLibraryMethod should return 'true'");
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/contrib/executor/gradle/examples/hello-gradlew/src/test/java/other/LibraryTest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This Java source file was generated by the Gradle 'init' task.
3 | */
4 | package other;
5 |
6 | import org.junit.jupiter.api.Test;
7 | import static org.junit.jupiter.api.Assertions.*;
8 |
9 | class LibraryTest {
10 | @Test void someLibraryMethodReturnsTrue() {
11 | Library classUnderTest = new Library();
12 | assertTrue(classUnderTest.someLibraryMethod(), "someLibraryMethod should return 'true'");
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/contrib/executor/init/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM ubuntu
3 | COPY init /bin/runner
4 | RUN apt-get update
5 | RUN apt-get install ca-certificates git curl -y
6 | WORKDIR /root/
7 | RUN git config --global user.name "testkube"
8 | RUN chmod a=rw /root/.gitconfig
9 | ENTRYPOINT ["/bin/runner"]
10 |
--------------------------------------------------------------------------------
/contrib/executor/init/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/init/pkg/runner/testdir/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/init/pkg/runner/testdir/.gitkeep
--------------------------------------------------------------------------------
/contrib/executor/init/pkg/runner/testdir/command.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | command.sh "$@"
4 |
--------------------------------------------------------------------------------
/contrib/executor/init/pkg/runner/testdir/entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | "testdir/prerun.sh"
3 | prerun_exit_code=$?
4 | if [ $prerun_exit_code -ne 0 ]; then
5 | exit $prerun_exit_code
6 | fi
7 | "testdir/command.sh" $@
8 | command_exit_code=$?
9 | "testdir/postrun.sh"
10 | postrun_exit_code=$?
11 | if [ $command_exit_code -ne 0 ]; then
12 | exit $command_exit_code
13 | fi
14 | exit $postrun_exit_code
15 |
--------------------------------------------------------------------------------
/contrib/executor/init/pkg/runner/testdir/postrun.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | echo "===== pre-run script"
--------------------------------------------------------------------------------
/contrib/executor/init/pkg/runner/testdir/prerun.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | echo "===== pre-run script"
--------------------------------------------------------------------------------
/contrib/executor/jmeter/.dockerignore:
--------------------------------------------------------------------------------
1 | .git
2 | .gitignore
3 | .golangci.yml
4 | CODE_OF_CONDUCT.md
5 | CONTRIBUTING.md
6 | LICENSE
7 | Makefile
8 | README.md
9 | temp
10 | data
--------------------------------------------------------------------------------
/contrib/executor/jmeter/.env.sample:
--------------------------------------------------------------------------------
1 | # used if storage backend is behind HTTPS, should be set to false for local development
2 | RUNNER_SSL=false
3 | # used to enable/disable scrapper, should be set to false for local development
4 | RUNNER_SCRAPPERENABLED=false
5 | # path to the data/ directory where JMeter will run and store results
6 | RUNNER_DATADIR=./data
7 |
--------------------------------------------------------------------------------
/contrib/executor/jmeter/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM kubeshop/testkube-jmeter-executor:jmeter5.6.2-jdk21-base
3 | COPY jmeter /bin/runner
4 |
5 | ENV ENTRYPOINT_CMD="/executor_entrypoint.sh"
6 | WORKDIR /root/
7 |
8 | COPY ./contrib/executor/jmeter/scripts/entrypoint.sh /executor_entrypoint.sh
9 | ADD ./contrib/executor/jmeter/plugins/ ${JMETER_CUSTOM_PLUGINS_FOLDER}
10 | ADD ./contrib/executor/jmeter/lib ${JMETER_HOME}/lib/
11 |
12 | ENTRYPOINT ["/bin/runner"]
13 |
--------------------------------------------------------------------------------
/contrib/executor/jmeter/build/agent/local.Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 |
3 | FROM justb4/jmeter:5.5
4 |
5 | RUN apk --no-cache add ca-certificates git
6 |
7 | WORKDIR /root/
8 |
9 | ENV ENTRYPOINT_CMD="/executor_entrypoint.sh"
10 |
11 | COPY dist/runner /bin/runner
12 | COPY scripts/entrypoint.sh /executor_entrypoint.sh
13 | ADD plugins/ ${JMETER_CUSTOM_PLUGINS_FOLDER}
14 | ADD lib/ ${JMETER_HOME}/lib/
15 |
16 | ENTRYPOINT ["/bin/runner"]
17 |
--------------------------------------------------------------------------------
/contrib/executor/jmeter/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/jmeter/examples/executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: jmeter-executor
5 | namespace: testkube
6 | spec:
7 | features:
8 | - artifacts
9 | image: kubeshop/testkube-jmeter-executor:dev-008
10 | types:
11 | - jmeter/test
12 |
--------------------------------------------------------------------------------
/contrib/executor/jmeter/examples/results.jtl:
--------------------------------------------------------------------------------
1 | timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
2 | 1667463814102,382,HTTP Request,200,OK,Thread Group 1-1,text,true,,66428,109,1,1,https://testkube.io,326,0,235
3 | 1667463836936,365,HTTP Request,200,OK,Thread Group 1-1,text,true,,66428,109,1,1,https://testkube.io,309,0,222
4 | 1667463838447,362,HTTP Request,200,OK,Thread Group 1-1,text,true,,66428,109,1,1,https://testkube.io,309,0,219
5 |
--------------------------------------------------------------------------------
/contrib/executor/jmeter/lib/jmeter-plugins-cmn-jmeter-0.6.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/jmeter/lib/jmeter-plugins-cmn-jmeter-0.6.jar
--------------------------------------------------------------------------------
/contrib/executor/jmeter/plugins/jmeter-plugins-functions-2.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/jmeter/plugins/jmeter-plugins-functions-2.1.jar
--------------------------------------------------------------------------------
/contrib/executor/jmeter/plugins/jmeter-plugins-manager-1.3.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/jmeter/plugins/jmeter-plugins-manager-1.3.jar
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/.dockerignore:
--------------------------------------------------------------------------------
1 | .git
2 | .gitignore
3 | .golangci.yml
4 | CODE_OF_CONDUCT.md
5 | CONTRIBUTING.md
6 | LICENSE
7 | Makefile
8 | README.md
9 | temp
10 | data
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/.env.sample:
--------------------------------------------------------------------------------
1 | # used if storage backend is behind HTTPS, should be set to false for local development
2 | RUNNER_SSL=false
3 | # used to enable/disable scrapper, should be set to false for local development
4 | RUNNER_SCRAPPERENABLED=false
5 | # path to the data/ directory where JMeter will run and store results
6 | RUNNER_DATADIR=./data
7 |
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM kubeshop/jmeter:5.5
3 | COPY jmeterd /bin/runner
4 |
5 | RUN microdnf update -y && microdnf install -y ca-certificates git sshpass && microdnf clean all
6 | ENV ENTRYPOINT_CMD="/executor_entrypoint.sh"
7 | WORKDIR /root/
8 | COPY ./contrib/executor/jmeterd/scripts/entrypoint.sh /executor_entrypoint.sh
9 | COPY ./contrib/executor/jmeterd/scripts/jmeter-master.sh /executor_entrypoint_master.sh
10 |
11 | ENTRYPOINT ["/bin/runner"]
12 |
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/build/agent/local.Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 |
3 | FROM kubeshop/jmeter:5.5
4 |
5 | RUN microdnf update -y && microdnf install -y ca-certificates git && microdnf clean all
6 |
7 | WORKDIR /root/
8 |
9 | ENV ENTRYPOINT_CMD="/executor_entrypoint.sh"
10 |
11 | COPY dist/runner /bin/runner
12 | COPY scripts/entrypoint.sh /executor_entrypoint.sh
13 | COPY scripts/jmeter-master.sh /executor_entrypoint_master.sh
14 |
15 | ENTRYPOINT ["/bin/runner"]
16 |
17 |
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/build/slaves/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM kubeshop/jmeter:5.5
2 |
3 | # support logs permissions
4 | RUN mkdir -p /logs
5 | RUN chmod 777 /logs
6 |
7 | EXPOSE 1099 60001
8 | ENV SSL_DISABLED true
9 |
10 | COPY ./contrib/executor/jmeterd/scripts/jmeter-slaves.sh /jmeter_slaves_entrypoint.sh
11 | RUN chmod +x /jmeter_slaves_entrypoint.sh
12 | ENTRYPOINT /jmeter_slaves_entrypoint.sh
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/examples/executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: jmeterd-executor
5 | namespace: testkube
6 | spec:
7 | features:
8 | - artifacts
9 | image: kubeshop/testkube-jmeterd-executor:dev-008
10 | types:
11 | - jmeterd/test
12 |
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/examples/gitflow/csvdata/Credentials.csv:
--------------------------------------------------------------------------------
1 | USER_01,PASSWORD_01
USER_02,PASSWORD_02
USER_03,PASSWORD_03
USER_04,PASSWORD_04
USER_05,PASSWORD_05
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/examples/gitflow/plugins/JMeterPlugins-Extras.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/jmeterd/examples/gitflow/plugins/JMeterPlugins-Extras.jar
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/examples/gitflow/plugins/jmeter-parallel-0.11.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/jmeterd/examples/gitflow/plugins/jmeter-parallel-0.11.jar
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/examples/gitflow/plugins/jmeter-plugins-dummy-0.4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/jmeterd/examples/gitflow/plugins/jmeter-plugins-dummy-0.4.jar
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/examples/gitflow/plugins/jmeter-plugins-functions-2.2.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/jmeterd/examples/gitflow/plugins/jmeter-plugins-functions-2.2.jar
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/examples/gitflow/plugins/jmeter-plugins-manager-1.9.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/jmeterd/examples/gitflow/plugins/jmeter-plugins-manager-1.9.jar
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/examples/results.jtl:
--------------------------------------------------------------------------------
1 | timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
2 | 1667463814102,382,HTTP Request,200,OK,Thread Group 1-1,text,true,,66428,109,1,1,https://testkube.io,326,0,235
3 | 1667463836936,365,HTTP Request,200,OK,Thread Group 1-1,text,true,,66428,109,1,1,https://testkube.io,309,0,222
4 | 1667463838447,362,HTTP Request,200,OK,Thread Group 1-1,text,true,,66428,109,1,1,https://testkube.io,309,0,219
5 |
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/pkg/slaves/interface.go:
--------------------------------------------------------------------------------
1 | package slaves
2 |
3 | import "context"
4 |
5 | type Interface interface {
6 | CreateSlaves(ctx context.Context, count int) (SlaveMeta, error)
7 | DeleteSlaves(ctx context.Context, meta SlaveMeta) error
8 | }
9 |
--------------------------------------------------------------------------------
/contrib/executor/jmeterd/scripts/entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | if [ -f "/executor_entrypoint_master.sh" ];
4 | then
5 | echo "Executing custom entrypoint script at /entrypoint.sh"
6 | /executor_entrypoint_master.sh $@
7 | else
8 | echo "Executing JMeter command directly: jmeter $@"
9 | jmeter $@
10 | fi
11 |
12 |
--------------------------------------------------------------------------------
/contrib/executor/k6/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | Currently the following versions are being supported with security updates.
6 |
7 | | Version | Supported |
8 | | ------- | ------------------ |
9 | | 0.0.4 | :white_check_mark: |
10 |
11 | ## Reporting a Vulnerability
12 |
13 | Please report any vulnerability by raising a [GitHub issue](https://github.com/kubeshop/testkube-executor-k6/issues).
14 |
--------------------------------------------------------------------------------
/contrib/executor/k6/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM golang:1.23 as builder
2 | # # build k6 0.36.0 with prometheus support
3 | ENV K6_VERSION=v0.48.0
4 | RUN go install go.k6.io/xk6/cmd/xk6@v0.10.0 && xk6 build $K6_VERSION --with github.com/grafana/xk6-output-prometheus-remote@latest
5 |
6 | # syntax=docker/dockerfile:1
7 | FROM grafana/k6:0.48.0
8 | COPY k6 /bin/runner
9 | WORKDIR /home/k6
10 | COPY --from=builder /go/k6 /usr/bin/k6
11 | ENTRYPOINT ["/bin/runner"]
12 |
--------------------------------------------------------------------------------
/contrib/executor/k6/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/k6/examples/k6-executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: k6-executor
5 | namespace: testkube
6 | spec:
7 | executor_type: job
8 | # not best practice but for now we use latest
9 | image: kubeshop/testkube-k6-executor:latest
10 | # image: lreimer/testkube-k6-executor:latest
11 | types:
12 | - k6/script
13 | - k6/run
14 | - k6/cloud
15 |
--------------------------------------------------------------------------------
/contrib/executor/k6/examples/k6-test-environment.js:
--------------------------------------------------------------------------------
1 | import http from 'k6/http';
2 | import { sleep } from 'k6';
3 |
4 | export default function () {
5 | http.get(`https://${__ENV.TARGET_HOSTNAME}/testkube/`);
6 | sleep(1);
7 | }
8 |
--------------------------------------------------------------------------------
/contrib/executor/k6/examples/k6-test-failing-script.js:
--------------------------------------------------------------------------------
1 | import http from 'k6/http';
2 | import { check } from 'k6';
3 |
4 | export let options = {
5 | thresholds: {
6 | checks: ['rate>0.5'],
7 | },
8 | };
9 |
10 | export default function () {
11 | const baseURI = `${__ENV.API_URI || 'http://google.pl'}`;
12 |
13 | check(http.get(`${baseURI}/joke`), {
14 | 'joke should be about Chuck': r => r.body.includes("Chuck") // this should fail
15 | });
16 | }
17 |
--------------------------------------------------------------------------------
/contrib/executor/k6/examples/k6-test-script.js:
--------------------------------------------------------------------------------
1 | import http from 'k6/http';
2 | import { sleep } from 'k6';
3 |
4 | export default function () {
5 | http.get('https://docs.testkube.io');
6 | sleep(1);
7 | }
8 |
--------------------------------------------------------------------------------
/contrib/executor/kubepug/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
30 | .vscode
--------------------------------------------------------------------------------
/contrib/executor/kubepug/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/kubepug/pkg/runner/result.go:
--------------------------------------------------------------------------------
1 | package runner
2 |
3 | import (
4 | "encoding/json"
5 |
6 | kubepug "github.com/kubepug/kubepug/pkg/results"
7 | "github.com/pkg/errors"
8 | )
9 |
10 | // GetResult parses the output of a kubepug execution into a Result
11 | func GetResult(r string) (kubepug.Result, error) {
12 | var result kubepug.Result
13 | err := json.Unmarshal([]byte(r), &result)
14 | if err != nil {
15 | return result, errors.Errorf("could not unmarshal result %s: %v", r, err)
16 | }
17 | return result, nil
18 | }
19 |
--------------------------------------------------------------------------------
/contrib/executor/maven/build/agent/Dockerfile.jdk11:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM maven:3.8.6-jdk-11
3 | COPY maven /bin/runner
4 |
5 | RUN useradd -m -d /home/maven -s /bin/bash -u 1001 -r -g root maven
6 | ENV MAVEN_CONFIG "/home/maven/.m2"
7 | USER 1001
8 |
9 | # do no overwrite the entrypoint
10 | CMD ["/bin/runner"]
11 |
--------------------------------------------------------------------------------
/contrib/executor/maven/build/agent/Dockerfile.jdk17:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM maven:3.8.5-openjdk-17
3 | COPY maven /bin/runner
4 |
5 | RUN useradd -m -d /home/maven -s /bin/bash -u 1001 -r -g root maven
6 | ENV MAVEN_CONFIG "/home/maven/.m2"
7 | USER 1001
8 |
9 | # do no overwrite the entrypoint
10 | CMD ["/bin/runner"]
11 |
--------------------------------------------------------------------------------
/contrib/executor/maven/build/agent/Dockerfile.jdk18:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM maven:3.8.7-openjdk-18-slim
3 | COPY maven /bin/runner
4 |
5 | RUN useradd -m -d /home/maven -s /bin/bash -u 1001 -r -g root maven
6 | ENV MAVEN_CONFIG "/home/maven/.m2"
7 | USER 1001
8 |
9 | # do no overwrite the entrypoint
10 | CMD ["/bin/runner"]
11 |
--------------------------------------------------------------------------------
/contrib/executor/maven/build/agent/Dockerfile.jdk8:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM maven:3.8.6-openjdk-8
3 | COPY maven /bin/runner
4 |
5 | RUN useradd -m -d /home/maven -s /bin/bash -u 1001 -r -g root maven
6 | ENV MAVEN_CONFIG "/home/maven/.m2"
7 | USER 1001
8 |
9 | # do no overwrite the entrypoint
10 | CMD ["/bin/runner"]
11 |
--------------------------------------------------------------------------------
/contrib/executor/maven/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/maven/examples/hello-maven-jdk18/src/test/java/hello/maven/LibraryTest.java:
--------------------------------------------------------------------------------
1 | package hello.maven;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import static org.junit.jupiter.api.Assertions.*;
5 |
6 | class LibraryTest {
7 | @Test void runMavenTests() {
8 | String env = System.getenv("TESTKUBE_MAVEN");
9 | assertTrue(Boolean.parseBoolean(env), "TESTKUBE_MAVEN env should be true");
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/contrib/executor/maven/examples/hello-maven-jdk8/src/test/java/hello/maven/LibraryTest.java:
--------------------------------------------------------------------------------
1 | package hello.maven;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import static org.junit.jupiter.api.Assertions.*;
5 |
6 | class LibraryTest {
7 | @Test void runMavenTests() {
8 | String env = System.getenv("TESTKUBE_MAVEN");
9 | assertTrue(Boolean.parseBoolean(env), "TESTKUBE_MAVEN env should be true");
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/contrib/executor/maven/examples/hello-maven-settings/src/test/java/hello/maven/LibraryTest.java:
--------------------------------------------------------------------------------
1 | package hello.maven;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import static org.junit.jupiter.api.Assertions.*;
5 |
6 | class LibraryTest {
7 | @Test void runMavenTests() {
8 | String env = System.getenv("TESTKUBE_MAVEN");
9 | assertTrue(Boolean.parseBoolean(env), "TESTKUBE_MAVEN env should be true");
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/contrib/executor/maven/examples/hello-maven/src/test/java/hello/maven/LibraryTest.java:
--------------------------------------------------------------------------------
1 | package hello.maven;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import static org.junit.jupiter.api.Assertions.*;
5 |
6 | class LibraryTest {
7 | @Test void runMavenTests() {
8 | String env = System.getenv("TESTKUBE_MAVEN");
9 | assertTrue(Boolean.parseBoolean(env), "TESTKUBE_MAVEN env should be true");
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/contrib/executor/maven/examples/hello-mvnw/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/contrib/executor/maven/examples/hello-mvnw/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/contrib/executor/maven/examples/hello-mvnw/src/test/java/hello/maven/LibraryTest.java:
--------------------------------------------------------------------------------
1 | package hello.maven;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import static org.junit.jupiter.api.Assertions.*;
5 |
6 | class LibraryTest {
7 | @Test void runMavenWrapperTests() {
8 | String env = System.getenv("TESTKUBE_MAVEN_WRAPPER");
9 | assertTrue(Boolean.parseBoolean(env), "TESTKUBE_MAVEN_WRAPPER env should be true");
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/contrib/executor/maven/examples/maven-executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: maven-executor
5 | namespace: testkube
6 | spec:
7 | executor_type: job
8 | image: testkube/testkube-maven-executor:latest
9 | types:
10 | - maven/project
11 | - maven/test
12 | - maven/integration-test
13 |
--------------------------------------------------------------------------------
/contrib/executor/playwright/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
30 | .vscode
--------------------------------------------------------------------------------
/contrib/executor/playwright/build/agent/Dockerfile.npm:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM mcr.microsoft.com/playwright:v1.40.0-jammy
3 |
4 | RUN apt-get update && apt-get install -y zip
5 |
6 | COPY playwright /bin/runner
7 |
8 | RUN mkdir /home/runner
9 | WORKDIR /home/runner/
10 |
11 | ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=true
12 | ENV DEPENDENCY_MANAGER=npm
13 | ENV CI=1
14 | ENV PWTEST_SKIP_TEST_OUTPUT=1
15 |
16 | ENTRYPOINT ["/bin/runner"]
17 |
--------------------------------------------------------------------------------
/contrib/executor/playwright/build/agent/Dockerfile.pnpm:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 |
3 | FROM mcr.microsoft.com/playwright:v1.40.0-jammy
4 | RUN apt-get update && apt-get install -y zip
5 | RUN npm install -g pnpm
6 |
7 | COPY playwright /bin/runner
8 |
9 | RUN mkdir /home/runner
10 | WORKDIR /home/runner/
11 |
12 | ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=true
13 | ENV DEPENDENCY_MANAGER=pnpm
14 | ENV CI=1
15 | ENV PWTEST_SKIP_TEST_OUTPUT=1
16 |
17 | ENTRYPOINT ["/bin/runner"]
--------------------------------------------------------------------------------
/contrib/executor/playwright/build/agent/Dockerfile.yarn:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM mcr.microsoft.com/playwright:v1.40.0-jammy
3 |
4 | RUN apt-get update && apt-get install -y zip
5 |
6 | COPY playwright /bin/runner
7 |
8 | RUN mkdir /home/runner
9 | WORKDIR /home/runner/
10 |
11 | ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=true
12 | ENV DEPENDENCY_MANAGER=yarn
13 | ENV CI=1
14 | ENV PWTEST_SKIP_TEST_OUTPUT=1
15 |
16 | ENTRYPOINT ["/bin/runner"]
--------------------------------------------------------------------------------
/contrib/executor/playwright/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/playwright/examples/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "playwright-example-test",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {},
7 | "author": "",
8 | "license": "ISC",
9 | "devDependencies": {
10 | "@playwright/test": "latest"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/contrib/executor/postman/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
--------------------------------------------------------------------------------
/contrib/executor/postman/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM postman/newman:6.0.0-alpine
3 |
4 | COPY postman /bin/runner
5 | RUN npm install -g newman
6 | RUN apk --no-cache add ca-certificates git curl
7 |
8 | # support npm report permissions
9 | RUN mkdir -p /.npm
10 | RUN chmod 777 /.npm
11 | RUN chmod 777 /root/
12 | RUN chmod 777 /usr/local/lib/node_modules
13 | RUN chmod 777 /usr/local/bin
14 |
15 | WORKDIR /root/
16 | EXPOSE 8082
17 |
18 | USER 1001
19 |
20 | ENTRYPOINT ["/bin/runner"]
21 |
--------------------------------------------------------------------------------
/contrib/executor/postman/build/agent/Dockerfile.node21:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM node:21-alpine3.19
3 |
4 | COPY postman /bin/runner
5 | RUN npm install -g newman
6 | RUN apk --no-cache add ca-certificates git curl
7 |
8 | # support npm report permissions
9 | RUN mkdir -p /.npm
10 | RUN chmod 777 /.npm
11 | RUN chmod 777 /root/
12 | RUN chmod 777 /usr/local/lib/node_modules
13 | RUN chmod 777 /usr/local/bin
14 |
15 | WORKDIR /root/
16 | EXPOSE 8082
17 |
18 | USER 1001
19 |
20 | ENTRYPOINT ["/bin/runner"]
--------------------------------------------------------------------------------
/contrib/executor/postman/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/postman/pkg/runner/newman/executionresult.go:
--------------------------------------------------------------------------------
1 | package newman
2 |
3 | type NewmanExecutionResult struct {
4 | Output string
5 | Metadata ExecutionJSONResult
6 | }
7 |
--------------------------------------------------------------------------------
/contrib/executor/scraper/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
30 | .vscode
--------------------------------------------------------------------------------
/contrib/executor/scraper/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | ARG ALPINE_IMAGE
3 | FROM ${ALPINE_IMAGE}
4 | COPY scraper /bin/runner
5 | RUN apk --no-cache add ca-certificates git curl
6 | WORKDIR /root/
7 | ENTRYPOINT ["/bin/runner"]
8 |
--------------------------------------------------------------------------------
/contrib/executor/scraper/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/soapui/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM smartbear/soapuios-testrunner:5.7.2
3 | RUN apt-get update && apt-get install -y git \
4 | curl && \
5 | chmod 777 /usr/local/SmartBear && \
6 | useradd -m -d /home/soapui -s /bin/bash -u 1001 -r -g root soapui
7 |
8 | COPY soapui /bin/runner
9 | USER 1001
10 |
11 | ENTRYPOINT ["/bin/runner"]
12 |
--------------------------------------------------------------------------------
/contrib/executor/soapui/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/soapui/executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: soapui-executor
5 | namespace: testkube
6 | spec:
7 | executor_type: job
8 | image: kubeshop/testkube-executor-soapui:latest
9 | types:
10 | - soapui/xml
11 | content_types:
12 | - string
13 | - file-uri
14 | features:
15 | - artifacts
16 |
--------------------------------------------------------------------------------
/contrib/executor/soapui/pkg/mock/doc.go:
--------------------------------------------------------------------------------
1 | // Package mock contains all the mocks used in testing
2 | package mock
3 |
--------------------------------------------------------------------------------
/contrib/executor/soapui/pkg/mock/scraper.go:
--------------------------------------------------------------------------------
1 | package mock
2 |
3 | import "log"
4 |
5 | // Scraper implements a mock for the Scraper from "github.com/kubeshop/testkube/pkg/executor/scraper"
6 | type Scraper struct {
7 | ScrapeFn func(id string, directories []string) error
8 | }
9 |
10 | func (s Scraper) Scrape(id string, directories []string) error {
11 | if s.ScrapeFn == nil {
12 | log.Fatal("not implemented")
13 | }
14 | return s.ScrapeFn(id, directories)
15 | }
16 |
--------------------------------------------------------------------------------
/contrib/executor/soapui/pkg/runner/doc.go:
--------------------------------------------------------------------------------
1 | // Package runner implements the SoapUI-specific code of the executor.
2 | package runner
3 |
--------------------------------------------------------------------------------
/contrib/executor/template/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
30 | .vscode
--------------------------------------------------------------------------------
/contrib/executor/template/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | ARG ALPINE_IMAGE
3 | FROM ${ALPINE_IMAGE}
4 | COPY template /bin/runner
5 | RUN apk --no-cache add ca-certificates git curl
6 | WORKDIR /root/
7 | ENTRYPOINT ["/bin/runner"]
8 |
--------------------------------------------------------------------------------
/contrib/executor/template/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/tracetest/.gitignore:
--------------------------------------------------------------------------------
1 | ### Go template
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 |
9 | # Test binary, built with `go test -c`
10 | *.test
11 |
12 | # Output of the go coverage tool, specifically when used with LiteIDE
13 | *.out
14 |
15 | # Dependency directories (remove the comment below to include it)
16 | vendor/
17 |
18 | ### JetBrains
19 | .idea
20 | *.iml
21 |
22 | # Helm
23 | Chart.lock
24 |
25 | .DS_Store
26 | bin/
27 | site
28 | dist/
29 |
30 | .vscode
--------------------------------------------------------------------------------
/contrib/executor/tracetest/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | ARG ALPINE_IMAGE
3 | FROM ${ALPINE_IMAGE}
4 | RUN apk --no-cache add ca-certificates git curl bash
5 | RUN curl -L https://raw.githubusercontent.com/kubeshop/tracetest/main/install-cli.sh | bash
6 | WORKDIR /root/
7 | COPY tracetest /bin/runner
8 | ENTRYPOINT ["/bin/runner"]
--------------------------------------------------------------------------------
/contrib/executor/tracetest/build/agent/docker-bake.hcl:
--------------------------------------------------------------------------------
1 | // docker-bake.hcl
2 | target "docker-metadata-action" {}
3 |
4 | target "build" {
5 | inherits = ["docker-metadata-action"]
6 | context = "./"
7 | dockerfile = "build/agent/Dockerfile"
8 | platforms = [
9 | "linux/amd64",
10 | "linux/arm64",
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/contrib/executor/tracetest/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/tracetest/pkg/command/command.go:
--------------------------------------------------------------------------------
1 | package command
2 |
3 | import (
4 | "bytes"
5 | "os/exec"
6 | )
7 |
8 | func Run(command string, args ...string) ([]byte, error) {
9 | cmd := exec.Command(command, args...)
10 |
11 | var out bytes.Buffer
12 | cmd.Stdout = &out
13 |
14 | err := cmd.Run()
15 |
16 | return out.Bytes(), err
17 | }
18 |
--------------------------------------------------------------------------------
/contrib/executor/tracetest/pkg/testing/tracetest-config.yaml:
--------------------------------------------------------------------------------
1 | postgres:
2 | host: postgres
3 | user: postgres
4 | password: postgres
5 | port: 5432
6 | dbname: postgres
7 | params: sslmode=disable
8 |
--------------------------------------------------------------------------------
/contrib/executor/tracetest/pkg/testing/tracetest-provision.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | type: PollingProfile
3 | spec:
4 | name: Default
5 | strategy: periodic
6 | default: true
7 | periodic:
8 | retryDelay: 500ms
9 | timeout: 1m
10 |
11 | ---
12 | type: TestRunner
13 | spec:
14 | id: current
15 | name: default
16 | requiredGates:
17 | - test-specs
18 |
19 | ---
20 | type: DataStore
21 | spec:
22 | name: OpenTelemetry Collector pipeline
23 | type: otlp
24 | default: true
--------------------------------------------------------------------------------
/contrib/executor/zap/build/agent/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM softwaresecurityproject/zap-stable:2.14.0
3 | ENV ZAP_HOME /zap
4 | COPY zap /bin/runner
5 | ENTRYPOINT ["/bin/runner"]
--------------------------------------------------------------------------------
/contrib/executor/zap/cmd/tools/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/kubeshop/testkube/cmd/tools/commands"
4 |
5 | var (
6 | commit string
7 | version string
8 | builtBy string
9 | date string
10 | )
11 |
12 | func init() {
13 | // pass data from goreleaser to commands package
14 | commands.Version = version
15 | commands.BuiltBy = builtBy
16 | commands.Commit = commit
17 | commands.Date = date
18 | }
19 |
20 | func main() {
21 | commands.Execute()
22 | }
23 |
--------------------------------------------------------------------------------
/contrib/executor/zap/examples/zap-executor.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: zap-executor
5 | namespace: testkube
6 | spec:
7 | executor_type: job
8 | image: kubeshop/testkube-zap-executor:latest
9 | types:
10 | - zap/api
11 | - zap/baseline
12 | - zap/full
13 | features:
14 | - artifacts
15 |
--------------------------------------------------------------------------------
/contrib/executor/zap/zap/.gitignore:
--------------------------------------------------------------------------------
1 | wrk
2 | wrk/
--------------------------------------------------------------------------------
/depot.json:
--------------------------------------------------------------------------------
1 | {"id":"3cp8bwpbj0"}
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # Testkube docs
2 |
3 | You can find the docs here: https://docs.testkube.io
4 |
5 | ## Documentation has been moved
6 |
7 | **The documentation has been moved to [kubeshop/testkube-docs](https://github.com/kubeshop/testkube-docs) repository.**
8 |
--------------------------------------------------------------------------------
/internal/app/api/v1/debug.go:
--------------------------------------------------------------------------------
1 | package v1
2 |
3 | import (
4 | "github.com/gofiber/fiber/v2"
5 | )
6 |
7 | // GetDebugListenersHandler returns event logs
8 | func (s *TestkubeAPI) GetDebugListenersHandler() fiber.Handler {
9 | return func(c *fiber.Ctx) error {
10 | return c.JSON(s.Events.Listeners.Log())
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/internal/common/mode.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | import "errors"
4 |
5 | const (
6 | ModeStandalone = "standalone"
7 | ModeAgent = "agent"
8 | )
9 |
10 | var ErrNotSupported = errors.New("Feature is not supported in standalone mode")
11 |
--------------------------------------------------------------------------------
/internal/config/config_test.go:
--------------------------------------------------------------------------------
1 | package config
2 |
3 | import (
4 | "testing"
5 |
6 | "github.com/stretchr/testify/require"
7 | )
8 |
9 | func TestGet(t *testing.T) {
10 | assertion := require.New(t)
11 |
12 | cfg, err := Get()
13 | if err != nil {
14 | t.Errorf("Get() failed, expected nil, got %v", err)
15 | }
16 |
17 | assertion.NoError(err)
18 | assertion.IsType(&Config{}, cfg)
19 | }
20 |
--------------------------------------------------------------------------------
/internal/db-migrations/01_create_indexes.down.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "dropIndexes": "testresults",
4 | "index": ["id_1", "testsuite.name_1", "name_1", "status_1", "starttime_-1", "endtime_-1"]
5 | },
6 | {
7 | "dropIndexes": "results",
8 | "index": ["id_1", "testname_1", "name_1", "executionresult.status_1", "starttime_-1", "endtime_-1"]
9 | }
10 | ]
11 |
--------------------------------------------------------------------------------
/internal/db-migrations/02_execution_search_indexes.down.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "dropIndexes": "testresults",
4 | "index": ["testsuite.name_1_starttime-1", "testsuite.name_1_endtime-1"]
5 | },
6 | {
7 | "dropIndexes": "results",
8 | "index": ["testname_1_starttime-1", "testname_1_endtime-1"]
9 | }
10 | ]
11 |
--------------------------------------------------------------------------------
/internal/db-migrations/03_testworkflow_indexes.down.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "dropIndexes": "workflowresults",
4 | "index": [
5 | "workflow.name_1_statusat-1",
6 | "workflow.name_1_scheduledat-1",
7 | "id_1",
8 | "name_1",
9 | "result.status_1",
10 | "statusat_-1",
11 | "scheduledat_-1"
12 | ]
13 | }
14 | ]
--------------------------------------------------------------------------------
/internal/db-migrations/fs.go:
--------------------------------------------------------------------------------
1 | package db_migrations
2 |
3 | import "embed"
4 |
5 | //go:embed *.up.json *.down.json
6 | var MongoMigrationsFs embed.FS
7 |
--------------------------------------------------------------------------------
/internal/graphql/resolvers/resolver.go:
--------------------------------------------------------------------------------
1 | //go:generate go run github.com/99designs/gqlgen generate
2 |
3 | package resolvers
4 |
5 | import (
6 | "github.com/kubeshop/testkube/internal/graphql/services"
7 | )
8 |
9 | // This file will not be regenerated automatically.
10 | //
11 | // It serves as dependency injection for your app, add any dependencies you require here.
12 |
13 | type Resolver struct {
14 | ExecutorsService services.ExecutorsService
15 | }
16 |
--------------------------------------------------------------------------------
/internal/graphql/schemas/root.graphqls:
--------------------------------------------------------------------------------
1 | scalar Map
2 | scalar StringMap
3 |
4 | directive @goModel(model: String, models: [String!]) on OBJECT | INPUT_OBJECT | SCALAR | ENUM | INTERFACE | UNION
5 | directive @goField(forceResolver: Boolean, name: String) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION
6 | directive @goTag(key: String!, value: String) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION
7 |
8 | type Subscription
9 | type Query
10 |
--------------------------------------------------------------------------------
/internal/graphql/services/service_base.go:
--------------------------------------------------------------------------------
1 | package services
2 |
3 | import (
4 | "github.com/kubeshop/testkube/pkg/event/bus"
5 |
6 | "go.uber.org/zap"
7 | )
8 |
9 | type ServiceBase struct {
10 | Service
11 | }
12 |
13 | func (s *ServiceBase) Bus() bus.Bus {
14 | return s.Service.Bus()
15 | }
16 |
17 | func (s *ServiceBase) Logger() *zap.SugaredLogger {
18 | return s.Service.Logger()
19 | }
20 |
--------------------------------------------------------------------------------
/internal/graphql/tools.go:
--------------------------------------------------------------------------------
1 | //go:build tools
2 | // +build tools
3 |
4 | package graphql
5 |
6 | import (
7 | _ "github.com/99designs/gqlgen"
8 | _ "github.com/99designs/gqlgen/graphql/introspection"
9 | )
10 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "testkube",
3 | "lockfileVersion": 3,
4 | "requires": true,
5 | "packages": {}
6 | }
7 |
--------------------------------------------------------------------------------
/pkg/agent/utils.go:
--------------------------------------------------------------------------------
1 | package agent
2 |
3 | import (
4 | "context"
5 | "errors"
6 |
7 | "github.com/kubeshop/testkube/pkg/executor/output"
8 | )
9 |
10 | func GetDeprecatedLogStream(ctx context.Context, executionID string) (chan output.Output, error) {
11 | return nil, errors.New("deprecated features have been disabled")
12 | }
13 |
--------------------------------------------------------------------------------
/pkg/api/README.md:
--------------------------------------------------------------------------------
1 | # API models autogenerated from openapi spec
--------------------------------------------------------------------------------
/pkg/api/v1/client/apiconfig.go:
--------------------------------------------------------------------------------
1 | package client
2 |
3 | func NewAPIConfig(namespace, serviceName string, servicePort int) APIConfig {
4 | return APIConfig{
5 | Namespace: namespace,
6 | ServiceName: serviceName,
7 | ServicePort: servicePort,
8 | }
9 | }
10 |
11 | type APIConfig struct {
12 | // Namespace where testkube is installed
13 | Namespace string
14 | // API Server service name
15 | ServiceName string
16 | // API Server service port
17 | ServicePort int
18 | }
19 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/common.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | import (
4 | "fmt"
5 | "strings"
6 | )
7 |
8 | func MapToString(m map[string]string) string {
9 | labels := []string{}
10 | for k, v := range m {
11 | labels = append(labels, fmt.Sprintf("%s=%s", k, v))
12 | }
13 |
14 | return strings.Join(labels, ", ")
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_app_armor_profile.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type AppArmorProfile struct {
13 | Type_ string `json:"type,omitempty"`
14 | LocalhostProfile *BoxedString `json:"localhostProfile,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_artifact_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | import (
4 | "strconv"
5 | )
6 |
7 | type Artifacts []Artifact
8 |
9 | func (artifacts Artifacts) Table() (header []string, output [][]string) {
10 | header = []string{"Execution", "Name", "Size (KB)"}
11 | for _, e := range artifacts {
12 | output = append(output, []string{
13 | e.ExecutionName,
14 | e.Name,
15 | strconv.FormatInt(int64(e.Size), 10),
16 | })
17 | }
18 |
19 | return
20 | }
21 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_artifact_updt_request_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | // IsEmpty check if request is empty
4 | func (a *ArtifactUpdateRequest) IsEmpty() bool {
5 | if a.StorageClassName != nil || a.VolumeMountPath != nil || a.Dirs != nil || a.Masks != nil ||
6 | a.StorageBucket != nil || a.OmitFolderPerExecution != nil || a.SharedBetweenPods != nil ||
7 | a.UseDefaultStorageClassName != nil || a.SidecarScraper != nil {
8 | return false
9 | }
10 |
11 | return true
12 | }
13 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_boxed_boolean.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type BoxedBoolean struct {
13 | Value bool `json:"value"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_boxed_integer.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type BoxedInteger struct {
13 | Value int32 `json:"value"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_boxed_string.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type BoxedString struct {
13 | Value string `json:"value"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_boxed_string_list.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type BoxedStringList struct {
13 | Value []string `json:"value"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_config_map_env_source.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type ConfigMapEnvSource struct {
13 | Name string `json:"name"`
14 | Optional bool `json:"optional,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_debug_info_execution_logs.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type DebugInfoExecutionLogs struct {
13 | Items string `json:"items,omitempty"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_debug_info_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | // Table builds up a table from parts of the DebugInfo that are short and easy to read - no logs
4 | func (d DebugInfo) Table() (header []string, output [][]string) {
5 | header = []string{"Client Version", "Server Version", "Cluster Version"}
6 | output = make([][]string, 0)
7 |
8 | row := []string{d.ClientVersion, d.ServerVersion, d.ClusterVersion}
9 | output = append(output, row)
10 |
11 | return header, output
12 | }
13 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_execution_result_reports.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type ExecutionResultReports struct {
13 | Junit string `json:"junit,omitempty"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_executor_details_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | type ExecutorsDetails []ExecutorDetails
4 |
5 | func (list ExecutorsDetails) Table() (header []string, output [][]string) {
6 | header = []string{"Name", "URI", "Labels"}
7 |
8 | for _, e := range list {
9 | output = append(output, []string{
10 | e.Name,
11 | e.Executor.Uri,
12 | MapToString(e.Executor.Labels),
13 | })
14 | }
15 |
16 | return
17 | }
18 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_executor_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | import "fmt"
4 |
5 | func (e *Executor) QuoteExecutorTextFields() {
6 | if e.JobTemplate != "" {
7 | e.JobTemplate = fmt.Sprintf("%q", e.JobTemplate)
8 | }
9 |
10 | for i := range e.Command {
11 | if e.Command[i] != "" {
12 | e.Command[i] = fmt.Sprintf("%q", e.Command[i])
13 | }
14 | }
15 |
16 | for i := range e.Args {
17 | if e.Args[i] != "" {
18 | e.Args[i] = fmt.Sprintf("%q", e.Args[i])
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_executor_meta_updt_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | // IsEmpty check if request is empty
4 | func (e *ExecutorMetaUpdate) IsEmpty() bool {
5 | if e.IconURI != nil || e.DocsURI != nil || e.Tooltips != nil {
6 | return false
7 | }
8 |
9 | return true
10 | }
11 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_features.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type Features struct {
13 | // Log processing version 2
14 | LogsV2 bool `json:"logsV2"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_grpc_action.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type GrpcAction struct {
13 | Port int32 `json:"port,omitempty"`
14 | Service *BoxedString `json:"service,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_host_alias.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type HostAlias struct {
13 | Ip string `json:"ip,omitempty"`
14 | Hostnames []string `json:"hostnames,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_http_header.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type HttpHeader struct {
13 | Name string `json:"name,omitempty"`
14 | Value string `json:"value,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_local_object_reference.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // Reference to Kubernetes object
13 | type LocalObjectReference struct {
14 | Name string `json:"name,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_log_v1.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // Log format version 1
13 | type LogV1 struct {
14 | Result *ExecutionResult `json:"result,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_node_selector.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type NodeSelector struct {
13 | NodeSelectorTerms []NodeSelectorTerm `json:"nodeSelectorTerms,omitempty"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_object_ref.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type ObjectRef struct {
13 | // object kubernetes namespace
14 | Namespace string `json:"namespace,omitempty"`
15 | // object name
16 | Name string `json:"name"`
17 | }
18 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_pod_dns_config_option.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type PodDnsConfigOption struct {
13 | Name string `json:"name,omitempty"`
14 | Value *BoxedString `json:"value,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_pod_resource_claim.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type PodResourceClaim struct {
13 | Name string `json:"name,omitempty"`
14 | Source *ClaimSource `json:"source,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_pod_scheduling_gate.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type PodSchedulingGate struct {
13 | Name string `json:"name,omitempty"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_preferred_scheduling_term.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type PreferredSchedulingTerm struct {
13 | Weight int32 `json:"weight,omitempty"`
14 | Preference *NodeSelectorTerm `json:"preference"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_seccomp_profile.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type SeccompProfile struct {
13 | Type_ string `json:"type,omitempty"`
14 | LocalhostProfile *BoxedString `json:"localhostProfile,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_secret_env_source.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type SecretEnvSource struct {
13 | Name string `json:"name"`
14 | Optional bool `json:"optional,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_secret_ref_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | // IsEmpty check if secret ref is empty
4 | func (s *SecretRef) IsEmpty() bool {
5 | if s.Namespace != "" || s.Name != "" || s.Key != "" {
6 | return false
7 | }
8 |
9 | return true
10 | }
11 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_slaves_meta.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // Slave data for executing tests in distributed environment
13 | type SlavesMeta struct {
14 | // slave image
15 | Image string `json:"image"`
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_sysctl.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type Sysctl struct {
13 | Name string `json:"name,omitempty"`
14 | Value string `json:"value,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_tcp_socket_action.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type TcpSocketAction struct {
13 | Port string `json:"port,omitempty"`
14 | Host string `json:"host,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test+workflow_spec_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | func (t TestWorkflowSpec) GetRequiredParameters() []string {
4 | keys := make([]string, 0)
5 |
6 | for key, value := range t.Config {
7 | if value.Default_ == nil {
8 | keys = append(keys, key)
9 | }
10 | }
11 |
12 | return keys
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_content_request.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // test content request body
13 | type TestContentRequest struct {
14 | Repository *RepositoryParameters `json:"repository,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_content_update_request.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // test content update request body
13 | type TestContentUpdateRequest struct {
14 | Repository **RepositoryUpdateParameters `json:"repository,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_source_batch_request.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // Test source batch request
13 | type TestSourceBatchRequest struct {
14 | Batch []TestSourceUpsertRequest `json:"batch"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_status.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // test status
13 | type TestStatus struct {
14 | LatestExecution *ExecutionCore `json:"latestExecution,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_suite_status.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // test suite status
13 | type TestSuiteStatus struct {
14 | LatestExecution *TestSuiteExecutionCore `json:"latestExecution,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_suite_step_delay_v2.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type TestSuiteStepDelayV2 struct {
13 | // delay duration in milliseconds
14 | Duration int32 `json:"duration"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_suite_step_delay_v2_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | import "fmt"
4 |
5 | func (s TestSuiteStepDelayV2) FullName() string {
6 | return fmt.Sprintf("delay %dms", s.Duration)
7 | }
8 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_suite_step_execute_test_v2_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | import "fmt"
4 |
5 | func (s TestSuiteStepExecuteTestV2) FullName() string {
6 | return fmt.Sprintf("run:%s", s.Name)
7 | }
8 |
9 | func (s TestSuiteStepExecuteTestV2) GetObjectRef() *ObjectRef {
10 | return &ObjectRef{
11 | Name: s.Name,
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_suite_step_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | func (s TestSuiteStep) Type() *TestSuiteStepType {
4 | if s.Test != "" {
5 | return TestSuiteStepTypeExecuteTest
6 | }
7 | if s.Delay != "" {
8 | return TestSuiteStepTypeDelay
9 | }
10 | return nil
11 | }
12 |
13 | func (s TestSuiteStep) FullName() string {
14 | switch s.Type() {
15 | case TestSuiteStepTypeDelay:
16 | return s.Delay
17 | case TestSuiteStepTypeExecuteTest:
18 | return s.Test
19 | default:
20 | return "unknown"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_suite_step_type_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | func TestSuiteStepTypePtr(stepType TestSuiteStepType) *TestSuiteStepType {
4 | return &stepType
5 | }
6 |
7 | var (
8 | TestSuiteStepTypeExecuteTest = TestSuiteStepTypePtr(EXECUTE_TEST_TestSuiteStepType)
9 | TestSuiteStepTypeDelay = TestSuiteStepTypePtr(DELAY_TestSuiteStepType)
10 | )
11 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_workflow_event.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type TestWorkflowEvent struct {
13 | Cronjob *TestWorkflowCronJobConfig `json:"cronjob,omitempty"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_workflow_execution_tags.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type TestWorkflowExecutionTags struct {
13 | Tags map[string]string `json:"tags,omitempty"`
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_workflow_ref.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type TestWorkflowRef struct {
13 | // TestWorkflow name to include
14 | Name string `json:"name"`
15 | Config map[string]string `json:"config,omitempty"`
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_workflow_status_summary.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // test workflow status
13 | type TestWorkflowStatusSummary struct {
14 | LatestExecution *TestWorkflowExecutionSummary `json:"latestExecution,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_test_workflow_step_artifacts_compression.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type TestWorkflowStepArtifactsCompression struct {
13 | // artifact name
14 | Name string `json:"name,omitempty"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_variable_type.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type VariableType string
13 |
14 | // List of VariableType
15 | const (
16 | BASIC_VariableType VariableType = "basic"
17 | SECRET_VariableType VariableType = "secret"
18 | )
19 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_variable_type_extended.go:
--------------------------------------------------------------------------------
1 | package testkube
2 |
3 | func VariableTypePtr(stepType VariableType) *VariableType {
4 | return &stepType
5 | }
6 |
7 | var VariableTypeBasic = VariableTypePtr(BASIC_VariableType)
8 | var VariableTypeSecret = VariableTypePtr(SECRET_VariableType)
9 |
10 | func VariableTypeString(ptr *VariableType) string {
11 | return string(*ptr)
12 | }
13 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_volume_source.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type VolumeSource struct {
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_webhook_config_value.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | // configuration value
13 | type WebhookConfigValue struct {
14 | Value *BoxedString `json:"value,omitempty"`
15 | Secret *SecretRef `json:"secret,omitempty"`
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/api/v1/testkube/model_webhook_template_ref.go:
--------------------------------------------------------------------------------
1 | /*
2 | * Testkube API
3 | *
4 | * Testkube provides a Kubernetes-native framework for test definition, execution and results
5 | *
6 | * API version: 1.0.0
7 | * Contact: testkube@kubeshop.io
8 | * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
9 | */
10 | package testkube
11 |
12 | type WebhookTemplateRef struct {
13 | // webhook template name to use
14 | Name string `json:"name"`
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/archive/archive.go:
--------------------------------------------------------------------------------
1 | package archive
2 |
3 | import (
4 | "bytes"
5 | "io"
6 | "time"
7 | )
8 |
9 | type Archive interface {
10 | Create(out io.Writer, files []*File) error
11 | Extract(in io.Reader) ([]*File, error)
12 | }
13 |
14 | type File struct {
15 | Name string
16 | Size int64
17 | Mode int64
18 | ModTime time.Time
19 | Data *bytes.Buffer
20 | }
21 |
--------------------------------------------------------------------------------
/pkg/cloud/client/client_mock_test.go:
--------------------------------------------------------------------------------
1 | package client
2 |
3 | import (
4 | "bytes"
5 | "io"
6 | "net/http"
7 | )
8 |
9 | type ClientMock struct {
10 | body []byte
11 | err error
12 | validateRequestFunc func(req *http.Request) error
13 | }
14 |
15 | func (c ClientMock) Do(req *http.Request) (*http.Response, error) {
16 | err := c.validateRequestFunc(req)
17 | if err != nil {
18 | return nil, err
19 | }
20 | return &http.Response{
21 | Body: io.NopCloser(bytes.NewReader(c.body)),
22 | }, c.err
23 | }
24 |
--------------------------------------------------------------------------------
/pkg/cloud/data/artifact/commands.go:
--------------------------------------------------------------------------------
1 | package artifact
2 |
3 | import "github.com/kubeshop/testkube/pkg/cloud/data/executor"
4 |
5 | const (
6 | CmdArtifactsListFiles executor.Command = "artifacts.listFiles"
7 | CmdArtifactsDownloadFile executor.Command = "artifacts.downloadFile"
8 | )
9 |
--------------------------------------------------------------------------------
/pkg/cloud/data/config/commands.go:
--------------------------------------------------------------------------------
1 | package config
2 |
3 | import "github.com/kubeshop/testkube/pkg/cloud/data/executor"
4 |
5 | const (
6 | CmdConfigGetUniqueClusterId executor.Command = "get_unique_cluster_id"
7 | CmdConfigGetTelemetryEnabled executor.Command = "get_telemetry_enabled"
8 | CmdConfigGet executor.Command = "get"
9 | CmdConfigUpsert executor.Command = "upsert"
10 | CmdConfigGetOrganizationPlan executor.Command = "get_org_plan"
11 | )
12 |
--------------------------------------------------------------------------------
/pkg/cloud/data/webhook/commands.go:
--------------------------------------------------------------------------------
1 | package webhook
2 |
3 | import "github.com/kubeshop/testkube/pkg/cloud/data/executor"
4 |
5 | const (
6 | CmdWebhookExecutionCollectResult executor.Command = "webhook_execution_collect_result"
7 | )
8 |
--------------------------------------------------------------------------------
/pkg/controlplaneclient/errors.go:
--------------------------------------------------------------------------------
1 | package controlplaneclient
2 |
3 | import "errors"
4 |
5 | var (
6 | ErrNotSupported = errors.New("operation not supported in this version")
7 | )
8 |
--------------------------------------------------------------------------------
/pkg/crd/templates/template.tmpl:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v1
2 | kind: Template
3 | metadata:
4 | name: {{ .Name }}
5 | namespace: {{ .Namespace }}
6 | {{- if ne (len .Labels) 0 }}
7 | labels:
8 | {{- range $key, $value := .Labels }}
9 | {{ $key }}: {{ $value }}
10 | {{- end }}
11 | {{- end }}
12 | spec:
13 | {{- if .Type_ }}
14 | type: {{ .Type_ }}
15 | {{- end }}
16 | {{- if .Body }}
17 | body: {{ .Body }}
18 | {{- end }}
19 |
20 |
--------------------------------------------------------------------------------
/pkg/diagnostics/renderer/interface.go:
--------------------------------------------------------------------------------
1 | package renderer
2 |
3 | import "github.com/kubeshop/testkube/pkg/diagnostics/validators"
4 |
5 | type Renderer interface {
6 | RenderGroupStart(group string)
7 | RenderResult(validators.ValidationResult)
8 | RenderProgress(message string)
9 | }
10 |
--------------------------------------------------------------------------------
/pkg/diagnostics/validators/deps/utils.go:
--------------------------------------------------------------------------------
1 | package deps
2 |
3 | import (
4 | "os"
5 | "os/exec"
6 | )
7 |
8 | func checkFileExists(fileName string) bool {
9 | path, err := exec.LookPath(fileName)
10 | if err != nil {
11 | return false
12 | }
13 | _, err = os.Stat(path)
14 | return !os.IsNotExist(err)
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/diagnostics/validators/group.go:
--------------------------------------------------------------------------------
1 | package validators
2 |
3 | // ValidatorGroup to organize validators around given subject e.g. "License Key"
4 | type ValidatorGroup struct {
5 | Subject any
6 | Name string
7 | Validators []Validator
8 | }
9 |
10 | // AddValidator adds a new validator to the group
11 | func (vg *ValidatorGroup) AddValidator(v Validator) {
12 | vg.Validators = append(vg.Validators, v)
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/diagnostics/validators/interface.go:
--------------------------------------------------------------------------------
1 | package validators
2 |
3 | // Validator interface defines the Validate method for validation logic
4 | type Validator interface {
5 | // Validate runs validation logic against subject
6 | Validate(subject any) ValidationResult
7 | Name() string
8 | }
9 |
--------------------------------------------------------------------------------
/pkg/diagnostics/validators/license/validator_test.go:
--------------------------------------------------------------------------------
1 | package license
2 |
3 | import (
4 | "regexp"
5 | "testing"
6 |
7 | "github.com/stretchr/testify/assert"
8 | )
9 |
10 | func TestRegexp(t *testing.T) {
11 | key := "8D9E74-444441-DEF387-31EE50-5F2A2E-V3"
12 | match, _ := regexp.MatchString(`^([^-]{6}-){5}[^-]{2}$`, key)
13 | assert.True(t, match)
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/diagnostics/validators/mock/invalid.go:
--------------------------------------------------------------------------------
1 | package mock
2 |
3 | import v "github.com/kubeshop/testkube/pkg/diagnostics/validators"
4 |
5 | type AlwaysInvalidValidator struct {
6 | Name string
7 | }
8 |
9 | func (val AlwaysInvalidValidator) Validate(subject any) v.ValidationResult {
10 | return v.NewResult().WithError(v.Err("Some error", v.ErrorKindCustom)).WithValidator("Always invalid " + val.Name)
11 | }
12 |
--------------------------------------------------------------------------------
/pkg/diagnostics/validators/mock/valid.go:
--------------------------------------------------------------------------------
1 | package mock
2 |
3 | import v "github.com/kubeshop/testkube/pkg/diagnostics/validators"
4 |
5 | type AlwaysValidValidator struct {
6 | Name string
7 | }
8 |
9 | func (val AlwaysValidValidator) Validate(subject any) v.ValidationResult {
10 | return v.NewResult().WithValidStatus().WithValidator("Always valid " + val.Name)
11 | }
12 |
--------------------------------------------------------------------------------
/pkg/diagnostics/validators/requirements.go:
--------------------------------------------------------------------------------
1 | package validators
2 |
3 | const (
4 | // Minimal required versions
5 | RequiredHelmVersion = "3.0.0"
6 | RequiredKubectlVersion = "1.0.0"
7 | RequiredKubernetesVersion = "1.0.0"
8 | )
9 |
--------------------------------------------------------------------------------
/pkg/event/bus/interface.go:
--------------------------------------------------------------------------------
1 | package bus
2 |
3 | import "github.com/kubeshop/testkube/pkg/api/v1/testkube"
4 |
5 | type Handler func(event testkube.Event) error
6 |
7 | type Bus interface {
8 | Publish(event testkube.Event) error
9 | Subscribe(queue string, handler Handler) error
10 | Unsubscribe(queue string) error
11 |
12 | PublishTopic(topic string, event testkube.Event) error
13 | SubscribeTopic(topic string, queue string, handler Handler) error
14 |
15 | Close() error
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/event/kind/cdevent/loader_test.go:
--------------------------------------------------------------------------------
1 | package cdevent
2 |
3 | import (
4 | "testing"
5 |
6 | "github.com/stretchr/testify/assert"
7 | )
8 |
9 | func TestCDEventLoader(t *testing.T) {
10 | t.Parallel()
11 |
12 | cdeventLoader, err := NewCDEventLoader("target", "", "", "", nil)
13 | assert.NoError(t, err)
14 |
15 | listeners, err := cdeventLoader.Load()
16 |
17 | assert.Equal(t, 1, len(listeners))
18 | assert.NoError(t, err)
19 | }
20 |
--------------------------------------------------------------------------------
/pkg/event/kind/common/name.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | import (
4 | "log"
5 | "regexp"
6 | )
7 |
8 | // ListenerName returns name of listener which can be used by event bus to identify listener
9 | func ListenerName(in string) string {
10 | reg, err := regexp.Compile("[^A-Za-z0-9.]+")
11 | if err != nil {
12 | log.Fatal(err)
13 | }
14 | return reg.ReplaceAllString(in, "")
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/event/kind/common/name_test.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | import (
4 | "testing"
5 |
6 | "github.com/stretchr/testify/assert"
7 | )
8 |
9 | func TestListenerName(t *testing.T) {
10 | t.Parallel()
11 | // given
12 | in := "webhooks.http://localhost:8080/something/else.start-test"
13 |
14 | // when
15 | result := ListenerName(in)
16 |
17 | // then
18 | assert.Equal(t, "webhooks.httplocalhost8080somethingelse.starttest", result)
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/pkg/event/kind/k8sevent/loader_test.go:
--------------------------------------------------------------------------------
1 | package k8sevent
2 |
3 | import (
4 | "testing"
5 |
6 | "github.com/stretchr/testify/assert"
7 | "k8s.io/client-go/kubernetes/fake"
8 | )
9 |
10 | func TestK8sLoader(t *testing.T) {
11 | t.Parallel()
12 |
13 | clientset := fake.NewSimpleClientset()
14 | k8seventLoader := NewK8sEventLoader(clientset, "", nil)
15 |
16 | listeners, err := k8seventLoader.Load()
17 |
18 | assert.Equal(t, 1, len(listeners))
19 | assert.NoError(t, err)
20 | }
21 |
--------------------------------------------------------------------------------
/pkg/event/kind/websocket/websocket.go:
--------------------------------------------------------------------------------
1 | package websocket
2 |
3 | import (
4 | "github.com/gofiber/websocket/v2"
5 |
6 | "github.com/kubeshop/testkube/pkg/api/v1/testkube"
7 | )
8 |
9 | type Websocket struct {
10 | Id string
11 | Conn *websocket.Conn
12 | Selector string
13 | Events []testkube.EventType
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/event/lazy.go:
--------------------------------------------------------------------------------
1 | package event
2 |
3 | import "github.com/kubeshop/testkube/pkg/api/v1/testkube"
4 |
5 | type lazyEventEmitter[T Interface] struct {
6 | accessor *T
7 | }
8 |
9 | func Lazy[T Interface](accessor *T) Interface {
10 | return &lazyEventEmitter[T]{accessor: accessor}
11 | }
12 |
13 | func (l *lazyEventEmitter[T]) Notify(event testkube.Event) {
14 | (*l.accessor).Notify(event)
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/executor/client/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/pkg/executor/client/.keep
--------------------------------------------------------------------------------
/pkg/executor/scraper/scrapertypes/uploader.go:
--------------------------------------------------------------------------------
1 | package scrapertypes
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/kubeshop/testkube/pkg/api/v1/testkube"
7 | )
8 |
9 | //go:generate mockgen -destination=./mock_uploader.go -package=scrapertypes "github.com/kubeshop/testkube/pkg/executor/scraper/scrapertypes" Uploader
10 | type Uploader interface {
11 | Upload(ctx context.Context, object *Object, execution testkube.Execution) error
12 | Close() error
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/expressions/intstr.go:
--------------------------------------------------------------------------------
1 | package expressions
2 |
3 | // These functions are to avoid bundling k8s when only expressions are used.
4 | // It's to be able to work with intstr.IntOrString, without accessing its struct.
5 |
6 | type IntOrStringLike interface {
7 | OpenAPISchemaType() []string
8 | OpenAPISchemaFormat() string
9 | OpenAPIV3OneOfTypes() []string
10 | }
11 |
12 | func IsIntOrStringType(v any) bool {
13 | vv, ok := v.(IntOrStringLike)
14 | return ok && vv.OpenAPISchemaFormat() == "int-or-string"
15 | }
16 |
--------------------------------------------------------------------------------
/pkg/featureflags/featureflags.go:
--------------------------------------------------------------------------------
1 | package featureflags
2 |
3 | import (
4 | "github.com/kelseyhightower/envconfig"
5 | )
6 |
7 | type FeatureFlags struct {
8 | LogsV2 bool `envconfig:"FF_LOGS_V2" default:"false"`
9 | }
10 |
11 | func Get() (ff FeatureFlags, err error) {
12 | if err := envconfig.Process("", &ff); err != nil {
13 | return ff, err
14 | }
15 | return
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/git/checkout_test.go:
--------------------------------------------------------------------------------
1 | package git
2 |
3 | import (
4 | "testing"
5 |
6 | "github.com/stretchr/testify/assert"
7 | )
8 |
9 | func TestCheckOut(t *testing.T) {
10 | t.Skip("TODO implement me")
11 |
12 | repo := "https://github.com/cirosantilli/test-git-partial-clone-big-small"
13 |
14 | dir, err := PartialCheckout(repo, "", "small", "master", "", "")
15 | t.Logf("partial repo checkedout to dir: %s", dir)
16 | assert.NoError(t, err)
17 | t.Fail()
18 | }
19 |
--------------------------------------------------------------------------------
/pkg/http/interface.go:
--------------------------------------------------------------------------------
1 | package http
2 |
3 | import "net/http"
4 |
5 | type HttpClient interface {
6 | Do(req *http.Request) (*http.Response, error)
7 | }
8 |
--------------------------------------------------------------------------------
/pkg/logs/config/logs_config_test.go:
--------------------------------------------------------------------------------
1 | package config
2 |
3 | import (
4 | "os"
5 | "testing"
6 |
7 | "github.com/stretchr/testify/assert"
8 | )
9 |
10 | func TestGet(t *testing.T) {
11 | t.Parallel()
12 |
13 | os.Setenv("NATS_URI", "aaa")
14 | defer os.Unsetenv("NATS_URI")
15 | cfg, err := Get()
16 | assert.Equal(t, "aaa", cfg.NatsURI)
17 | assert.NoError(t, err, "getting config not return error")
18 | }
19 |
--------------------------------------------------------------------------------
/pkg/logs/state/nats.go:
--------------------------------------------------------------------------------
1 | package state
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/nats-io/nats.go/jetstream"
7 | )
8 |
9 | // KV is type implicitly interfaced from NATS
10 | type NatsKV interface {
11 | Get(ctx context.Context, key string) (jetstream.KeyValueEntry, error)
12 | Put(ctx context.Context, key string, value []byte) (uint64, error)
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/mapper/common/kube_openapi.go:
--------------------------------------------------------------------------------
1 | package commonmapper
2 |
3 | import (
4 | commonv1 "github.com/kubeshop/testkube-operator/api/common/v1"
5 | "github.com/kubeshop/testkube/pkg/api/v1/testkube"
6 | )
7 |
8 | func MapTargetKubeToAPI(v commonv1.Target) testkube.ExecutionTarget {
9 | return testkube.ExecutionTarget{
10 | Match: v.Match,
11 | Not: v.Not,
12 | Replicate: v.Replicate,
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/mapper/common/openapi_kube.go:
--------------------------------------------------------------------------------
1 | package commonmapper
2 |
3 | import (
4 | commonv1 "github.com/kubeshop/testkube-operator/api/common/v1"
5 | "github.com/kubeshop/testkube/pkg/api/v1/testkube"
6 | )
7 |
8 | func MapTargetApiToKube(v testkube.ExecutionTarget) commonv1.Target {
9 | return commonv1.Target{
10 | Match: v.Match,
11 | Not: v.Not,
12 | Replicate: v.Replicate,
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/oauth/interface.go:
--------------------------------------------------------------------------------
1 | package oauth
2 |
3 | import "golang.org/x/oauth2"
4 |
5 | // ProviderType is provider type
6 | type ProviderType string
7 |
8 | const (
9 | // GithubProviderType is github provider type
10 | GithubProviderType ProviderType = "github"
11 | )
12 |
13 | // Validator describes ouath validation methods
14 | type Validator interface {
15 | // Validate validates oauth token
16 | Validate(accessToken string) error
17 | // GetEndpoint returns oauth endpoint
18 | GetEndpoint() oauth2.Endpoint
19 | }
20 |
--------------------------------------------------------------------------------
/pkg/problem/problem.go:
--------------------------------------------------------------------------------
1 | package problem
2 |
3 | import (
4 | "github.com/moogar0880/problems"
5 | )
6 |
7 | // Porblem is struct defining RFC7807 Problem Details
8 | type Problem problems.DefaultProblem
9 |
10 | func New(status int, details string) Problem {
11 | pr := problems.NewDetailedProblem(status, details)
12 | return Problem(*pr)
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/rand/names.go:
--------------------------------------------------------------------------------
1 | package rand
2 |
3 | import (
4 | petname "github.com/dustinkirkland/golang-petname"
5 | )
6 |
7 | // Name return random 3 part string similar to Docker image names, separated by `-`
8 | func Name() string {
9 | return petname.Generate(3, "-")
10 | }
11 |
--------------------------------------------------------------------------------
/pkg/rand/string.go:
--------------------------------------------------------------------------------
1 | package rand
2 |
3 | import "math/rand"
4 |
5 | var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
6 |
7 | // String returns random `n`-size string
8 | func String(n int) string {
9 | b := make([]rune, n)
10 | for i := range b {
11 | b[i] = letters[rand.Intn(len(letters))]
12 | }
13 | return string(b)
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/runner/utils.go:
--------------------------------------------------------------------------------
1 | package runner
2 |
3 | import (
4 | "time"
5 | )
6 |
7 | func retry(count int, delayBase time.Duration, fn func() error) (err error) {
8 | for i := 0; i < count; i++ {
9 | err = fn()
10 | if err == nil {
11 | return nil
12 | }
13 | time.Sleep(time.Duration(i) * delayBase)
14 | }
15 | return err
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/server/config.go:
--------------------------------------------------------------------------------
1 | package server
2 |
3 | import (
4 | "fmt"
5 |
6 | "github.com/gofiber/fiber/v2"
7 | )
8 |
9 | // Config for HTTP server
10 | type Config struct {
11 | Port int
12 | Http fiber.Config
13 | }
14 |
15 | // Addr returns port based address
16 | func (c Config) Addr() string {
17 | return fmt.Sprintf(":%d", c.Port)
18 | }
19 |
--------------------------------------------------------------------------------
/pkg/server/endpoints.go:
--------------------------------------------------------------------------------
1 | package server
2 |
3 | import "github.com/gofiber/fiber/v2"
4 |
5 | // HealthEndpoint for health checks
6 | func (s HTTPServer) HealthEndpoint() fiber.Handler {
7 | return func(c *fiber.Ctx) error {
8 | return c.SendString("OK 👋!")
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/pkg/storage/minio/helpers.go:
--------------------------------------------------------------------------------
1 | package minio
2 |
3 | func GetTLSOptions(ssl, skipVerify bool, certFile, keyFile, caFile string) []Option {
4 | var opts []Option
5 | if ssl {
6 | if skipVerify {
7 | opts = append(opts, Insecure())
8 | } else {
9 | opts = append(opts, ClientCert(certFile, keyFile))
10 | if caFile != "" {
11 | opts = append(opts, RootCAs(caFile))
12 | }
13 | }
14 | }
15 | return opts
16 | }
17 |
--------------------------------------------------------------------------------
/pkg/tcl/README.md:
--------------------------------------------------------------------------------
1 | # Testkube - TCL Package
2 |
3 | This folder contains special code with the Testkube Community license.
4 |
5 | ## License
6 |
7 | The code in this folder is licensed under the Testkube Community License. Please see the [LICENSE](../../licenses/TCL.txt) file for more information.
8 |
--------------------------------------------------------------------------------
/pkg/testworkflows/executionworker/controller/channel.go:
--------------------------------------------------------------------------------
1 | package controller
2 |
3 | type ChannelMessage[T any] struct {
4 | Error error
5 | Value T
6 | }
7 |
--------------------------------------------------------------------------------
/pkg/testworkflows/executionworker/registry/errors.go:
--------------------------------------------------------------------------------
1 | package registry
2 |
3 | import "errors"
4 |
5 | var (
6 | ErrResourceNotFound = errors.New("resource not found")
7 | ErrPodIpNotAssigned = errors.New("selected pod does not have IP assigned")
8 | )
9 |
--------------------------------------------------------------------------------
/pkg/triggers/util.go:
--------------------------------------------------------------------------------
1 | package triggers
2 |
3 | import (
4 | "time"
5 |
6 | core_v1 "k8s.io/api/core/v1"
7 | )
8 |
9 | func findContainer(containers []core_v1.Container, target string) *core_v1.Container {
10 | for _, c := range containers {
11 | if c.Name == target {
12 | return &c
13 | }
14 | }
15 | return nil
16 | }
17 |
18 | func inPast(t1, t2 time.Time) bool {
19 | return t1.Before(t2)
20 | }
21 |
--------------------------------------------------------------------------------
/pkg/ui/config.go:
--------------------------------------------------------------------------------
1 | package ui
2 |
3 | import (
4 | "io"
5 | "os"
6 | )
7 |
8 | // Verbose adds additional info messages e.g. in case of checking errors
9 | var Verbose = false
10 |
11 | var Writer io.Writer = os.Stdout
12 |
--------------------------------------------------------------------------------
/pkg/ui/confirm.go:
--------------------------------------------------------------------------------
1 | package ui
2 |
3 | import "github.com/pterm/pterm"
4 |
5 | func (ui *UI) Confirm(label string) bool {
6 | ok, _ := pterm.DefaultInteractiveConfirm.
7 | WithDefaultValue(true).
8 | Show(label)
9 |
10 | ui.NL()
11 |
12 | return ok
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/ui/select.go:
--------------------------------------------------------------------------------
1 | package ui
2 |
3 | import "github.com/pterm/pterm"
4 |
5 | func (ui *UI) Select(label string, options []string) string {
6 | val, _ := pterm.DefaultInteractiveSelect.
7 | WithOptions(options).
8 | WithDefaultText(label).
9 | Show()
10 |
11 | ui.NL()
12 |
13 | return val
14 | }
15 |
--------------------------------------------------------------------------------
/pkg/ui/textinput.go:
--------------------------------------------------------------------------------
1 | package ui
2 |
3 | import "github.com/pterm/pterm"
4 |
5 | func (ui *UI) TextInput(text string, defaultValue ...string) string {
6 | t := pterm.DefaultInteractiveTextInput.WithMultiLine(false)
7 | if len(defaultValue) > 0 {
8 | t = t.WithDefaultValue(defaultValue[0])
9 | }
10 |
11 | in, _ := t.Show(text)
12 | return in
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/utils/consts.go:
--------------------------------------------------------------------------------
1 | package utils
2 |
3 | import "time"
4 |
5 | const (
6 | // DefaultDockerRegistry is the default registry used when no registry is specified in the image name.
7 | DefaultDockerRegistry = "https://index.docker.io/v1/"
8 | DefaultRetryDelay = time.Second * 3
9 | )
10 |
--------------------------------------------------------------------------------
/pkg/utils/test/integration.go:
--------------------------------------------------------------------------------
1 | package test
2 |
3 | import (
4 | "os"
5 | "testing"
6 | )
7 |
8 | func IntegrationTest(t *testing.T) {
9 | t.Helper()
10 | if os.Getenv("INTEGRATION") == "" {
11 | t.Skip("skipping integration tests because environment variable INTEGRATION is not set")
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/pkg/utils/text/tostr.go:
--------------------------------------------------------------------------------
1 | package text
2 |
3 | import "fmt"
4 |
5 | func ToStr(in any) string {
6 | return fmt.Sprintf("%v", in)
7 | }
8 |
--------------------------------------------------------------------------------
/pkg/version/version.go:
--------------------------------------------------------------------------------
1 | package version
2 |
3 | var (
4 | Version string = "dev"
5 | Commit string = "none"
6 | )
7 |
--------------------------------------------------------------------------------
/test/artillery/executor-smoke/artillery-smoke-test-negative.yaml:
--------------------------------------------------------------------------------
1 | config:
2 | target: "https://testkube.non.existing.url.example"
3 | phases:
4 | - duration: 1
5 | arrivalRate: 1
6 | scenarios:
7 | - flow:
8 | - get:
9 | url: "/"
10 | - think: 0.1
--------------------------------------------------------------------------------
/test/artillery/executor-smoke/artillery-smoke-test.yaml:
--------------------------------------------------------------------------------
1 | config:
2 | target: "https://testkube-test-page-lipsum.pages.dev/"
3 | phases:
4 | - duration: 1
5 | arrivalRate: 1
6 | scenarios:
7 | - flow:
8 | - get:
9 | url: "/"
10 | - think: 0.1
11 |
--------------------------------------------------------------------------------
/test/cli-tests/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": [
4 | ["@babel/transform-runtime"]
5 | ]
6 | }
--------------------------------------------------------------------------------
/test/cli-tests/.env:
--------------------------------------------------------------------------------
1 | API_URL=localhost:8088/v1
--------------------------------------------------------------------------------
/test/cli-tests/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/test/cli-tests/helpers/test-data-handlers.js:
--------------------------------------------------------------------------------
1 | const testsData = require('../test-data/tests.json')
2 |
3 | class TestDataHandler {
4 | getTest(testName) {
5 | return testsData[testName]
6 | }
7 | }
8 | export default TestDataHandler
--------------------------------------------------------------------------------
/test/curl/curl.json:
--------------------------------------------------------------------------------
1 | {
2 | "command": [
3 | "curl",
4 | "https://reqbin.com/echo/get/json",
5 | "-H",
6 | "'Accept: application/json'"
7 | ],
8 | "expected_status": "200",
9 | "expected_body": "{\"success\":\"true\"}"
10 | }
--------------------------------------------------------------------------------
/test/curl/executor-tests/curl-smoke-test-negative.json:
--------------------------------------------------------------------------------
1 | {
2 | "command": ["curl", "https://testkube-test-page-lipsum.pages.dev/"],
3 | "expected_status": "418"
4 | }
5 |
--------------------------------------------------------------------------------
/test/curl/executor-tests/curl-smoke-test.json:
--------------------------------------------------------------------------------
1 | {
2 | "command": ["curl", "https://testkube-test-page-lipsum.pages.dev/"],
3 | "expected_status": "200"
4 | }
5 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/crd/other.yaml:
--------------------------------------------------------------------------------
1 | # TODO: working-dir
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-12/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | cypress/videos/**
3 | cypress/screenshots/**
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-12/cypress.config.js:
--------------------------------------------------------------------------------
1 | const { defineConfig } = require("cypress");
2 |
3 | module.exports = defineConfig({
4 | e2e: {
5 | baseUrl: "https://testkube-test-page-lipsum.pages.dev/",
6 | },
7 | });
8 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-12/cypress/e2e/smoke2.cy.js:
--------------------------------------------------------------------------------
1 | describe('Smoke test 2', () => {
2 | it(`expect 1=1`, () => {
3 | expect('1').to.equal('1')
4 | })
5 | })
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-12/cypress/fixtures/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-12/cypress/support/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-12/cypress/support/e2e.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/cypress/executor-tests/cypress-12/cypress/support/e2e.js
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-12/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "cypress": "^12.7.0"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-13/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | cypress/videos/**
3 | cypress/screenshots/**
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-13/cypress.config.js:
--------------------------------------------------------------------------------
1 | const { defineConfig } = require("cypress");
2 |
3 | module.exports = defineConfig({
4 | e2e: {
5 | baseUrl: "https://testkube-test-page-lipsum.pages.dev/",
6 | },
7 | });
8 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-13/cypress/e2e/smoke2.cy.js:
--------------------------------------------------------------------------------
1 | describe('Smoke test 2', () => {
2 | it(`expect 1=1`, () => {
3 | expect('1').to.equal('1')
4 | })
5 | })
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-13/cypress/fixtures/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-13/cypress/support/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-13/cypress/support/e2e.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/cypress/executor-tests/cypress-13/cypress/support/e2e.js
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-13/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "cypress": "^13.5.0"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-14/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | cypress/videos/**
3 | cypress/screenshots/**
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-14/cypress.config.js:
--------------------------------------------------------------------------------
1 | const { defineConfig } = require("cypress");
2 |
3 | module.exports = defineConfig({
4 | e2e: {
5 | baseUrl: "https://testkube-test-page-lipsum.pages.dev/",
6 | },
7 | });
8 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-14/cypress/e2e/smoke2.cy.js:
--------------------------------------------------------------------------------
1 | describe('Smoke test 2', () => {
2 | it(`expect 1=1`, () => {
3 | expect('1').to.equal('1')
4 | })
5 | })
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-14/cypress/fixtures/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-14/cypress/support/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-14/cypress/support/e2e.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/cypress/executor-tests/cypress-14/cypress/support/e2e.js
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-14/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "cypress": "14.0.3"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-9/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | cypress/downloads/**
3 | cypress/screenshots/**
4 | cypress/videos/**
5 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-9/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "baseUrl": "https://testkube-test-page-lipsum.pages.dev/"
3 | }
4 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-9/cypress/fixtures/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/cypress/executor-tests/cypress-9/cypress/fixtures/.gitkeep
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-9/cypress/integration/dummy_test.spec.js:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | describe('Testkube website', () => {
4 | it('Open Testkube website', () => {
5 | cy.visit('/')
6 | })
7 | })
8 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-9/cypress/plugins/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/cypress/executor-tests/cypress-9/cypress/plugins/.gitkeep
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-9/cypress/support/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/cypress/executor-tests/cypress-9/cypress/support/.gitkeep
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-9/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "cypress": "^9.7.0"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-without-envs/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | cypress/downloads/**
3 | cypress/screenshots/**
4 | cypress/videos/**
5 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-without-envs/cypress.config.js:
--------------------------------------------------------------------------------
1 | const { defineConfig } = require("cypress");
2 |
3 | module.exports = defineConfig({
4 | e2e: {
5 | baseUrl: "https://testkube-test-page-lipsum.pages.dev/",
6 | video: false,
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-without-envs/cypress/e2e/smoke-without-envs-2.cy.js:
--------------------------------------------------------------------------------
1 | describe('Smoke test 2', () => {
2 | it(`expect 2=2`, () => {
3 | expect('2').to.equal('2')
4 | })
5 | })
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-without-envs/cypress/e2e/smoke-without-envs.cy.js:
--------------------------------------------------------------------------------
1 | describe('Smoke test 1', () => {
2 | it(`expect 1=1`, () => {
3 | expect('1').to.equal('1')
4 | })
5 | })
6 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-without-envs/cypress/fixtures/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-without-envs/cypress/support/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-without-envs/cypress/support/e2e.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/cypress/executor-tests/cypress-without-envs/cypress/support/e2e.js
--------------------------------------------------------------------------------
/test/cypress/executor-tests/cypress-without-envs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "cypress": "^10.7.0"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/test/examples/cloud-demo/tests/testsuites/k6.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: k6-parallel
5 | spec:
6 | description: "k6 parallel testsuite"
7 | steps:
8 | - stopOnFailure: false
9 | execute:
10 | - test: k6-loadtest
11 | executionRequest:
12 | args:
13 | - "-vu"
14 | - "1"
15 | - test: k6-loadtest
16 | executionRequest:
17 | args:
18 | - "-vu"
19 | - "2"
20 | schedule: "52 */4 * * *"
21 |
--------------------------------------------------------------------------------
/test/examples/kubecon/tests/testsuites/k6.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: k6-parallel
5 | spec:
6 | description: "k6 parallel testsuite"
7 | steps:
8 | - stopOnFailure: false
9 | execute:
10 | - test: k6-loadtest
11 | executionRequest:
12 | args:
13 | - "-vu"
14 | - "1"
15 | - test: k6-loadtest
16 | executionRequest:
17 | args:
18 | - "-vu"
19 | - "2"
20 |
--------------------------------------------------------------------------------
/test/executors/container-executor-curl.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: container-executor-curl
5 | spec:
6 | image: curlimages/curl:latest
7 | command: ["curl"]
8 | executor_type: container
9 | types:
10 | - container-executor-curl/test
--------------------------------------------------------------------------------
/test/executors/container-executor-cypress.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: container-executor-cypress-v12.7.0
5 | spec:
6 | image: cypress/included:12.7.0
7 | executor_type: container
8 | types:
9 | - container-executor-cypress-v12.7.0/test
10 | features:
11 | - artifacts
--------------------------------------------------------------------------------
/test/executors/container-executor-gradle.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: container-executor-gradle-8.5-jdk11
5 | spec:
6 | image: gradle:8.5.0-jdk11
7 | executor_type: container
8 | types:
9 | - container-executor-gradle-8.5-jdk11/test
10 |
--------------------------------------------------------------------------------
/test/executors/container-executor-jmeter.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: container-executor-jmeter-5.5
5 | spec:
6 | image: justb4/jmeter:5.5
7 | command:
8 | - "jmeter"
9 | executor_type: container
10 | types:
11 | - container-executor-jmeter-5.5/test
12 | features:
13 | - artifacts
14 |
--------------------------------------------------------------------------------
/test/executors/container-executor-maven.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: container-executor-maven-3.9-jdk11
5 | spec:
6 | image: maven:3.9.6-eclipse-temurin-11-focal
7 | executor_type: container
8 | types:
9 | - container-executor-maven-3.9-jdk11/test
10 | command: ["mvn", "test"]
11 |
--------------------------------------------------------------------------------
/test/executors/container-executor-postman.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: container-executor-postman-newman-6-alpine
5 | spec:
6 | image: postman/newman:6-alpine
7 | executor_type: container
8 | types:
9 | - container-executor-postman-newman-6-alpine/test
10 | command: ["newman"]
11 |
--------------------------------------------------------------------------------
/test/executors/container-executor-soapui.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | name: container-executor-soapui-5.7
5 | spec:
6 | image: smartbear/soapuios-testrunner:5.7.2
7 | executor_type: container
8 | types:
9 | - container-executor-soapui-5.7/test
10 | features:
11 | - artifacts
12 |
--------------------------------------------------------------------------------
/test/executors/local-postman.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: executor.testkube.io/v1
2 | kind: Executor
3 | metadata:
4 | annotations:
5 | meta.helm.sh/release-name: testkube
6 | meta.helm.sh/release-namespace: default
7 | labels:
8 | app.kubernetes.io/managed-by: Helm
9 | name: local-postman-executor
10 | namespace: default
11 | spec:
12 | executor_type: rest
13 | types:
14 | - local-postman/collection
15 | uri: http://localhost:8082
16 |
--------------------------------------------------------------------------------
/test/ginkgo/executor-tests/smoke-negative/smoke_negative_test.go:
--------------------------------------------------------------------------------
1 | package smoke_negative_test
2 |
3 | import (
4 | . "github.com/onsi/ginkgo/v2"
5 | . "github.com/onsi/gomega"
6 | )
7 |
8 | var _ = Describe("Smoke", func() {
9 | Describe("Ginkgo smoke test", func() {
10 | It("Negative test - should always fail", func() {
11 | Expect(true).To(Equal(false))
12 | })
13 | })
14 | })
15 |
--------------------------------------------------------------------------------
/test/ginkgo/executor-tests/smoke-negative/smoke_suite_negative_test.go:
--------------------------------------------------------------------------------
1 | package smoke_negative_test
2 |
3 | import (
4 | "testing"
5 |
6 | . "github.com/onsi/ginkgo/v2"
7 | . "github.com/onsi/gomega"
8 | )
9 |
10 | func TestSmoke(t *testing.T) {
11 | RegisterFailHandler(Fail)
12 | RunSpecs(t, "Smoke Suite")
13 | }
14 |
--------------------------------------------------------------------------------
/test/ginkgo/executor-tests/smoke/smoke_suite_test.go:
--------------------------------------------------------------------------------
1 | package smoke_test
2 |
3 | import (
4 | "testing"
5 |
6 | . "github.com/onsi/ginkgo/v2"
7 | . "github.com/onsi/gomega"
8 | )
9 |
10 | func TestSmoke(t *testing.T) {
11 | RegisterFailHandler(Fail)
12 | RunSpecs(t, "Smoke Suite")
13 | }
14 |
--------------------------------------------------------------------------------
/test/ginkgo/executor-tests/smoke/smoke_test.go:
--------------------------------------------------------------------------------
1 | package smoke_test
2 |
3 | import (
4 | . "github.com/onsi/ginkgo/v2"
5 | . "github.com/onsi/gomega"
6 | )
7 |
8 | var _ = Describe("Smoke", func() {
9 | Describe("Ginkgo smoke test", func() {
10 | It("Positive test - should always pass", func() {
11 | Expect(true).To(Equal(true))
12 | })
13 | })
14 | })
15 |
--------------------------------------------------------------------------------
/test/k6/executor-tests/k6-perf-test-gcp-discard-response-bodies.js:
--------------------------------------------------------------------------------
1 | import http from 'k6/http';
2 | import { check } from 'k6';
3 |
4 | export const options = {
5 | discardResponseBodies: true,
6 | };
7 |
8 | export default function () {
9 | const res = http.get('https://storage.googleapis.com/perf-test-static-page-bucket/testkube-test-page-lorem-ipsum/index.html');
10 | check(res, { 'status was 200': (r) => r.status == 200 });
11 | }
12 |
--------------------------------------------------------------------------------
/test/k6/executor-tests/k6-perf-test-gcp.js:
--------------------------------------------------------------------------------
1 | import http from 'k6/http';
2 | import { check } from 'k6';
3 |
4 | export default function () {
5 | const res = http.get('https://storage.googleapis.com/perf-test-static-page-bucket/testkube-test-page-lorem-ipsum/index.html');
6 | check(res, { 'status was 200': (r) => r.status == 200 });
7 | check(res, {
8 | 'verify partial text': (r) =>
9 | r.body.includes('Testkube test page - Lipsum'),
10 | });
11 | }
12 |
--------------------------------------------------------------------------------
/test/k6/executor-tests/k6-perf-test.js:
--------------------------------------------------------------------------------
1 | import http from 'k6/http';
2 | import { check } from 'k6';
3 |
4 | export default function () {
5 | const res = http.get('https://testkube-test-page-lipsum.pages.dev/');
6 | check(res, { 'status was 200': (r) => r.status == 200 });
7 | check(res, {
8 | 'verify partial text': (r) =>
9 | r.body.includes('Testkube test page - Lipsum'),
10 | });
11 | }
12 |
--------------------------------------------------------------------------------
/test/k6/executor-tests/k6-smoke-test-negative.js:
--------------------------------------------------------------------------------
1 | import http from 'k6/http';
2 |
3 | throw new Error("Negative test - expected to fail");
--------------------------------------------------------------------------------
/test/k6/executor-tests/k6-smoke-test-without-envs.js:
--------------------------------------------------------------------------------
1 | import http from "k6/http";
2 |
3 | export default function () {
4 | http.get("https://testkube-test-page-lipsum.pages.dev/");
5 | }
6 |
--------------------------------------------------------------------------------
/test/k6/executor-tests/k6-smoke-test.js:
--------------------------------------------------------------------------------
1 | import http from "k6/http";
2 | import { check } from "k6";
3 |
4 | if (__ENV.K6_ENV_FROM_PARAM != "K6_ENV_FROM_PARAM_value") {
5 | throw new Error("Incorrect K6_ENV_FROM_PARAM ENV value");
6 | }
7 |
8 | if (__ENV.K6_SYSTEM_ENV != "K6_SYSTEM_ENV_value") {
9 | throw new Error("Incorrect K6_SYSTEM_ENV ENV value");
10 | }
11 |
12 | export default function () {
13 | http.get("https://testkube-test-page-lipsum.pages.dev/");
14 | }
15 |
--------------------------------------------------------------------------------
/test/kubepug/executor-smoke/kubepug-smoke-test-negative.yaml:
--------------------------------------------------------------------------------
1 | incorrect formatting
2 | kind: SomeNonEsistingKind
--------------------------------------------------------------------------------
/test/locust/locust-project/locust_test.py:
--------------------------------------------------------------------------------
1 | from locust import HttpUser, task
2 |
3 | class locust_example_test(HttpUser):
4 | @task
5 | def locust_example(self):
6 | self.client.get("/")
7 |
--------------------------------------------------------------------------------
/test/locust/locust-project/requirements.txt:
--------------------------------------------------------------------------------
1 | locust==2.32.3
2 |
--------------------------------------------------------------------------------
/test/nunit/nunit-project/ExampleProject/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using NUnit.Framework;
--------------------------------------------------------------------------------
/test/pact/pact-js-project/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/test/pact/pact-js-project/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ['**/pact/**/*.test.js'],
3 | testEnvironment: 'node',
4 | };
5 |
--------------------------------------------------------------------------------
/test/pact/pact-js-project/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "@pact-foundation/pact": "^15.0.1",
4 | "jest": "^29.7.0",
5 | "superagent": "^10.2.0"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/test/pact/pact-js-project/pact/logs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/pact/pact-js-project/pact/logs/.gitkeep
--------------------------------------------------------------------------------
/test/pact/pact-js-project/pact/pacts/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kubeshop/testkube/2d3b9998a5425f7dda74301a92111eb5051d9e9b/test/pact/pact-js-project/pact/pacts/.gitkeep
--------------------------------------------------------------------------------
/test/perf/api-server.js:
--------------------------------------------------------------------------------
1 | import http from 'k6/http';
2 | import { sleep,check } from 'k6';
3 |
4 | export default function () {
5 |
6 | const baseURI = `${__ENV.TESTKUBE_API_URI || 'http://testkube-api-server:8088'}`;
7 |
8 | check(http.get(`${baseURI}/v1/info`), {
9 | 'api server should return version': r => r.json()["version"] != undefined && r.json()["version"] != "",
10 | 'api server should return commit': r => r.json()["commit"] != undefined && r.json()["commit"] != "",
11 | });
12 |
13 |
14 | sleep(1);
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/test/perf/testkube-homepage.js:
--------------------------------------------------------------------------------
1 | import http from "k6/http";
2 | import { sleep, check } from "k6";
3 |
4 | export default function () {
5 | const baseURI = `${
6 | __ENV.TESTKUBE_HOMEPAGE_URI ||
7 | "https://testkube-test-page-lipsum.pages.dev/"
8 | }`;
9 | check(http.get(`${baseURI}/`), {
10 | "check testkube homepage home page": (r) => r.body.includes("Testkube"),
11 | });
12 |
13 | sleep(1);
14 | }
15 |
--------------------------------------------------------------------------------
/test/playwright/executor-tests/playwright-project/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "playwright",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {},
7 | "keywords": [],
8 | "author": "",
9 | "license": "ISC",
10 | "devDependencies": {
11 | "@playwright/test": "1.32.3"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/test/playwright/executor-tests/playwright-project/tests/smoke.spec.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | const { test, expect } = require("@playwright/test");
3 |
4 | test("Smoke 1 - has title", async ({ page }) => {
5 | await page.goto("https://testkube-test-page-lipsum.pages.dev/");
6 |
7 | await expect(page).toHaveTitle(/Testkube/);
8 | });
9 |
--------------------------------------------------------------------------------
/test/playwright/executor-tests/playwright-project/tests/smoke2.spec.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | const { test, expect } = require("@playwright/test");
3 |
4 | test("Smoke 2 - has title", async ({ page }) => {
5 | await page.goto("https://testkube-test-page-lipsum.pages.dev/");
6 |
7 | await expect(page).toHaveTitle(/Testkube/);
8 | });
9 |
--------------------------------------------------------------------------------
/test/pytest/pytest-project/pytest.ini:
--------------------------------------------------------------------------------
1 | # pytest.ini
2 | [pytest]
3 | junit_suite_name = Smoke Test Suite
4 |
--------------------------------------------------------------------------------
/test/pytest/pytest-project/requirements.txt:
--------------------------------------------------------------------------------
1 | pytest==8.3.3
2 |
--------------------------------------------------------------------------------
/test/pytest/pytest-project/tests/fail/smoke-3-fail_test.py:
--------------------------------------------------------------------------------
1 | import time
2 |
3 | def test_AAA():
4 | assert 1 == 2
5 |
6 | def test_BBB():
7 | time.sleep(3)
8 | assert 1 == 1
9 |
10 | def test_CCC():
11 | assert 1 == 2
12 |
13 | def test_DDD():
14 | time.sleep(2)
15 | assert 1 == 1
16 |
--------------------------------------------------------------------------------
/test/pytest/pytest-project/tests/success/smoke-2_test.py:
--------------------------------------------------------------------------------
1 | import time
2 |
3 | def test_lorem():
4 | time.sleep(1)
5 | assert 1 == 1
6 |
7 | def test_ipsum():
8 | time.sleep(3)
9 | assert 1 == 1
10 |
11 | def test_dolor():
12 | assert 1 == 1
13 |
14 | def test_sit():
15 | time.sleep(5)
16 | assert 1 == 1
17 |
18 | def test_amet():
19 | time.sleep(2)
20 | assert 1 == 1
21 |
--------------------------------------------------------------------------------
/test/pytest/pytest-project/tests/success/smoke_test.py:
--------------------------------------------------------------------------------
1 | import time
2 |
3 | def test_1():
4 | assert 1 == 1
5 |
6 | def test_2():
7 | time.sleep(3)
8 | assert 1 == 1
9 |
10 | def test_3():
11 | assert 1 == 1
12 |
13 | def test_4():
14 | time.sleep(2)
15 | assert 1 == 1
16 |
--------------------------------------------------------------------------------
/test/suites/executor-artillery-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-artillery-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: artillery executor smoke tests
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: artillery-executor-smoke
13 | - test: artillery-executor-smoke-negative
--------------------------------------------------------------------------------
/test/suites/executor-common-smoke-tests.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "executor-common-smoke-tests",
3 | "description": "Reduced common test suite for executors",
4 | "steps": [
5 | {"execute": [{"test": "cypress-default-executor-smoke-electron"}]},
6 | {"execute": [{"test": "cypress-default-executor-smoke-electron-testsource-git-dir"}]},
7 | {"execute": [{"test": "postman-executor-smoke"}]},
8 | {"execute": [{"test": "postman-executor-smoke-testsource-git-file"}]},
9 | {"execute": [{"test": "k6-executor-smoke"}]}
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/test/suites/executor-container-curl-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-container-curl-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "container executor curl smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: container-executor-curl-smoke
13 | - stopOnFailure: false
14 | execute:
15 | - test: container-executor-curl-smoke-negative
16 |
--------------------------------------------------------------------------------
/test/suites/executor-container-gradle-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-container-gradle-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "container executor gradle smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: container-executor-gradle-jdk-11
13 |
--------------------------------------------------------------------------------
/test/suites/executor-container-jmeter-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-container-jmeter-smoke-tests
5 | labels:
6 | app: testkube
7 | spec:
8 | description: "container executor jmeter smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: container-executor-jmeter-smoke
13 |
--------------------------------------------------------------------------------
/test/suites/executor-container-maven-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-container-maven-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "container executor maven smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: container-executor-maven-jdk-11
13 |
--------------------------------------------------------------------------------
/test/suites/executor-container-playwright-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-container-playwright-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "container executor playwright smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: container-executor-playwright-smoke
13 | - stopOnFailure: false
14 | execute:
15 | - test: container-executor-playwright-smoke-args
--------------------------------------------------------------------------------
/test/suites/executor-container-postman-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-container-postman-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "container executor postman smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: container-executor-postman-smoke
13 |
--------------------------------------------------------------------------------
/test/suites/executor-container-soapui-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-container-soapui-smoke-tests
5 | labels:
6 | app: testkube
7 | spec:
8 | description: "container executor soapui smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: container-executor-soapui-smoke
13 |
--------------------------------------------------------------------------------
/test/suites/executor-curl-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-curl-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "curl executor smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: curl-executor-smoke
13 | - stopOnFailure: false
14 | execute:
15 | - test: curl-executor-smoke-directory
16 | - stopOnFailure: false
17 | execute:
18 | - test: curl-executor-smoke-negative
19 |
--------------------------------------------------------------------------------
/test/suites/executor-ginkgo-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-ginkgo-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "ginkgo executor smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: ginkgo-executor-smoke
13 | - stopOnFailure: false
14 | execute:
15 | - test: ginkgo-executor-smoke-negative
16 |
--------------------------------------------------------------------------------
/test/suites/executor-k6-other-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-k6-other-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "k6 executor - other tests and edge-cases"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: k6-executor-smoke-directory
13 |
--------------------------------------------------------------------------------
/test/suites/executor-k6-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-k6-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "k6 executor smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: k6-executor-smoke
13 | - stopOnFailure: false
14 | execute:
15 | - test: k6-executor-smoke-git-file
16 | - stopOnFailure: false
17 | execute:
18 | - test: k6-executor-smoke-negative
19 |
--------------------------------------------------------------------------------
/test/suites/executor-kubepug-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-kubepug-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "kubepug executor smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: kubepug-executor-smoke
13 | - stopOnFailure: false
14 | execute:
15 | - test: kubepug-executor-smoke-negative
16 |
--------------------------------------------------------------------------------
/test/suites/executor-playwright-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-playwright-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "playwright executor smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: playwright-executor-smoke
13 |
--------------------------------------------------------------------------------
/test/suites/executor-soapui-smoke-tests.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: tests.testkube.io/v3
2 | kind: TestSuite
3 | metadata:
4 | name: executor-soapui-smoke-tests
5 | labels:
6 | core-tests: executors
7 | spec:
8 | description: "soapui executor smoke tests"
9 | steps:
10 | - stopOnFailure: false
11 | execute:
12 | - test: soapui-executor-smoke
13 | - stopOnFailure: false
14 | execute:
15 | - test: soapui-executor-smoke-negative
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/artillery-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: artillery-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: artillery
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: artillery-workflow-smoke
15 | - name: artillery-workflow-smoke-template
16 | - name: distributed-artillery-workflow-smoke-artifacts
17 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/combined-workflow-test.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: artillery-workflow-suite-combined
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: artillery
9 | spec:
10 | steps:
11 | - execute:
12 | workflows:
13 | - name: artillery-workflow-smoke
14 | tests:
15 | - name: artillery-executor-smoke
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/cron/dev/full-smoke-cron.yaml:
--------------------------------------------------------------------------------
1 | kind: TestWorkflow
2 | apiVersion: testworkflows.testkube.io/v1
3 | metadata:
4 | name: tw-suite-full-smoke-cron-trigger
5 | labels:
6 | core-tests: workflows-suite-trigger
7 | type: suite-trigger
8 | spec:
9 | steps:
10 | - execute:
11 | workflows:
12 | - name: tw-suite-full-smoke
13 | events:
14 | - cronjob:
15 | cron: "30 */4 * * *" # every 4 hours
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/cron/dev/small-smoke-cron.yaml:
--------------------------------------------------------------------------------
1 | kind: TestWorkflow
2 | apiVersion: testworkflows.testkube.io/v1
3 | metadata:
4 | name: tw-suite-small-smoke-cron-trigger
5 | labels:
6 | core-tests: workflows-suite-trigger
7 | type: suite-trigger
8 | spec:
9 | steps:
10 | - execute:
11 | workflows:
12 | - name: tw-suite-small-smoke
13 | events:
14 | - cronjob:
15 | cron: "0,20,40 * * * *" # every 20 minutes
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/cron/dev/testkube-multiagent-targets-workflow-cron.yaml:
--------------------------------------------------------------------------------
1 | kind: TestWorkflow
2 | apiVersion: testworkflows.testkube.io/v1
3 | metadata:
4 | name: testkube-multiagent-targets-workflow-suite-cron-trigger
5 | labels:
6 | core-tests: workflows-suite-trigger
7 | type: suite-trigger
8 | spec:
9 | steps:
10 | - execute:
11 | workflows:
12 | - name: testkube-multiagent-targets-workflow-suite
13 | events:
14 | - cronjob:
15 | cron: "*/50 */4 * * *" # every 4 hours
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/cron/sandbox/small-smoke-cron.yaml:
--------------------------------------------------------------------------------
1 | kind: TestWorkflow
2 | apiVersion: testworkflows.testkube.io/v1
3 | metadata:
4 | name: tw-suite-small-sandbox-smoke-cron-trigger
5 | labels:
6 | core-tests: workflows-suite-trigger
7 | type: suite-trigger
8 | spec:
9 | steps:
10 | - execute:
11 | workflows:
12 | - name: tw-suite-small-smoke
13 | events:
14 | - cronjob:
15 | cron: "15 */2 * * *" # every 2 hours
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/curl-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: curl-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: curl
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: curl-workflow-smoke
15 | - name: curl-workflow-smoke-matrix
16 |
17 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/gradle-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: gradle-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: gradle
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: gradle-workflow-smoke-jdk11
15 | - name: gradle-workflow-smoke-jdk11-default-command
16 | - name: gradle-workflow-smoke-jdk11-from-template
17 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/junit-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: junit-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: junit
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: junit5-workflow-smoke
15 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/locust-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: locust-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: locust
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: locust-workflow-smoke
15 | - name: distributed-locust-workflow-smoke
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/maven-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: maven-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: maven
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: maven-workflow-smoke-jdk11
15 | - name: maven-workflow-smoke-jdk11-from-template
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/nunit-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: nunit-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: nunit
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: nunit-workflow-smoke-junit-report
15 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/pact-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: pact-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: pact
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: pact-js-workflow-smoke
--------------------------------------------------------------------------------
/test/suites/test-workflows/pytest-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: pytest-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: pytest
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: pytest-workflow-smoke
15 | - name: pytest-workflow-smoke-junit-success-only
16 |
--------------------------------------------------------------------------------
/test/suites/test-workflows/soapui-workflow.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: testworkflows.testkube.io/v1
2 | kind: TestWorkflow
3 | metadata:
4 | name: soapui-workflow-suite
5 | labels:
6 | core-tests: workflows-suite
7 | type: suite
8 | tool: soapui
9 | spec:
10 | steps:
11 | - execute:
12 | parallelism: 2
13 | workflows:
14 | - name: soapui-workflow-smoke
15 |
--------------------------------------------------------------------------------
/test/suites/testsuite-example-1.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "test-example-1",
3 | "description": "Run test several times",
4 | "steps": [
5 | {"execute": [{"test": "testkube-dashboard"}]},
6 | {"execute": [{"delay": "5s"}]},
7 | {"execute": [{"test": "testkube-todo-api"}]},
8 | {"execute": [{"delay": "5s"}]},
9 | {"execute": [{"test": "testkube-todo-frontend"}]},
10 | {"execute": [{"delay": "5s"}]},
11 | {"execute": [{"test": "kubeshop-site"}]}
12 | ]
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/test/suites/testsuite-example-3.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "test-example-3",
3 | "description": "Tests fast first",
4 | "steps": [
5 | {"execute": [{"test": "testkube-variables-test"}]},
6 | {"execute": [{"delay": "1s"}]},
7 | {"execute": [{"test": "testkube-variables-test"}]}
8 | ]
9 | }
10 |
--------------------------------------------------------------------------------
/test/suites/testsuite-testkube-failing-sof.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "testkube",
3 | "description": "Failing Testkube testsuite",
4 | "steps": [
5 | {"execute": [{"test": "testkube-api-failing"}], "stopOnFailure": true},
6 | {"execute": [{"delay": "1s"}]},
7 | {"execute": [{"test": "testkube-dashboard"}]},
8 | {"execute": [{"delay": "1s"}]},
9 | {"execute": [{"test": "testkube-api-performance"}]},
10 | {"execute": [{"delay": "1s"}]},
11 | {"execute": [{"test": "testkube-homepage-performance"}]}
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/test/suites/testsuite-testkube-failing.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "testkube",
3 | "description": "Failing Testkube testsuite",
4 | "steps": [
5 | {"execute": [{"test": "testkube-dashboard"}]},
6 | {"execute": [{"delay": "1s"}]},
7 | {"execute": [{"test": "testkube-api-performance"}]},
8 | {"execute": [{"delay": "1s"}]},
9 | {"execute": [{"test": "testkube-api-failing"}]},
10 | {"execute": [{"delay": "1s"}]},
11 | {"execute": [{"test": "testkube-homepage-performance"}]}
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/test/suites/testsuite-testkube.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "testkube",
3 | "description": "Testkube test suite, api, dashboard and performance",
4 | "steps": [
5 | {"execute": [{"test": "testkube-api"}]},
6 | {"execute": [{"delay": "1s"}]},
7 | {"execute": [{"test": "testkube-dashboard"}]},
8 | {"execute": [{"delay": "1s"}]},
9 | {"execute": [{"test": "testkube-api-performance"}]},
10 | {"execute": [{"delay": "1s"}]},
11 | {"execute": [{"test": "testkube-homepage-performance"}]}
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/test/testkube/installation-tests/enterprise-installation-expect-file.exp:
--------------------------------------------------------------------------------
1 | #!/usr/bin/expect -f
2 |
3 | set timeout -1 ;# disable the default 10s timeout
4 |
5 | spawn {*}$env(TESTKUBE_INIT_COMMAND)
6 | # Confirm credentials are copied
7 | expect "Do you want to continue?"
8 | send "y" ;# No return key on choices in Testkube CLI!
9 | # Don't open the dashboard
10 | expect "Do you want to open the dashboard?"
11 | send "n"
12 | expect eof
13 |
--------------------------------------------------------------------------------