Unit testing

How to ensure high quality components.

We recommend adding unit tests to all of your components in a project as soon as possible. Implementing unit tests not only ensures that your component works, but it also makes the project more maintainable in the long run as you will be notified when a component breaks.

This page describes how to add a unit test to your component.

Create unit test

Below is an example of how to add a unit test to a Viash component.

#!/bin/bash

## VIASH START
meta_executable="target/example_bash"
## VIASH END

echo ">>> Create input test file"
echo "foo" > foo.txt

echo ">>> Run executable"
$meta_executable --input foo.txt --output bar.txt

echo ">>> Check whether output file exists"
[[ -f bar.txt ]] (echo "Output file could not be found!" && exit 1)

echo ">>> Check whether input and output file are the same"
cmp foo.txt bar.tx (echo "Input and output files are different!" && exit 1)

echo ">>> Test finished successfully"
using System;
using System.IO;
using System.Diagnostics;

// VIASH START
var meta = new {
  executable = "target/example_csharp"
};
// VIASH END

string inputPath = "foo.txt";
string outputPath = "bar.txt";
string content = "hello\nthere\n";

Console.WriteLine(">>> Create input test file");
File.WriteAllText(inputPath, content);

Console.WriteLine(">>> Run executable");

var startInfo = new ProcessStartInfo(meta.executable)
{
    Arguments = $"--input {inputPath} --output {outputPath}",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    CreateNoWindow = true
};
using(var cmd = Process.Start(startInfo))
{
    cmd.WaitForExit();
}


Console.WriteLine(">>> Check whether output file exists");
if (!File.Exists(outputPath)) {
    Console.WriteLine("Output file was not found");
    Environment.Exit(1);
}

Console.WriteLine(">>> Check whether input and output file are the same");
var outputLines = File.ReadAllText(outputPath);
if (content != outputLines) {
    Console.WriteLine(
        "Input and output should be the same\n" +
        $"expected content: {content}\n" +
        $"found: {outputLines}\n"
    );
    Environment.Exit(1);
}

Console.WriteLine(">>> Test finished successfully");
const fs = require('fs');
const child_process = require('child_process');

// VIASH START
let meta = {
  'executable': 'target/example_js'
};
// VIASH END

const inputPath = 'foo.txt';
const outputPath = 'bar.txt';
const content = 'hello\nthere\n';

console.log('>>> Create input test file');
fs.writeFileSync(inputPath, content, 'utf8');

console.log('>>> Run executable');
const cmdArgs = [
  '--input', inputPath,
  '--output', outputPath
];
const child = child_process.spawnSync(meta["executable"], cmdArgs);
if (child.error) {
  console.error(`Error: ${child.error}`);
  process.exit(1);
}

console.log('>>> Check whether output file exists');
if (!fs.existsSync(outputPath)) {
  console.error('Output file was not found');
  process.exit(1);
}

console.log('>>> Check whether input and output file are the same');
const outputLines = fs.readFileSync(outputPath, 'utf8');
if (content !== outputLines) {
  console.error(
    `Input and output should be the same\n` +
    `expected content: ${content}\n` +
    `found: ${outputLines}\n`
  );
  process.exit(1);
}

console.log('>>> Test finished successfully');
import subprocess
import os

input_path = "foo.txt"
output_path = "bar.txt"
content = "hello\nthere\n"

## VIASH START
meta = {
  "executable": "target/example_python"
}
## VIASH END

print(">>> Create input test file")
with open(input_path, "w") as file:
  file.write(content)

print(">>> Run executable")
cmd_args = [
  meta["executable"],
  "--input", input_path,
  "--output", output_path
]
subprocess.run(cmd_args, check=True)

print(">>> Check whether output file exists")
assert os.path.exists(output_path), "Output file was not found"

print(">>> Check whether input and output file are the same")
with open(output_path, "r", encoding="utf8") as file:
  output_lines = file.read()

assert content == output_lines, \
  "Input and output should be the same" \
  f"expected content: {content}" \
  f"found: {output_lines}"

print(">>> Test finished successfully")
## VIASH START
meta <- list(
  "target/example_r"
)
## VIASH END

input_path <- "foo.txt"
output_path <- "bar.txt"
content <- c("hello", "there")

cat(">>> Create input test file\n")
writeLines(content, input_path)

cat(">>> Run executable\n")
system2(
  meta$executable,
  c(
    "--input", input_path,
    "--output", output_path
  )
)

cat(">>> Check whether output file exists\n")
if (!file.exists(output_path)) {
  stop("Output file was not found")
}

cat(">>> Check whether input and output file are the same\n")
output_lines <- readLines(output_path)

if (!identical(content, output_lines)) {
  stop(paste0(
    "Input and output should be the same\n",
    "expected content: ", content, "\n",
    "found: ", output_lines, "\n"
  ))
}

cat(">>> Test finished successfully\n")
import scala.sys.process._
import java.nio.file.{Files, Paths}
import scala.io.Source

// VIASH START
case class ViashMeta(executable: String)
val meta = ViashMeta(
  "target/example_scala"
)
// VIASH END
val inputPath = Paths.get("foo.txt")
val outputPath = Paths.get("bar.txt")
val content = "hello\nthere"

println(">>> Create input test file")
Files.write(inputPath, content.getBytes("UTF-8"))

println(">>> Run executable")
s"${meta.executable} --input $inputPath --output $outputPath".!

println(">>> Check whether output file exists")
assert(Files.exists(outputPath), "Output file not found")

println(">>> Check whether input and output file are the same")
val outputLines = Source.fromFile(outputPath.toFile()).getLines.mkString("\n")
assert(
  content == outputLines, 
  s"""Output not the same
expected: '$content'
found: '$outputLines'
""".stripMargin
)

println(">>> Test finished successfully")
  1. Create an input file “foo.txt” with some sample content.
  2. Run an executable file specified in the “meta” dictionary with the arguments “–input foo.txt” and “–output bar.txt”.
  3. Check whether the output file “bar.txt” exists.
  4. Check whether the content of the output file is the same as the content of the input file.
  5. If both checks pass, the script prints “Test finished successfully”.
Important

A test script doesn’t need to be written in the same scripting language as the main script, as long as all of the required dependencies are available. This means the main script could be written in R, but the unit test could be written in Bash.

Add test to config

