blob: 9554fd0dbbd9cadb977babe241ee011c10e6da2f [file]
#!/usr/bin/env bats
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
setup() {
load test_helper/common
_reset_version_vars
source "${LIBS_DIR}/_version.sh"
}
# ---- validate_and_extract_version ----
@test "validate_and_extract_version: accepts 1.18.0" {
run validate_and_extract_version "1.18.0"
[ "$status" -eq 0 ]
}
@test "validate_and_extract_version: extracts major.minor.patch" {
validate_and_extract_version "1.18.0"
[ "$major" = "1" ]
[ "$minor" = "18" ]
[ "$patch" = "0" ]
[ "$version_without_rc" = "1.18.0" ]
}
@test "validate_and_extract_version: accepts 2.0.10" {
validate_and_extract_version "2.0.10"
[ "$major" = "2" ]
[ "$minor" = "0" ]
[ "$patch" = "10" ]
}
@test "validate_and_extract_version: rejects missing patch" {
run validate_and_extract_version "1.18"
[ "$status" -eq 1 ]
}
@test "validate_and_extract_version: rejects empty string" {
run validate_and_extract_version ""
[ "$status" -eq 1 ]
}
@test "validate_and_extract_version: rejects alpha characters" {
run validate_and_extract_version "1.18.0-beta"
[ "$status" -eq 1 ]
}
@test "validate_and_extract_version: rejects SNAPSHOT suffix" {
run validate_and_extract_version "1.18.0-SNAPSHOT"
[ "$status" -eq 1 ]
}
# ---- validate_and_extract_branch_version ----
@test "validate_and_extract_branch_version: parses parquet-1.18.x" {
validate_and_extract_branch_version "parquet-1.18.x"
[ "$major" = "1" ]
[ "$minor" = "18" ]
}
@test "validate_and_extract_branch_version: parses parquet-2.0.x" {
validate_and_extract_branch_version "parquet-2.0.x"
[ "$major" = "2" ]
[ "$minor" = "0" ]
}
@test "validate_and_extract_branch_version: rejects release/ prefix" {
run validate_and_extract_branch_version "release/1.18.x"
[ "$status" -eq 1 ]
}
@test "validate_and_extract_branch_version: rejects full version" {
run validate_and_extract_branch_version "parquet-1.18.0"
[ "$status" -eq 1 ]
}
@test "validate_and_extract_branch_version: rejects master" {
run validate_and_extract_branch_version "master"
[ "$status" -eq 1 ]
}
# ---- find_next_rc_number ----
@test "find_next_rc_number: returns 0 when no tags exist" {
git() { echo ""; }
export -f git
find_next_rc_number "1.18.0"
[ "$rc_number" = "0" ]
}
@test "find_next_rc_number: returns 1 after rc0" {
git() {
if [[ "$1" == "tag" && "$2" == "-l" ]]; then
echo "apache-parquet-1.18.0-rc0"
fi
}
export -f git
find_next_rc_number "1.18.0"
[ "$rc_number" = "1" ]
}
@test "find_next_rc_number: returns 3 after rc0, rc1, rc2" {
git() {
if [[ "$1" == "tag" && "$2" == "-l" ]]; then
printf "apache-parquet-1.18.0-rc0\napache-parquet-1.18.0-rc1\napache-parquet-1.18.0-rc2\n"
fi
}
export -f git
find_next_rc_number "1.18.0"
[ "$rc_number" = "3" ]
}
@test "find_next_rc_number: handles gap in rc numbers" {
git() {
if [[ "$1" == "tag" && "$2" == "-l" ]]; then
printf "apache-parquet-1.18.0-rc0\napache-parquet-1.18.0-rc5\n"
fi
}
export -f git
find_next_rc_number "1.18.0"
[ "$rc_number" = "6" ]
}
@test "find_next_rc_number: ignores tags for other versions" {
git() {
if [[ "$1" == "tag" && "$2" == "-l" ]]; then
echo ""
fi
}
export -f git
find_next_rc_number "1.19.0"
[ "$rc_number" = "0" ]
}
# ---- set_pom_version ----
@test "set_pom_version: passes correct args to mvnw in dry-run" {
DRY_RUN=1
run set_pom_version "1.18.0"
[ "$status" -eq 0 ]
[[ "$output" == *"versions:set"* ]]
[[ "$output" == *"-DnewVersion=1.18.0"* ]]
[[ "$output" == *"-DgenerateBackupPoms=false"* ]]
}
@test "set_pom_version: calls mvnw with correct args in real mode" {
DRY_RUN=0
local captured_args=""
mvnw() { captured_args="$*"; }
# Create a fake mvnw wrapper that the function calls via ./mvnw
function mock_mvnw_wrapper {
echo "$@" > "${BATS_TEST_TMPDIR}/mvnw_args"
}
# Override exec_process to capture command
exec_process() { echo "EXEC: $*"; }
export -f exec_process
run set_pom_version "2.0.0-SNAPSHOT"
[ "$status" -eq 0 ]
[[ "$output" == *"2.0.0-SNAPSHOT"* ]]
}
# ---- find_latest_rc_number ----
@test "find_latest_rc_number: returns highest RC number" {
cd "$(mktemp -d)"
git init -q
git commit --allow-empty -m "init" -q
git tag "apache-parquet-1.18.0-rc0"
git tag "apache-parquet-1.18.0-rc1"
git tag "apache-parquet-1.18.0-rc2"
find_latest_rc_number "1.18.0"
[ "$latest_rc_number" = "2" ]
}
@test "find_latest_rc_number: returns 0 when only rc0 exists" {
cd "$(mktemp -d)"
git init -q
git commit --allow-empty -m "init" -q
git tag "apache-parquet-2.0.0-rc0"
find_latest_rc_number "2.0.0"
[ "$latest_rc_number" = "0" ]
}
@test "find_latest_rc_number: fails when no RC tags exist" {
cd "$(mktemp -d)"
git init -q
git commit --allow-empty -m "init" -q
run find_latest_rc_number "9.9.9"
[ "$status" -eq 1 ]
[[ "$output" == *"No RC tags found"* ]]
}
# ---- get_current_pom_version ----
@test "get_current_pom_version: calls mvnw help:evaluate" {
# Mock ./mvnw
function fake_mvnw {
if [[ "$*" == *"help:evaluate"* ]]; then
echo "1.18.0-SNAPSHOT"
fi
}
# Temporarily create a fake mvnw in a temp dir
local tmpbin
tmpbin=$(mktemp -d)
cat > "${tmpbin}/mvnw" << 'SCRIPT'
#!/bin/bash
if [[ "$*" == *"help:evaluate"* ]]; then
echo "1.18.0-SNAPSHOT"
fi
SCRIPT
chmod +x "${tmpbin}/mvnw"
# Run from tmpbin so ./mvnw resolves
cd "${tmpbin}"
local result
result=$(get_current_pom_version)
[ "$result" = "1.18.0-SNAPSHOT" ]
rm -rf "${tmpbin}"
}