Toolkit/Tests/e2e/Workload.Tests.ps1

BeforeAll {
    . "$PSScriptRoot\..\E2eTestInit.ps1"
    $Global:diag = New-E2eDiagnostics -Api "Workload"
    $Global:data = @{ vms = $null }
}

Describe -Name 'Workload' -Tag 'E2E' -Fixture {

    # --- Get-RscWorkload ---

    Context 'List Workloads' {
        It 'lists VMware workloads' {
            $data.vms = Get-RscWorkload -Type VMWARE_VIRTUAL_MACHINE
            if (@($data.vms).Count -le 0) {
                Add-E2eDiagnosticEntry $diag "List VMware Workloads" "skip" "None found"
                Set-ItResult -Skipped -Because "No VMware workloads found"
                return
            }
            Add-E2eDiagnosticEntry $diag "List VMware Workloads" "pass" "Found $(@($data.vms).Count)"
        }
    }

    Context 'Retrieve by RSC ID' {
        It 'retrieves workload by RSC ID' {
            if (-not $data.vms -or @($data.vms).Count -le 0) {
                Add-E2eDiagnosticEntry $diag "Retrieve by RSC ID" "skip" "No workloads"
                Set-ItResult -Skipped -Because "No workloads"
                return
            }
            $vm = Get-RscWorkload -Id $data.vms[0].fid
            $vm.fid | Should -Be $data.vms[0].fid
            $vm.name | Should -Be $data.vms[0].name
            Add-E2eDiagnosticEntry $diag "Retrieve by RSC ID" "pass" "'$($vm.name)'"
        }
    }

    Context 'Retrieve by CDM ID' {
        It 'retrieves workload by CDM ID' {
            if (-not $data.vms -or @($data.vms).Count -le 0) {
                Add-E2eDiagnosticEntry $diag "Retrieve by CDM ID" "skip" "No workloads"
                Set-ItResult -Skipped -Because "No workloads"
                return
            }
            $cluster = Get-RscCluster -Name $data.vms[0].cluster.name
            $vm = Get-RscWorkload -CdmId $data.vms[0].id -Cluster $cluster
            $vm.id | Should -Be $data.vms[0].id
            $vm.name | Should -Be $data.vms[0].name
            Add-E2eDiagnosticEntry $diag "Retrieve by CDM ID" "pass" "'$($vm.name)'"
        }
    }

    Context 'Filter by Compliance Status' {
        It 'retrieves workloads by compliance status' {
            if (-not $data.vms -or @($data.vms).Count -le 0) {
                Add-E2eDiagnosticEntry $diag "Filter by Compliance Status" "skip" "No workloads"
                Set-ItResult -Skipped -Because "No workloads"
                return
            }
            $results = Get-RscWorkload -Type VMWARE_VIRTUAL_MACHINE -ComplianceStatus OUT_OF_COMPLIANCE
            $notMatch = $results | Where-Object { $_.complianceStatus -ne 'OUT_OF_COMPLIANCE' }
            @($notMatch).Count | Should -Be 0
            Add-E2eDiagnosticEntry $diag "Filter by Compliance Status" "pass" "Found $(@($results).Count) out-of-compliance"
        }

        It 'filters workloads by compliance time range' {
            if (-not $data.vms -or @($data.vms).Count -le 0) {
                Add-E2eDiagnosticEntry $diag "Filter by Compliance Time Range" "skip" "No workloads"
                Set-ItResult -Skipped -Because "No workloads"
                return
            }
            $past7days = @(Get-RscWorkload -ComplianceStatus OUT_OF_COMPLIANCE -ComplianceTimeRange PAST_7_DAYS).Count
            $sinceProtection = @(Get-RscWorkload -ComplianceStatus OUT_OF_COMPLIANCE).Count
            ($sinceProtection -ge $past7days) | Should -BeTrue
            Add-E2eDiagnosticEntry $diag "Filter by Compliance Time Range" "pass" "7d=$past7days, all=$sinceProtection"
        }
    }

    # --- Protect-RscLinkedWorkload ---

    Context 'Protect-RscLinkedWorkload' {
        It 'creates a linked workload protection query' {
            $ag1 = Get-RscType -Name MssqlAvailabilityGroup
            $ag2 = Get-RscType -Name MssqlAvailabilityGroup
            $sla = Get-RscType -Name GlobalSlaReply
            $query = Protect-RscLinkedWorkload -InputObject $ag1 -LinkedObject $ag2 -LinkingOperation LINK -Sla $sla -AssignmentType PROTECT_WITH_SLA_ID -AsQuery
            $query | Should -BeOfType [RubrikSecurityCloud.RscQuery]
            Add-E2eDiagnosticEntry $diag "Protect-RscLinkedWorkload AsQuery" "pass" "Query created"
        }
    }
}

AfterAll {
    Save-E2eDiagnostics $diag
}