| #!/usr/bin/env bats |
| # |
| # This tests the lxc builder by creating minimal containers and checking that |
| # custom lxc container configuration files are successfully applied. The |
| # teardown function will delete any images in the output-lxc-* folders along |
| # with the auto-generated lxc container configuration files and hook scripts. |
| |
| #load test_helper |
| #fixtures builder-lxc |
| FIXTURE_ROOT="$BATS_TEST_DIRNAME/fixtures/builder-lxc" |
| |
| have_command() { |
| command -v "$1" >/dev/null 2>&1 |
| } |
| |
| # Required parameters |
| have_command lxc-create || { |
| echo "'lxc-create' must be installed via the lxc (or lxc1 for ubuntu >=16.04) package" >&2 |
| exit 1 |
| } |
| |
| DESTROY_HOOK_SCRIPT=$FIXTURE_ROOT/destroy-hook.sh |
| DESTROY_HOOK_LOG=$FIXTURE_ROOT/destroy-hook.log |
| printf > "$DESTROY_HOOK_SCRIPT" ' |
| echo "$LXC_NAME" > "%s" |
| ' "$DESTROY_HOOK_LOG" |
| chmod +x "$DESTROY_HOOK_SCRIPT" |
| |
| INIT_CONFIG=$FIXTURE_ROOT/lxc.custom.conf |
| printf > "$INIT_CONFIG" ' |
| lxc.hook.destroy = %s |
| ' "$DESTROY_HOOK_SCRIPT" |
| |
| teardown() { |
| for f in "$INIT_CONFIG" "$DESTROY_HOOK_SCRIPT" "$DESTROY_HOOK_LOG"; do |
| [ -e "$f" ] && rm -f "$f" |
| done |
| |
| rm -rf output-lxc-* |
| } |
| |
| assert_build() { |
| local template_name="$1" |
| shift |
| |
| local build_status=0 |
| |
| run packer build -var template_name="$template_name" "$@" |
| |
| [ "$status" -eq 0 ] || { |
| echo "${template_name} build exited badly: $status" >&2 |
| echo "$output" >&2 |
| build_status="$status" |
| } |
| |
| for expected in "output-lxc-${template_name}"/{rootfs.tar.gz,lxc-config}; do |
| [ -f "$expected" ] || { |
| echo "missing expected artifact '${expected}'" >&2 |
| build_status=1 |
| } |
| done |
| |
| return $build_status |
| } |
| |
| assert_container_name() { |
| local container_name="$1" |
| |
| [ -f "$DESTROY_HOOK_LOG" ] || { |
| echo "missing expected lxc.hook.destroy logfile '$DESTROY_HOOK_LOG'" |
| return 1 |
| } |
| |
| read -r lxc_name < "$DESTROY_HOOK_LOG" |
| |
| [ "$lxc_name" = "$container_name" ] |
| } |
| |
| @test "lxc: build centos minimal.json" { |
| have_command yum || skip "'yum' must be installed to build centos containers" |
| local container_name=packer-lxc-centos |
| assert_build centos -var init_config="$INIT_CONFIG" \ |
| -var container_name="$container_name" \ |
| $FIXTURE_ROOT/minimal.json |
| assert_container_name "$container_name" |
| } |
| |
| @test "lxc: build trusty minimal.json" { |
| have_command debootstrap || skip "'debootstrap' must be installed to build ubuntu containers" |
| local container_name=packer-lxc-ubuntu |
| assert_build ubuntu -var init_config="$INIT_CONFIG" \ |
| -var container_name="$container_name" \ |
| -var template_parameters="SUITE=trusty" \ |
| $FIXTURE_ROOT/minimal.json |
| assert_container_name "$container_name" |
| } |
| |
| @test "lxc: build debian minimal.json" { |
| have_command debootstrap || skip "'debootstrap' must be installed to build debian containers" |
| local container_name=packer-lxc-debian |
| assert_build debian -var init_config="$INIT_CONFIG" \ |
| -var container_name="$container_name" \ |
| -var template_parameters="SUITE=jessie" \ |
| $FIXTURE_ROOT/minimal.json |
| assert_container_name "$container_name" |
| } |