Next, we need to add the unit test to the test_resources section in the Viash config.

functionality:
  name: example_bash
  description: A minimal example component.
  arguments:
    - type: file
      name: --input
      example: file.txt
      required: true
    - type: file
      name: --output
      direction: output
      example: output.txt
      required: true
  resources:
    - type: bash_script
      path: script.sh
  test_resources:
    - type: bash_script
      path: test.sh
platforms:
  - type: docker
    image: bash:4.0
  - type: native
  - type: nextflow
functionality:
  name: example_csharp
  description: A minimal example component.
  arguments:
    - type: file
      name: --input
      example: file.txt
      required: true
    - type: file
      name: --output
      direction: output
      example: output.txt
      required: true
  resources:
    - type: csharp_script
      path: script.csx
  test_resources:
    - type: csharp_script
      path: test.csx
platforms:
  - type: docker
    image: ghcr.io/data-intuitive/dotnet-script:1.3.1
  - type: native
  - type: nextflow
functionality:
  name: example_js
  description: A minimal example component.
  arguments:
    - type: file
      name: --input
      example: file.txt
      required: true
    - type: file
      name: --output
      direction: output
      example: output.txt
      required: true
  resources:
    - type: javascript_script
      path: script.js
  test_resources:
    - type: javascript_script
      path: test.js
platforms:
  - type: docker
    image: node:19-bullseye-slim
  - type: native
  - type: nextflow
functionality:
  name: example_python
  description: A minimal example component.
  arguments:
    - type: file
      name: --input
      example: file.txt
      required: true
    - type: file
      name: --output
      direction: output
      example: output.txt
      required: true
  resources:
    - type: python_script
      path: script.py
  test_resources:
    - type: python_script
      path: test.py
platforms:
  - type: docker
    image: python:3.10-slim
  - type: native
  - type: nextflow
functionality:
  name: example_r
  description: A minimal example component.
  arguments:
    - type: file
      name: --input
      example: file.txt
      required: true
    - type: file
      name: --output
      direction: output
      example: output.txt
      required: true
  resources:
    - type: r_script
      path: script.R
  test_resources:
    - type: r_script
      path: test.R
platforms:
  - type: docker
    image: eddelbuettel/r2u:22.04
  - type: native
  - type: nextflow
functionality:
  name: example_scala
  description: A minimal example component.
  arguments:
    - type: file
      name: --input
      example: file.txt
      required: true
    - type: file
      name: --output
      direction: output
      example: output.txt
      required: true
  resources:
    - type: scala_script
      path: script.scala
  test_resources:
    - type: scala_script
      path: test.scala
platforms:
  - type: docker
    image: sbtscala/scala-sbt:eclipse-temurin-19_36_1.7.2_2.13.10
  - type: native
  - type: nextflow

Note that if you can add multiple unit tests to the test_resources section, they will all be evaluated. You can also add other resources, similar to what is described in the page on adding resources.

Run the unit test

You can run the unit test as follows:

viash test config.vsh.yaml
Running tests in temporary directory: '/tmp/viash_test_example_bash_7121006059265778022'
====================================================================
+/tmp/viash_test_example_bash_7121006059265778022/build_executable/example_bash ---verbosity 6 ---setup cachedbuild
[notice] Building container 'example_bash:test' with Dockerfile
[info] Running 'docker build -t example_bash:test /tmp/viash_test_example_bash_7121006059265778022/build_executable -f /tmp/viash_test_example_bash_7121006059265778022/build_executable/tmp/dockerbuild-example_bash-FjcTAv/Dockerfile'
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 286B done
#1 DONE 0.0s

#2 [auth] library/bash:pull token for registry-1.docker.io
#2 DONE 0.0s

#3 [internal] load metadata for docker.io/library/bash:4.0
#3 DONE 0.3s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s

#5 [1/2] FROM docker.io/library/bash:4.0@sha256:ed3f00166aa724197a0a34c0de5e5eb34e77bebae3ab91247800972514ac1d5b
#5 resolve docker.io/library/bash:4.0@sha256:ed3f00166aa724197a0a34c0de5e5eb34e77bebae3ab91247800972514ac1d5b done
#5 sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99 1.05MB / 3.62MB 0.1s
#5 sha256:b44d33f8a9ca99962af0faa55c5a2d219c2d9617fd39f2aa39e082ab746208c5 0B / 1.74MB 0.1s
#5 sha256:5e77b2fc48a84fc2108c44f748593e07f5bdf923a2e157cab3c209e4a28e0930 342B / 342B 0.1s done
#5 sha256:ed3f00166aa724197a0a34c0de5e5eb34e77bebae3ab91247800972514ac1d5b 10.06kB / 10.06kB done
#5 sha256:4703ccba9e9869c8f1469ef5d4e960c3b1f8f5bb4ee9557f44c5a24509704f00 1.51kB / 1.51kB done
#5 sha256:29e9b42aff84cf5a13d2de98cee226a9328c27706af819766032849321b12fb4 4.84kB / 4.84kB done
#5 sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99 3.62MB / 3.62MB 0.1s done
#5 sha256:b44d33f8a9ca99962af0faa55c5a2d219c2d9617fd39f2aa39e082ab746208c5 1.74MB / 1.74MB 0.2s done
#5 extracting sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99 0.1s done
#5 extracting sha256:b44d33f8a9ca99962af0faa55c5a2d219c2d9617fd39f2aa39e082ab746208c5 0.0s done
#5 extracting sha256:5e77b2fc48a84fc2108c44f748593e07f5bdf923a2e157cab3c209e4a28e0930
#5 extracting sha256:5e77b2fc48a84fc2108c44f748593e07f5bdf923a2e157cab3c209e4a28e0930 done
#5 DONE 0.3s

#6 [2/2] RUN :
#6 DONE 0.2s

