| #!/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}" | |
| } |