From de34bdf506b693284f5d21067f0ed81839e6a87f Mon Sep 17 00:00:00 2001 From: alexlianides <114772744+alexlianides@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:39:05 -0700 Subject: [PATCH] Python Integration Test Workflows (#15) * python test workflow * removed install step * integrationTest kickoff for python * seperated integrationTest step to reduce log output * integrationTest logic and logging update * updated logging and added additional logs for integrationTests * changed workflow name * updated workflow to include additional build-steps * added additional appsettings.json and code cleanup * updated build commands * copy .json for logging * debugging * fix ls * set directory for k3s command * updated log output * changed return to exit * removed push trigger * updated log levels --------- Co-authored-by: alianides --- .../run-integrationTests-python.yaml | 136 ++++++++++++++++++ .../workflows/test-spacefx-client-python.yaml | 36 +++++ test/integrationTests_python/appsettings.json | 16 +++ .../integrationTest.py | 6 + 4 files changed, 194 insertions(+) create mode 100644 .github/workflows/run-integrationTests-python.yaml create mode 100644 .github/workflows/test-spacefx-client-python.yaml create mode 100644 test/integrationTests_python/appsettings.json diff --git a/.github/workflows/run-integrationTests-python.yaml b/.github/workflows/run-integrationTests-python.yaml new file mode 100644 index 0000000..063cd76 --- /dev/null +++ b/.github/workflows/run-integrationTests-python.yaml @@ -0,0 +1,136 @@ +name: test-template-spacefx-client-python +on: + workflow_call: + inputs: + WORKFLOW_AGENT: + description: 'The agent to run the job on' + required: true + type: string + app_name: + description: 'The name of the app to test' + default: spacesdk-client + type: string + secrets: + GIT_HUB_USER_NAME: + required: true + GIT_HUB_USER_TOKEN: + required: true + SETUP_REPO_URL: + required: true + + +jobs: + build-and-test: + name: test-spacefx-client-python-${{ inputs.WORKFLOW_AGENT }} + runs-on: ${{ inputs.WORKFLOW_AGENT }} + permissions: + contents: read + issues: read + checks: write + pull-requests: write + + steps: + - uses: microsoft/azure-orbital-space-sdk-github-actions/composite-actions/initialize@main + with: + GIT_HUB_USER_NAME: ${{ secrets.GIT_HUB_USER_NAME }} + GIT_HUB_USER_TOKEN: ${{ secrets.GIT_HUB_USER_TOKEN }} + SETUP_REPO_URL: ${{ secrets.SETUP_REPO_URL }} + + ## Build the Service's Devcontainer and wait for pods to spin up (unnecessary when devcontainer up composite action is available) + - name: Build Devcontainer + shell: bash + run: | + devcontainer up --workspace-folder ${PWD} \ + --workspace-mount-consistency cached \ + --id-label devcontainer.local_folder=${PWD} \ + --default-user-env-probe loginInteractiveShell \ + --build-no-cache \ + --remove-existing-container \ + --mount type=volume,source=vscode,target=/vscode,external=true \ + --update-remote-user-uid-default on \ + --mount-workspace-git-root true + echo $? + + pod_status=$(k3s kubectl get pods -n payload-app -l app=${{ inputs.app_name }} --output=json | jq -r '.items[0].status.phase') + + while [[ -z "$pod_status" || "$pod_status" != "Running" ]]; do + echo "Checking pod statuses..." + pod_status=$(k3s kubectl get pods -n payload-app -l app=${{ inputs.app_name }} --output=json | jq -r '.items[0].status.phase') + + if [[ -z "$pod_status" || "$pod_status" != "Running" ]]; then + echo "One or both pods are not 'Running'. POD: '$pod_status' ..." + k3s kubectl get pods -A + sleep 5 # Wait for 5 seconds before checking again + fi + done + + - name: Build Projects + shell: bash + run: | + [[ ! -f /var/spacedev/tmp/${{ inputs.app_name }}/container_info.json ]] && echo "container_info.json not found. Dev container start up failed" && exit 1 + echo "Calculating container name from container_info.json..." + + DEV_CONTAINER_NAME=$(jq -r "${PWD}/.git/logs/${{ inputs.app_name }}.log.stdout" + exec 2>&1 + k3s kubectl exec -n payload-app deploy/${{ inputs.app_name }} -- bash -c "cd /workspace/${{ inputs.app_name }}/test/integrationTests_python && python3 /workspace/${{ inputs.app_name }}/test/integrationTests_python/integrationTest.py" + ) & + + client_pid=$! + + echo "Waiting for the integration test host to finish..." + client_pid_return_code=0 + wait "$client_pid" + client_pid_return_code=$? + + echo "Client process complete with return code: $client_pid_return_code" + + echo "Outputting logs from the integration test client..." + cat ${PWD}/.git/logs/${{ inputs.app_name }}.log.stdout | grep INFO + echo "" + + exit $client_pid_return_code + echo "--------------------" + \ No newline at end of file diff --git a/.github/workflows/test-spacefx-client-python.yaml b/.github/workflows/test-spacefx-client-python.yaml new file mode 100644 index 0000000..8ba6eb9 --- /dev/null +++ b/.github/workflows/test-spacefx-client-python.yaml @@ -0,0 +1,36 @@ +name: test-spacefx-client-python +on: + workflow_dispatch: + pull_request: + branches: [ main ] + +jobs: + test-spacefx-client-python-amd64: + permissions: + contents: read + issues: read + checks: write + pull-requests: write + + uses: ./.github/workflows/run-integrationTests-python.yaml + with: + WORKFLOW_AGENT: ubuntu-latest + secrets: + GIT_HUB_USER_NAME: ${{ secrets.GIT_HUB_USER_NAME }} + GIT_HUB_USER_TOKEN: ${{ secrets.GIT_HUB_USER_TOKEN }} + SETUP_REPO_URL: ${{ secrets.SETUP_REPO_URL }} + + test-spacefx-client-python-arm64: + permissions: + contents: read + issues: read + checks: write + pull-requests: write + + uses: ./.github/workflows/run-integrationTests-python.yaml + with: + WORKFLOW_AGENT: spacesdk-ubuntu-2204LTS-arm64 + secrets: + GIT_HUB_USER_NAME: ${{ secrets.GIT_HUB_USER_NAME }} + GIT_HUB_USER_TOKEN: ${{ secrets.GIT_HUB_USER_TOKEN }} + SETUP_REPO_URL: ${{ secrets.SETUP_REPO_URL }} \ No newline at end of file diff --git a/test/integrationTests_python/appsettings.json b/test/integrationTests_python/appsettings.json new file mode 100644 index 0000000..104c90e --- /dev/null +++ b/test/integrationTests_python/appsettings.json @@ -0,0 +1,16 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "System.Net.Http": "Error", + "Microsoft.Azure.SpaceFx": "Information", + "Microsoft.Azure.SpaceFx.Core.Services.MessageReceiver": "Information", + "Microsoft.Azure.SpaceFx.Core.Services.HeartbeatService": "Information", + "Microsoft.Azure.SpaceFx.Core.Services.ResourceUtilizationMonitor": "Information" + }, + "Console": { + "TimestampFormat": "[yyyy-MM-dd HH:mm:ss] " + } + } +} \ No newline at end of file diff --git a/test/integrationTests_python/integrationTest.py b/test/integrationTests_python/integrationTest.py index 37c4ae7..424e880 100644 --- a/test/integrationTests_python/integrationTest.py +++ b/test/integrationTests_python/integrationTest.py @@ -97,9 +97,13 @@ def position_service(): def main(): + print("Building SpaceFX Client") spacefx.client.build() + logger.info("[BEGIN] Integration Tests") + logger.info("---------------------------") + appid = spacefx.client.get_app_id() logger.info(f"AppID: {appid}") @@ -118,6 +122,8 @@ def main(): sensor_service() link_service() logging_service() + logger.info("---------------------------") + logger.info("[END] Integration Tests") if __name__ == '__main__':