#7 exporting to image
#7 exporting layers
#7 exporting layers 0.4s done
#7 writing image sha256:e77f5da9a1bc07e0c0918dd62aa9de715a902b8978be87b1143f85b028d10e7d done
#7 naming to docker.io/library/example_bash:test done
#7 DONE 0.4s
====================================================================
+/tmp/viash_test_example_bash_7121006059265778022/test_test/test_executable
>>> Create input test file
>>> Run executable
Copying 'foo.txt' to 'bar.txt'.
>>> Check whether output file exists
>>> Check whether input and output file are the same
>>> Test finished successfully
====================================================================
SUCCESS! All 1 out of 1 test scripts succeeded!
Cleaning up temporary directory
viash test config.vsh.yaml
Running tests in temporary directory: '/tmp/viash_test_example_csharp_11643537256665745046'
====================================================================
+/tmp/viash_test_example_csharp_11643537256665745046/build_executable/example_csharp ---verbosity 6 ---setup cachedbuild
[notice] Building container 'example_csharp:test' with Dockerfile
[info] Running 'docker build -t example_csharp:test /tmp/viash_test_example_csharp_11643537256665745046/build_executable -f /tmp/viash_test_example_csharp_11643537256665745046/build_executable/tmp/dockerbuild-example_csharp-xpvEo2/Dockerfile'
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 322B done
#1 DONE 0.0s

#2 [internal] load metadata for ghcr.io/data-intuitive/dotnet-script:1.3.1
#2 DONE 0.3s

#3 [internal] load .dockerignore
#3 transferring context: 2B done
#3 DONE 0.0s

#4 [1/2] FROM ghcr.io/data-intuitive/dotnet-script:1.3.1@sha256:d95bf2a2b3e095e5b02960ab4ddd4674d798a1493ed0dc5cf427c77a5ed90ed3
#4 resolve ghcr.io/data-intuitive/dotnet-script:1.3.1@sha256:d95bf2a2b3e095e5b02960ab4ddd4674d798a1493ed0dc5cf427c77a5ed90ed3 done
#4 extracting sha256:df9b9388f04ad6279a7410b85cedfdcb2208c0a003da7ab5613af71079148139
#4 sha256:ae4d45b87ee640aec6f031a1695c6d814e0026ea6fb3220e3daaad90b0f09bda 2.21kB / 2.21kB done
#4 sha256:3ae3a38ed752842e75d1609c931b29e565b53c24229c87bf1ba64251b5f1f094 0B / 1.74MB 0.1s
#4 sha256:d772c6b09cca24a6ec7cb06facff8b7be509b608330bd035f91b70388a94d3b4 0B / 31.26MB 0.1s
#4 sha256:d95bf2a2b3e095e5b02960ab4ddd4674d798a1493ed0dc5cf427c77a5ed90ed3 856B / 856B done
#4 sha256:df9b9388f04ad6279a7410b85cedfdcb2208c0a003da7ab5613af71079148139 2.81MB / 2.81MB 0.1s done
#4 sha256:1102243946aeba437ebb7c7ab5559d465d660ed57a1f13888c89692401cd5bb6 7.71kB / 7.71kB done
#4 sha256:2c56128c63bdf4a1d571ed930304f4eb77e8e2fde7ce03ddf6073e3df9abf8ad 0B / 8.65MB 0.1s
#4 extracting sha256:df9b9388f04ad6279a7410b85cedfdcb2208c0a003da7ab5613af71079148139 0.0s done
#4 sha256:3ae3a38ed752842e75d1609c931b29e565b53c24229c87bf1ba64251b5f1f094 1.74MB / 1.74MB 0.2s done
#4 sha256:d772c6b09cca24a6ec7cb06facff8b7be509b608330bd035f91b70388a94d3b4 7.88MB / 31.26MB 0.2s
#4 sha256:2c56128c63bdf4a1d571ed930304f4eb77e8e2fde7ce03ddf6073e3df9abf8ad 8.65MB / 8.65MB 0.2s
#4 extracting sha256:3ae3a38ed752842e75d1609c931b29e565b53c24229c87bf1ba64251b5f1f094 0.1s done
#4 sha256:6c2be99410893469a9e0d8f0ff537b22f651479bf64c5dcf269d2e5267e85749 0B / 20.91MB 0.2s
#4 sha256:d772c6b09cca24a6ec7cb06facff8b7be509b608330bd035f91b70388a94d3b4 25.55MB / 31.26MB 0.3s
#4 sha256:2c56128c63bdf4a1d571ed930304f4eb77e8e2fde7ce03ddf6073e3df9abf8ad 8.65MB / 8.65MB 0.2s done
#4 sha256:6c2be99410893469a9e0d8f0ff537b22f651479bf64c5dcf269d2e5267e85749 8.28MB / 20.91MB 0.3s
#4 sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 0B / 105.91MB 0.3s
#4 extracting sha256:d772c6b09cca24a6ec7cb06facff8b7be509b608330bd035f91b70388a94d3b4
#4 sha256:d772c6b09cca24a6ec7cb06facff8b7be509b608330bd035f91b70388a94d3b4 31.26MB / 31.26MB 0.4s done
#4 sha256:6c2be99410893469a9e0d8f0ff537b22f651479bf64c5dcf269d2e5267e85749 20.91MB / 20.91MB 0.4s done
#4 sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 15.73MB / 105.91MB 0.4s
#4 sha256:4937da28ea60b32af53a8d507ea830228a05f22a7be2ae1ef0134bcd0e3bafba 0B / 68.90MB 0.4s
#4 sha256:5e733ff9c30825005ec05ee10b784276e8034171be7eeaa10d6f876fc7bb5383 0B / 12.80MB 0.4s
#4 sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 23.07MB / 105.91MB 0.5s
#4 sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 41.94MB / 105.91MB 0.6s
#4 sha256:4937da28ea60b32af53a8d507ea830228a05f22a7be2ae1ef0134bcd0e3bafba 16.78MB / 68.90MB 0.6s
#4 sha256:5e733ff9c30825005ec05ee10b784276e8034171be7eeaa10d6f876fc7bb5383 4.19MB / 12.80MB 0.6s
#4 sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 65.01MB / 105.91MB 0.8s
#4 sha256:4937da28ea60b32af53a8d507ea830228a05f22a7be2ae1ef0134bcd0e3bafba 40.89MB / 68.90MB 0.8s
#4 sha256:5e733ff9c30825005ec05ee10b784276e8034171be7eeaa10d6f876fc7bb5383 12.80MB / 12.80MB 0.7s done
#4 sha256:16def9f17d8d9988a074a1d3ae42cb041b261068b3a455c99141bb8df243e9a4 829.24kB / 829.24kB 0.8s done
#4 sha256:03ac08f8f1d3c646d8f456ad0e2307b56511e692bcef7a4d67ec194ba81f59e7 0B / 103B 0.8s
#4 sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 79.69MB / 105.91MB 0.9s
#4 extracting sha256:d772c6b09cca24a6ec7cb06facff8b7be509b608330bd035f91b70388a94d3b4 0.4s done
#4 sha256:4937da28ea60b32af53a8d507ea830228a05f22a7be2ae1ef0134bcd0e3bafba 53.48MB / 68.90MB 0.9s
#4 sha256:03ac08f8f1d3c646d8f456ad0e2307b56511e692bcef7a4d67ec194ba81f59e7 103B / 103B 0.9s
#4 sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 102.76MB / 105.91MB 1.1s
#4 sha256:4937da28ea60b32af53a8d507ea830228a05f22a7be2ae1ef0134bcd0e3bafba 68.90MB / 68.90MB 1.1s done
#4 sha256:03ac08f8f1d3c646d8f456ad0e2307b56511e692bcef7a4d67ec194ba81f59e7 103B / 103B 1.0s done
#4 sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 105.91MB / 105.91MB 1.1s done
#4 extracting sha256:2c56128c63bdf4a1d571ed930304f4eb77e8e2fde7ce03ddf6073e3df9abf8ad 0.1s
#4 extracting sha256:2c56128c63bdf4a1d571ed930304f4eb77e8e2fde7ce03ddf6073e3df9abf8ad 0.1s done
#4 extracting sha256:6c2be99410893469a9e0d8f0ff537b22f651479bf64c5dcf269d2e5267e85749 0.1s
#4 extracting sha256:6c2be99410893469a9e0d8f0ff537b22f651479bf64c5dcf269d2e5267e85749 0.2s done
#4 extracting sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73
#4 extracting sha256:5a0c86bcd85d690fae1d36f59c4041c4142835310a431e3f1b00446763d7db73 1.9s done
#4 extracting sha256:5e733ff9c30825005ec05ee10b784276e8034171be7eeaa10d6f876fc7bb5383
#4 extracting sha256:5e733ff9c30825005ec05ee10b784276e8034171be7eeaa10d6f876fc7bb5383 0.3s done
#4 extracting sha256:4937da28ea60b32af53a8d507ea830228a05f22a7be2ae1ef0134bcd0e3bafba
#4 extracting sha256:4937da28ea60b32af53a8d507ea830228a05f22a7be2ae1ef0134bcd0e3bafba 0.5s done
#4 extracting sha256:16def9f17d8d9988a074a1d3ae42cb041b261068b3a455c99141bb8df243e9a4
#4 extracting sha256:16def9f17d8d9988a074a1d3ae42cb041b261068b3a455c99141bb8df243e9a4 0.0s done
#4 extracting sha256:03ac08f8f1d3c646d8f456ad0e2307b56511e692bcef7a4d67ec194ba81f59e7 done
#4 DONE 5.1s

