From aa0870d2ffa569f76a2aeadbc70d560b08f0f8dd Mon Sep 17 00:00:00 2001 From: zhikunyao Date: Thu, 20 Nov 2025 13:45:11 +0800 Subject: [PATCH] test: add e2e-v2 helm for amd (#45621) Signed-off-by: Zhikun Yao --- tests/_helm/values/e2e-amd/distributed-pulsar | 315 ++++++++++++++++++ tests/_helm/values/e2e-amd/standalone | 132 ++++++++ .../values/e2e-amd/standalone-kafka-mmap | 187 +++++++++++ tests/_helm/values/e2e-amd/standalone-one-pod | 85 +++++ tests/python_client/pytest.ini | 1 + tests/restful_client/pytest.ini | 1 + tests/restful_client_v2/pytest.ini | 1 + tests/scripts/ci_e2e_4am_without_restful.sh | 79 +++++ tests/scripts/ci_e2e_with_restful.sh | 110 ++++++ 9 files changed, 911 insertions(+) create mode 100644 tests/_helm/values/e2e-amd/distributed-pulsar create mode 100644 tests/_helm/values/e2e-amd/standalone create mode 100644 tests/_helm/values/e2e-amd/standalone-kafka-mmap create mode 100644 tests/_helm/values/e2e-amd/standalone-one-pod create mode 100755 tests/scripts/ci_e2e_4am_without_restful.sh create mode 100755 tests/scripts/ci_e2e_with_restful.sh diff --git a/tests/_helm/values/e2e-amd/distributed-pulsar b/tests/_helm/values/e2e-amd/distributed-pulsar new file mode 100644 index 0000000000..3783ca72c7 --- /dev/null +++ b/tests/_helm/values/e2e-amd/distributed-pulsar @@ -0,0 +1,315 @@ +affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 +cluster: + enabled: true +streaming: + enabled: true +proxy: + resources: + limits: + cpu: "1" + memory: 4Gi + requests: + cpu: "0.3" + memory: 256Mi +dataNode: + resources: + limits: + cpu: "6" + memory: 8Gi + requests: + cpu: "0.5" + memory: 2Gi +indexNode: + enabled: false + disk: + enabled: true + resources: + limits: + cpu: "2" + memory: 8Gi + requests: + cpu: "0.5" + memory: 500Mi +queryNode: + disk: + enabled: true + resources: + limits: + cpu: "2" + memory: 4Gi + requests: + cpu: "0.5" + memory: 1Gi +streamingNode: + resources: + limits: + cpu: "3" + memory: 8Gi + requests: + cpu: "0.5" + memory: 3Gi +mixCoordinator: + resources: + limits: + cpu: "1" + memory: 4Gi + requests: + cpu: "0.2" + memory: 256Mi +service: + type: ClusterIP +log: + level: debug +extraConfigFiles: + user.yaml: |+ + common: + storage: + enablev2: true + dataCoord: + gc: + interval: 1800 + missingTolerance: 1800 + dropTolerance: 1800 + queryNode: + segcore: + exprEvalBatchSize: 512 +metrics: + serviceMonitor: + enabled: true +etcd: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + metrics: + enabled: true + podMonitor: + enabled: true + replicaCount: 1 + resources: + requests: + cpu: "0.2" + memory: 256Mi + limits: + cpu: "1" + memory: 4Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists +image: + all: + pullPolicy: Always + repository: harbor.milvus.io/milvus/milvus + tag: PR-35426-20240812-46dadb120 +minio: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + mode: standalone + resources: + requests: + cpu: "0.2" + memory: 512Mi + limits: + cpu: "1" + memory: 4Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists +pulsarv3: + enabled: true + bookkeeper: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + resources: + requests: + cpu: "0.1" + memory: 256Mi + limits: + cpu: "0.5" + memory: 2Gi + configData: + PULSAR_MEM: > + -Xms512m + -Xmx512m + -XX:MaxDirectMemorySize=1024m + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists + broker: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + replicaCount: 2 + resources: + requests: + cpu: "0.1" + memory: 256Mi + limits: + cpu: "0.5" + memory: 4Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists + components: + autorecovery: false + proxy: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + resources: + requests: + cpu: "0.1" + memory: 256Mi + limits: + cpu: "0.5" + memory: 2Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists + wsResources: + requests: + cpu: "0.1" + memory: 256Mi + limits: + cpu: "0.5" + memory: 2Gi + zookeeper: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + replicaCount: 1 + resources: + requests: + cpu: "0.1" + memory: 256Mi + limits: + cpu: "0.5" + memory: 2Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists +tolerations: +- effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" +- effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists diff --git a/tests/_helm/values/e2e-amd/standalone b/tests/_helm/values/e2e-amd/standalone new file mode 100644 index 0000000000..85e827834c --- /dev/null +++ b/tests/_helm/values/e2e-amd/standalone @@ -0,0 +1,132 @@ +affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 +cluster: + enabled: false +streaming: + enabled: true +service: + type: ClusterIP +woodpecker: + enabled: true +standalone: + messageQueue: woodpecker + disk: + enabled: true + resources: + limits: + cpu: "6" + memory: 12Gi + requests: + cpu: "3" + memory: 6Gi +log: + level: debug +extraConfigFiles: + user.yaml: |+ + dataCoord: + gc: + interval: 1800 + missingTolerance: 1800 + dropTolerance: 1800 + queryNode: + segcore: + exprEvalBatchSize: 512 +metrics: + serviceMonitor: + enabled: true +etcd: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + metrics: + enabled: true + podMonitor: + enabled: true + replicaCount: 1 + resources: + requests: + cpu: "0.2" + memory: 256Mi + limits: + cpu: "1" + memory: 4Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists +image: + all: + pullPolicy: Always + repository: harbor.milvus.io/milvus/milvus + tag: PR-35402-20240812-402f716b5 +minio: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + mode: standalone + resources: + requests: + cpu: "0.5" + memory: 3Gi + limits: + cpu: "1" + memory: 6Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists +pulsarv3: + enabled: false +tolerations: +- effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" +- effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists diff --git a/tests/_helm/values/e2e-amd/standalone-kafka-mmap b/tests/_helm/values/e2e-amd/standalone-kafka-mmap new file mode 100644 index 0000000000..7cb71232b5 --- /dev/null +++ b/tests/_helm/values/e2e-amd/standalone-kafka-mmap @@ -0,0 +1,187 @@ +affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 +cluster: + enabled: false +streaming: + enabled: true +service: + type: ClusterIP +standalone: + messageQueue: kafka + disk: + enabled: true + resources: + limits: + cpu: "6" + memory: 12Gi + requests: + cpu: "2" + memory: 4Gi +log: + level: debug +extraConfigFiles: + user.yaml: |+ + common: + storage: + enablev2: true + dataCoord: + gc: + interval: 1800 + missingTolerance: 1800 + dropTolerance: 1800 + queryNode: + segcore: + exprEvalBatchSize: 512 + mmap: + vectorField: true + vectorIndex: true + scalarField: true + scalarIndex: true + growingMmapEnabled: true +metrics: + serviceMonitor: + enabled: true +etcd: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + metrics: + enabled: true + podMonitor: + enabled: true + replicaCount: 1 + resources: + requests: + cpu: "0.2" + memory: 256Mi + limits: + cpu: "1" + memory: 4Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists +image: + all: + pullPolicy: Always + repository: harbor.milvus.io/milvus/milvus + tag: PR-35426-20240812-46dadb120 +kafka: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + enabled: true + metrics: + jmx: + enabled: true + kafka: + enabled: true + serviceMonitor: + enabled: true + resources: + requests: + cpu: "0.2" + memory: 512Mi + limits: + cpu: "0.5" + memory: 4Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists + zookeeper: + replicaCount: 1 + resources: + requests: + cpu: "0.2" + memory: 512Mi + limits: + cpu: "0.5" + memory: 2Gi +minio: + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 + mode: standalone + resources: + requests: + cpu: "0.2" + memory: 512Mi + limits: + cpu: "1" + memory: 4Gi + tolerations: + - effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" + - effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists +pulsarv3: + enabled: false +tolerations: +- effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" +- effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists diff --git a/tests/_helm/values/e2e-amd/standalone-one-pod b/tests/_helm/values/e2e-amd/standalone-one-pod new file mode 100644 index 0000000000..bdf6df687b --- /dev/null +++ b/tests/_helm/values/e2e-amd/standalone-one-pod @@ -0,0 +1,85 @@ +affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: jenkins-e2e-amd + operator: In + values: + - "true" + weight: 100 + - preference: + matchExpressions: + - key: node-role.kubernetes.io/e2e + operator: Exists + weight: 1 +cluster: + enabled: false +streaming: + enabled: true +etcd: + enabled: false + metrics: + enabled: true + podMonitor: + enabled: true + replicaCount: 1 +extraConfigFiles: + user.yaml: | + etcd: + use: + embed: true + data: + dir: /var/lib/milvus/etcd + common: + storageType: local + queryNode: + segcore: + exprEvalBatchSize: 512 +image: + all: + pullPolicy: Always + repository: harbor.milvus.io/milvus/milvus + tag: PR-35432-20240812-71a1562ea +indexCoordinator: + enabled: false + gc: + interval: 1 +extraConfigFiles: + user.yaml: |+ + indexCoord: + scheduler: + interval: 100 +indexNode: + enabled: false + disk: + enabled: true +metrics: + serviceMonitor: + enabled: true +minio: + enabled: false + mode: standalone + tls: + enabled: false +pulsar: + enabled: false +queryNode: + disk: + enabled: true +service: + type: ClusterIP +standalone: + disk: + enabled: true + extraEnv: + - name: ETCD_CONFIG_PATH + value: /milvus/configs/advanced/etcd.yaml +tolerations: +- effect: PreferNoSchedule + key: jenkins-milvus-ci-only + operator: Equal + value: "true" +- effect: NoSchedule + key: node-role.kubernetes.io/e2e + operator: Exists diff --git a/tests/python_client/pytest.ini b/tests/python_client/pytest.ini index ed409777c2..5300ebcdc0 100644 --- a/tests/python_client/pytest.ini +++ b/tests/python_client/pytest.ini @@ -13,3 +13,4 @@ filterwarnings = ignore::DeprecationWarning asyncio_default_fixture_loop_scope = function +timeout_method = thread diff --git a/tests/restful_client/pytest.ini b/tests/restful_client/pytest.ini index dbbfd3c5ff..7e4accc024 100644 --- a/tests/restful_client/pytest.ini +++ b/tests/restful_client/pytest.ini @@ -12,3 +12,4 @@ markers = L0 : 'L0 case, high priority' L1 : 'L1 case, second priority' +timeout_method = thread \ No newline at end of file diff --git a/tests/restful_client_v2/pytest.ini b/tests/restful_client_v2/pytest.ini index cbfc4ac34a..91685bfcb1 100644 --- a/tests/restful_client_v2/pytest.ini +++ b/tests/restful_client_v2/pytest.ini @@ -14,3 +14,4 @@ markers = L2 : 'L2 case, system level case' BulkInsert : 'Bulk Insert case' +timeout_method = thread diff --git a/tests/scripts/ci_e2e_4am_without_restful.sh b/tests/scripts/ci_e2e_4am_without_restful.sh new file mode 100755 index 0000000000..cbdd2218a7 --- /dev/null +++ b/tests/scripts/ci_e2e_4am_without_restful.sh @@ -0,0 +1,79 @@ +#!/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" + +cd ${ROOT}/tests/python_client + +# Print python3 version, python version 3.6.8 is more stable for test +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 + +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}\ + --html=${CI_LOG_PATH}/report.html --self-contained-html --dist loadgroup ${@:-} +else + pytest --host ${MILVUS_SERVICE_NAME} --port ${MILVUS_SERVICE_PORT} --minio_host ${MINIO_SERVICE_NAME}\ + --html=${CI_LOG_PATH}/report.html --self-contained-html --dist loadgroup ${@:-} +fi + diff --git a/tests/scripts/ci_e2e_with_restful.sh b/tests/scripts/ci_e2e_with_restful.sh new file mode 100755 index 0000000000..3e9f03adb9 --- /dev/null +++ b/tests/scripts/ci_e2e_with_restful.sh @@ -0,0 +1,110 @@ +#!/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_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.sh" + + +cd ${ROOT}/tests/python_client + +# Print python3 version, python version 3.6.8 is more stable for test +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 +if [ "${DISABLE_PIP_INSTALL:-}" = "" ]; 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 --html=${CI_LOG_PATH}/report_restful.html --self-contained-html +else + pytest testcases --endpoint http://${MILVUS_SERVICE_NAME}:${MILVUS_SERVICE_PORT} -v -x -m L0 -n 6 --timeout 180 --html=${CI_LOG_PATH}/report_restful.html --self-contained-html +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 -m L0 -n 6 --timeout 360 --html=${CI_LOG_PATH}/report_restful.html --self-contained-html +else + pytest testcases --endpoint http://${MILVUS_SERVICE_NAME}:${MILVUS_SERVICE_PORT} --minio_host ${MINIO_SERVICE_NAME} -v -x -m L0 -n 6 --timeout 360 --html=${CI_LOG_PATH}/report_restful.html --self-contained-html +fi + +if [[ "${MILVUS_HELM_RELEASE_NAME}" != *"msop"* ]]; then + 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 -m BulkInsert -n 6 --timeout 360 --html=${CI_LOG_PATH}/report_restful.html --self-contained-html + else + pytest testcases --endpoint http://${MILVUS_SERVICE_NAME}:${MILVUS_SERVICE_PORT} --minio_host ${MINIO_SERVICE_NAME} -v -x -m BulkInsert -n 6 --timeout 360 --html=${CI_LOG_PATH}/report_restful.html --self-contained-html + fi +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}\ + --html=${CI_LOG_PATH}/report.html --self-contained-html ${@:-} +else + pytest --host ${MILVUS_SERVICE_NAME} --port ${MILVUS_SERVICE_PORT} --minio_host ${MINIO_SERVICE_NAME}\ + --html=${CI_LOG_PATH}/report.html --self-contained-html ${@:-} +fi