github.com/kubeshop/testkube@v1.17.23/test/scripts/executor-tests/run.sh (about)

     1  #!/bin/bash
     2  set -e
     3  
     4  # params
     5  help='false'
     6  delete='false'
     7  create='false'
     8  run='false'
     9  follow='false'
    10  schedule='false'
    11  executor_type='all'
    12  namespace='testkube'
    13  custom_testsuite=''
    14  branch_overwrite=''
    15  
    16  while getopts 'hdcrfse:n:t:b:v' flag; do
    17    case "${flag}" in
    18      h) help='true' ;; # TODO: describe params
    19      d) delete='true' ;;
    20      c) create='true' ;;
    21      r) run='true' ;;
    22      f) follow='true' ;;
    23      s) schedule='true' ;;
    24      e) executor_type="${OPTARG}" ;;
    25      n) namespace="${OPTARG}" ;;
    26      t) custom_testsuite="${OPTARG}" ;;
    27      b) branch_overwrite="${OPTARG}" ;;
    28      v) set -x ;;
    29    esac
    30  done
    31  
    32  print_title() {
    33    border="=================="
    34    printf "\n$border\n===  $1\n$border\n"
    35  }
    36  
    37  create_update_testsuite_json() { # testsuite_name testsuite_path
    38    exit_code=0
    39    type=""
    40    kubectl testkube --namespace $namespace get testsuite $1 > /dev/null 2>&1 || exit_code=$?
    41  
    42    if [ $exit_code == 0 ] ; then # testsuite already created
    43      type="update"
    44    else
    45      type="create"
    46    fi
    47  
    48    if [ "$schedule" = true ] ; then # workaround for appending schedule
    49      random_minute="$(($RANDOM % 59))"
    50      cat $2 | kubectl testkube --namespace $namespace $type testsuite --name $1 --schedule "$random_minute */4 * * *"
    51    else
    52      cat $2 | kubectl testkube --namespace $namespace $type testsuite --name $1
    53    fi
    54  }
    55  
    56  create_update_testsuite() { # testsuite_name testsuite_path
    57      kubectl --namespace $namespace apply -f $2
    58  
    59      if [ "$schedule" = true ] ; then # workaround for appending schedule
    60        random_minute="$(($RANDOM % 59))"
    61        kubectl testkube --namespace $namespace update testsuite --name $1 --schedule "$random_minute */4 * * *"
    62      fi
    63  }
    64  
    65  run_follow_testsuite() { # testsuite_name
    66    follow_param=''
    67    if [ "$follow" = true ] ; then
    68      follow_param=' -f'
    69    fi
    70  
    71    branch_overwrite_param=''
    72    if [ -n "$branch_overwrite" ] ; then
    73      branch_overwrite_param=" --git-branch $branch_overwrite"
    74    fi
    75  
    76    kubectl testkube --namespace $namespace run testsuite $1 $follow_param $branch_overwrite_param
    77  }
    78  
    79  common_run() { # name, test_crd_file, testsuite_name, testsuite_file, custom_executor_crd_file
    80    name=$1
    81    test_crd_file=$2
    82    testsuite_name=$3
    83    testsuite_file=$4
    84    custom_executor_crd_file=$5
    85  
    86    print_title "$name"
    87  
    88    if [ "$delete" = true ] ; then
    89      if [ ! -z "$custom_executor_crd_file" ] ; then
    90        kubectl --namespace $namespace delete -f $custom_executor_crd_file --ignore-not-found=true
    91      fi
    92      kubectl --namespace $namespace delete -f $test_crd_file --ignore-not-found=true
    93      kubectl --namespace $namespace delete testsuite $testsuite_name -ntestkube --ignore-not-found=true
    94    fi
    95  
    96    if [ "$create" = true ] ; then
    97      if [ ! -z "$custom_executor_crd_file" ] ; then
    98        # Executors (not created by default)
    99        kubectl --namespace $namespace apply -f $custom_executor_crd_file
   100      fi
   101      
   102      # Tests
   103      kubectl --namespace $namespace apply -f $test_crd_file
   104  
   105      # TestsSuites
   106      create_update_testsuite "$testsuite_name" "$testsuite_file"
   107    fi
   108  
   109    if [ "$run" = true ] && [ "$custom_testsuite" = '' ]; then
   110      run_follow_testsuite $testsuite_name
   111    fi
   112  }
   113  
   114  artillery-smoke() {
   115    name="artillery"
   116    test_crd_file="test/artillery/executor-smoke/crd/crd.yaml"
   117    testsuite_name="executor-artillery-smoke-tests"
   118    testsuite_file="test/suites/executor-artillery-smoke-tests.yaml"
   119    
   120    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   121  }
   122  
   123  container-curl-smoke() {
   124    name="Container executor - Curl"
   125    test_crd_file="test/container-executor/executor-smoke/crd/curl.yaml"
   126    testsuite_name="executor-container-curl-smoke-tests"
   127    testsuite_file="test/suites/executor-container-curl-smoke-tests.yaml"
   128  
   129    custom_executor_crd_file="test/executors/container-executor-curl.yaml"
   130  
   131    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   132  }
   133  
   134  container-cypress-smoke() {
   135    name="Container executor - Cypress"
   136    test_crd_file="test/container-executor/executor-smoke/crd/cypress.yaml"
   137    testsuite_name="executor-container-cypress-smoke-tests"
   138    testsuite_file="test/suites/executor-container-cypress-smoke-tests.yaml"
   139  
   140    custom_executor_crd_file="test/executors/container-executor-cypress.yaml"
   141  
   142    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   143  }
   144  
   145  container-gradle-smoke() {
   146    name="Container executor - Gradle"
   147    test_crd_file="test/container-executor/executor-smoke/crd/gradle.yaml"
   148    testsuite_name="executor-container-gradle-smoke-tests"
   149    testsuite_file="test/suites/executor-container-gradle-smoke-tests.yaml"
   150  
   151    custom_executor_crd_file="test/executors/container-executor-gradle.yaml"
   152  
   153    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   154  }
   155  
   156  container-k6-smoke() {
   157    name="Container executor - K6"
   158    test_crd_file="test/container-executor/executor-smoke/crd/k6.yaml"
   159    testsuite_name="executor-container-k6-smoke-tests"
   160    testsuite_file="test/suites/executor-container-k6-smoke-tests.yaml"
   161  
   162    custom_executor_crd_file="test/executors/container-executor-k6.yaml"
   163  
   164    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   165  }
   166  
   167  container-maven-smoke() {
   168    name="Container executor - Maven"
   169    test_crd_file="test/container-executor/executor-smoke/crd/maven.yaml"
   170    testsuite_name="executor-container-maven-smoke-tests"
   171    testsuite_file="test/suites/executor-container-maven-smoke-tests.yaml"
   172  
   173    custom_executor_crd_file="test/executors/container-executor-maven.yaml"
   174  
   175    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   176  }
   177  
   178  container-playwright-smoke() {
   179    name="Container executor - Playwright"
   180    test_crd_file="test/container-executor/executor-smoke/crd/playwright.yaml"
   181    testsuite_name="executor-container-playwright-smoke-tests"
   182    testsuite_file="test/suites/executor-container-playwright-smoke-tests.yaml"
   183  
   184    custom_executor_crd_file="test/executors/container-executor-playwright.yaml"
   185  
   186    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   187  }
   188  
   189  container-postman-smoke() {
   190    name="Container executor - Postman"
   191    test_crd_file="test/container-executor/executor-smoke/crd/postman.yaml"
   192    testsuite_name="executor-container-postman-smoke-tests"
   193    testsuite_file="test/suites/executor-container-postman-smoke-tests.yaml"
   194  
   195    custom_executor_crd_file="test/executors/container-executor-postman.yaml"
   196  
   197    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   198  }
   199  
   200  curl-smoke() {
   201    name="curl"
   202    test_crd_file="test/curl/executor-tests/crd/smoke.yaml"
   203    testsuite_name="executor-curl-smoke-tests"
   204    testsuite_file="test/suites/executor-curl-smoke-tests.yaml"
   205    
   206    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   207  }
   208  
   209  cypress-smoke() {
   210    name="Cypress"
   211    test_crd_file="test/cypress/executor-tests/crd/crd.yaml"
   212    testsuite_name="executor-cypress-smoke-tests"
   213    testsuite_file="test/suites/executor-cypress-smoke-tests.yaml"
   214  
   215    custom_executor_crd_file="test/executors/cypress.yaml"
   216  
   217    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   218  }
   219  
   220  ginkgo-smoke() {
   221    name="Ginkgo"
   222    test_crd_file="test/ginkgo/executor-tests/crd/smoke.yaml"
   223    testsuite_name="executor-ginkgo-smoke-tests"
   224    testsuite_file="test/suites/executor-ginkgo-smoke-tests.yaml"
   225    
   226    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   227  }
   228  
   229  gradle-smoke() {
   230    name="Gradle"
   231    test_crd_file="test/gradle/executor-smoke/crd/crd.yaml"
   232    testsuite_name="executor-gradle-smoke-tests"
   233    testsuite_file="test/suites/executor-gradle-smoke-tests.yaml"
   234  
   235    custom_executor_crd_file="test/executors/gradle.yaml"
   236  
   237    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   238  }
   239  
   240  jmeter-smoke() {
   241    name="JMeter"
   242    test_crd_file="test/jmeter/executor-tests/crd/smoke.yaml"
   243    testsuite_name="executor-jmeter-smoke-tests"
   244    testsuite_file="test/suites/executor-jmeter-smoke-tests.yaml"
   245  
   246    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   247  }
   248  
   249  jmeter-other() {
   250    name="JMeter"
   251    test_crd_file="test/jmeter/executor-tests/crd/other.yaml"
   252    testsuite_name="executor-jmeter-other-tests"
   253    testsuite_file="test/suites/executor-jmeter-other-tests.yaml"
   254  
   255    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   256  }
   257  
   258  k6-smoke() {
   259    name="k6 smoke"
   260    test_crd_file="test/k6/executor-tests/crd/smoke.yaml"
   261    testsuite_name="executor-k6-smoke-tests"
   262    testsuite_file="test/suites/executor-k6-smoke-tests.yaml"
   263  
   264    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   265  }
   266  
   267  k6-other() {
   268    name="k6 other"
   269    test_crd_file="test/k6/executor-tests/crd/other.yaml"
   270    testsuite_name="executor-k6-other-tests"
   271    testsuite_file="test/suites/executor-k6-other-tests.yaml"
   272  
   273    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   274  }
   275  
   276  kubepug-smoke() {
   277    name="kubepug"
   278    test_crd_file="test/kubepug/executor-smoke/crd/crd.yaml"
   279    testsuite_name="executor-kubepug-smoke-tests"
   280    testsuite_file="test/suites/executor-kubepug-smoke-tests.yaml"
   281  
   282    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   283  }
   284  
   285  maven-smoke() {
   286    name="Maven"
   287    test_crd_file="test/maven/executor-smoke/crd/crd.yaml"
   288    testsuite_name="executor-maven-smoke-tests"
   289    testsuite_file="test/suites/executor-maven-smoke-tests.yaml"
   290  
   291    custom_executor_crd_file="test/executors/maven.yaml"
   292  
   293    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   294  }
   295  
   296  playwright-smoke() {
   297    name="playwright"
   298    test_crd_file="test/playwright/executor-tests/crd/crd.yaml"
   299    testsuite_name="executor-playwright-smoke-tests"
   300    testsuite_file="test/suites/executor-playwright-smoke-tests.yaml"
   301  
   302    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   303  }
   304  
   305  postman-smoke() {
   306    name="postman"
   307    test_crd_file="test/postman/executor-tests/crd/crd.yaml"
   308    testsuite_name="executor-postman-smoke-tests"
   309    testsuite_file="test/suites/executor-postman-smoke-tests.yaml"
   310  
   311    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   312  }
   313  
   314  soapui-smoke() {
   315    name="SoapUI"
   316    test_crd_file="test/soapui/executor-smoke/crd/crd.yaml"
   317    testsuite_name="executor-soapui-smoke-tests"
   318    testsuite_file="test/suites/executor-soapui-smoke-tests.yaml"
   319  
   320    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   321  }
   322  
   323  special-cases-failures() {
   324    name="Special Cases - Edge Cases - Expected Failures"
   325    test_crd_file="test/special-cases/edge-cases-expected-fails.yaml"
   326    testsuite_name="expected-fail"
   327    testsuite_file="test/suites/special-cases/edge-cases-expected-fails.yaml"
   328  
   329    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   330  }
   331  
   332  special-cases-large-logs() {
   333    name="Special Cases - Large logs"
   334    test_crd_file="test/special-cases/large-logs.yaml"
   335    testsuite_name="large-logs"
   336    testsuite_file="test/suites/special-cases/large-logs.yaml"
   337  
   338    custom_executor_crd_file="test/executors/container-executor-large-logs.yaml"
   339  
   340    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   341  }
   342  
   343  special-cases-large-artifacts() {
   344    name="Special Cases - Large artifacts"
   345    test_crd_file="test/special-cases/large-artifacts.yaml"
   346    testsuite_name="large-artifacts"
   347    testsuite_file="test/suites/special-cases/large-artifacts.yaml"
   348  
   349    custom_executor_crd_file="test/executors/container-executor-large-artifacts.yaml"
   350  
   351    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file" "$custom_executor_crd_file"
   352  }
   353  
   354  special-cases-jmeter() {
   355    name="Special Cases - JMeter/JMeterd"
   356    test_crd_file="test/jmeter/executor-tests/crd/special-cases.yaml"
   357    testsuite_name="jmeter-special-cases"
   358    testsuite_file="test/suites/special-cases/jmeter-special-cases.yaml"
   359  
   360    common_run "$name" "$test_crd_file" "$testsuite_name" "$testsuite_file"
   361  }
   362  
   363  main() {
   364    case $executor_type in
   365      all)
   366        artillery-smoke
   367        container-curl-smoke
   368        container-cypress-smoke
   369        container-gradle-smoke
   370        container-k6-smoke
   371        container-maven-smoke
   372        container-postman-smoke
   373        container-playwright-smoke
   374        curl-smoke
   375        cypress-smoke
   376        ginkgo-smoke
   377        gradle-smoke
   378        jmeter-smoke
   379        jmeter-other
   380        k6-smoke
   381        k6-other
   382        kubepug-smoke
   383        maven-smoke
   384        postman-smoke
   385        playwright-smoke
   386        soapui-smoke
   387        ;;
   388      smoke)
   389        artillery-smoke
   390        container-curl-smoke
   391        container-cypress-smoke
   392        container-gradle-smoke
   393        container-k6-smoke
   394        container-maven-smoke
   395        container-postman-smoke
   396        container-playwright-smoke
   397        curl-smoke
   398        cypress-smoke
   399        ginkgo-smoke
   400        gradle-smoke
   401        jmeter-smoke
   402        k6-smoke
   403        kubepug-smoke
   404        maven-smoke
   405        playwright-smoke
   406        postman-smoke
   407        soapui-smoke
   408        ;;
   409      special)
   410        special-cases-failures
   411        special-cases-large-logs
   412        special-cases-large-artifacts
   413        special-cases-jmeter
   414        ;;
   415      *)
   416        $executor_type
   417        ;;
   418    esac
   419  
   420    if [ "$custom_testsuite" != '' ] ; then # create/delete/schedule all resources, but execute only ones from Custom Testsuite
   421      filename=$(basename $custom_testsuite)
   422      testsuite_name="${filename%%.*}"
   423  
   424      create_update_testsuite "$testsuite_name" "$custom_testsuite"
   425      run_follow_testsuite "$testsuite_name"
   426    fi
   427  }
   428  
   429  main