#5 [2/2] RUN :
#5 DONE 0.2s

#6 exporting to image
#6 exporting layers
#6 exporting layers 0.2s done
#6 writing image sha256:14a95a3a53f5aa5da07015a5fca090c89df26dba873cd19b51980ba6f595151f done
#6 naming to docker.io/library/example_csharp:test done
#6 DONE 0.2s
====================================================================
+/tmp/viash_test_example_csharp_11643537256665745046/test_test/test_executable
>>> Create input test file
>>> Run executable
>>> Check whether output file exists
>>> Check whether input and output file are the same
>>> Test finished successfully
====================================================================
SUCCESS! All 1 out of 1 test scripts succeeded!
Cleaning up temporary directory
viash test config.vsh.yaml
Running tests in temporary directory: '/tmp/viash_test_example_js_1033756504201999550'
====================================================================
+/tmp/viash_test_example_js_1033756504201999550/build_executable/example_js ---verbosity 6 ---setup cachedbuild
[notice] Building container 'example_js:test' with Dockerfile
[info] Running 'docker build -t example_js:test /tmp/viash_test_example_js_1033756504201999550/build_executable -f /tmp/viash_test_example_js_1033756504201999550/build_executable/tmp/dockerbuild-example_js-0T1737/Dockerfile'
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 297B done
#1 DONE 0.0s

#2 [auth] library/node:pull token for registry-1.docker.io
#2 DONE 0.0s

#3 [internal] load metadata for docker.io/library/node:19-bullseye-slim
#3 DONE 0.3s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s

#5 [1/2] FROM docker.io/library/node:19-bullseye-slim@sha256:f58f1fcf5c9ff9e3752993edb4ed6dbd35697124c85a43f3b97aa054500b0534
#5 resolve docker.io/library/node:19-bullseye-slim@sha256:f58f1fcf5c9ff9e3752993edb4ed6dbd35697124c85a43f3b97aa054500b0534 done
#5 sha256:f58f1fcf5c9ff9e3752993edb4ed6dbd35697124c85a43f3b97aa054500b0534 1.21kB / 1.21kB done
#5 sha256:63b5ca0f90dbaf64465a83d46276e133eab30410f642808d158bf98928811999 1.37kB / 1.37kB done
#5 sha256:adbc02574b521bb652d771c8ac0282c724b9fe90c001f3bab0825c32092c9036 6.84kB / 6.84kB done
#5 sha256:f03b40093957615593f2ed142961afb6b540507e0b47e3f7626ba5e02efbbbf1 4.19MB / 31.40MB 0.1s
#5 sha256:0bfad7312c25e414fc3d0e3640a77bd4b5c74d2118595670999afef9758cb49b 0B / 4.19kB 0.1s
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 0B / 46.62MB 0.1s
#5 sha256:f03b40093957615593f2ed142961afb6b540507e0b47e3f7626ba5e02efbbbf1 18.87MB / 31.40MB 0.3s
#5 sha256:0bfad7312c25e414fc3d0e3640a77bd4b5c74d2118595670999afef9758cb49b 4.19kB / 4.19kB 0.1s done
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 12.58MB / 46.62MB 0.3s
#5 sha256:477c7ebfb8500396b86c69952acb17b909a0a63da41e03dd4046e2c809722c6e 2.76MB / 2.76MB 0.2s done
#5 sha256:8bb4aa3e51be63d4a2e5bd30ab9cd478a916ed3c5c0212a44b96fd743e0e0f2f 450B / 450B 0.3s done
#5 sha256:f03b40093957615593f2ed142961afb6b540507e0b47e3f7626ba5e02efbbbf1 30.41MB / 31.40MB 0.4s
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 15.73MB / 46.62MB 0.4s
#5 extracting sha256:f03b40093957615593f2ed142961afb6b540507e0b47e3f7626ba5e02efbbbf1
#5 sha256:f03b40093957615593f2ed142961afb6b540507e0b47e3f7626ba5e02efbbbf1 31.40MB / 31.40MB 0.4s done
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 19.92MB / 46.62MB 0.5s
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 23.07MB / 46.62MB 0.6s
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 26.21MB / 46.62MB 0.7s
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 30.41MB / 46.62MB 0.9s
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 34.60MB / 46.62MB 1.0s
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 46.62MB / 46.62MB 1.2s
#5 sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 46.62MB / 46.62MB 1.2s done
#5 extracting sha256:f03b40093957615593f2ed142961afb6b540507e0b47e3f7626ba5e02efbbbf1 1.1s done
#5 extracting sha256:0bfad7312c25e414fc3d0e3640a77bd4b5c74d2118595670999afef9758cb49b done
#5 extracting sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c
#5 extracting sha256:56db04c463e993ac037103947cd590d52fcddcb17ad04285a0ca4c3510c0738c 1.7s done
#5 extracting sha256:477c7ebfb8500396b86c69952acb17b909a0a63da41e03dd4046e2c809722c6e
#5 extracting sha256:477c7ebfb8500396b86c69952acb17b909a0a63da41e03dd4046e2c809722c6e 0.1s done
#5 extracting sha256:8bb4aa3e51be63d4a2e5bd30ab9cd478a916ed3c5c0212a44b96fd743e0e0f2f done
#5 DONE 3.8s

