mirror of
https://github.com/milvus-io/milvus.git
synced 2026-07-21 10:15:43 +00:00
## What type of PR is this? /kind test ## What this PR does / why we need it: Adds RESTful import 2PC coverage for Milvus import lifecycle and CDC-focused scenarios. This PR adds: - REST import job helpers for `/describe`, `/commit`, `/abort`, and state polling - pytest options for secondary CDC endpoint/object storage/topology parameters - a new REST test suite for import 2PC lifecycle, visibility, commit/abort, delete semantics, TTL, compaction, formats, data types, indexes, partitions, DML interleaving, CDC, and fault-tolerance gates - xfail regression coverage for known issues: - #50458 REST import commit/abort authorization gap - #50459 NaN/Inf FloatVector import/query behavior - #50460 REST `options.auto_commit=null` validation gap ## Which issue(s) this PR fixes: N/A ## Special notes for your reviewer: The CDC cases require passing secondary cluster REST/MinIO options and topology arguments. Without those options, CDC-specific cases skip with an explicit environment precondition message. The manual compaction-after-commit case is marked non-strict xfail because compaction may remain `Executing` on current import 2PC test builds. ## Test result: ```text python -m py_compile tests/restful_client_v2/conftest.py tests/restful_client_v2/api/milvus.py tests/restful_client_v2/testcases/test_import_2pc_operation.py ruff check tests/restful_client_v2/api/milvus.py tests/restful_client_v2/conftest.py tests/restful_client_v2/testcases/test_import_2pc_operation.py python -m pytest --collect-only -q testcases/test_import_2pc_operation.py 141 tests collected in 2.14s ``` --------- Signed-off-by: zhuwenxing <wenxing.zhu@zilliz.com>
101 lines
3.8 KiB
Bash
Executable File
101 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Licensed to the LF AI & Data foundation 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.
|
|
|
|
SOURCE="${BASH_SOURCE[0]}"
|
|
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
|
DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
|
|
SOURCE="$(readlink "$SOURCE")"
|
|
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
|
done
|
|
ROOT="$(cd -P "$(dirname "$SOURCE")/../.." && pwd)"
|
|
|
|
# Exit immediately for non zero status
|
|
set -e
|
|
# Check unset variables
|
|
set -u
|
|
# Print commands
|
|
set -x
|
|
|
|
MILVUS_HELM_RELEASE_NAME="${MILVUS_HELM_RELEASE_NAME:-milvus-testing}"
|
|
MILVUS_CLUSTER_ENABLED="${MILVUS_CLUSTER_ENABLED:-false}"
|
|
MILVUS_HELM_NAMESPACE="${MILVUS_HELM_NAMESPACE:-default}"
|
|
PARALLEL_NUM="${PARALLEL_NUM:-6}"
|
|
# Use service name instead of IP to test
|
|
MILVUS_SERVICE_NAME=$(echo "${MILVUS_HELM_RELEASE_NAME}-milvus.${MILVUS_HELM_NAMESPACE}" | tr -d '\n')
|
|
# MILVUS_SERVICE_HOST=$(kubectl get svc ${MILVUS_SERVICE_NAME}-milvus -n ${MILVUS_HELM_NAMESPACE} -o jsonpath='{.spec.clusterIP}')
|
|
MILVUS_SERVICE_PORT="19530"
|
|
# Minio service name
|
|
MINIO_SERVICE_NAME=$(echo "${MILVUS_HELM_RELEASE_NAME}-minio.${MILVUS_HELM_NAMESPACE}" | tr -d '\n')
|
|
|
|
# Shellcheck source=ci-util.sh
|
|
source "${ROOT}/tests/scripts/ci-util-4am.sh"
|
|
|
|
activate_pytest_python_env
|
|
|
|
cd ${ROOT}/tests/python_client
|
|
|
|
# Print python3 version
|
|
python3 -V
|
|
|
|
# Pytest will try to get ${CI_LOG_PATH} from environment variables first,then use default path
|
|
export CI_LOG_PATH=/tmp/ci_logs/test
|
|
|
|
if [ ! -d "${CI_LOG_PATH}" ]; then
|
|
# Create dir for ci log path when it does not exist
|
|
mkdir -p ${CI_LOG_PATH}
|
|
fi
|
|
|
|
# skip pip install when DISABLE_PIP_INSTALL is set
|
|
DISABLE_PIP_INSTALL=${DISABLE_PIP_INSTALL:-false}
|
|
if [ "${DISABLE_PIP_INSTALL:-}" = "false" ]; then
|
|
echo "prepare e2e test"
|
|
install_pytest_requirements
|
|
fi
|
|
|
|
|
|
# Run restful test v1
|
|
|
|
cd ${ROOT}/tests/restful_client
|
|
|
|
if [[ -n "${TEST_TIMEOUT:-}" ]]; then
|
|
|
|
timeout "${TEST_TIMEOUT}" pytest testcases --endpoint http://${MILVUS_SERVICE_NAME}:${MILVUS_SERVICE_PORT} -v -x -m L0 -n 6 --timeout 180
|
|
else
|
|
pytest testcases --endpoint http://${MILVUS_SERVICE_NAME}:${MILVUS_SERVICE_PORT} -v -x -m L0 -n 6 --timeout 180
|
|
fi
|
|
|
|
# Run restful test v2
|
|
cd ${ROOT}/tests/restful_client_v2
|
|
|
|
if [[ -n "${TEST_TIMEOUT:-}" ]]; then
|
|
|
|
timeout "${TEST_TIMEOUT}" pytest testcases --endpoint http://${MILVUS_SERVICE_NAME}:${MILVUS_SERVICE_PORT} --minio_host ${MINIO_SERVICE_NAME} -v -x --tags L0 L1 -n 6 --timeout 360
|
|
else
|
|
pytest testcases --endpoint http://${MILVUS_SERVICE_NAME}:${MILVUS_SERVICE_PORT} --minio_host ${MINIO_SERVICE_NAME} -v -x --tags L0 L1 -n 6 --timeout 360
|
|
fi
|
|
|
|
cd ${ROOT}/tests/python_client
|
|
|
|
# Pytest is not able to have both --timeout & --workers, so do not add --timeout or --workers in the shell script
|
|
if [[ -n "${TEST_TIMEOUT:-}" ]]; then
|
|
|
|
timeout "${TEST_TIMEOUT}" pytest --host ${MILVUS_SERVICE_NAME} --port ${MILVUS_SERVICE_PORT} --minio_host ${MINIO_SERVICE_NAME} --dist loadgroup ${@:-}
|
|
else
|
|
pytest --host ${MILVUS_SERVICE_NAME} --port ${MILVUS_SERVICE_PORT} --minio_host ${MINIO_SERVICE_NAME} --dist loadgroup ${@:-}
|
|
fi
|