diff --git a/eng/common/pipelines/templates/jobs/generate-job-matrix.yml b/eng/common/pipelines/templates/jobs/generate-job-matrix.yml index 2833b1d9e931..8b18b13fd3d6 100644 --- a/eng/common/pipelines/templates/jobs/generate-job-matrix.yml +++ b/eng/common/pipelines/templates/jobs/generate-job-matrix.yml @@ -56,6 +56,9 @@ parameters: - name: PRJobBatchSize type: number default: 10 +- name: PRJobBatchSizeOverrides + type: object + default: {} - name: PRMatrixIndirectFilters type: object default: [] @@ -142,6 +145,16 @@ jobs: - pwsh: | '${{ convertToJson(parameters.MatrixConfigs) }}' | Set-Content matrix.json + $batchSize = ${{ parameters.PRJobBatchSize }} + $overrides = '${{ convertToJson(parameters.PRJobBatchSizeOverrides) }}' | ConvertFrom-Json + $poolOverride = $overrides.PSObject.Properties | + Where-Object { $_.Name -eq '${{ pool.name }}' } | + Select-Object -First 1 + if ($poolOverride) { + $batchSize = [int]$poolOverride.Value + Write-Host "Using batch size override for ${{ pool.name }}: $batchSize" + } + ./eng/common/scripts/job-matrix/Create-PrJobMatrix.ps1 ` -PackagePropertiesFolder $(Build.ArtifactStagingDirectory)/PackageInfo ` -PRMatrixFile matrix.json ` @@ -151,7 +164,7 @@ jobs: -Filters '${{ join(''',''', parameters.MatrixFilters) }}', 'container=^$', 'SupportedClouds=^$|${{ parameters.CloudConfig.Cloud }}', 'Pool=${{ pool.filter }}' ` -IndirectFilters '${{ join(''',''', parameters.PRMatrixIndirectFilters) }}' ` -Replace '${{ join(''',''', parameters.MatrixReplace) }}' ` - -PackagesPerPRJob ${{ parameters.PRJobBatchSize }} ` + -PackagesPerPRJob $batchSize ` -SparseIndirect $${{ parameters.PRMatrixSparseIndirect }} displayName: Create ${{ pool.name }} PR Matrix name: vm_job_matrix_pr_${{ pool.name }} diff --git a/eng/pipelines/templates/jobs/ci.yml b/eng/pipelines/templates/jobs/ci.yml index 597c79b7f406..92f438a41d68 100644 --- a/eng/pipelines/templates/jobs/ci.yml +++ b/eng/pipelines/templates/jobs/ci.yml @@ -219,7 +219,12 @@ jobs: - "!SessionRecords" EnablePRGeneration: true PRMatrixSetting: ProjectNames - PRJobBatchSize: 10 + # Runtime weighting first creates small balanced buckets. Linux and Windows + # combine three buckets while slower macOS keeps one bucket per job. + PRJobBatchSize: 1 + PRJobBatchSizeOverrides: + Linux: 3 + Windows: 3 PRMatrixIndirectFilters: - 'AdditionalTestArguments=.*true' - 'Pool=.*LinuxPool$' @@ -229,6 +234,7 @@ jobs: ServiceDirectory: ${{ parameters.ServiceDirectory }} PublishingArtifactName: TestPackagesArtifact ExcludePaths: ${{ parameters.ExcludePaths }} + EnableTestRuntimeWeighting: true AdditionalParameters: SDKType: ${{ parameters.SDKType }} diff --git a/eng/pipelines/templates/steps/pr-matrix-presteps.yml b/eng/pipelines/templates/steps/pr-matrix-presteps.yml index ae42bc505b8d..0cc2794359d1 100644 --- a/eng/pipelines/templates/steps/pr-matrix-presteps.yml +++ b/eng/pipelines/templates/steps/pr-matrix-presteps.yml @@ -12,6 +12,9 @@ parameters: - name: EnableLocWeighting type: boolean default: false + - name: EnableTestRuntimeWeighting + type: boolean + default: false - name: LocTarget type: number default: 474000 @@ -72,6 +75,25 @@ steps: displayName: Only target direct packages for build and test condition: and(succeededOrFailed(), eq(${{ parameters.ForceDirect }}, true)) + - ${{ if eq(parameters.EnableTestRuntimeWeighting, true) }}: + - pwsh: | + eng/scripts/Get-TestAssemblyWeights.ps1 ` + -RepoRoot "$(Build.SourcesDirectory)" ` + -PackageInfoFolder "$(Build.ArtifactStagingDirectory)/PackageInfo" ` + -OutputFile "$(Build.ArtifactStagingDirectory)/test-weights.json" + displayName: Query test assembly runtimes for balanced batching + condition: and(succeededOrFailed(), eq(variables['Build.Reason'], 'PullRequest')) + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + + - pwsh: | + eng/scripts/Apply-WeightedBatching.ps1 ` + -PackageInfoFolder "$(Build.ArtifactStagingDirectory)/PackageInfo" ` + -WeightsFile "$(Build.ArtifactStagingDirectory)/test-weights.json" ` + -Target 240 + displayName: Apply test-runtime weighted batching + condition: and(succeededOrFailed(), eq(variables['Build.Reason'], 'PullRequest')) + - ${{ if eq(parameters.EnableLocWeighting, true) }}: - pwsh: | eng/scripts/Get-PackageLocWeights.ps1 ` diff --git a/eng/scripts/Apply-WeightedBatching.ps1 b/eng/scripts/Apply-WeightedBatching.ps1 index 31153d79bb3b..8a8794db0a9e 100644 --- a/eng/scripts/Apply-WeightedBatching.ps1 +++ b/eng/scripts/Apply-WeightedBatching.ps1 @@ -46,6 +46,9 @@ param ( Set-StrictMode -Version 4 if ($IndirectTarget -le 0) { $IndirectTarget = $Target } +if ($Target -le 0) { throw "Target must be greater than zero." } +if ($IndirectTarget -le 0) { throw "IndirectTarget must be greater than zero." } +if ($DefaultWeight -le 0) { throw "DefaultWeight must be greater than zero." } # Load weights $weights = @{} @@ -84,6 +87,7 @@ if ($packages.Count -eq 0) { # Separate direct and indirect packages $directPackages = @($packages | Where-Object { $_.Json.IncludedForValidation -eq $false }) $indirectPackages = @($packages | Where-Object { $_.Json.IncludedForValidation -eq $true }) +$expectedPackageNames = @($packages | ForEach-Object { $_.Json.ArtifactName } | Sort-Object) $totalPkgs = $directPackages.Count + $indirectPackages.Count $matchedWeights = @($packages | Where-Object { $weights.ContainsKey($_.Json.ArtifactName) }).Count @@ -106,12 +110,19 @@ function Apply-LPTBatching { # Build weighted items $items = @(foreach ($pkg in $Packages) { $name = $pkg.Json.ArtifactName - $weight = if ($Weights.ContainsKey($name)) { [int]$Weights[$name] } else { $DefaultWeight } + $weight = if ($Weights.ContainsKey($name)) { + [math]::Max([int]$Weights[$name], $DefaultWeight) + } + else { + $DefaultWeight + } [PSCustomObject]@{ Package = $pkg; Weight = $weight; Name = $name } }) - # Sort by weight descending (LPT: largest first) - $items = @($items | Sort-Object Weight -Descending) + # Sort by weight descending (LPT: largest first), then by name for deterministic ties. + $items = @($items | Sort-Object ` + @{ Expression = "Weight"; Descending = $true }, ` + @{ Expression = "Name"; Descending = $false }) # Calculate number of buckets [int]$totalWeight = 0 @@ -127,6 +138,7 @@ function Apply-LPTBatching { $buckets = @() for ($b = 0; $b -lt $numBuckets; $b++) { $buckets += [PSCustomObject]@{ + Index = $b Items = [System.Collections.ArrayList]::new() TotalWeight = [int]0 } @@ -134,7 +146,9 @@ function Apply-LPTBatching { # Greedy LPT: assign each item to the lightest bucket foreach ($item in $items) { - $lightest = $buckets | Sort-Object TotalWeight | Select-Object -First 1 + $lightest = $buckets | + Sort-Object TotalWeight, Index | + Select-Object -First 1 [void]$lightest.Items.Add($item) $lightest.TotalWeight += $item.Weight } @@ -185,5 +199,26 @@ if ($indirectPackages.Count -gt 0) { } # Verify -$remaining = @(Get-ChildItem -Path $PackageInfoFolder -Filter "*.json" -Recurse).Count +$remainingFiles = @(Get-ChildItem -Path $PackageInfoFolder -Filter "*.json" -Recurse) +$remaining = $remainingFiles.Count +$actualPackageNames = @( + $remainingFiles | + ForEach-Object { (Get-Content $_.FullName | ConvertFrom-Json).ArtifactName -split "," } | + Sort-Object +) + +$missingPackages = @($expectedPackageNames | Where-Object { $_ -notin $actualPackageNames }) +$duplicatePackages = @( + $actualPackageNames | + Group-Object | + Where-Object { $_.Count -ne 1 } | + ForEach-Object { $_.Name } +) + +if ($actualPackageNames.Count -ne $expectedPackageNames.Count -or + $missingPackages.Count -gt 0 -or + $duplicatePackages.Count -gt 0) { + throw "Weighted batching verification failed. Missing: [$($missingPackages -join ', ')]. Duplicated: [$($duplicatePackages -join ', ')]." +} + Write-Host "Weighted batching complete. $remaining consolidated PackageInfo files remain." diff --git a/eng/scripts/Get-TestAssemblyWeights.ps1 b/eng/scripts/Get-TestAssemblyWeights.ps1 new file mode 100644 index 000000000000..4ee54c10920c --- /dev/null +++ b/eng/scripts/Get-TestAssemblyWeights.ps1 @@ -0,0 +1,357 @@ +<# +.SYNOPSIS +Queries Azure DevOps Analytics for test assembly runtimes and writes per-package weights. + +.DESCRIPTION +The PackageInfo files identify the packages required by the generated PR matrix. This script +maps those packages to their test assemblies, queries successful executions from the preceding +24 hours, and uses a 30-day fallback query for assemblies without recent data. + +Each assembly receives at least a one-second weight. Package weights are the sum of their +assembly weights and are consumed by Apply-WeightedBatching.ps1. + +.PARAMETER RepoRoot +Root directory of the azure-sdk-for-net repository. + +.PARAMETER PackageInfoFolder +Folder containing the PackageInfo JSON files for the generated matrix. + +.PARAMETER OutputFile +Path to write the package weight JSON file. + +.PARAMETER PipelineId +Azure DevOps pipeline ID to query. The default is net - pullrequest. + +.PARAMETER AccessToken +Azure DevOps access token used to query Analytics. +#> + +[CmdletBinding()] +param ( + [Parameter(Mandatory = $true)][string]$RepoRoot, + [Parameter(Mandatory = $true)][string]$PackageInfoFolder, + [Parameter(Mandatory = $true)][string]$OutputFile, + [Parameter()][int]$PipelineId = 7327, + [Parameter()][string]$OrgUrl = "https://analytics.dev.azure.com/azure-sdk", + [Parameter()][string]$ProjectId = "29ec6040-b234-4e31-b139-33dc4287b756", + [Parameter()][string]$AccessToken = $env:SYSTEM_ACCESSTOKEN, + [Parameter()][int]$DefaultWeight = 1, + [Parameter()][int]$QueryBatchSize = 20, + [Parameter()][int]$ThrottleLimit = 5 +) + +Set-StrictMode -Version 4 +$ErrorActionPreference = "Stop" + +function Get-TargetAssemblyMap { + param( + [Parameter(Mandatory = $true)][string]$RepoRoot, + [Parameter(Mandatory = $true)][string]$PackageInfoFolder + ) + + $packageInfoFiles = @(Get-ChildItem -Path $PackageInfoFolder -Filter "*.json" -File -Recurse) + if ($packageInfoFiles.Count -eq 0) { + throw "No PackageInfo files were found in '$PackageInfoFolder'." + } + + $packageAssemblies = [ordered]@{} + $assemblyToPackage = @{} + + foreach ($file in ($packageInfoFiles | Sort-Object FullName)) { + $packageInfo = Get-Content $file.FullName -Raw | ConvertFrom-Json + $packageName = [string]$packageInfo.ArtifactName + if ([string]::IsNullOrWhiteSpace($packageName)) { + throw "PackageInfo '$($file.FullName)' does not contain an ArtifactName." + } + + $packageAssemblies[$packageName] = @() + $directoryPath = [string]$packageInfo.DirectoryPath + if ([string]::IsNullOrWhiteSpace($directoryPath)) { + Write-Warning "Package '$packageName' has no DirectoryPath and will use the default weight." + continue + } + + $packagePath = if ([System.IO.Path]::IsPathRooted($directoryPath)) { + $directoryPath + } + else { + Join-Path $RepoRoot $directoryPath + } + + $testsPath = Join-Path $packagePath "tests" + $assemblies = @( + Get-ChildItem -Path $testsPath -Filter "*.csproj" -File -Recurse -ErrorAction SilentlyContinue | + ForEach-Object { "$($_.BaseName.ToLowerInvariant()).dll" } | + Sort-Object -Unique + ) + + foreach ($assembly in $assemblies) { + if ($assemblyToPackage.ContainsKey($assembly) -and $assemblyToPackage[$assembly] -ne $packageName) { + throw "Test assembly '$assembly' is mapped to both '$($assemblyToPackage[$assembly])' and '$packageName'." + } + $assemblyToPackage[$assembly] = $packageName + } + + $packageAssemblies[$packageName] = $assemblies + } + + return [PSCustomObject]@{ + PackageAssemblies = $packageAssemblies + AssemblyToPackage = $assemblyToPackage + } +} + +function New-TestResultsQueries { + param( + [Parameter(Mandatory = $true)][string[]]$Assemblies, + [Parameter(Mandatory = $true)][datetime]$StartTime, + [Parameter(Mandatory = $true)][datetime]$EndTime, + [Parameter(Mandatory = $true)][string]$OrgUrl, + [Parameter(Mandatory = $true)][string]$ProjectId, + [Parameter(Mandatory = $true)][int]$PipelineId, + [Parameter(Mandatory = $true)][int]$BatchSize + ) + + if ($BatchSize -le 0) { + throw "BatchSize must be greater than zero." + } + + $queries = @() + $start = $StartTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") + $end = $EndTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") + $sortedAssemblies = @($Assemblies | Sort-Object -Unique) + + for ($index = 0; $index -lt $sortedAssemblies.Count; $index += $BatchSize) { + $lastIndex = [math]::Min($index + $BatchSize - 1, $sortedAssemblies.Count - 1) + $batch = @($sortedAssemblies[$index..$lastIndex]) + $containerFilter = ($batch | ForEach-Object { + "Test/ContainerName eq '$($_.Replace("'", "''"))'" + }) -join " or " + + $apply = "filter(CompletedDate gt $start and CompletedDate lt $end and " + + "Pipeline/PipelineId eq $PipelineId and Outcome eq 'Passed' and ($containerFilter))" + + "/groupby((Test/ContainerName, TestRun/TestRunId), " + + "aggregate(StartedDate with min as S, CompletedDate with max as E))" + + $queries += [PSCustomObject]@{ + Batch = [int]($queries.Count + 1) + Assemblies = $batch + Url = "$OrgUrl/$ProjectId/_odata/v4.0-preview/TestResults?`$apply=$apply&`$top=5000" + } + } + + return $queries +} + +function Invoke-TestResultsQueries { + param( + [Parameter(Mandatory = $true)][object[]]$Queries, + [Parameter(Mandatory = $true)][string]$AccessToken, + [Parameter(Mandatory = $true)][int]$ThrottleLimit, + [Parameter(Mandatory = $true)][string]$WindowLabel + ) + + if ($Queries.Count -eq 0) { + return @() + } + + $results = @($Queries | ForEach-Object -Parallel { + $query = $_ + try { + $rows = @() + $nextUrl = $query.Url + while ($nextUrl) { + $response = Invoke-RestMethod -Uri $nextUrl -Headers @{ + Authorization = "Bearer $using:AccessToken" + Accept = "application/json" + } + $rows += @($response.value) + $nextLinkProperty = $response.PSObject.Properties['@odata.nextLink'] + $nextUrl = if ($nextLinkProperty) { $nextLinkProperty.Value } else { $null } + } + + [PSCustomObject]@{ + Batch = $query.Batch + Rows = $rows + Error = $null + } + } + catch { + [PSCustomObject]@{ + Batch = $query.Batch + Rows = @() + Error = $_.Exception.Message + } + } + } -ThrottleLimit $ThrottleLimit) + + $failures = @($results | Where-Object { $_.Error }) + if ($failures.Count -gt 0) { + $details = ($failures | Sort-Object Batch | ForEach-Object { + "batch $($_.Batch): $($_.Error)" + }) -join "; " + throw "Azure DevOps Analytics $WindowLabel query failed: $details" + } + + foreach ($result in ($results | Sort-Object Batch)) { + Write-Host " $WindowLabel batch $($result.Batch)/$($Queries.Count): $(@($result.Rows).Count) rows" + } + + return @($results | ForEach-Object { $_.Rows }) +} + +function Add-TestResultDurations { + param( + [Parameter(Mandatory = $true)][AllowEmptyCollection()][object[]]$Rows, + [Parameter(Mandatory = $true)][hashtable]$Durations + ) + + foreach ($row in $Rows) { + $assembly = [string]$row.Test.ContainerName + if ([string]::IsNullOrWhiteSpace($assembly) -or -not $row.S -or -not $row.E) { + continue + } + + $assembly = $assembly.ToLowerInvariant() + $duration = [math]::Max( + 1, + [int][math]::Round(([datetime]$row.E - [datetime]$row.S).TotalSeconds) + ) + + if (-not $Durations.ContainsKey($assembly)) { + $Durations[$assembly] = [System.Collections.Generic.List[int]]::new() + } + $Durations[$assembly].Add($duration) + } +} + +function Get-ResolvedPackageWeights { + param( + [Parameter(Mandatory = $true)]$PackageAssemblies, + [Parameter(Mandatory = $true)][hashtable]$Durations, + [Parameter(Mandatory = $true)][int]$DefaultWeight + ) + + $assemblyWeights = @{} + $packageWeights = [ordered]@{} + + foreach ($packageName in ($PackageAssemblies.Keys | Sort-Object)) { + $assemblies = @($PackageAssemblies[$packageName]) + [int]$packageWeight = 0 + + foreach ($assembly in $assemblies) { + $runs = $Durations[$assembly] + $weight = if ($runs -and $runs.Count -gt 0) { + [math]::Max( + $DefaultWeight, + [int][math]::Round(($runs | Measure-Object -Average).Average) + ) + } + else { + $DefaultWeight + } + + $assemblyWeights[$assembly] = $weight + $packageWeight += $weight + } + + $packageWeights[$packageName] = [math]::Max($packageWeight, $DefaultWeight) + } + + return [PSCustomObject]@{ + AssemblyWeights = $assemblyWeights + PackageWeights = $packageWeights + } +} + +if ([string]::IsNullOrWhiteSpace($AccessToken)) { + throw "SYSTEM_ACCESSTOKEN is required to query Azure DevOps Analytics." +} +if ($DefaultWeight -le 0) { + throw "DefaultWeight must be greater than zero." +} +if ($ThrottleLimit -le 0) { + throw "ThrottleLimit must be greater than zero." +} + +$stopwatch = [Diagnostics.Stopwatch]::StartNew() +$targetMap = Get-TargetAssemblyMap -RepoRoot $RepoRoot -PackageInfoFolder $PackageInfoFolder +$allAssemblies = @($targetMap.AssemblyToPackage.Keys | Sort-Object) +$durations = @{} + +Write-Host "Resolved $($targetMap.PackageAssemblies.Count) packages to $($allAssemblies.Count) test assemblies." + +if ($allAssemblies.Count -gt 0) { + $now = [datetime]::UtcNow + $recentStart = $now.AddHours(-24) + $recentQueries = @(New-TestResultsQueries ` + -Assemblies $allAssemblies ` + -StartTime $recentStart ` + -EndTime $now ` + -OrgUrl $OrgUrl ` + -ProjectId $ProjectId ` + -PipelineId $PipelineId ` + -BatchSize $QueryBatchSize) + + Write-Host "Querying the preceding 24 hours in $($recentQueries.Count) scoped batches..." + $recentRows = @(Invoke-TestResultsQueries ` + -Queries $recentQueries ` + -AccessToken $AccessToken ` + -ThrottleLimit $ThrottleLimit ` + -WindowLabel "24-hour") + Add-TestResultDurations -Rows $recentRows -Durations $durations + + $missingAssemblies = @($allAssemblies | Where-Object { -not $durations.ContainsKey($_) }) + if ($missingAssemblies.Count -gt 0) { + $fallbackQueries = @(New-TestResultsQueries ` + -Assemblies $missingAssemblies ` + -StartTime $now.AddDays(-30) ` + -EndTime $recentStart ` + -OrgUrl $OrgUrl ` + -ProjectId $ProjectId ` + -PipelineId $PipelineId ` + -BatchSize $QueryBatchSize) + + Write-Host "Querying the preceding 30 days for $($missingAssemblies.Count) missing assemblies..." + $fallbackRows = @(Invoke-TestResultsQueries ` + -Queries $fallbackQueries ` + -AccessToken $AccessToken ` + -ThrottleLimit $ThrottleLimit ` + -WindowLabel "30-day fallback") + Add-TestResultDurations -Rows $fallbackRows -Durations $durations + } +} + +$resolvedWeights = Get-ResolvedPackageWeights ` + -PackageAssemblies $targetMap.PackageAssemblies ` + -Durations $durations ` + -DefaultWeight $DefaultWeight + +$fallbackCount = @($allAssemblies | Where-Object { -not $durations.ContainsKey($_) }).Count +Write-Host "Resolved package test weights ($fallbackCount assemblies use the ${DefaultWeight}s fallback):" +foreach ($packageName in $resolvedWeights.PackageWeights.Keys) { + $assemblies = @($targetMap.PackageAssemblies[$packageName]) + $assemblyDetails = if ($assemblies.Count -eq 0) { + "" + } + else { + ($assemblies | ForEach-Object { + $suffix = if ($durations.ContainsKey($_)) { "" } else { " fallback" } + "$_=$($resolvedWeights.AssemblyWeights[$_])s$suffix" + }) -join ", " + } + + Write-Host " $packageName | weight=$($resolvedWeights.PackageWeights[$packageName])s | assemblies: $assemblyDetails" +} + +$outputDirectory = Split-Path -Parent $OutputFile +if ($outputDirectory -and -not (Test-Path $outputDirectory)) { + New-Item -Path $outputDirectory -ItemType Directory -Force | Out-Null +} + +$resolvedWeights.PackageWeights | + ConvertTo-Json -Depth 2 | + Set-Content $OutputFile -Encoding utf8 + +$stopwatch.Stop() +Write-Host "Test assembly weights written to $OutputFile in $([math]::Round($stopwatch.Elapsed.TotalSeconds, 1))s." diff --git a/eng/scripts/tests/Apply-WeightedBatching.Tests.ps1 b/eng/scripts/tests/Apply-WeightedBatching.Tests.ps1 new file mode 100644 index 000000000000..2c42004c443d --- /dev/null +++ b/eng/scripts/tests/Apply-WeightedBatching.Tests.ps1 @@ -0,0 +1,87 @@ +#Requires -Version 7.0 +<# +.How-To-Run +Invoke-Pester -Output Detailed $PSScriptRoot/Apply-WeightedBatching.Tests.ps1 +#> + +. (Join-Path $PSScriptRoot ".." ".." "common" "scripts" "Helpers" "PSModule-Helpers.ps1") +Install-ModuleIfNotInstalled "Pester" "5.3.3" | Import-Module + +Describe "Apply-WeightedBatching" { + BeforeEach { + $packageInfoFolder = Join-Path $TestDrive "PackageInfo" + $weightsFile = Join-Path $TestDrive "weights.json" + if (Test-Path $packageInfoFolder) { + Remove-Item $packageInfoFolder -Recurse -Force + } + if (Test-Path $weightsFile) { + Remove-Item $weightsFile -Force + } + New-Item -Path $packageInfoFolder -ItemType Directory -Force | Out-Null + } + + It "keeps every direct and indirect package exactly once" { + $packages = @( + @{ Name = "Direct.A"; Weight = 8; Indirect = $false }, + @{ Name = "Direct.B"; Weight = 7; Indirect = $false }, + @{ Name = "Direct.C"; Weight = 5; Indirect = $false }, + @{ Name = "Direct.D"; Weight = 4; Indirect = $false }, + @{ Name = "Indirect.A"; Weight = 9; Indirect = $true }, + @{ Name = "Indirect.B"; Weight = 6; Indirect = $true }, + @{ Name = "Indirect.C"; Weight = 5; Indirect = $true } + ) + + $weights = [ordered]@{} + foreach ($package in $packages) { + @{ + ArtifactName = $package.Name + IncludedForValidation = $package.Indirect + } | ConvertTo-Json | Set-Content (Join-Path $packageInfoFolder "$($package.Name).json") + $weights[$package.Name] = $package.Weight + } + $weights | ConvertTo-Json | Set-Content $weightsFile + + & (Join-Path $PSScriptRoot ".." "Apply-WeightedBatching.ps1") ` + -PackageInfoFolder $packageInfoFolder ` + -WeightsFile $weightsFile ` + -Target 12 ` + -IndirectTarget 20 + + $remaining = @(Get-ChildItem $packageInfoFolder -Filter "*.json") + $remaining.Count | Should -Be 3 + + $resolvedNames = @( + $remaining | + ForEach-Object { (Get-Content $_.FullName | ConvertFrom-Json).ArtifactName -split "," } | + Sort-Object + ) + $resolvedNames | Should -Be @($packages.Name | Sort-Object) + + foreach ($file in $remaining) { + $packageInfo = Get-Content $file.FullName | ConvertFrom-Json + $names = @($packageInfo.ArtifactName -split ",") + @($names | Where-Object { $_ -like "Direct.*" }).Count | + Should -BeIn @(0, $names.Count) + } + } + + It "uses a positive fallback for missing and zero weights" { + foreach ($name in @("Package.A", "Package.B")) { + @{ + ArtifactName = $name + IncludedForValidation = $false + } | ConvertTo-Json | Set-Content (Join-Path $packageInfoFolder "$name.json") + } + @{ "Package.A" = 0 } | ConvertTo-Json | Set-Content $weightsFile + + { + & (Join-Path $PSScriptRoot ".." "Apply-WeightedBatching.ps1") ` + -PackageInfoFolder $packageInfoFolder ` + -WeightsFile $weightsFile ` + -Target 1 ` + -DefaultWeight 1 + } | Should -Not -Throw + + @(Get-ChildItem $packageInfoFolder -Filter "*.json").Count | Should -Be 2 + } +} diff --git a/eng/scripts/tests/Get-TestAssemblyWeights.Tests.ps1 b/eng/scripts/tests/Get-TestAssemblyWeights.Tests.ps1 new file mode 100644 index 000000000000..11824bad25e3 --- /dev/null +++ b/eng/scripts/tests/Get-TestAssemblyWeights.Tests.ps1 @@ -0,0 +1,138 @@ +#Requires -Version 7.0 +<# +.How-To-Run +Invoke-Pester -Output Detailed $PSScriptRoot/Get-TestAssemblyWeights.Tests.ps1 +#> + +. (Join-Path $PSScriptRoot ".." ".." "common" "scripts" "Helpers" "PSModule-Helpers.ps1") +Install-ModuleIfNotInstalled "Pester" "5.3.3" | Import-Module + +BeforeAll { + $scriptPath = Join-Path $PSScriptRoot ".." "Get-TestAssemblyWeights.ps1" + $tokens = $null + $parseErrors = $null + $scriptAst = [System.Management.Automation.Language.Parser]::ParseFile( + $scriptPath, + [ref]$tokens, + [ref]$parseErrors + ) + if ($parseErrors.Count -gt 0) { + throw ($parseErrors | Out-String) + } + + $functions = $scriptAst.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.FunctionDefinitionAst] + }, $true) + foreach ($function in $functions) { + Invoke-Expression $function.Extent.Text + } +} + +Describe "Get-TestAssemblyWeights" { + BeforeEach { + $testRoot = Join-Path $TestDrive "repo" + $packageInfoFolder = Join-Path $TestDrive "PackageInfo" + New-Item -Path $testRoot -ItemType Directory -Force | Out-Null + New-Item -Path $packageInfoFolder -ItemType Directory -Force | Out-Null + } + + It "maps only PackageInfo packages to normalized test assemblies" { + $packagePath = Join-Path $testRoot "sdk/sample/Azure.Sample" + New-Item -Path (Join-Path $packagePath "tests/subdir") -ItemType Directory -Force | Out-Null + Set-Content (Join-Path $packagePath "tests/Azure.Sample.Tests.csproj") "" + Set-Content (Join-Path $packagePath "tests/subdir/Azure.Sample.More.Tests.csproj") "" + @{ + ArtifactName = "Azure.Sample" + DirectoryPath = "sdk/sample/Azure.Sample" + } | ConvertTo-Json | Set-Content (Join-Path $packageInfoFolder "Azure.Sample.json") + + $result = Get-TargetAssemblyMap -RepoRoot $testRoot -PackageInfoFolder $packageInfoFolder + + @($result.PackageAssemblies["Azure.Sample"]) | Should -Be @( + "azure.sample.more.tests.dll", + "azure.sample.tests.dll" + ) + $result.AssemblyToPackage["azure.sample.tests.dll"] | Should -Be "Azure.Sample" + } + + It "preserves packages without tests for a nonzero fallback weight" { + $packagePath = Join-Path $testRoot "sdk/sample/Azure.Empty" + New-Item -Path $packagePath -ItemType Directory -Force | Out-Null + @{ + ArtifactName = "Azure.Empty" + DirectoryPath = "sdk/sample/Azure.Empty" + } | ConvertTo-Json | Set-Content (Join-Path $packageInfoFolder "Azure.Empty.json") + + $result = Get-TargetAssemblyMap -RepoRoot $testRoot -PackageInfoFolder $packageInfoFolder + $weights = Get-ResolvedPackageWeights ` + -PackageAssemblies $result.PackageAssemblies ` + -Durations @{} ` + -DefaultWeight 1 + + @($result.PackageAssemblies["Azure.Empty"]).Count | Should -Be 0 + $weights.PackageWeights["Azure.Empty"] | Should -Be 1 + } + + It "rejects duplicate test assembly names across packages" { + foreach ($name in @("Azure.One", "Azure.Two")) { + $packagePath = Join-Path $testRoot "sdk/sample/$name" + New-Item -Path (Join-Path $packagePath "tests") -ItemType Directory -Force | Out-Null + Set-Content (Join-Path $packagePath "tests/Shared.Tests.csproj") "" + @{ + ArtifactName = $name + DirectoryPath = "sdk/sample/$name" + } | ConvertTo-Json | Set-Content (Join-Path $packageInfoFolder "$name.json") + } + + { + Get-TargetAssemblyMap -RepoRoot $testRoot -PackageInfoFolder $packageInfoFolder + } | Should -Throw "*mapped to both*" + } + + It "creates scoped query batches with the requested time window" { + $queries = @(New-TestResultsQueries ` + -Assemblies @("c.dll", "a.dll", "b.dll") ` + -StartTime ([datetime]"2026-07-01T00:00:00Z") ` + -EndTime ([datetime]"2026-07-02T00:00:00Z") ` + -OrgUrl "https://analytics.example" ` + -ProjectId "project" ` + -PipelineId 7327 ` + -BatchSize 2) + + $queries.Count | Should -Be 2 + $queries[0].Assemblies | Should -Be @("a.dll", "b.dll") + $queries[0].Url | Should -Match "CompletedDate gt 2026-07-01T00:00:00Z" + $queries[0].Url | Should -Match "Pipeline/PipelineId eq 7327" + $queries[0].Url | Should -Not -Match "c.dll" + $queries[1].Url | Should -Match "c.dll" + } + + It "averages observed runtimes and assigns fallback per unknown assembly" { + $durations = @{} + Add-TestResultDurations -Rows @( + [PSCustomObject]@{ + Test = [PSCustomObject]@{ ContainerName = "Azure.Sample.Tests.dll" } + S = "2026-07-01T00:00:00Z" + E = "2026-07-01T00:01:00Z" + }, + [PSCustomObject]@{ + Test = [PSCustomObject]@{ ContainerName = "azure.sample.tests.dll" } + S = "2026-07-02T00:00:00Z" + E = "2026-07-02T00:02:00Z" + } + ) -Durations $durations + + $packageAssemblies = [ordered]@{ + "Azure.Sample" = @("azure.sample.tests.dll", "azure.sample.unknown.tests.dll") + } + $weights = Get-ResolvedPackageWeights ` + -PackageAssemblies $packageAssemblies ` + -Durations $durations ` + -DefaultWeight 1 + + $weights.AssemblyWeights["azure.sample.tests.dll"] | Should -Be 90 + $weights.AssemblyWeights["azure.sample.unknown.tests.dll"] | Should -Be 1 + $weights.PackageWeights["Azure.Sample"] | Should -Be 91 + } +} diff --git a/sdk/advisor/Azure.ResourceManager.Advisor/src/Properties/AssemblyInfo.cs b/sdk/advisor/Azure.ResourceManager.Advisor/src/Properties/AssemblyInfo.cs index fb970fca0a9e..fe78ce6115a8 100644 --- a/sdk/advisor/Azure.ResourceManager.Advisor/src/Properties/AssemblyInfo.cs +++ b/sdk/advisor/Azure.ResourceManager.Advisor/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.Advisor.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/apimanagement/Azure.ResourceManager.ApiManagement/src/Customized/ApiManagementProductResource.cs b/sdk/apimanagement/Azure.ResourceManager.ApiManagement/src/Customized/ApiManagementProductResource.cs index 32604145bc05..3e692a8aca57 100644 --- a/sdk/apimanagement/Azure.ResourceManager.ApiManagement/src/Customized/ApiManagementProductResource.cs +++ b/sdk/apimanagement/Azure.ResourceManager.ApiManagement/src/Customized/ApiManagementProductResource.cs @@ -68,4 +68,6 @@ public virtual Response CreateOrUpdateProductGroup(string grou return Response.FromValue(response.Value is null ? null : new ProductGroupData(response.Value), response.GetRawResponse()); } } + + // Test comment for batching validation - DO NOT MERGE } diff --git a/sdk/automation/Azure.ResourceManager.Automation/src/Customized/AutomationCertificateData.cs b/sdk/automation/Azure.ResourceManager.Automation/src/Customized/AutomationCertificateData.cs index 6989e025f8f0..4c9b908e946a 100644 --- a/sdk/automation/Azure.ResourceManager.Automation/src/Customized/AutomationCertificateData.cs +++ b/sdk/automation/Azure.ResourceManager.Automation/src/Customized/AutomationCertificateData.cs @@ -43,3 +43,5 @@ public partial class AutomationCertificateData public BinaryData Thumbprint => BinaryData.FromString(ThumbprintString); } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/batch/Azure.ResourceManager.Batch/src/Custom/ArmBatchModelFactory.cs b/sdk/batch/Azure.ResourceManager.Batch/src/Custom/ArmBatchModelFactory.cs index 893b11a9d3d5..e8d9f68e81b7 100644 --- a/sdk/batch/Azure.ResourceManager.Batch/src/Custom/ArmBatchModelFactory.cs +++ b/sdk/batch/Azure.ResourceManager.Batch/src/Custom/ArmBatchModelFactory.cs @@ -212,3 +212,5 @@ public static NetworkSecurityPerimeter NetworkSecurityPerimeter(ResourceIdentifi } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/billing/Azure.ResourceManager.Billing/src/GlobalSuppressions.cs b/sdk/billing/Azure.ResourceManager.Billing/src/GlobalSuppressions.cs index d7eed88296c0..0a177a6fc160 100644 --- a/sdk/billing/Azure.ResourceManager.Billing/src/GlobalSuppressions.cs +++ b/sdk/billing/Azure.ResourceManager.Billing/src/GlobalSuppressions.cs @@ -9,3 +9,5 @@ using System.Diagnostics.CodeAnalysis; [assembly: SuppressMessage("Usage", "AZC0030:Avoid model name ending with 'Request'", Justification = "Class names are generated based on the Billing API.")] + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/confluent/Azure.ResourceManager.Confluent/src/Properties/AssemblyInfo.cs b/sdk/confluent/Azure.ResourceManager.Confluent/src/Properties/AssemblyInfo.cs index d972cab96da3..1ab0e75aa245 100644 --- a/sdk/confluent/Azure.ResourceManager.Confluent/src/Properties/AssemblyInfo.cs +++ b/sdk/confluent/Azure.ResourceManager.Confluent/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.Confluent.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/connectedvmwarevsphere/Azure.ResourceManager.ConnectedVMwarevSphere/src/Properties/AssemblyInfo.cs b/sdk/connectedvmwarevsphere/Azure.ResourceManager.ConnectedVMwarevSphere/src/Properties/AssemblyInfo.cs index 36b9e993ed74..92dcf2d180cc 100644 --- a/sdk/connectedvmwarevsphere/Azure.ResourceManager.ConnectedVMwarevSphere/src/Properties/AssemblyInfo.cs +++ b/sdk/connectedvmwarevsphere/Azure.ResourceManager.ConnectedVMwarevSphere/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.ConnectedVMwarevSphere.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/consumption/Azure.ResourceManager.Consumption/src/Properties/AssemblyInfo.cs b/sdk/consumption/Azure.ResourceManager.Consumption/src/Properties/AssemblyInfo.cs index 8a0967870e06..76871b414958 100644 --- a/sdk/consumption/Azure.ResourceManager.Consumption/src/Properties/AssemblyInfo.cs +++ b/sdk/consumption/Azure.ResourceManager.Consumption/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.Consumption.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/containerinstance/Azure.ResourceManager.ContainerInstance/src/Properties/AssemblyInfo.cs b/sdk/containerinstance/Azure.ResourceManager.ContainerInstance/src/Properties/AssemblyInfo.cs index 2fd893acce23..fd643b899be4 100644 --- a/sdk/containerinstance/Azure.ResourceManager.ContainerInstance/src/Properties/AssemblyInfo.cs +++ b/sdk/containerinstance/Azure.ResourceManager.ContainerInstance/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.ContainerInstance.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/containerservice/Azure.ResourceManager.ContainerService/src/Custom/AgentPoolSnapshotData.cs b/sdk/containerservice/Azure.ResourceManager.ContainerService/src/Custom/AgentPoolSnapshotData.cs index dbe085a44a2f..b85fba47f7c7 100644 --- a/sdk/containerservice/Azure.ResourceManager.ContainerService/src/Custom/AgentPoolSnapshotData.cs +++ b/sdk/containerservice/Azure.ResourceManager.ContainerService/src/Custom/AgentPoolSnapshotData.cs @@ -17,3 +17,5 @@ public partial class AgentPoolSnapshotData : TrackedResourceData public bool? EnableFips => IsFipsEnabled; } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/core/Microsoft.Azure.Core.NewtonsoftJson/src/NewtonsoftJsonETagConverter.cs b/sdk/core/Microsoft.Azure.Core.NewtonsoftJson/src/NewtonsoftJsonETagConverter.cs index c5a06c2f68e6..13d997c06b98 100644 --- a/sdk/core/Microsoft.Azure.Core.NewtonsoftJson/src/NewtonsoftJsonETagConverter.cs +++ b/sdk/core/Microsoft.Azure.Core.NewtonsoftJson/src/NewtonsoftJsonETagConverter.cs @@ -44,4 +44,6 @@ public override void WriteJson(JsonWriter writer, object? value, JsonSerializer } } } -} \ No newline at end of file +} + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/cosmosdb/Azure.Provisioning.CosmosDB/src/CosmosDBService.cs b/sdk/cosmosdb/Azure.Provisioning.CosmosDB/src/CosmosDBService.cs index eac63b50b293..c5996c40471e 100644 --- a/sdk/cosmosdb/Azure.Provisioning.CosmosDB/src/CosmosDBService.cs +++ b/sdk/cosmosdb/Azure.Provisioning.CosmosDB/src/CosmosDBService.cs @@ -22,3 +22,5 @@ public CosmosDBServiceProperties Properties get => throw new NotSupportedException("TODO: Needs to be implemented using extensibility API."); } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/cosmosdb/Azure.ResourceManager.CosmosDB/src/Custom/RestorableCosmosDBAccountResource.cs b/sdk/cosmosdb/Azure.ResourceManager.CosmosDB/src/Custom/RestorableCosmosDBAccountResource.cs index 16384fe97843..cea804ec0416 100644 --- a/sdk/cosmosdb/Azure.ResourceManager.CosmosDB/src/Custom/RestorableCosmosDBAccountResource.cs +++ b/sdk/cosmosdb/Azure.ResourceManager.CosmosDB/src/Custom/RestorableCosmosDBAccountResource.cs @@ -77,3 +77,5 @@ public virtual Pageable GetRestorableMongoDBCollect => GetRestorableMongoDBCollections(restorableMongoDBDatabaseRid, null, null, cancellationToken); } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/datafactory/Azure.ResourceManager.DataFactory/src/Customized/ArmDataFactoryModelFactory.cs b/sdk/datafactory/Azure.ResourceManager.DataFactory/src/Customized/ArmDataFactoryModelFactory.cs index 87fb20b32289..d086ca2c21b0 100644 --- a/sdk/datafactory/Azure.ResourceManager.DataFactory/src/Customized/ArmDataFactoryModelFactory.cs +++ b/sdk/datafactory/Azure.ResourceManager.DataFactory/src/Customized/ArmDataFactoryModelFactory.cs @@ -41,3 +41,5 @@ public static DataFactoryManagedIdentityCredentialData DataFactoryManagedIdentit } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/deviceupdate/Azure.ResourceManager.DeviceUpdate/src/Properties/AssemblyInfo.cs b/sdk/deviceupdate/Azure.ResourceManager.DeviceUpdate/src/Properties/AssemblyInfo.cs index d4d52d44576c..3f56f70bd798 100644 --- a/sdk/deviceupdate/Azure.ResourceManager.DeviceUpdate/src/Properties/AssemblyInfo.cs +++ b/sdk/deviceupdate/Azure.ResourceManager.DeviceUpdate/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.DeviceUpdate.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/devtestlabs/Azure.ResourceManager.DevTestLabs/src/Customization/DevTestLabArmTemplateData.cs b/sdk/devtestlabs/Azure.ResourceManager.DevTestLabs/src/Customization/DevTestLabArmTemplateData.cs index cb53c56c35b8..246ca73fd25e 100644 --- a/sdk/devtestlabs/Azure.ResourceManager.DevTestLabs/src/Customization/DevTestLabArmTemplateData.cs +++ b/sdk/devtestlabs/Azure.ResourceManager.DevTestLabs/src/Customization/DevTestLabArmTemplateData.cs @@ -18,3 +18,5 @@ public DevTestLabArmTemplateData(AzureLocation location) : base(location) } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/digitaltwins/Azure.ResourceManager.DigitalTwins/src/Customized/TimeSeriesDatabaseConnectionResource.cs b/sdk/digitaltwins/Azure.ResourceManager.DigitalTwins/src/Customized/TimeSeriesDatabaseConnectionResource.cs index 525d94424952..6afb3f303425 100644 --- a/sdk/digitaltwins/Azure.ResourceManager.DigitalTwins/src/Customized/TimeSeriesDatabaseConnectionResource.cs +++ b/sdk/digitaltwins/Azure.ResourceManager.DigitalTwins/src/Customized/TimeSeriesDatabaseConnectionResource.cs @@ -64,3 +64,5 @@ public virtual ArmOperation Delete(WaitUnt } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/dns/Azure.ResourceManager.Dns/src/Customization/ArmDnsModelFactory.cs b/sdk/dns/Azure.ResourceManager.Dns/src/Customization/ArmDnsModelFactory.cs index 3922bd2d0b87..590fa6e3c029 100644 --- a/sdk/dns/Azure.ResourceManager.Dns/src/Customization/ArmDnsModelFactory.cs +++ b/sdk/dns/Azure.ResourceManager.Dns/src/Customization/ArmDnsModelFactory.cs @@ -261,3 +261,5 @@ private static DnsRecordSetProperties CreateDnsRecordSetProperties( } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/domainservices/Azure.ResourceManager.DomainServices/src/Properties/AssemblyInfo.cs b/sdk/domainservices/Azure.ResourceManager.DomainServices/src/Properties/AssemblyInfo.cs index 0735558561cb..23edf42848ae 100644 --- a/sdk/domainservices/Azure.ResourceManager.DomainServices/src/Properties/AssemblyInfo.cs +++ b/sdk/domainservices/Azure.ResourceManager.DomainServices/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.DomainServices.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/durabletask/Azure.ResourceManager.DurableTask/src/Properties/AssemblyInfo.cs b/sdk/durabletask/Azure.ResourceManager.DurableTask/src/Properties/AssemblyInfo.cs index 84ffd6be6d15..3b73ae38f432 100644 --- a/sdk/durabletask/Azure.ResourceManager.DurableTask/src/Properties/AssemblyInfo.cs +++ b/sdk/durabletask/Azure.ResourceManager.DurableTask/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.DurableTask.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/edgeorder/Azure.ResourceManager.EdgeOrder/src/Properties/AssemblyInfo.cs b/sdk/edgeorder/Azure.ResourceManager.EdgeOrder/src/Properties/AssemblyInfo.cs index 3ddb89682784..77e60c1ffa48 100644 --- a/sdk/edgeorder/Azure.ResourceManager.EdgeOrder/src/Properties/AssemblyInfo.cs +++ b/sdk/edgeorder/Azure.ResourceManager.EdgeOrder/src/Properties/AssemblyInfo.cs @@ -7,3 +7,5 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.EdgeOrder.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/eventgrid/Azure.ResourceManager.EventGrid/src/Properties/AssemblyInfo.cs b/sdk/eventgrid/Azure.ResourceManager.EventGrid/src/Properties/AssemblyInfo.cs index 9b6fc3af109a..311117298158 100644 --- a/sdk/eventgrid/Azure.ResourceManager.EventGrid/src/Properties/AssemblyInfo.cs +++ b/sdk/eventgrid/Azure.ResourceManager.EventGrid/src/Properties/AssemblyInfo.cs @@ -7,3 +7,5 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.EventGrid.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/fluidrelay/Azure.ResourceManager.FluidRelay/src/Properties/AssemblyInfo.cs b/sdk/fluidrelay/Azure.ResourceManager.FluidRelay/src/Properties/AssemblyInfo.cs index fa01f832cd86..a5e0df35a164 100644 --- a/sdk/fluidrelay/Azure.ResourceManager.FluidRelay/src/Properties/AssemblyInfo.cs +++ b/sdk/fluidrelay/Azure.ResourceManager.FluidRelay/src/Properties/AssemblyInfo.cs @@ -6,3 +6,4 @@ [assembly: Azure.Core.AzureResourceProviderNamespace("Microsoft.FluidRelay")] [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.FluidRelay.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/hdinsight/Azure.ResourceManager.HDInsight/src/Azure.ResourceManager.HDInsight.csproj b/sdk/hdinsight/Azure.ResourceManager.HDInsight/src/Azure.ResourceManager.HDInsight.csproj index 556f5e171dff..4e0b53149bfc 100644 --- a/sdk/hdinsight/Azure.ResourceManager.HDInsight/src/Azure.ResourceManager.HDInsight.csproj +++ b/sdk/hdinsight/Azure.ResourceManager.HDInsight/src/Azure.ResourceManager.HDInsight.csproj @@ -9,3 +9,4 @@ true + diff --git a/sdk/healthbot/Azure.ResourceManager.HealthBot/src/Properties/AssemblyInfo.cs b/sdk/healthbot/Azure.ResourceManager.HealthBot/src/Properties/AssemblyInfo.cs index 923a74ae13d6..40386fdb33b4 100644 --- a/sdk/healthbot/Azure.ResourceManager.HealthBot/src/Properties/AssemblyInfo.cs +++ b/sdk/healthbot/Azure.ResourceManager.HealthBot/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.HealthBot.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/iothub/Azure.ResourceManager.IotHub/src/Customization/Models/IotHubCertificateProperties.cs b/sdk/iothub/Azure.ResourceManager.IotHub/src/Customization/Models/IotHubCertificateProperties.cs index a2b78a9f6f52..6f2faeec4c6d 100644 --- a/sdk/iothub/Azure.ResourceManager.IotHub/src/Customization/Models/IotHubCertificateProperties.cs +++ b/sdk/iothub/Azure.ResourceManager.IotHub/src/Customization/Models/IotHubCertificateProperties.cs @@ -49,3 +49,5 @@ public partial class IotHubCertificateProperties public BinaryData Thumbprint => BinaryData.FromString(ThumbprintString); } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/kusto/Azure.Provisioning.Kusto/src/Azure.Provisioning.Kusto.csproj b/sdk/kusto/Azure.Provisioning.Kusto/src/Azure.Provisioning.Kusto.csproj index 2aa4faf0c218..d2b27572c426 100644 --- a/sdk/kusto/Azure.Provisioning.Kusto/src/Azure.Provisioning.Kusto.csproj +++ b/sdk/kusto/Azure.Provisioning.Kusto/src/Azure.Provisioning.Kusto.csproj @@ -11,3 +11,4 @@ + diff --git a/sdk/kusto/Azure.ResourceManager.Kusto/src/Customized/KustoClusterCollection.cs b/sdk/kusto/Azure.ResourceManager.Kusto/src/Customized/KustoClusterCollection.cs index f840c03b2f49..0dbc92032003 100644 --- a/sdk/kusto/Azure.ResourceManager.Kusto/src/Customized/KustoClusterCollection.cs +++ b/sdk/kusto/Azure.ResourceManager.Kusto/src/Customized/KustoClusterCollection.cs @@ -43,3 +43,5 @@ private static MatchConditions ToMatchConditions(string ifMatch, string ifNoneMa } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/labservices/Azure.ResourceManager.LabServices/src/Properties/AssemblyInfo.cs b/sdk/labservices/Azure.ResourceManager.LabServices/src/Properties/AssemblyInfo.cs index 0fe43b74f48b..7e7576bbd2d3 100644 --- a/sdk/labservices/Azure.ResourceManager.LabServices/src/Properties/AssemblyInfo.cs +++ b/sdk/labservices/Azure.ResourceManager.LabServices/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.LabServices.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/logic/Azure.ResourceManager.Logic/src/Customized/LogicWorkflowResource.cs b/sdk/logic/Azure.ResourceManager.Logic/src/Customized/LogicWorkflowResource.cs index b2799b987f93..6f9f15998fb9 100644 --- a/sdk/logic/Azure.ResourceManager.Logic/src/Customized/LogicWorkflowResource.cs +++ b/sdk/logic/Azure.ResourceManager.Logic/src/Customized/LogicWorkflowResource.cs @@ -67,3 +67,5 @@ public virtual Response Update(CancellationToken cancella } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/managedservices/Azure.ResourceManager.ManagedServices/src/Properties/AssemblyInfo.cs b/sdk/managedservices/Azure.ResourceManager.ManagedServices/src/Properties/AssemblyInfo.cs index 93d4e98c3ea5..4a999da6245b 100644 --- a/sdk/managedservices/Azure.ResourceManager.ManagedServices/src/Properties/AssemblyInfo.cs +++ b/sdk/managedservices/Azure.ResourceManager.ManagedServices/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.ManagedServices.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/maps/Azure.ResourceManager.Maps/src/Properties/AssemblyInfo.cs b/sdk/maps/Azure.ResourceManager.Maps/src/Properties/AssemblyInfo.cs index d79941fc5238..be68abfbb5c9 100644 --- a/sdk/maps/Azure.ResourceManager.Maps/src/Properties/AssemblyInfo.cs +++ b/sdk/maps/Azure.ResourceManager.Maps/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.Maps.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/mysql/Azure.ResourceManager.MySql/src/Custom/MySql/ArmMySqlModelFactory.cs b/sdk/mysql/Azure.ResourceManager.MySql/src/Custom/MySql/ArmMySqlModelFactory.cs index 40533ced0862..3d2a1cc53ef4 100644 --- a/sdk/mysql/Azure.ResourceManager.MySql/src/Custom/MySql/ArmMySqlModelFactory.cs +++ b/sdk/mysql/Azure.ResourceManager.MySql/src/Custom/MySql/ArmMySqlModelFactory.cs @@ -730,3 +730,5 @@ public static MySqlServerPropertiesForReplica MySqlServerPropertiesForReplica(My } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/network/Azure.ResourceManager.Network/src/Customization/ArmNetworkModelFactory.cs b/sdk/network/Azure.ResourceManager.Network/src/Customization/ArmNetworkModelFactory.cs index 69c96ca03652..e00bb0cab4bd 100644 --- a/sdk/network/Azure.ResourceManager.Network/src/Customization/ArmNetworkModelFactory.cs +++ b/sdk/network/Azure.ResourceManager.Network/src/Customization/ArmNetworkModelFactory.cs @@ -139,3 +139,5 @@ public static EffectiveNetworkSecurityGroup EffectiveNetworkSecurityGroup(Resour } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/operationalinsights/Azure.ResourceManager.OperationalInsights/src/Custom/ArmOperationalInsightsModelFactory.cs b/sdk/operationalinsights/Azure.ResourceManager.OperationalInsights/src/Custom/ArmOperationalInsightsModelFactory.cs index 72e82034b5c8..09d61622cba8 100644 --- a/sdk/operationalinsights/Azure.ResourceManager.OperationalInsights/src/Custom/ArmOperationalInsightsModelFactory.cs +++ b/sdk/operationalinsights/Azure.ResourceManager.OperationalInsights/src/Custom/ArmOperationalInsightsModelFactory.cs @@ -115,3 +115,5 @@ public static OperationalInsightsWorkspacePatch OperationalInsightsWorkspacePatc } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/postgresql/Azure.ResourceManager.PostgreSql/src/Custom/PostgreSql/Custom/Models/PostgreSqlMinimalTlsVersionEnum.cs b/sdk/postgresql/Azure.ResourceManager.PostgreSql/src/Custom/PostgreSql/Custom/Models/PostgreSqlMinimalTlsVersionEnum.cs index 00271c94f1dc..81b97b9cb443 100644 --- a/sdk/postgresql/Azure.ResourceManager.PostgreSql/src/Custom/PostgreSql/Custom/Models/PostgreSqlMinimalTlsVersionEnum.cs +++ b/sdk/postgresql/Azure.ResourceManager.PostgreSql/src/Custom/PostgreSql/Custom/Models/PostgreSqlMinimalTlsVersionEnum.cs @@ -25,3 +25,5 @@ namespace Azure.ResourceManager.PostgreSql.Models #pragma warning restore CA1707 } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/privatedns/Azure.ResourceManager.PrivateDns/src/Customization/PrivateDnsAaaaRecordCollection.cs b/sdk/privatedns/Azure.ResourceManager.PrivateDns/src/Customization/PrivateDnsAaaaRecordCollection.cs index 425c1a837c2b..399a0ce21638 100644 --- a/sdk/privatedns/Azure.ResourceManager.PrivateDns/src/Customization/PrivateDnsAaaaRecordCollection.cs +++ b/sdk/privatedns/Azure.ResourceManager.PrivateDns/src/Customization/PrivateDnsAaaaRecordCollection.cs @@ -560,3 +560,5 @@ public virtual NullableResponse GetIfExists(string } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/provisioning/Azure.Provisioning.Deployment/src/AzCliBicepTool.cs b/sdk/provisioning/Azure.Provisioning.Deployment/src/AzCliBicepTool.cs index 5c506f6d8f70..a1dc371ed2f6 100644 --- a/sdk/provisioning/Azure.Provisioning.Deployment/src/AzCliBicepTool.cs +++ b/sdk/provisioning/Azure.Provisioning.Deployment/src/AzCliBicepTool.cs @@ -110,3 +110,5 @@ private static ToolResult RunAndBlock(string path, string arguments) return null; } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/purview/Azure.Analytics.Purview.DataMap/src/Custom/AnalyticsPurviewDataMapModelFactory.cs b/sdk/purview/Azure.Analytics.Purview.DataMap/src/Custom/AnalyticsPurviewDataMapModelFactory.cs index d83d8453d3b8..5ea4e0fb8c65 100644 --- a/sdk/purview/Azure.Analytics.Purview.DataMap/src/Custom/AnalyticsPurviewDataMapModelFactory.cs +++ b/sdk/purview/Azure.Analytics.Purview.DataMap/src/Custom/AnalyticsPurviewDataMapModelFactory.cs @@ -9,3 +9,5 @@ namespace Azure.Analytics.Purview.DataMap; public partial class AnalyticsPurviewDataMapModelFactory { } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/recoveryservices-backup/Azure.ResourceManager.RecoveryServicesBackup/src/Custom/ArmRecoveryServicesBackupModelFactory.cs b/sdk/recoveryservices-backup/Azure.ResourceManager.RecoveryServicesBackup/src/Custom/ArmRecoveryServicesBackupModelFactory.cs index 3a0fa8b57fb3..db38f7ca02aa 100644 --- a/sdk/recoveryservices-backup/Azure.ResourceManager.RecoveryServicesBackup/src/Custom/ArmRecoveryServicesBackupModelFactory.cs +++ b/sdk/recoveryservices-backup/Azure.ResourceManager.RecoveryServicesBackup/src/Custom/ArmRecoveryServicesBackupModelFactory.cs @@ -64,3 +64,5 @@ public static BackupGenericProtectedItem BackupGenericProtectedItem(string prote => BackupGenericProtectedItem(protectedItemType, backupManagementType, workloadType, containerName, sourceResourceId, policyId, lastRecoverOn, backupSetName, createMode, deferredDeletedOn, isScheduledForDeferredDelete, deferredDeleteTimeRemaining, isDeferredDeleteScheduleUpcoming, isRehydrate, resourceGuardOperationRequests, isArchiveEnabled, policyName, softDeleteRetentionPeriodInDays, vaultId, null); } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/redisenterprise/Azure.ResourceManager.RedisEnterprise/src/Customization/Models/RedisEnterpriseClusterPatch.cs b/sdk/redisenterprise/Azure.ResourceManager.RedisEnterprise/src/Customization/Models/RedisEnterpriseClusterPatch.cs index c1c0d5fb1295..b9035d9338ae 100644 --- a/sdk/redisenterprise/Azure.ResourceManager.RedisEnterprise/src/Customization/Models/RedisEnterpriseClusterPatch.cs +++ b/sdk/redisenterprise/Azure.ResourceManager.RedisEnterprise/src/Customization/Models/RedisEnterpriseClusterPatch.cs @@ -15,3 +15,4 @@ namespace Azure.ResourceManager.RedisEnterprise.Models public partial class RedisEnterpriseClusterPatch { } } +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/relay/Azure.ResourceManager.Relay/src/Customized/RelayNamespaceData.cs b/sdk/relay/Azure.ResourceManager.Relay/src/Customized/RelayNamespaceData.cs index 8047e5df0e4e..01088be5f72b 100644 --- a/sdk/relay/Azure.ResourceManager.Relay/src/Customized/RelayNamespaceData.cs +++ b/sdk/relay/Azure.ResourceManager.Relay/src/Customized/RelayNamespaceData.cs @@ -17,3 +17,5 @@ public partial class RelayNamespaceData : TrackedResourceData public RelayPublicNetworkAccess? PublicNetworkAccess { get; set; } } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/resourcegraph/Azure.ResourceManager.ResourceGraph/src/Properties/AssemblyInfo.cs b/sdk/resourcegraph/Azure.ResourceManager.ResourceGraph/src/Properties/AssemblyInfo.cs index 952d64d9a33e..763c0ff4614d 100644 --- a/sdk/resourcegraph/Azure.ResourceManager.ResourceGraph/src/Properties/AssemblyInfo.cs +++ b/sdk/resourcegraph/Azure.ResourceManager.ResourceGraph/src/Properties/AssemblyInfo.cs @@ -7,3 +7,4 @@ [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo("Azure.ResourceManager.ResourceGraph.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d15ddcb29688295338af4b7686603fe614abd555e09efba8fb88ee09e1f7b1ccaeed2e8f823fa9eef3fdd60217fc012ea67d2479751a0b8c087a4185541b851bd8b16f8d91b840e51b1cb0ba6fe647997e57429265e85ef62d565db50a69ae1647d54d7bd855e4db3d8a91510e5bcbd0edfbbecaa20a7bd9ae74593daa7b11b4")] +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/servicebus/Azure.Messaging.ServiceBus/src/Constants.cs b/sdk/servicebus/Azure.Messaging.ServiceBus/src/Constants.cs index ea6e6ad537e5..f114b0fd06be 100644 --- a/sdk/servicebus/Azure.Messaging.ServiceBus/src/Constants.cs +++ b/sdk/servicebus/Azure.Messaging.ServiceBus/src/Constants.cs @@ -58,3 +58,5 @@ internal static class Constants "For troubleshooting information, see https://aka.ms/azsdk/net/servicebus/exceptions/troubleshoot."; } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/servicebus/Azure.Provisioning.ServiceBus/src/MigrationConfiguration.cs b/sdk/servicebus/Azure.Provisioning.ServiceBus/src/MigrationConfiguration.cs index 75ab94fd5eb9..c2d7e67f033b 100644 --- a/sdk/servicebus/Azure.Provisioning.ServiceBus/src/MigrationConfiguration.cs +++ b/sdk/servicebus/Azure.Provisioning.ServiceBus/src/MigrationConfiguration.cs @@ -11,3 +11,5 @@ public partial class MigrationConfiguration private partial BicepValue GetNameDefaultValue() => new StringLiteralExpression("$default"); } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/servicebus/Azure.ResourceManager.ServiceBus/src/Customized/Models/ServiceBusMinimumTlsVersion.cs b/sdk/servicebus/Azure.ResourceManager.ServiceBus/src/Customized/Models/ServiceBusMinimumTlsVersion.cs index bdc21512f812..22002824fe75 100644 --- a/sdk/servicebus/Azure.ResourceManager.ServiceBus/src/Customized/Models/ServiceBusMinimumTlsVersion.cs +++ b/sdk/servicebus/Azure.ResourceManager.ServiceBus/src/Customized/Models/ServiceBusMinimumTlsVersion.cs @@ -19,3 +19,5 @@ public partial struct ServiceBusMinimumTlsVersion public static ServiceBusMinimumTlsVersion Tls1_3 { get; } = Tls13; } } + +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/signalr/Azure.Provisioning.SignalR/src/Azure.Provisioning.SignalR.csproj b/sdk/signalr/Azure.Provisioning.SignalR/src/Azure.Provisioning.SignalR.csproj index f23f38f99d7d..3260f06302fc 100644 --- a/sdk/signalr/Azure.Provisioning.SignalR/src/Azure.Provisioning.SignalR.csproj +++ b/sdk/signalr/Azure.Provisioning.SignalR/src/Azure.Provisioning.SignalR.csproj @@ -14,3 +14,4 @@ + diff --git a/sdk/storagemover/Azure.ResourceManager.StorageMover/src/Customization/ArmStorageMoverModelFactory.cs b/sdk/storagemover/Azure.ResourceManager.StorageMover/src/Customization/ArmStorageMoverModelFactory.cs index c3a9290ec6c0..516dffc651d8 100644 --- a/sdk/storagemover/Azure.ResourceManager.StorageMover/src/Customization/ArmStorageMoverModelFactory.cs +++ b/sdk/storagemover/Azure.ResourceManager.StorageMover/src/Customization/ArmStorageMoverModelFactory.cs @@ -183,3 +183,4 @@ public static StorageMoverEndpointData StorageMoverEndpointData(ResourceIdentifi => StorageMoverEndpointData(id, name, resourceType, systemData, properties, null); } } +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/streamanalytics/Azure.ResourceManager.StreamAnalytics/src/Customization/StreamingJobOutputData.cs b/sdk/streamanalytics/Azure.ResourceManager.StreamAnalytics/src/Customization/StreamingJobOutputData.cs index 34f8f101daa2..e26bd2f1af6c 100644 --- a/sdk/streamanalytics/Azure.ResourceManager.StreamAnalytics/src/Customization/StreamingJobOutputData.cs +++ b/sdk/streamanalytics/Azure.ResourceManager.StreamAnalytics/src/Customization/StreamingJobOutputData.cs @@ -18,3 +18,4 @@ public partial class StreamingJobOutputData : StreamAnalyticsSubResource public DateTimeOffset? TimeWindow { get; set; } } } +// Test comment for batching validation - DO NOT MERGE diff --git a/sdk/trafficmanager/Azure.ResourceManager.TrafficManager/src/Customization/MockableTrafficManagerSubscriptionResource.cs b/sdk/trafficmanager/Azure.ResourceManager.TrafficManager/src/Customization/MockableTrafficManagerSubscriptionResource.cs index 5a631cc32e81..2a94844e1cbc 100644 --- a/sdk/trafficmanager/Azure.ResourceManager.TrafficManager/src/Customization/MockableTrafficManagerSubscriptionResource.cs +++ b/sdk/trafficmanager/Azure.ResourceManager.TrafficManager/src/Customization/MockableTrafficManagerSubscriptionResource.cs @@ -16,3 +16,5 @@ public virtual TrafficManagerUserMetricsResource GetTrafficManagerUserMetrics() } } } + +// Test comment for batching validation - DO NOT MERGE