#6 [2/2] RUN :
#6 DONE 0.2s

#7 exporting to image
#7 exporting layers
#7 exporting layers 0.5s done
#7 writing image sha256:6a9495283f50c4919efc132d4fa7efbb1ec2cd50c3d97b818f9915a76abf1a13 done
#7 naming to docker.io/library/example_js:test done
#7 DONE 0.5s
====================================================================
+/tmp/viash_test_example_js_1033756504201999550/test_test/test_executable
>>> Create input test file
>>> Run executable
>>> Check whether output file exists
>>> Check whether input and output file are the same
>>> Test finished successfully
====================================================================
SUCCESS! All 1 out of 1 test scripts succeeded!
Cleaning up temporary directory
viash test config.vsh.yaml
Running tests in temporary directory: '/tmp/viash_test_example_python_6183776251449944425'
====================================================================
+/tmp/viash_test_example_python_6183776251449944425/build_executable/example_python ---verbosity 6 ---setup cachedbuild
[notice] Building container 'example_python:test' with Dockerfile
[info] Running 'docker build -t example_python:test /tmp/viash_test_example_python_6183776251449944425/build_executable -f /tmp/viash_test_example_python_6183776251449944425/build_executable/tmp/dockerbuild-example_python-azGTyK/Dockerfile'
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 296B done
#1 DONE 0.0s

#2 [auth] library/python:pull token for registry-1.docker.io
#2 DONE 0.0s

#3 [internal] load metadata for docker.io/library/python:3.10-slim
#3 DONE 0.3s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s

#5 [1/2] FROM docker.io/library/python:3.10-slim@sha256:3be54aca807a43b5a1fa2133b1cbb4b58a018d6ebb1588cf1050b7cbebf15d55
#5 resolve docker.io/library/python:3.10-slim@sha256:3be54aca807a43b5a1fa2133b1cbb4b58a018d6ebb1588cf1050b7cbebf15d55 done
#5 sha256:3be54aca807a43b5a1fa2133b1cbb4b58a018d6ebb1588cf1050b7cbebf15d55 9.13kB / 9.13kB done
#5 sha256:8244f266195f442379acd0e7d8918b1ef3967050ebf49c40291e89d0a1ba8f94 1.94kB / 1.94kB done
#5 sha256:de7ad0443e19e374770dc29d7c7677a2f9e2162918003747266fd3b4f983cd85 6.92kB / 6.92kB done
#5 sha256:f11c1adaa26e078479ccdd45312ea3b88476441b91be0ec898a7e07bfd05badc 0B / 29.13MB 0.1s
#5 sha256:e9e504b3ee6224b21b006ddf334064b7764c2aadcc9d8be012cf44640f045483 0B / 3.51MB 0.1s
#5 sha256:455661270fd3aeac7e92f2eabcb2b9fd03c0f97dcc26aef6889555cb9ebc23a4 1.05MB / 12.38MB 0.1s
#5 sha256:e9e504b3ee6224b21b006ddf334064b7764c2aadcc9d8be012cf44640f045483 3.51MB / 3.51MB 0.2s done
#5 sha256:455661270fd3aeac7e92f2eabcb2b9fd03c0f97dcc26aef6889555cb9ebc23a4 12.38MB / 12.38MB 0.2s
#5 sha256:8c0cd2ed72c6f636fe88f580adf3f0c5f5efd9254dc3feece396ac26fe3b8eaf 0B / 231B 0.2s
#5 sha256:f11c1adaa26e078479ccdd45312ea3b88476441b91be0ec898a7e07bfd05badc 12.58MB / 29.13MB 0.4s
#5 sha256:455661270fd3aeac7e92f2eabcb2b9fd03c0f97dcc26aef6889555cb9ebc23a4 12.38MB / 12.38MB 0.2s done
#5 sha256:8c0cd2ed72c6f636fe88f580adf3f0c5f5efd9254dc3feece396ac26fe3b8eaf 231B / 231B 0.2s done
#5 sha256:3d2f440aae987a194992068ec8c982c0295ac62537989c70aeccce6fa1548fd6 3.16MB / 3.16MB 0.3s done
#5 sha256:f11c1adaa26e078479ccdd45312ea3b88476441b91be0ec898a7e07bfd05badc 14.68MB / 29.13MB 0.5s
#5 sha256:f11c1adaa26e078479ccdd45312ea3b88476441b91be0ec898a7e07bfd05badc 16.78MB / 29.13MB 0.6s
#5 sha256:f11c1adaa26e078479ccdd45312ea3b88476441b91be0ec898a7e07bfd05badc 22.02MB / 29.13MB 0.7s
#5 sha256:f11c1adaa26e078479ccdd45312ea3b88476441b91be0ec898a7e07bfd05badc 29.13MB / 29.13MB 0.9s done
#5 extracting sha256:f11c1adaa26e078479ccdd45312ea3b88476441b91be0ec898a7e07bfd05badc 0.1s
#5 extracting sha256:f11c1adaa26e078479ccdd45312ea3b88476441b91be0ec898a7e07bfd05badc 1.0s done
#5 extracting sha256:e9e504b3ee6224b21b006ddf334064b7764c2aadcc9d8be012cf44640f045483
#5 extracting sha256:e9e504b3ee6224b21b006ddf334064b7764c2aadcc9d8be012cf44640f045483 0.1s done
#5 extracting sha256:455661270fd3aeac7e92f2eabcb2b9fd03c0f97dcc26aef6889555cb9ebc23a4
#5 extracting sha256:455661270fd3aeac7e92f2eabcb2b9fd03c0f97dcc26aef6889555cb9ebc23a4 0.4s done
#5 extracting sha256:8c0cd2ed72c6f636fe88f580adf3f0c5f5efd9254dc3feece396ac26fe3b8eaf
#5 extracting sha256:8c0cd2ed72c6f636fe88f580adf3f0c5f5efd9254dc3feece396ac26fe3b8eaf done
#5 extracting sha256:3d2f440aae987a194992068ec8c982c0295ac62537989c70aeccce6fa1548fd6 0.1s
#5 extracting sha256:3d2f440aae987a194992068ec8c982c0295ac62537989c70aeccce6fa1548fd6 0.2s done
#5 DONE 2.9s

