Skip to content

Added Integration Tests for Device Manager Service #107

Added Integration Tests for Device Manager Service

Added Integration Tests for Device Manager Service #107

Workflow file for this run

# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
name: Test and Deploy
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
permissions:
contents: read
actions: read
checks: write
jobs:
api-gateway:
name: API Gateway
runs-on: ubuntu-latest
env:
working-directory: Services/Netmon.APIGateway
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore
working-directory: ${{env.working-directory}}
- name: Build
run: dotnet build --no-restore
working-directory: ${{env.working-directory}}
- name: Test
run: dotnet test --no-build --verbosity normal --collect:"XPlat Code Coverage" --results-directory ./TestResults
working-directory: ${{env.working-directory}}
account-service:
name: Account Service
runs-on: ubuntu-latest
env:
working-directory: Services/Netmon.AccountService
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore
working-directory: ${{env.working-directory}}
- name: Build
run: dotnet build --no-restore
working-directory: ${{env.working-directory}}
- name: Test
run: dotnet test --no-build --verbosity normal --collect:"XPlat Code Coverage" --results-directory ./TestResults
working-directory: ${{env.working-directory}}
device-manager-service:
name: Device Manager Service
runs-on: ubuntu-latest
env:
working-directory: Services/Netmon.DeviceManager
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore DeviceManagerService.sln
working-directory: ${{env.working-directory}}
- name: Build
run: dotnet build --no-restore DeviceManagerService.sln
working-directory: ${{env.working-directory}}
- name: Test
run: dotnet test --no-build --verbosity normal --collect:"XPlat Code Coverage" --results-directory ./TestResults DeviceManagerService.sln
working-directory: ${{env.working-directory}}
snmp-polling-service:
name: SNMP Polling Service
runs-on: ubuntu-latest
env:
working-directory: Services/Netmon.SNMPPolling
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore SNMPPollingService.sln
working-directory: ${{env.working-directory}}
- name: Build
run: dotnet build --no-restore SNMPPollingService.sln
working-directory: ${{env.working-directory}}
- name: Test
run: dotnet test --no-build --verbosity normal --collect:"XPlat Code Coverage" --results-directory ./TestResults --settings runsettings.xml --logger "trx;LogFileName=test-results.trx" SNMPPollingService.sln
working-directory: ${{env.working-directory}}
- name: Unit Test Report
uses: dorny/test-reporter@v1
if: always()
with:
name: Unit Test Report
path: "**/test-results.trx"
reporter: dotnet-trx
fail-on-error: true
- name: Code Coverage Report
uses: irongut/CodeCoverageSummary@v1.3.0
with:
filename: Services/Netmon.SNMPPolling/TestResults/**/coverage.cobertura.xml
badge: true
fail_below_min: true
format: markdown
hide_branch_rate: false
hide_complexity: true
indicators: true
output: both
thresholds: '60 80'
- name: Print Reports
if: always()
run: cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY
user-web-app:
name: User Web App
timeout-minutes: 20
runs-on: ubuntu-latest
env:
working-directory: Services/UserWebApp
steps:
- uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install dependencies
run: npm ci
working-directory: ${{env.working-directory}}
- name: Build SvelteKit project
run: npm run build
working-directory: ${{env.working-directory}}
admin-web-app:
name: Admin Web App
timeout-minutes: 20
runs-on: ubuntu-latest
env:
working-directory: Services/AdminWebApp
steps:
- uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install dependencies
run: npm ci
working-directory: ${{env.working-directory}}
- name: Build SvelteKit project
run: npm run build
working-directory: ${{env.working-directory}}
snmp-polling-service-integration-tests:
name: SNMP Polling Service Integration Tests
runs-on: ubuntu-latest
env:
working-directory: Tests/Netmon.SNMPPolling.IntegrationTests
needs: [account-service, device-manager-service, snmp-polling-service, user-web-app, admin-web-app, api-gateway]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Docker Compose Action
uses: isbang/compose-action@v1.5.1
with:
compose-file: "./docker-compose.yml"
services: |
netmon-snmp-test-agent
netmon-mysql
- name: Run Integration Tests
run: dotnet test --logger "console;verbosity=detailed" --logger "trx;LogFileName=test-results.trx" Netmon.SNMPPolling.IntegrationTests.csproj
working-directory: ${{env.working-directory}}
- name: Integration Test Report
uses: dorny/test-reporter@v1
if: always()
with:
name: SNMP Polling Service Integration Test Report
path: "**/test-results.trx"
reporter: dotnet-trx
fail-on-error: true
device-manager-service-integration-tests:
name: Device Manager Service Integration Tests
runs-on: ubuntu-latest
env:
working-directory: Tests/Netmon.DeviceManager.IntegrationTests
needs: [account-service, device-manager-service, snmp-polling-service, user-web-app, admin-web-app, api-gateway]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Docker Compose Action
uses: isbang/compose-action@v1.5.1
with:
compose-file: "./docker-compose.yml"
services: |
netmon-account-service
netmon-mysql
- name: Run Integration Tests
run: dotnet test --logger "console;verbosity=detailed" --logger "trx;LogFileName=test-results.trx" Netmon.DeviceManager.IntegrationTests.csproj
working-directory: ${{env.working-directory}}
- name: Integration Test Report
uses: dorny/test-reporter@v1
if: always()
with:
name: Device Manager Service Integration Test Report
path: "**/test-results.trx"
reporter: dotnet-trx
fail-on-error: true
end-to-end-tests:
name: End to End Tests
runs-on: ubuntu-latest
needs: [snmp-polling-service-integration-tests, device-manager-service-integration-tests]
timeout-minutes: 60
strategy:
fail-fast: true
matrix:
service: [ 'netmon-admin-web-app', 'netmon-user-web-app' ]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Docker Compose MySQL
run: docker-compose up -d --build netmon-mysql
- name: Docker Compose
run: docker-compose up -d --build
- name: Install dependencies
run: |
docker exec ${{matrix.service}} npm install vitest
docker exec ${{matrix.service}} npx playwright install --with-deps
- name: Run Tests
run: docker exec ${{matrix.service}} npx playwright test
codeql:
name: CodeQL
runs-on: ubuntu-latest
needs: [snmp-polling-service-integration-tests, device-manager-service-integration-tests]
timeout-minutes: 60
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'csharp', 'javascript' ]
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"
deploy:
name: Deploy Docker Images
runs-on: ubuntu-latest
needs: [codeql, end-to-end-tests]
timeout-minutes: 20
steps:
- name: Log into Docker Hub
uses: docker/login-action@v2
with:
username: daqem
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Checkout repository
uses: actions/checkout@v3
- name: Build Images
run: docker-compose build
- name: Deploy Images
run: docker-compose push
test-deploy:
name: Test Deployed Images
runs-on: ubuntu-latest
needs: [deploy]
timeout-minutes: 20
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Sleep 2 minutes
run: sleep 2m
- name: Change directory
run: cd Deployment
- name: Start MySQL
run: docker-compose up -d --build netmon-mysql
- name: Start Environment
run: docker-compose up -d --build
- name: Install E2E dependencies
run: |
docker exec netmon-admin-web-app npm install vitest
docker exec netmon-admin-web-app npx playwright install --with-deps
- name: Run E2E Tests
run: docker exec netmon-admin-web-app npx playwright test