#!/usr/bin/env bats # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # # This file is part of dobuild. # Copyright (c) 2019 Contributors as noted in the AUTHORS file. # # SPDX-License-Identifier: MPL-2.0 load test_helper setup() { PROJECTPATH="$(readlink -f "$BATS_TEST_DIRNAME/..")" MAKE=("make" --no-print-directory -C "$PROJECTPATH" -f defaults.mk -f "$BATS_TEST_DIRNAME/test_helper.mk") VERSIONFILE="$(mktemp --tmpdir="$BATS_TMPDIR" version_XXXXXXXXXX.txt)" export DOBUILD_PROJECTVERSIONFILE="$VERSIONFILE" } teardown() { rm -f "$VERSIONFILE" } @test "defaults_mk has required deps" { "${MAKE[@]}" --version } @test "defaults_mk has required makefile deps" { "${MAKE[@]}" testhelper-print-MAKEFILE_DEPS | sort -u | parallel --keep-order command -V } @test "defaults_mk can be included multiple times" { run "${MAKE[@]}" -f defaults.mk 2>&1 printf -- '%s\n' "${lines[@]}" [ "$status" -eq 0 ] [[ "${lines[@]}" =~ 'make: Nothing to be done' ]] } print_fixture_or() { cat < "$VERSIONFILE" VALUE="$("${MAKE[@]}" testhelper-print-VERSION)" echo "$VALUE != $EXPECTED" [ "$VALUE" = "$EXPECTED" ] } @test "defaults_mk HOST_CONTAINER can be overridden by env var DOBUILD_HOSTCONTAINER" { EXPECTED="1234" export DOBUILD_HOSTCONTAINER="$EXPECTED" VALUE="$("${MAKE[@]}" testhelper-print-HOST_CONTAINER)" echo "$VALUE != $EXPECTED" [ "$VALUE" = "$EXPECTED" ] } @test "defaults_mk SOURCE_DATE_EPOCH is number" { VALUE="$("${MAKE[@]}" testhelper-print-SOURCE_DATE_EPOCH)" [ "$VALUE" -ge 0 ] } @test "defaults_mk SOURCE_DATE_EPOCH can be overridden" { EXPECTED="1234" VALUE="$("${MAKE[@]}" testhelper-print-SOURCE_DATE_EPOCH SOURCE_DATE_EPOCH="$EXPECTED")" echo "$VALUE != $EXPECTED" [ "$VALUE" = "$EXPECTED" ] } @test "defaults_mk BUILDTIME is not empty" { VALUE="$("${MAKE[@]}" testhelper-print-BUILDTIME)" [ -n "$VALUE" ] } @test "defaults_mk VERBOSE is off by default and can be overridden by env var" { VALUE="$("${MAKE[@]}" testhelper-default-silent)" echo "$VALUE" [ -z "$VALUE" ] export VERBOSE=1 VALUE="$("${MAKE[@]}" testhelper-default-silent)" echo "$VALUE" [ "$VALUE" = 'true' ] } @test "defaults_mk JOBSLOTS defaults to system available processors" { EXPECTED="$(nproc)" VALUE="$("${MAKE[@]}" testhelper-print-JOBSLOTS)" echo "$VALUE != $EXPECTED" [ "$VALUE" -eq "$EXPECTED" ] } @test "defaults_mk JOBSLOTS defaults to system available processors when make called recursive without -j" { EXPECTED="$(nproc)" VALUE="$("${MAKE[@]}" testhelper-recursive-print-JOBSLOTS)" echo "$VALUE != $EXPECTED" [ "$VALUE" -eq "$EXPECTED" ] } @test "defaults_mk JOBSLOTS defaults to system available processors when make called recursive with unlimited job slots" { EXPECTED="$(nproc)" VALUE="$("${MAKE[@]}" -j testhelper-recursive-print-JOBSLOTS)" echo "$VALUE != $EXPECTED" [ "$VALUE" -eq "$EXPECTED" ] } @test "defaults_mk JOBSLOTS defaults to 2 when make called recursive with limited job slots" { EXPECTED="2" VALUE="$("${MAKE[@]}" -j10 testhelper-recursive-print-JOBSLOTS)" echo "$VALUE != $EXPECTED" [ "$VALUE" -eq "$EXPECTED" ] } @test "defaults_mk JOBSLOTS should be equal to last make command line argument" { VALUE="$("${MAKE[@]}" -j10 -j 42 testhelper-print-JOBSLOTS)" echo "$VALUE != 42" [ "$VALUE" -eq "42" ] VALUE="$("${MAKE[@]}" -j14 testhelper-print-JOBSLOTS)" echo "$VALUE != 14" [ "$VALUE" -eq "14" ] VALUE="$("${MAKE[@]}" -j11 testhelper-print-JOBSLOTS)" echo "$VALUE != 11" [ "$VALUE" -eq "11" ] VALUE="$("${MAKE[@]}" --jobs 11 --jobs 10 testhelper-print-JOBSLOTS)" echo "$VALUE != 10" [ "$VALUE" -eq "10" ] VALUE="$("${MAKE[@]}" -j10 --jobs=88 testhelper-print-JOBSLOTS)" echo "$VALUE != 88" [ "$VALUE" -eq "88" ] } @test "defaults_mk MAKE_VERSION should be greater or equal to 3.81 warning" { run "${MAKE[@]}" make_version=4.1 testhelper-print-EXPECTATIONS 2>&1 printf -- '%s\n' "${lines[@]}" [ "$status" -eq 0 ] [[ ! "${lines[@]}" =~ "Using old make version" ]] run "${MAKE[@]}" make_version=3.80 testhelper-print-EXPECTATIONS 2>&1 printf -- '%s\n' "${lines[@]}" [ "$status" -eq 0 ] [[ "${lines[@]}" =~ "Using old make version" ]] }