#6 [2/2] RUN :
#6 DONE 0.2s

#7 exporting to image
#7 exporting layers
#7 exporting layers 0.3s done
#7 writing image sha256:1a3aab7cf12b1bd3908330eddf6286b78ddc1e4ee68fe335e89aed03b32f933d done
#7 naming to docker.io/library/example_python:test done
#7 DONE 0.4s
====================================================================
+/tmp/viash_test_example_python_6183776251449944425/test_test/test_executable
Copying 'foo.txt' to 'bar.txt'.
>>> Create input test file
>>> Run executable
>>> Check whether output file exists
>>> Check whether input and output file are the same
>>> Test finished successfully
====================================================================
SUCCESS! All 1 out of 1 test scripts succeeded!
Cleaning up temporary directory
viash test config.vsh.yaml
Running tests in temporary directory: '/tmp/viash_test_example_r_14519559424064846029'
====================================================================
+/tmp/viash_test_example_r_14519559424064846029/build_executable/example_r ---verbosity 6 ---setup cachedbuild
[notice] Building container 'example_r:test' with Dockerfile
[info] Running 'docker build -t example_r:test /tmp/viash_test_example_r_14519559424064846029/build_executable -f /tmp/viash_test_example_r_14519559424064846029/build_executable/tmp/dockerbuild-example_r-rxuD5D/Dockerfile'
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 297B done
#1 DONE 0.0s

#2 [auth] eddelbuettel/r2u:pull token for registry-1.docker.io
#2 DONE 0.0s

#3 [internal] load metadata for docker.io/eddelbuettel/r2u:22.04
#3 DONE 0.3s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s

#5 [1/2] FROM docker.io/eddelbuettel/r2u:22.04@sha256:19743c5d7d6ea79e80653b5f5c0a0fd24978959b5cbe6963f4afacc7282d9b2d
#5 resolve docker.io/eddelbuettel/r2u:22.04@sha256:19743c5d7d6ea79e80653b5f5c0a0fd24978959b5cbe6963f4afacc7282d9b2d done
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 0B / 43.94MB 0.1s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 0B / 242.17MB 0.1s
#5 sha256:19743c5d7d6ea79e80653b5f5c0a0fd24978959b5cbe6963f4afacc7282d9b2d 954B / 954B done
#5 sha256:58c7af82af1f2466227bf182914ba3bdabe245f39e3f17219ac3e1ca95143395 5.85kB / 5.85kB done
#5 sha256:e96e057aae67380a4ddb16c337c5c3669d97fdff69ec537f02aa2cc30d814281 2.10MB / 30.43MB 0.1s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 4.19MB / 43.94MB 0.3s
#5 sha256:e96e057aae67380a4ddb16c337c5c3669d97fdff69ec537f02aa2cc30d814281 12.58MB / 30.43MB 0.3s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 10.49MB / 43.94MB 0.5s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 28.31MB / 242.17MB 0.5s
#5 sha256:e96e057aae67380a4ddb16c337c5c3669d97fdff69ec537f02aa2cc30d814281 20.97MB / 30.43MB 0.5s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 16.78MB / 43.94MB 0.6s
#5 sha256:e96e057aae67380a4ddb16c337c5c3669d97fdff69ec537f02aa2cc30d814281 28.31MB / 30.43MB 0.6s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 19.92MB / 43.94MB 0.7s
#5 sha256:e96e057aae67380a4ddb16c337c5c3669d97fdff69ec537f02aa2cc30d814281 30.43MB / 30.43MB 0.7s done
#5 extracting sha256:e96e057aae67380a4ddb16c337c5c3669d97fdff69ec537f02aa2cc30d814281 0.1s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 28.31MB / 43.94MB 0.9s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 52.63MB / 242.17MB 0.9s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 31.46MB / 43.94MB 1.0s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 37.75MB / 43.94MB 1.2s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 65.01MB / 242.17MB 1.2s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 41.94MB / 43.94MB 1.4s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 79.69MB / 242.17MB 1.4s
#5 sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 43.94MB / 43.94MB 1.5s done
#5 extracting sha256:e96e057aae67380a4ddb16c337c5c3669d97fdff69ec537f02aa2cc30d814281 0.9s done
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 97.52MB / 242.17MB 1.8s
#5 extracting sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 110.10MB / 242.17MB 2.1s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 130.02MB / 242.17MB 2.4s
#5 extracting sha256:eaff24e0879bbea00d85cf18271323596be3ff755468261f0ec9c5f9806429da 0.6s done
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 150.99MB / 242.17MB 2.8s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 173.02MB / 242.17MB 3.3s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 187.70MB / 242.17MB 3.5s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 207.62MB / 242.17MB 3.8s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 221.25MB / 242.17MB 4.2s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 234.88MB / 242.17MB 4.5s
#5 sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 242.17MB / 242.17MB 5.1s done
#5 extracting sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86
#5 extracting sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 5.1s
#5 extracting sha256:9d32dcd802e5d4fe75096c7366e6cbd9045fbe1b948143cf2fd6350350b28e86 5.4s done
#5 DONE 10.6s

