tests/Test-CrowdStrikeConnector.ps1
|
#Requires -Version 7 $ErrorActionPreference = 'Stop' . (Join-Path $PSScriptRoot '_TestHelpers.ps1') $wizardRoot = Split-Path $PSScriptRoot -Parent Import-Module (Join-Path $wizardRoot 'modules/ISC.OperatorConsole.psm1') -Force -Global -WarningAction SilentlyContinue Import-Module (Join-Path $wizardRoot 'modules/IW.Core.psm1') -Force -Global Import-Module (Join-Path $wizardRoot 'modules/ISC.CrowdStrikeConnector.psm1') -Force -Global Import-Module (Join-Path $wizardRoot 'modules/Definitions/CrowdStrike.Connector.psm1') -Force Import-Module (Join-Path $wizardRoot 'modules/Definitions/CrowdStrike.Entro.psm1') -Force Initialize-OperatorConsole -NonInteractive Register-IntegrationWizardPlatform -Name 'CrowdStrike' -Title 'CrowdStrike' -CoreOptions @('Connector', 'Entro') -CliName 'falcon' Register-CrowdStrikeConnectorDefinitions Register-CrowdStrikeEntroDefinitions # 1. Verify connector definition $def = Get-IntegrationWizardDefinition -Id 'crowdstrike-connector' Assert-True ($null -ne $def) 'CrowdStrike connector definition is registered' Assert-Equal 'CrowdStrike' $def.Platform 'Platform is CrowdStrike' Assert-Equal 'Connector' $def.CoreSwitch 'Core switch is Connector' Assert-Equal 'falcon' $def.CliName 'CLI is falcon' # 2. Verify feature packs $packs = Get-CrowdStrikeFeaturePacks Assert-True ($packs.ContainsKey('Discover')) 'Discover feature pack exists' Assert-True ($packs.ContainsKey('IdentityProtection')) 'IdentityProtection feature pack exists' Assert-True ($packs.ContainsKey('CloudSecurity')) 'CloudSecurity feature pack exists' Assert-True ($packs.ContainsKey('RealTimeResponse')) 'RealTimeResponse feature pack exists' $discover = $packs['Discover'] Assert-Equal 'Discover' $discover.Name 'Discover name matches' Assert-True ($discover.Label -like '*Falcon Discover*') 'Discover label highlights Falcon Discover' # 3. Verify checklist and connection settings $checklist = Get-CrowdStrikeIscFeatureChecklist -FeatureNames @('Discover', 'IdentityProtection') Assert-True (($checklist -join ' ') -like '*discover:read*') 'Checklist includes discover:read' Assert-True (($checklist -join ' ') -like '*identity-protection:read*') 'Checklist includes identity-protection:read' $connSettings = Build-CrowdStrikeConnectionSettings -BaseUrl 'https://api.crowdstrike.com' -ClientId 'client-xyz' -Access 'ReadWrite' -FeatureNames @('Discover') Assert-True ($connSettings -like '*Base URL: https://api.crowdstrike.com*') 'Base URL in connection settings' Assert-True ($connSettings -like '*Client ID: client-xyz*') 'Client ID in connection settings' Assert-True ($connSettings -like '*Access Level: ReadWrite*') 'Access Level in connection settings' Assert-True ($connSettings -like '*hosts:write*') 'ReadWrite includes hosts:write' Assert-True ($connSettings -like '*discover:read*') 'Settings include discover:read' # 4. Verify step generation $baseCtx = @{ BaseUrl = 'https://api.crowdstrike.com'; ClientId = 'client-xyz'; Access = 'ReadOnly' } $stepsBase = @(& $def.Steps $baseCtx) Assert-Equal 1 $stepsBase.Count 'Base connector has 1 step' Assert-Equal 'crowdstrike-auth-check' $stepsBase[0].Id 'Base step is crowdstrike-auth-check' $featureCtx = @{ BaseUrl = 'https://api.crowdstrike.com'; ClientId = 'client-xyz'; Access = 'ReadWrite'; Feature = 'Discover,IdentityProtection,CloudSecurity,RealTimeResponse' } $stepsFeature = @(& $def.Steps $featureCtx) Assert-Equal 5 $stepsFeature.Count 'All 4 feature packs add steps' Assert-Equal 'crowdstrike-auth-check' $stepsFeature[0].Id 'Step 0 is auth check' Assert-Equal 'crowdstrike-discover' $stepsFeature[1].Id 'Step 1 is discover' Assert-Equal 'crowdstrike-identity-protection' $stepsFeature[2].Id 'Step 2 is identity protection' Assert-Equal 'crowdstrike-cloud-security' $stepsFeature[3].Id 'Step 3 is cloud security' Assert-Equal 'crowdstrike-rtr' $stepsFeature[4].Id 'Step 4 is rtr' # 5. Run steps probe $runCtx = $featureCtx.Clone() foreach ($step in $stepsFeature) { $probe = & $step.Probe $runCtx Assert-Equal 'Skip' $probe "Probe skips when required inputs exist ($($step.Id))" & $step.Run $runCtx } $record = Get-CrowdStrikeRunRecord -Context $runCtx Assert-Equal 'Verified' $record.AuthResult 'Auth marked verified' Assert-Equal 'Configured' $record.DiscoverResult 'Discover marked configured' Assert-Equal 'Configured' $record.IdentityProtResult 'IdentityProtection marked configured' Assert-Equal 'Configured' $record.CloudSecResult 'CloudSecurity marked configured' Assert-Equal 'Configured' $record.RtrResult 'RealTimeResponse marked configured' # 6. Verify Entro CrowdStrike definition $entroDef = Get-IntegrationWizardDefinition -Id 'crowdstrike-entro' Assert-True ($null -ne $entroDef) 'Entro CrowdStrike definition is registered' Assert-Equal 'Entro' $entroDef.Product 'Entro definition product is Entro' $entroSteps = @(& $entroDef.Steps @{ Environment = 'prod-falcon'; ClientId = 'client-xyz' }) Assert-Equal 1 $entroSteps.Count 'Entro CrowdStrike has 1 step' Assert-Equal 'entro-crowdstrike-client' $entroSteps[0].Id 'Entro step is entro-crowdstrike-client' Write-Host "PASS ($script:AssertionCount assertions)" |