From b3e96588a3e236cec8ec5e62a1fb884cf2eabc80 Mon Sep 17 00:00:00 2001 From: DCCooper <1866858@gmail.com> Date: Mon, 1 Nov 2021 23:38:06 +0800 Subject: [PATCH 16/16] test: add integration tests for saving and loading separated image Signed-off-by: DCCooper <1866858@gmail.com> --- .../cover_test_load_separated_image_failed.sh | 145 ++++++++++++++++++ ...cover_test_load_separated_image_success.sh | 89 +++++++++++ .../cover_test_save_separated_image_failed.sh | 107 +++++++++++++ ...cover_test_save_separated_image_success.sh | 54 +++++++ ...r_test_save_separated_image_with_rename.sh | 75 +++++++++ 5 files changed, 470 insertions(+) create mode 100644 tests/src/cover_test_load_separated_image_failed.sh create mode 100644 tests/src/cover_test_load_separated_image_success.sh create mode 100644 tests/src/cover_test_save_separated_image_failed.sh create mode 100644 tests/src/cover_test_save_separated_image_success.sh create mode 100644 tests/src/cover_test_save_separated_image_with_rename.sh diff --git a/tests/src/cover_test_load_separated_image_failed.sh b/tests/src/cover_test_load_separated_image_failed.sh new file mode 100644 index 00000000..26590d0c --- /dev/null +++ b/tests/src/cover_test_load_separated_image_failed.sh @@ -0,0 +1,145 @@ +#!/bin/bash + +# Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. +# isula-build licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: Xiang Li +# Create: 2021-11-01 +# Description: cover test for load separated image + +test_name=${BASH_SOURCE[0]} +workspace=/tmp/${test_name}.$(date +%s) +mkdir -p "${workspace}" +dockerfile=${workspace}/Dockerfile +tarball_dir=${workspace}/Images +rename_json=${workspace}/rename.json +top_dir=$(git rev-parse --show-toplevel) +# shellcheck disable=SC1091 +source "${top_dir}"/tests/lib/separator.sh + +function pre_run() { + base_image_name="hub.oepkgs.net/library/busybox:latest" + lib_image_name="lib:latest" + app1_image_name="app1:latest" + app2_image_name="app2:latest" + lib_layer_number=5 + app1_layer_number=4 + app2_layer_number=3 + touch_dockerfile "${base_image_name}" "${lib_image_name}" "${lib_layer_number}" "${dockerfile}" + build_image "${lib_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app1_image_name}" "${app1_layer_number}" "${dockerfile}" + build_image "${app1_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app2_image_name}" "${app2_layer_number}" "${dockerfile}" + build_image "${app2_image_name}" "${workspace}" + touch_rename_json "${rename_json}" + isula-build ctr-img save -b "${base_image_name}" -l "${lib_image_name}" -d "${tarball_dir}" "${app1_image_name}" "${app2_image_name}" -r "${rename_json}" + check_result_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# empty -d flag and missing -b +function test_run1() { + isula-build ctr-img load -l "${tarball_dir}"/base1.tar.gz -i "${app1_image_name}" + check_result_not_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# empty -d flag and missing -l +function test_run2() { + isula-build ctr-img load -b "${tarball_dir}"/base1.tar.gz -i "${app1_image_name}" + check_result_not_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# empty -d, -b, -l flag +function test_run3() { + isula-build ctr-img load -i "${app1_image_name}" + check_result_not_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# use lib as base image tarball +function test_run4() { + isula-build ctr-img load -d "${tarball_dir}" -b "${tarball_dir}"/lib1.tar.gz -i "${app1_image_name}" + check_result_not_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# missing app tarball +function test_run5() { + mv "${tarball_dir}"/app1.tar.gz "${workspace}" + isula-build ctr-img load -d "${tarball_dir}" -l "${tarball_dir}"/lib1.tar.gz -i "${app1_image_name}" + check_result_not_equal $? 0 + mv "${workspace}"/app1.tar.gz "${tarball_dir}" + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# lib tarball not exist +function test_run6() { + isula-build ctr-img load -d "${tarball_dir}" -l not_exist_lib.tar -i "${app1_image_name}" + check_result_not_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# base tarball not exist +function test_run7() { + isula-build ctr-img load -d "${tarball_dir}" -b not_exist_base.tar -i "${app1_image_name}" + check_result_not_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# invalid base tarball +function test_run8() { + invalid_tarball=${workspace}/base1.tar + echo "invalid base tarball" >> "${invalid_tarball}" + isula-build ctr-img load -d "${tarball_dir}" -b "${invalid_tarball}" -i "${app1_image_name}" + check_result_not_equal $? 0 + rm -rf "${invalid_tarball}" + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# invalid lib tarball +function test_run9() { + invalid_tarball=${workspace}/lib1.tar + echo "invalid lib tarball" >> "${invalid_tarball}" + isula-build ctr-img load -d "${tarball_dir}" -l "${invalid_tarball}" -i "${app1_image_name}" + check_result_not_equal $? 0 + rm -rf "${invalid_tarball}" + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +# manifest file corruption +function test_run10() { + cp "${tarball_dir}"/manifest "${tarball_dir}"/manifest.bk + sed -i "1d" "${tarball_dir}"/manifest + isula-build ctr-img load -d "${tarball_dir}" -d "${tarball_dir}" -i "${app1_image_name}" + check_result_not_equal $? 0 + mv "${tarball_dir}"/manifest.bk "${tarball_dir}"/manifest + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +function cleanup() { + rm -rf "${workspace}" + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +pre_run +test_run1 +test_run2 +test_run3 +test_run4 +test_run5 +test_run6 +test_run7 +test_run8 +test_run9 +test_run10 +cleanup +# shellcheck disable=SC2154 +exit "${exit_flag}" diff --git a/tests/src/cover_test_load_separated_image_success.sh b/tests/src/cover_test_load_separated_image_success.sh new file mode 100644 index 00000000..266b3eba --- /dev/null +++ b/tests/src/cover_test_load_separated_image_success.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +# Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. +# isula-build licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: Xiang Li +# Create: 2021-11-01 +# Description: cover test for load separated image + +test_name=${BASH_SOURCE[0]} +workspace=/tmp/${test_name}.$(date +%s) +mkdir -p "${workspace}" +dockerfile=${workspace}/Dockerfile +tarball_dir=${workspace}/Images +rename_json=${workspace}/rename.json +top_dir=$(git rev-parse --show-toplevel) +# shellcheck disable=SC1091 +source "${top_dir}"/tests/lib/separator.sh + +function pre_run() { + base_image_name="hub.oepkgs.net/library/busybox:latest" + lib_image_name="lib:latest" + app1_image_name="app1:latest" + app2_image_name="app2:latest" + lib_layer_number=5 + app1_layer_number=4 + app2_layer_number=3 + touch_dockerfile "${base_image_name}" "${lib_image_name}" "${lib_layer_number}" "${dockerfile}" + build_image "${lib_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app1_image_name}" "${app1_layer_number}" "${dockerfile}" + build_image "${app1_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app2_image_name}" "${app2_layer_number}" "${dockerfile}" + build_image "${app2_image_name}" "${workspace}" + touch_rename_json "${rename_json}" + isula-build ctr-img save -b "${base_image_name}" -l "${lib_image_name}" -d "${tarball_dir}" "${app1_image_name}" "${app2_image_name}" -r "${rename_json}" + check_result_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +function test_run1() { + isula-build ctr-img load -d "${tarball_dir}" -b "${tarball_dir}"/base1.tar.gz -l "${tarball_dir}"/lib1.tar.gz -i "${app1_image_name}" + check_result_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +function test_run2() { + isula-build ctr-img load -d "${tarball_dir}" -b "${tarball_dir}"/base1.tar.gz -i "${app1_image_name}" + check_result_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +function test_run3() { + isula-build ctr-img load -d "${tarball_dir}" -l "${tarball_dir}"/lib1.tar.gz -i "${app1_image_name}" + check_result_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +function test_run4() { + isula-build ctr-img load -d "${tarball_dir}" -i "${app1_image_name}" + check_result_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +function test_run5() { + isula-build ctr-img load -d "${tarball_dir}" -i "${app1_image_name}" --no-check + check_result_equal $? 0 + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +function cleanup() { + rm -rf "${workspace}" + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +pre_run +test_run1 +test_run2 +test_run3 +test_run4 +test_run5 +cleanup +# shellcheck disable=SC2154 +exit "${exit_flag}" diff --git a/tests/src/cover_test_save_separated_image_failed.sh b/tests/src/cover_test_save_separated_image_failed.sh new file mode 100644 index 00000000..c64dcf5d --- /dev/null +++ b/tests/src/cover_test_save_separated_image_failed.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +# Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. +# isula-build licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: Xiang Li +# Create: 2021-11-01 +# Description: cover test for save separated image + +test_name=${BASH_SOURCE[0]} +workspace=/tmp/${test_name}.$(date +%s) +mkdir -p "${workspace}" +dockerfile=${workspace}/Dockerfile +top_dir=$(git rev-parse --show-toplevel) +# shellcheck disable=SC1091 +source "${top_dir}"/tests/lib/separator.sh + +function pre_run() { + base_image_name="hub.oepkgs.net/library/busybox:latest" + bad_lib_image_name="lib:bad" + bad_app1_image_name="app1:bad" + bad_app2_image_name="app2:bad" + lib_image_name="lib:latest" + app1_image_name="app1:latest" + app2_image_name="app2:latest" + bad_lib_layer_number=5 + bad_app1_layer_number=4 + bad_app2_layer_number=3 + lib_layer_number=5 + app1_layer_number=6 + app2_layer_number=7 + + # build bad dockerfile + touch_bad_dockerfile "${base_image_name}" "${bad_lib_image_name}" "${bad_lib_layer_number}" "${dockerfile}" + build_image "${bad_lib_image_name}" "${workspace}" + touch_bad_dockerfile "${bad_lib_image_name}" "${bad_app1_image_name}" "${bad_app1_layer_number}" "${dockerfile}" + build_image "${bad_app1_image_name}" "${workspace}" + touch_bad_dockerfile "${bad_lib_image_name}" "${bad_app2_image_name}" "${bad_app2_layer_number}" "${dockerfile}" + build_image "${bad_app2_image_name}" "${workspace}" + + # build normal dockerfile + touch_dockerfile "${base_image_name}" "${lib_image_name}" "${lib_layer_number}" "${dockerfile}" + build_image "${lib_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app1_image_name}" "${app1_layer_number}" "${dockerfile}" + build_image "${app1_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app2_image_name}" "${app2_layer_number}" "${dockerfile}" + build_image "${app2_image_name}" "${workspace}" +} + +function test_run1() { + isula-build ctr-img save -b "${base_image_name}" -l "${bad_lib_image_name}" -d "${workspace}"/Images "${bad_app1_image_name}" "${bad_app2_image_name}" + check_result_not_equal $? 0 + rm -rf "${workspace}"/Images +} + +function test_run2() { + isula-build ctr-img save -b "invalid:base" -l "${bad_lib_image_name}" -d "${workspace}"/Images "${bad_app1_image_name}" "${bad_app2_image_name}" + check_result_not_equal $? 0 + rm -rf "${workspace}"/Images +} + +function test_run3() { + isula-build ctr-img save -b "${base_image_name}" -l "livalid:lib" -d "${workspace}"/Images "${bad_app1_image_name}" "${bad_app2_image_name}" + check_result_not_equal $? 0 + rm -rf "${workspace}"/Images +} + +function test_run4() { + isula-build ctr-img save -b "${base_image_name}" -l "${bad_lib_image_name}" -d "${workspace}"/Images "invalid:app" "${bad_app2_image_name}" + check_result_not_equal $? 0 + rm -rf "${workspace}"/Images +} + +function test_run5() { + isula-build ctr-img save -b "${base_image_name}" -l "${bad_lib_image_name}" -d "${workspace}"/Images "${app1_image_name}" "${app2_image_name}" + check_result_not_equal $? 0 + rm -rf "${workspace}"/Images +} + +function test_run6() { + isula-build ctr-img save -b "${base_image_name}" -l "${lib_image_name}" -d "${workspace}"/Images "${bad_app1_image_name}" "${bad_app2_image_name}" + check_result_not_equal $? 0 + rm -rf "${workspace}"/Images +} + +function cleanup() { + rm -rf "${workspace}" + isula-build ctr-img rm "${bad_lib_image_name}" "${bad_app1_image_name}" "${bad_app2_image_name}" "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" + isula-build ctr-img rm -p +} + +pre_run +test_run1 +test_run2 +test_run3 +test_run4 +test_run5 +test_run6 +cleanup +# shellcheck disable=SC2154 +exit "${exit_flag}" diff --git a/tests/src/cover_test_save_separated_image_success.sh b/tests/src/cover_test_save_separated_image_success.sh new file mode 100644 index 00000000..2095bd33 --- /dev/null +++ b/tests/src/cover_test_save_separated_image_success.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. +# isula-build licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: Xiang Li +# Create: 2021-11-01 +# Description: cover test for save separated image + +test_name=${BASH_SOURCE[0]} +workspace=/tmp/${test_name}.$(date +%s) +mkdir -p "${workspace}" +dockerfile=${workspace}/Dockerfile +top_dir=$(git rev-parse --show-toplevel) +# shellcheck disable=SC1091 +source "${top_dir}"/tests/lib/separator.sh + +function pre_run() { + base_image_name="hub.oepkgs.net/library/busybox:latest" + lib_image_name="lib:latest" + app1_image_name="app1:latest" + app2_image_name="app2:latest" + lib_layer_number=5 + app1_layer_number=4 + app2_layer_number=3 + touch_dockerfile "${base_image_name}" "${lib_image_name}" "${lib_layer_number}" "${dockerfile}" + build_image "${lib_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app1_image_name}" "${app1_layer_number}" "${dockerfile}" + build_image "${app1_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app2_image_name}" "${app2_layer_number}" "${dockerfile}" + build_image "${app2_image_name}" "${workspace}" +} + +function test_run() { + isula-build ctr-img save -b "${base_image_name}" -l "${lib_image_name}" -d "${workspace}"/Images "${app1_image_name}" "${app2_image_name}" + check_result_equal $? 0 +} + +function cleanup() { + rm -rf "${workspace}" + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + +pre_run +test_run +cleanup +# shellcheck disable=SC2154 +exit "${exit_flag}" diff --git a/tests/src/cover_test_save_separated_image_with_rename.sh b/tests/src/cover_test_save_separated_image_with_rename.sh new file mode 100644 index 00000000..28904757 --- /dev/null +++ b/tests/src/cover_test_save_separated_image_with_rename.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. +# isula-build licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# Author: Xiang Li +# Create: 2021-11-01 +# Description: cover test for save separated image + +test_name=${BASH_SOURCE[0]} +workspace=/tmp/${test_name}.$(date +%s) +mkdir -p "${workspace}" +dockerfile=${workspace}/Dockerfile +rename_json=${workspace}/rename.json +invalid_rename_json=${workspace}/invalid.json +none_exist_rename_json=${workspace}/none_exist.json +top_dir=$(git rev-parse --show-toplevel) +# shellcheck disable=SC1091 +source "${top_dir}"/tests/lib/separator.sh + +function pre_run() { + base_image_name="hub.oepkgs.net/library/busybox:latest" + lib_image_name="lib:latest" + app1_image_name="app1:latest" + app2_image_name="app2:latest" + lib_layer_number=5 + app1_layer_number=4 + app2_layer_number=3 + touch_dockerfile "${base_image_name}" "${lib_image_name}" "${lib_layer_number}" "${dockerfile}" + build_image "${lib_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app1_image_name}" "${app1_layer_number}" "${dockerfile}" + build_image "${app1_image_name}" "${workspace}" + touch_dockerfile "${lib_image_name}" "${app2_image_name}" "${app2_layer_number}" "${dockerfile}" + build_image "${app2_image_name}" "${workspace}" +} + +function test_run1() { + touch_rename_json "${rename_json}" + isula-build ctr-img save -b "${base_image_name}" -l "${lib_image_name}" -d "${workspace}"/Images -r "${rename_json}" "${app1_image_name}" "${app2_image_name}" + check_result_equal $? 0 + rm -rf "${workspace}"/Images +} + +function test_run2() { + touch_bad_rename_json "${invalid_rename_json}" + isula-build ctr-img save -b "${base_image_name}" -l "${lib_image_name}" -d "${workspace}"/Images -r "${invalid_rename_json}" "${app1_image_name}" "${app2_image_name}" + check_result_not_equal $? 0 + rm -rf "${workspace}"/Images +} + +function test_run3() { + isula-build ctr-img save -b "${base_image_name}" -l "${lib_image_name}" -d "${workspace}"/Images -r "${none_exist_rename_json}" "${app1_image_name}" "${app2_image_name}" + check_result_not_equal $? 0 + rm -rf "${workspace}"/Images +} + +function cleanup() { + rm -rf "${workspace}" + isula-build ctr-img rm "${lib_image_name}" "${app1_image_name}" "${app2_image_name}" +} + + +pre_run +test_run1 +test_run2 +test_run3 +cleanup +# shellcheck disable=SC2154 +exit "${exit_flag}" -- 2.27.0