#6 [2/2] RUN :
#6 DONE 1.3s

#7 exporting to image
#7 exporting layers
#7 exporting layers 0.7s done
#7 writing image sha256:7088913af0b97be638046c67584c7ea0c4bc0b898c18fbdd07823f24aa79cc43 done
#7 naming to docker.io/library/example_r:test done
#7 DONE 0.7s
====================================================================
+/tmp/viash_test_example_r_14519559424064846029/test_test/test_executable
>>> Create input test file
>>> Run executable
Copying 'foo.txt' to 'bar.txt'.
[1] TRUE
>>> Check whether output file exists
>>> Check whether input and output file are the same
>>> Test finished successfully
====================================================================
SUCCESS! All 1 out of 1 test scripts succeeded!
Cleaning up temporary directory
viash test config.vsh.yaml
Running tests in temporary directory: '/tmp/viash_test_example_scala_9338043967322412715'
====================================================================
+/tmp/viash_test_example_scala_9338043967322412715/build_executable/example_scala ---verbosity 6 ---setup cachedbuild
[notice] Building container 'example_scala:test' with Dockerfile
[info] Running 'docker build -t example_scala:test /tmp/viash_test_example_scala_9338043967322412715/build_executable -f /tmp/viash_test_example_scala_9338043967322412715/build_executable/tmp/dockerbuild-example_scala-1VNBjS/Dockerfile'
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 333B done
#1 DONE 0.0s

#2 [auth] sbtscala/scala-sbt:pull token for registry-1.docker.io
#2 DONE 0.0s

#3 [internal] load metadata for docker.io/sbtscala/scala-sbt:eclipse-temurin-19_36_1.7.2_2.13.10
#3 DONE 0.6s

#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s

