diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 426b341..39c5c9a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -108,6 +108,10 @@ jobs: echo "RUN_CFG__NOW=$(date +'%Y%m%d_%H%M%S')" >> $GITHUB_ENV echo "RUN_CFG__LOGS_DIR=logs-${{ env.BASE_SIGN }}" >> $GITHUB_ENV echo "RUN_CFG__DOCKER_IMAGE_NAME=tests-${{ env.BASE_SIGN }}" >> $GITHUB_ENV + echo "RUN_CFG__NETWORK_NAME=network-${{ env.BASE_SIGN }}" >> $GITHUB_ENV + echo "RUN_CFG__MACHINE1_NAME=machine1-${{ env.BASE_SIGN }}" >> $GITHUB_ENV + echo "RUN_CFG__MACHINE2_NAME=machine2-${{ env.BASE_SIGN }}" >> $GITHUB_ENV + echo "RUN_CFG__SSH_KEY_NAME=id_ed25519-${{ env.BASE_SIGN }}" >> $GITHUB_ENV echo "---------- [$GITHUB_ENV]" cat $GITHUB_ENV - name: Checkout @@ -118,11 +122,91 @@ jobs: run: chmod -R 777 "${{ env.RUN_CFG__LOGS_DIR }}" - name: Build local image ${{ matrix.alpine }} run: docker build --build-arg PYTHON_VERSION="${{ matrix.python }}" -t "${{ env.RUN_CFG__DOCKER_IMAGE_NAME }}" -f Dockerfile--${{ matrix.platform }}.tmpl . - - name: Run - run: docker run -t -v ${{ github.workspace }}/${{ env.RUN_CFG__LOGS_DIR }}:/home/test/testgres/logs "${{ env.RUN_CFG__DOCKER_IMAGE_NAME }}" + + - name: Generate temporary SSH Key pair for CI + run: | + # Generate a key without a password directly on the GitHub Actions host + ssh-keygen -q -t ed25519 -N "" -f ${{ github.workspace }}/${{ env.RUN_CFG__SSH_KEY_NAME }} + + - name: Setup network + run: | + docker network create ${{ env.RUN_CFG__NETWORK_NAME }} + + - name: Run machine2 (for remote operations) + run: | + # + # "- sleep infinity" is a right command. Docker ignores "-" and runs "sleep infinity". + # + docker run -d -t \ + --network ${{ env.RUN_CFG__NETWORK_NAME }} \ + --name ${{ env.RUN_CFG__MACHINE2_NAME }} \ + "${{ env.RUN_CFG__DOCKER_IMAGE_NAME }}" \ + sleep infinity + + echo "Waiting for container ${{ env.RUN_CFG__MACHINE2_NAME }} to start ..." + + # Set the timeout using the attempt counter + MAX_ATTEMPTS=50 + ATTEMPT=0 + + until [ "$(docker container inspect --format '{{.State.Running}}' "${{ env.RUN_CFG__MACHINE2_NAME }}")" = "true" ]; do + ATTEMPT=$((ATTEMPT + 1)) + if [ $ATTEMPT -ge $MAX_ATTEMPTS ]; then + echo "Error: Container did not start within the allotted time (timeout)!" + exit 1 + fi + sleep 0.2 + done + + echo "Container successfully launched in $((ATTEMPT * 2 / 10)) second(s)!" + + # + # Setup authorized_keys + # + cat ${{ github.workspace }}/${{ env.RUN_CFG__SSH_KEY_NAME }}.pub | \ + docker exec -i -u test ${{ env.RUN_CFG__MACHINE2_NAME }} sh -c " \ + cat >> /home/test/.ssh/authorized_keys && \ + chmod 600 /home/test/.ssh/authorized_keys \ + " + + # + # Log status + # + docker exec -u root ${{ env.RUN_CFG__MACHINE2_NAME }} sh -c " + echo '--- INSIDE CONTAINER OS ---' && \ + cat /etc/os-release && \ + echo '--- INSIDE CONTAINER .SSH ---' && \ + ls -la /home/test/.ssh/ \ + " + + - name: Run machine1 (main test container) + run: | + # Launch the main container, passing the private key to the .ssh folder of the test user. + # Pass environment variables so Python tests know where to start. + # Added the --rm flag so that the container is automatically deleted after the tests are completed + docker run --rm -t \ + --network ${{ env.RUN_CFG__NETWORK_NAME }} \ + --name ${{ env.RUN_CFG__MACHINE1_NAME }} \ + -v ${{ github.workspace }}/${{ env.RUN_CFG__LOGS_DIR }}:/home/test/testgres/logs \ + -v ${{ github.workspace }}/${{ env.RUN_CFG__SSH_KEY_NAME }}:/home/test/testgres/id_ed25519_test:ro \ + -e TEST_CFG__REMOTE_HOST="${{ env.RUN_CFG__MACHINE2_NAME }}" \ + -e TEST_CFG__REMOTE_PORT="22" \ + -e TEST_CFG__REMOTE_USERNAME="test" \ + -e TEST_CFG__REMOTE_SSH_KEY="/home/test/testgres/id_ed25519_test" \ + "${{ env.RUN_CFG__DOCKER_IMAGE_NAME }}" + - name: Upload Logs uses: actions/upload-artifact@v7 if: always() # IT IS IMPORTANT! with: name: testgres.os_ops--test_logs--${{ env.RUN_CFG__NOW }}-${{ env.BASE_SIGN }}-id${{ github.run_id }} path: "${{ env.RUN_CFG__LOGS_DIR }}/" + + - name: Cleanup Docker resources + if: always() # Ensures that the step is executed regardless of the result of the task + run: | + echo "=== Garbage Collection ===" + # Force kill the background machine (the -f flag will stop it if it is running) + docker rm -f "${{ env.RUN_CFG__MACHINE2_NAME }}" || true + # Delete the network (it will be deleted successfully, since all containers in it have already been destroyed) + docker network rm "${{ env.RUN_CFG__NETWORK_NAME }}" || true diff --git a/Dockerfile--alpine.tmpl b/Dockerfile--alpine.tmpl index 43190d2..d8bbc73 100644 --- a/Dockerfile--alpine.tmpl +++ b/Dockerfile--alpine.tmpl @@ -37,26 +37,48 @@ WORKDIR /home/test/testgres RUN echo "test ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers # THIS CMD IS NEEDED TO CONNECT THROUGH SSH WITHOUT PASSWORD -RUN sh -c "echo "test:*" | chpasswd -e" +RUN echo "test:*" | chpasswd -e -USER test +RUN chmod 700 /home/test/ && \ + mkdir -p /home/test/.ssh && \ + chown -R test:test /home/test/.ssh -# THIS CMD IS NEEDED TO CONNECT THROUGH SSH WITHOUT PASSWORD -RUN chmod 700 ~/ - -RUN mkdir -p ~/.ssh -#RUN chmod 700 ~/.ssh +# +# \"$@\" +# - quote is important! +# - "DUMMY-DUMMY-DUMMY" will be ignored. Do not ask me "why?". AXEZ. +# +ENTRYPOINT ["sh", "-c", " \ + set -eux; \ + echo 'SYSTEM START: PREPARING SSH'; \ + /usr/sbin/sshd; \ + ls -la /home/test/.ssh/; \ + \"$@\" \ +", "DUMMY-DUMMY-DUMMY"] -ENTRYPOINT sh -c " \ +# Run tests by default (master machine role) +CMD ["bash", "-c", " \ set -eux; \ -echo HELLO FROM ENTRYPOINT; \ -echo HOME DIR IS [`realpath ~/`]; \ -echo WORK DIR IS [$(pwd)]; \ -ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ''; \ -cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys; \ -chmod 600 ~/.ssh/authorized_keys; \ -ls -la ~/.ssh/; \ -sudo /usr/sbin/sshd; \ -ssh-keyscan -H localhost >> ~/.ssh/known_hosts; \ -ssh-keyscan -H 127.0.0.1 >> ~/.ssh/known_hosts; \ -bash run_tests3.sh;" +echo \"HOME DIR IS [`realpath ~/`]\"; \ +echo \"WORK DIR IS [$(pwd)]\"; \ +if [ ! -f /home/test/.ssh/id_rsa ]; then \ + su test -c \"ssh-keygen -t rsa -f /home/test/.ssh/id_rsa -q -N ''\"; \ + su test -c \"cat /home/test/.ssh/id_rsa.pub >> /home/test/.ssh/authorized_keys\"; \ + chmod 600 /home/test/.ssh/authorized_keys; \ +fi; \ +ls -la /home/test/.ssh/; \ +su test -c \"ssh-keyscan -H localhost >> /home/test/.ssh/known_hosts\"; \ +su test -c \"ssh-keyscan -H 127.0.0.1 >> /home/test/.ssh/known_hosts\"; \ +if [ -n \"${TEST_CFG__REMOTE_HOST:-}\" ]; then \ + su test -c \"ssh-keyscan -H ${TEST_CFG__REMOTE_HOST} >> /home/test/.ssh/known_hosts\"; \ +fi; \ +if [ -n \"${TEST_CFG__REMOTE_SSH_KEY:-}\" ]; then \ + cp \"${TEST_CFG__REMOTE_SSH_KEY}\" \"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + export TEST_CFG__REMOTE_SSH_KEY=\"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + chown test:test \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + chmod 600 \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + ls -la /home/test/.ssh/; \ +fi; \ +ls -la ./; \ +su test -c \"bash ./run_tests3.sh\"; \ +"] diff --git a/Dockerfile--altlinux_10.tmpl b/Dockerfile--altlinux_10.tmpl index 4c96398..2e58975 100644 --- a/Dockerfile--altlinux_10.tmpl +++ b/Dockerfile--altlinux_10.tmpl @@ -52,17 +52,47 @@ RUN chmod 700 /home/test/ && \ mkdir -p /home/test/.ssh && \ chown -R test:test /home/test/.ssh -USER test +# +# \"$@\" +# - quote is important! +# - "DUMMY-DUMMY-DUMMY" will be ignored. Do not ask me "why?". AXEZ. +# +ENTRYPOINT ["sh", "-c", " \ + set -eux; \ + echo 'SYSTEM START: PREPARING SSH'; \ + /usr/sbin/sshd; \ + ls -la /home/test/.ssh/; \ + \"$@\" \ +", "DUMMY-DUMMY-DUMMY"] -ENTRYPOINT sh -c " \ +# Run tests by default (master machine role) +CMD ["bash", "-c", " \ set -eux; \ -echo HELLO FROM ENTRYPOINT; \ -echo HOME DIR IS [`realpath ~/`]; \ -sudo /usr/sbin/sshd; \ -ssh-keyscan -H localhost >> ~/.ssh/known_hosts; \ -ssh-keyscan -H 127.0.0.1 >> ~/.ssh/known_hosts; \ -ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ''; \ -cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys; \ -chmod 600 ~/.ssh/authorized_keys; \ -ls -la ~/.ssh/; \ -TEST_FILTER=\"\" bash ./run_tests3.sh;" +echo \"HOME DIR IS [`realpath ~/`]\"; \ +echo \"WORK DIR IS [$(pwd)]\"; \ +if [ ! -f /home/test/.ssh/id_rsa ]; then \ + su -c \"ssh-keygen -t rsa -f /home/test/.ssh/id_rsa -q -N ''\" test; \ + su -c \"cat /home/test/.ssh/id_rsa.pub >> /home/test/.ssh/authorized_keys\" test; \ + chmod 600 /home/test/.ssh/authorized_keys; \ +fi; \ +ls -la /home/test/.ssh/; \ +su -c \"ssh-keyscan -H localhost >> /home/test/.ssh/known_hosts\" test; \ +su -c \"ssh-keyscan -H 127.0.0.1 >> /home/test/.ssh/known_hosts\" test; \ +if [ -n \"${TEST_CFG__REMOTE_HOST:-}\" ]; then \ + su -c \"ssh-keyscan -H ${TEST_CFG__REMOTE_HOST} >> /home/test/.ssh/known_hosts\" test; \ +fi; \ +if [ -n \"${TEST_CFG__REMOTE_SSH_KEY:-}\" ]; then \ + cp \"${TEST_CFG__REMOTE_SSH_KEY}\" \"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + export TEST_CFG__REMOTE_SSH_KEY=\"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + chown test:test \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + chmod 600 \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + ls -la /home/test/.ssh/; \ +fi; \ +ls -la ./; \ +# AUTOMATIC TRANSFER: Save all TEST_CFG__xxx variables to a temporary file \ +(env | grep '^TEST_CFG__' | sed 's/^/export /' || echo '') > ./test_cfg_env.sh; \ +chown test:test ./test_cfg_env.sh; \ +cat ./test_cfg_env.sh; \ +# Run su -, pull in the file with variables and start the tests \ +su - test -c \"cd /home/test/testgres && source ./test_cfg_env.sh && bash ./run_tests3.sh\"; \ +"] diff --git a/Dockerfile--altlinux_11.tmpl b/Dockerfile--altlinux_11.tmpl index 198414b..b91bca7 100644 --- a/Dockerfile--altlinux_11.tmpl +++ b/Dockerfile--altlinux_11.tmpl @@ -53,17 +53,47 @@ RUN chmod 700 /home/test/ && \ mkdir -p /home/test/.ssh && \ chown -R test:test /home/test/.ssh -USER test +# +# \"$@\" +# - quote is important! +# - "DUMMY-DUMMY-DUMMY" will be ignored. Do not ask me "why?". AXEZ. +# +ENTRYPOINT ["sh", "-c", " \ + set -eux; \ + echo 'SYSTEM START: PREPARING SSH'; \ + /usr/sbin/sshd; \ + ls -la /home/test/.ssh/; \ + \"$@\" \ +", "DUMMY-DUMMY-DUMMY"] -ENTRYPOINT sh -c " \ +# Run tests by default (master machine role) +CMD ["bash", "-c", " \ set -eux; \ -echo HELLO FROM ENTRYPOINT; \ -echo HOME DIR IS [`realpath ~/`]; \ -sudo /usr/sbin/sshd; \ -ssh-keyscan -H localhost >> ~/.ssh/known_hosts; \ -ssh-keyscan -H 127.0.0.1 >> ~/.ssh/known_hosts; \ -ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ''; \ -cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys; \ -chmod 600 ~/.ssh/authorized_keys; \ -ls -la ~/.ssh/; \ -TEST_FILTER=\"\" bash ./run_tests3.sh;" +echo \"HOME DIR IS [`realpath ~/`]\"; \ +echo \"WORK DIR IS [$(pwd)]\"; \ +if [ ! -f /home/test/.ssh/id_rsa ]; then \ + su -c \"ssh-keygen -t rsa -f /home/test/.ssh/id_rsa -q -N ''\" test; \ + su -c \"cat /home/test/.ssh/id_rsa.pub >> /home/test/.ssh/authorized_keys\" test; \ + chmod 600 /home/test/.ssh/authorized_keys; \ +fi; \ +ls -la /home/test/.ssh/; \ +su -c \"ssh-keyscan -H localhost >> /home/test/.ssh/known_hosts\" test; \ +su -c \"ssh-keyscan -H 127.0.0.1 >> /home/test/.ssh/known_hosts\" test; \ +if [ -n \"${TEST_CFG__REMOTE_HOST:-}\" ]; then \ + su -c \"ssh-keyscan -H ${TEST_CFG__REMOTE_HOST} >> /home/test/.ssh/known_hosts\" test; \ +fi; \ +if [ -n \"${TEST_CFG__REMOTE_SSH_KEY:-}\" ]; then \ + cp \"${TEST_CFG__REMOTE_SSH_KEY}\" \"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + export TEST_CFG__REMOTE_SSH_KEY=\"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + chown test:test \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + chmod 600 \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + ls -la /home/test/.ssh/; \ +fi; \ +ls -la ./; \ +# AUTOMATIC TRANSFER: Save all TEST_CFG__xxx variables to a temporary file \ +(env | grep '^TEST_CFG__' | sed 's/^/export /' || echo '') > ./test_cfg_env.sh; \ +chown test:test ./test_cfg_env.sh; \ +cat ./test_cfg_env.sh; \ +# Run su -, pull in the file with variables and start the tests \ +su - test -c \"cd /home/test/testgres && source ./test_cfg_env.sh && bash ./run_tests3.sh\"; \ +"] diff --git a/Dockerfile--astralinux_1_7.tmpl b/Dockerfile--astralinux_1_7.tmpl index f696c44..0992a3e 100644 --- a/Dockerfile--astralinux_1_7.tmpl +++ b/Dockerfile--astralinux_1_7.tmpl @@ -49,22 +49,46 @@ WORKDIR /home/test/testgres ENV LANG=C.UTF-8 -USER test - -RUN chmod 700 ~/ -RUN mkdir -p ~/.ssh -RUN chmod 700 ~/.ssh - -ENTRYPOINT sh -c " \ +RUN chmod 700 /home/test/ && \ + mkdir -p /home/test/.ssh && \ + chown -R test:test /home/test/.ssh + +# +# \"$@\" +# - quote is important! +# - "DUMMY-DUMMY-DUMMY" will be ignored. Do not ask me "why?". AXEZ. +# +ENTRYPOINT ["sh", "-c", " \ + set -eux; \ + echo 'SYSTEM START: PREPARING SSH'; \ + service ssh start; \ + ls -la /home/test/.ssh/; \ + \"$@\" \ +", "DUMMY-DUMMY-DUMMY"] + +# Run tests by default (master machine role) +CMD ["bash", "-c", " \ set -eux; \ -echo HELLO FROM ENTRYPOINT; \ -echo HOME DIR IS [`realpath ~/`]; \ -# sudo service ssh enable; \ -sudo service ssh start; \ -ssh-keyscan -H localhost >> ~/.ssh/known_hosts; \ -ssh-keyscan -H 127.0.0.1 >> ~/.ssh/known_hosts; \ -ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ''; \ -cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys; \ -chmod 600 ~/.ssh/authorized_keys; \ -ls -la ~/.ssh/; \ -TEST_FILTER=\"\" bash run_tests3.sh;" +echo \"HOME DIR IS [`realpath ~/`]\"; \ +echo \"WORK DIR IS [$(pwd)]\"; \ +if [ ! -f /home/test/.ssh/id_rsa ]; then \ + su test -c \"ssh-keygen -t rsa -f /home/test/.ssh/id_rsa -q -N ''\"; \ + su test -c \"cat /home/test/.ssh/id_rsa.pub >> /home/test/.ssh/authorized_keys\"; \ + chmod 600 /home/test/.ssh/authorized_keys; \ +fi; \ +ls -la /home/test/.ssh/; \ +su test -c \"ssh-keyscan -H localhost >> /home/test/.ssh/known_hosts\"; \ +su test -c \"ssh-keyscan -H 127.0.0.1 >> /home/test/.ssh/known_hosts\"; \ +if [ -n \"${TEST_CFG__REMOTE_HOST:-}\" ]; then \ + su test -c \"ssh-keyscan -H ${TEST_CFG__REMOTE_HOST} >> /home/test/.ssh/known_hosts\"; \ +fi; \ +if [ -n \"${TEST_CFG__REMOTE_SSH_KEY:-}\" ]; then \ + cp \"${TEST_CFG__REMOTE_SSH_KEY}\" \"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + export TEST_CFG__REMOTE_SSH_KEY=\"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + chown test:test \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + chmod 600 \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + ls -la /home/test/.ssh/; \ +fi; \ +ls -la ./; \ +su test -c \"bash ./run_tests3.sh\"; \ +"] diff --git a/Dockerfile--ubuntu_24_04.tmpl b/Dockerfile--ubuntu_24_04.tmpl index 6cecb10..1f46d01 100644 --- a/Dockerfile--ubuntu_24_04.tmpl +++ b/Dockerfile--ubuntu_24_04.tmpl @@ -45,21 +45,46 @@ WORKDIR /home/test/testgres ENV LANG=C.UTF-8 -USER test +RUN chmod 700 /home/test/ && \ + mkdir -p /home/test/.ssh && \ + chown -R test:test /home/test/.ssh -RUN chmod 700 ~/ -RUN mkdir -p ~/.ssh +# +# \"$@\" +# - quote is important! +# - "DUMMY-DUMMY-DUMMY" will be ignored. Do not ask me "why?". AXEZ. +# +ENTRYPOINT ["sh", "-c", " \ + set -eux; \ + echo 'SYSTEM START: PREPARING SSH'; \ + service ssh start; \ + ls -la /home/test/.ssh/; \ + \"$@\" \ +", "DUMMY-DUMMY-DUMMY"] -ENTRYPOINT sh -c " \ -#set -eux; \ -echo HELLO FROM ENTRYPOINT; \ -echo HOME DIR IS [`realpath ~/`]; \ -service ssh enable; \ -sudo service ssh start; \ -ssh-keyscan -H localhost >> ~/.ssh/known_hosts; \ -ssh-keyscan -H 127.0.0.1 >> ~/.ssh/known_hosts; \ -ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ''; \ -cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys; \ -chmod 600 ~/.ssh/authorized_keys; \ -ls -la ~/.ssh/; \ -TEST_FILTER=\"\" bash ./run_tests3.sh;" +# Run tests by default (master machine role) +CMD ["bash", "-c", " \ +set -eux; \ +echo \"HOME DIR IS [`realpath ~/`]\"; \ +echo \"WORK DIR IS [$(pwd)]\"; \ +if [ ! -f /home/test/.ssh/id_rsa ]; then \ + su test -c \"ssh-keygen -t rsa -f /home/test/.ssh/id_rsa -q -N ''\"; \ + su test -c \"cat /home/test/.ssh/id_rsa.pub >> /home/test/.ssh/authorized_keys\"; \ + chmod 600 /home/test/.ssh/authorized_keys; \ +fi; \ +ls -la /home/test/.ssh/; \ +su test -c \"ssh-keyscan -H localhost >> /home/test/.ssh/known_hosts\"; \ +su test -c \"ssh-keyscan -H 127.0.0.1 >> /home/test/.ssh/known_hosts\"; \ +if [ -n \"${TEST_CFG__REMOTE_HOST:-}\" ]; then \ + su test -c \"ssh-keyscan -H ${TEST_CFG__REMOTE_HOST} >> /home/test/.ssh/known_hosts\"; \ +fi; \ +if [ -n \"${TEST_CFG__REMOTE_SSH_KEY:-}\" ]; then \ + cp \"${TEST_CFG__REMOTE_SSH_KEY}\" \"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + export TEST_CFG__REMOTE_SSH_KEY=\"${TEST_CFG__REMOTE_SSH_KEY}_ci\"; \ + chown test:test \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + chmod 600 \"${TEST_CFG__REMOTE_SSH_KEY}\"; \ + ls -la /home/test/.ssh/; \ +fi; \ +ls -la ./; \ +su test -c \"bash ./run_tests3.sh\"; \ +"] diff --git a/tests/helpers/global_data.py b/tests/helpers/global_data.py index f66772e..16032bd 100644 --- a/tests/helpers/global_data.py +++ b/tests/helpers/global_data.py @@ -4,6 +4,7 @@ from src.remote_ops import RemoteOperations import os +import typing class OsOpsDescr: @@ -17,11 +18,18 @@ def __init__(self, sign: str, os_ops: OsOperations): self.os_ops = os_ops +def _to_int_or_none(v: typing.Any) -> typing.Optional[int]: + return v if v is None else int(v) + + class OsOpsDescrs: sm_remote_conn_params = ConnectionParams( - host=os.getenv('RDBMS_TESTPOOL1_HOST') or '127.0.0.1', - username=os.getenv('USER'), - ssh_key=os.getenv('RDBMS_TESTPOOL_SSHKEY')) + host=os.getenv('TEST_CFG__REMOTE_HOST', '127.0.0.1'), + port=_to_int_or_none(os.getenv('TEST_CFG__REMOTE_PORT')), + username=os.getenv('TEST_CFG__REMOTE_USERNAME'), + ssh_key=os.getenv('TEST_CFG__REMOTE_SSH_KEY'), + password=os.getenv('TEST_CFG__REMOTE_PASSWORD'), + ) sm_remote_os_ops = RemoteOperations(sm_remote_conn_params) diff --git a/tests/test_os_ops_common.py b/tests/test_os_ops_common.py index cd0191a..4439f63 100644 --- a/tests/test_os_ops_common.py +++ b/tests/test_os_ops_common.py @@ -2724,6 +2724,54 @@ def test_readlines__BIN( assert lines == result_bin return + def test_prove_environment_isolation( + self, + os_ops_descr: OsOpsDescr + ): + # + # Author: Marg G. (mark@google.com) + # + + assert type(os_ops_descr) is OsOpsDescr + os_ops = os_ops_descr.os_ops + assert isinstance(os_ops, OsOperations) + + logging.info("=================== COKANUM PROOF START ===================") + logging.info(f"Target environment type: [{os_ops_descr.sign}]") + + # 1. Забираем OS-RELEASE + try: + # Используем cat, который мы уже проверили + os_release = os_ops.read("/etc/os-release") + assert type(os_release) is str + # Вытаскиваем только PRETTY_NAME для компактности в логах + pretty_name = "Unknown Linux" + for line in os_release.splitlines(): + if line.startswith("PRETTY_NAME="): + pretty_name = line.split("=")[1].strip('"') + break + logging.info(f"OS Platform detected : {pretty_name}") + except Exception as e: + logging.error(f"Failed to read os-release: {e}") + + # 2. Просто выводим сетевой ландшафт "как есть" и не паримся! + try: + cmd = ["ip", "address"] + ip_output = os_ops.exec_command(cmd, encoding="utf-8") + assert type(ip_output) is str + logging.info("Network interfaces info:") + # Печатаем всю простыню целиком, добавив отступы для красоты + for line in ip_output.splitlines(): + logging.info(f" {line}") + except Exception as e: + logging.error(f"Failed to get ip address output: {e}") + + logging.info("=================== COKANUM PROOF END =====================") + + # Тест всегда успешный, его цель — оставить исторический след в логах гитхаба + assert True + return + @staticmethod def helper__bug_check__unknown_os_ops_type( os_ops: OsOperations,