From dcc2c432cbd2ca9a726c02f0aab7a9b6f37f4065 Mon Sep 17 00:00:00 2001 From: Rob Story Date: Thu, 5 Oct 2023 16:13:01 -0700 Subject: [PATCH] Move test to python --- .github/workflows/ci.yml | 2 +- scripts/ci-test.sh | 31 ------------------ scripts/ci_test.py | 61 +++++++++++++++++++++++++++++++++++ tests/simple_flow/BUILD.bazel | 20 ++++++++++++ 4 files changed, 82 insertions(+), 32 deletions(-) delete mode 100755 scripts/ci-test.sh create mode 100755 scripts/ci_test.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 753dfd6..d924f91 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,4 +13,4 @@ jobs: - uses: actions/checkout@v4 - name: example shell: bash - run: scripts/ci-test.sh + run: scripts/ci-test.py diff --git a/scripts/ci-test.sh b/scripts/ci-test.sh deleted file mode 100755 index 3d109e4..0000000 --- a/scripts/ci-test.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# Exit on error. Append "|| true" if you expect an error. -set -o errexit -# Exit on error inside any functions or subshells. -set -o errtrace -# Do not allow use of undefined vars. Use ${VAR:-} to use an undefined VAR -set -o nounset -# Catch the error in case mysqldump fails (but gzip succeeds) in `mysqldump |gzip` -set -o pipefail - -pushd tests/simple_flow -bazel clean --expunge -bazel build ... -SHA_A=$(shasum -a 256 bazel-bin/test_assemble_simple_merger_manifest.json) -bazel clean --expunge -bazel build ... -SHA_B=$(shasum -a 256 bazel-bin/test_assemble_simple_merger_manifest.json) -if [[ "$SHA_A" != "$SHA_B" ]]; then - echo "expected same sha but got" - echo $SHA_A - echo $SHA_B - exit 1 -else - echo "[ok] SHA256 matched $SHA_A" -fi -popd - -pushd tests/override_tools -bazel query ... -popd diff --git a/scripts/ci_test.py b/scripts/ci_test.py new file mode 100755 index 0000000..6654b88 --- /dev/null +++ b/scripts/ci_test.py @@ -0,0 +1,61 @@ +#!/usr/bin/python3 + +import json +import os +import subprocess + +# Navigate to tests/simple_flow +os.chdir('tests/simple_flow') + +# Run bazel clean --expunge +subprocess.run(['bazel', 'clean', '--expunge'], check=True) + +# Run bazel build ... +subprocess.run(['bazel', 'build', '...'], check=True) + +# Calculate SHA_A +with open('bazel-bin/test_assemble_simple_merger_manifest.json', 'rb') as f: + SHA_A = subprocess.run(['shasum', '-a', '256'], stdin=f, capture_output=True, check=True).stdout.strip() + +# Load JSON file +with open('bazel-bin/test_assemble_simple_merger_config.json') as json_file: + data = json.load(json_file) + +# Check Cmd, Labels, and User fields +cmd = data['config']['Cmd'] +labels = data['config']['Labels'] +user = data['config']['User'] + +# Expected values +expected_cmd = ["/usr/bin/my_app"] +expected_labels = {"label1": "foo", "label2": "bar"} +expected_user = "nfbasic" + +assert(cmd == expected_cmd) +assert(labels == expected_labels) +assert(user == expected_user) + +# Run bazel clean --expunge +subprocess.run(['bazel', 'clean', '--expunge'], check=True) + +# Run bazel build ... +subprocess.run(['bazel', 'build', '...'], check=True) + +# Calculate SHA_B +with open('bazel-bin/test_assemble_simple_merger_manifest.json', 'rb') as f: + SHA_B = subprocess.run(['shasum', '-a', '256'], stdin=f, capture_output=True, check=True).stdout.strip() + +# Compare SHA_A and SHA_B +if SHA_A != SHA_B: + print("expected same sha but got") + print(SHA_A) + print(SHA_B) + exit(1) +else: + print(f"[ok] SHA256 matched {SHA_A}") + +# Navigate to tests/override_tools +os.chdir('../../tests/override_tools') + +# Run bazel query ... +subprocess.run(['bazel', 'query', '...'], check=True) diff --git a/tests/simple_flow/BUILD.bazel b/tests/simple_flow/BUILD.bazel index d0ca360..55aef64 100644 --- a/tests/simple_flow/BUILD.bazel +++ b/tests/simple_flow/BUILD.bazel @@ -15,6 +15,10 @@ load( "@com_github_bazeltools_rules_minidock//minidock:container_push.bzl", "container_push", ) +load( + "@com_github_bazeltools_rules_minidock//minidock:container_config.bzl", + "container_config", +) container_data( name = "file_a_data", @@ -26,12 +30,28 @@ container_data( files = ["file_b.txt"], ) +container_config( + name = "user_and_app", + user = "nfbasic", + cmd = [ + "/usr/bin/my_app", + ], +) + +container_config( + name = "labels", + labels = {"label1": "foo", + "label2": "bar"} +) + container_compose( name = "test_simple_imagen", base = "@bazel_320//:metadata", layers = [ ":file_a_data", ":file_b_data", + ":user_and_app", + ":labels" ], )