#5 [1/2] FROM docker.io/sbtscala/scala-sbt:eclipse-temurin-19_36_1.7.2_2.13.10@sha256:440234e283754375d5ab6bcb35e2d470f9dabeaaeb639d8c0708fac2d3707e0c
#5 resolve docker.io/sbtscala/scala-sbt:eclipse-temurin-19_36_1.7.2_2.13.10@sha256:440234e283754375d5ab6bcb35e2d470f9dabeaaeb639d8c0708fac2d3707e0c done
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 0B / 200.85MB 0.1s
#5 sha256:301a8b74f71f85f3a31e9c7e7fedd5b001ead5bcf895bc2911c1d260e06bd987 0B / 30.43MB 0.1s
#5 sha256:c5c735a83dbd58e1c83f8d52abdc51068e27c00405f53d59802d4954a6b5398a 7.34MB / 16.99MB 0.1s
#5 sha256:06478611ba16efc6663ccf5f22a29c990c53aed6848bc58c54c67dc32d8aef13 3.04kB / 3.04kB done
#5 sha256:76808e2ea8df2d9cac1d275426e51a2190369f706076c55ac2da3823bef0a019 10.89kB / 10.89kB done
#5 sha256:440234e283754375d5ab6bcb35e2d470f9dabeaaeb639d8c0708fac2d3707e0c 743B / 743B done
#5 sha256:301a8b74f71f85f3a31e9c7e7fedd5b001ead5bcf895bc2911c1d260e06bd987 19.92MB / 30.43MB 0.3s
#5 sha256:c5c735a83dbd58e1c83f8d52abdc51068e27c00405f53d59802d4954a6b5398a 16.99MB / 16.99MB 0.2s done
#5 sha256:2af8e2a543d81b57575a2e457bd1e98ffc061b15639dac3be5ff6c2702b9ea1a 175B / 175B 0.2s done
#5 sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 0B / 29.75MB 0.3s
#5 sha256:301a8b74f71f85f3a31e9c7e7fedd5b001ead5bcf895bc2911c1d260e06bd987 27.26MB / 30.43MB 0.4s
#5 sha256:301a8b74f71f85f3a31e9c7e7fedd5b001ead5bcf895bc2911c1d260e06bd987 30.43MB / 30.43MB 0.5s done
#5 sha256:320659737461e071e3d809231861a7487daaa79805c57f97015ff020f34a939a 0B / 23.71MB 0.5s
#5 extracting sha256:301a8b74f71f85f3a31e9c7e7fedd5b001ead5bcf895bc2911c1d260e06bd987
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 13.63MB / 200.85MB 0.6s
#5 sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 3.15MB / 29.75MB 0.7s
#5 sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 5.24MB / 29.75MB 0.8s
#5 sha256:320659737461e071e3d809231861a7487daaa79805c57f97015ff020f34a939a 5.24MB / 23.71MB 0.8s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 29.36MB / 200.85MB 0.9s
#5 sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 9.44MB / 29.75MB 0.9s
#5 sha256:320659737461e071e3d809231861a7487daaa79805c57f97015ff020f34a939a 11.53MB / 23.71MB 0.9s
#5 sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 16.78MB / 29.75MB 1.1s
#5 sha256:320659737461e071e3d809231861a7487daaa79805c57f97015ff020f34a939a 22.02MB / 23.71MB 1.1s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 40.89MB / 200.85MB 1.2s
#5 sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 20.97MB / 29.75MB 1.2s
#5 sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 28.31MB / 29.75MB 1.3s
#5 sha256:320659737461e071e3d809231861a7487daaa79805c57f97015ff020f34a939a 23.71MB / 23.71MB 1.3s done
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 0B / 40.48MB 1.3s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 52.43MB / 200.85MB 1.5s
#5 sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 29.75MB / 29.75MB 1.3s done
#5 extracting sha256:301a8b74f71f85f3a31e9c7e7fedd5b001ead5bcf895bc2911c1d260e06bd987 0.9s done
#5 sha256:c9480a4b593fb5abc117a5e01c80d8495c9fd89e743757730c712545f425c9f3 0B / 183B 1.5s
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 3.15MB / 40.48MB 1.6s
#5 extracting sha256:c5c735a83dbd58e1c83f8d52abdc51068e27c00405f53d59802d4954a6b5398a 0.1s
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 8.39MB / 40.48MB 1.7s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 63.96MB / 200.85MB 1.8s
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 13.63MB / 40.48MB 1.8s
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 18.87MB / 40.48MB 1.9s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 75.50MB / 200.85MB 2.1s
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 29.36MB / 40.48MB 2.1s
#5 sha256:c9480a4b593fb5abc117a5e01c80d8495c9fd89e743757730c712545f425c9f3 183B / 183B 2.1s done
#5 sha256:812216efaf878f5ff8086b6efdccec1cb090228107efd62db47d048c927c4f6a 0B / 4.33kB 2.1s
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 33.55MB / 40.48MB 2.3s
#5 sha256:812216efaf878f5ff8086b6efdccec1cb090228107efd62db47d048c927c4f6a 4.33kB / 4.33kB 2.3s done
#5 sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 0B / 32B 2.3s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 85.98MB / 200.85MB 2.5s
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 40.48MB / 40.48MB 2.5s
#5 extracting sha256:c5c735a83dbd58e1c83f8d52abdc51068e27c00405f53d59802d4954a6b5398a 0.9s done
#5 sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 32B / 32B 2.3s done
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 0B / 214.15MB 2.5s
#5 sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 40.48MB / 40.48MB 2.5s done
#5 sha256:2c0021742fe2b9491f62c3d89da10492c175081bd17d77efd0f22a298c37ad64 0B / 222B 2.6s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 15.73MB / 214.15MB 2.8s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 104.86MB / 200.85MB 3.0s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 30.41MB / 214.15MB 3.0s
#5 sha256:2c0021742fe2b9491f62c3d89da10492c175081bd17d77efd0f22a298c37ad64 222B / 222B 2.9s done
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 47.19MB / 214.15MB 3.3s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 121.63MB / 200.85MB 3.6s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 61.87MB / 214.15MB 3.6s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 133.17MB / 200.85MB 3.8s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 75.50MB / 214.15MB 3.8s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 96.47MB / 214.15MB 4.1s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 144.70MB / 200.85MB 4.2s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 112.20MB / 214.15MB 4.4s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 161.48MB / 200.85MB 4.6s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 171.97MB / 200.85MB 4.8s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 124.78MB / 214.15MB 4.9s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 185.60MB / 200.85MB 5.3s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 137.36MB / 214.15MB 5.3s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 196.08MB / 200.85MB 5.5s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 149.95MB / 214.15MB 5.5s
#5 sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 200.85MB / 200.85MB 5.6s done
#5 extracting sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 0.1s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 165.68MB / 214.15MB 5.8s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 179.31MB / 214.15MB 6.1s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 190.84MB / 214.15MB 6.4s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 203.42MB / 214.15MB 6.6s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 214.15MB / 214.15MB 6.8s
#5 sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 214.15MB / 214.15MB 6.9s done
#5 extracting sha256:5fb9fa7513e6a72bf7daf0a75e97c441f1ed7ff69c8609d1c429fdf3a6dc846b 1.6s done
#5 extracting sha256:2af8e2a543d81b57575a2e457bd1e98ffc061b15639dac3be5ff6c2702b9ea1a
#5 extracting sha256:2af8e2a543d81b57575a2e457bd1e98ffc061b15639dac3be5ff6c2702b9ea1a done
#5 extracting sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 0.1s
#5 extracting sha256:14d68137d870fdc4bc849fbe5c5571ca3e6d9a7b2c5bf1c7e928ccf716dd3b4a 0.4s done
#5 extracting sha256:320659737461e071e3d809231861a7487daaa79805c57f97015ff020f34a939a
#5 extracting sha256:320659737461e071e3d809231861a7487daaa79805c57f97015ff020f34a939a 0.1s done
#5 extracting sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 0.1s
#5 extracting sha256:1dea7716181a505cea41832dc84691b858a8f64471cb352d8c29cec06e428aeb 1.1s done
#5 extracting sha256:c9480a4b593fb5abc117a5e01c80d8495c9fd89e743757730c712545f425c9f3
#5 extracting sha256:c9480a4b593fb5abc117a5e01c80d8495c9fd89e743757730c712545f425c9f3 done
#5 extracting sha256:812216efaf878f5ff8086b6efdccec1cb090228107efd62db47d048c927c4f6a done
#5 extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 done
#5 extracting sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 0.1s
#5 extracting sha256:bb7a0c6ab9c129a399a3c8f034cd0de30406766d61a6694f150b4ab9e64c560c 1.2s done
#5 extracting sha256:2c0021742fe2b9491f62c3d89da10492c175081bd17d77efd0f22a298c37ad64
#5 extracting sha256:2c0021742fe2b9491f62c3d89da10492c175081bd17d77efd0f22a298c37ad64 done
#5 DONE 11.4s

#6 [2/2] RUN :
#6 DONE 0.2s

#7 exporting to image
#7 exporting layers
#7 exporting layers 0.5s done
#7 writing image sha256:0ee234ed7f7dc07506419bab3fb5c22e7d3420525e3413bc21e619b6f16184a1 done
#7 naming to docker.io/library/example_scala:test done
#7 DONE 0.5s
====================================================================
+/tmp/viash_test_example_scala_9338043967322412715/test_test/test_executable
warning: 1 deprecation
warning: 1 deprecation (since 2.13.3)
warning: 2 deprecations in total; re-run with -deprecation for details
>>> Create input test file
>>> Run executable
warning: 1 deprecation; re-run with -deprecation for details
Copying 'foo.txt' to 'bar.txt'.
>>> Check whether output file exists
>>> Check whether input and output file are the same
>>> Test finished successfully
====================================================================
SUCCESS! All 1 out of 1 test scripts succeeded!
Cleaning up temporary directory

When running viash test, Viash will follow the following steps:

  1. Create a temporary directory
  2. Build the component into the main executable
  3. (Re-)build the Docker image for the component
  4. Iterate over all unit test scripts:
  1. Build the unit test into an executable
  2. Run the unit test, passing the main executable as an argument
  1. Return exit code 0 if all of the above steps succeed, otherwise 0

Bonus: unit testing all of the components

If you have multiple Viash components located in a directory called src/, what happens when you run the following?

viash ns test --parallel --src src/