Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
b43b59a
[Service Bus] Add batch delete and purge APIs
EldertGrootenboer Sep 2, 2026
2576934
fix: address batch delete review feedback
EldertGrootenboer Sep 2, 2026
9590c7a
fix: address batch delete review feedback
EldertGrootenboer Sep 2, 2026
42a8416
fix: enforce batch delete setup deadline
EldertGrootenboer Sep 3, 2026
ce37d9f
fix: recover failed management link setup
EldertGrootenboer Sep 3, 2026
a1c6bfd
fix: enforce batch delete operation deadline
EldertGrootenboer Sep 3, 2026
b3836d5
fix: defer async setup coroutine creation
EldertGrootenboer Sep 3, 2026
d3967bf
fix: map management setup timeouts
EldertGrootenboer Sep 3, 2026
085072f
Merge branch 'main' into fix/servicebus-batch-delete
EldertGrootenboer Sep 3, 2026
eb05692
Merge main into fix/servicebus-batch-delete
EldertGrootenboer Sep 15, 2026
26df6fb
Merge remote-tracking branch 'origin/main' into fix/servicebus-batch-…
Copilot Oct 13, 2026
097bd5e
fix: Align Service Bus batch-delete preview version
EldertGrootenboer Oct 14, 2026
6e74d34
fix: Match Service Bus preview metadata and stabilize timeout tests
EldertGrootenboer Oct 14, 2026
ec48e65
fix: Preserve batch-delete setup failures during link cleanup
EldertGrootenboer Oct 14, 2026
018052c
fix: Bound asynchronous batch-delete management setup
EldertGrootenboer Oct 14, 2026
1a9fea8
fix: Preserve cached links and require explicit purge samples
EldertGrootenboer Oct 14, 2026
4e73e08
fix: Forward timeout budgets through default open adapters
EldertGrootenboer Oct 14, 2026
a66ebab
test: Cover batch deletion across supported AMQP transports
EldertGrootenboer Oct 14, 2026
4a9360c
fix: Bound failed management-link cleanup without a deadline
EldertGrootenboer Oct 14, 2026
5c08dd7
Merge branch 'main' into fix/servicebus-batch-delete
EldertGrootenboer Oct 14, 2026
1420b7c
Merge main and resolve Service Bus preview version conflicts
EldertGrootenboer Oct 14, 2026
bf18167
fix: Preserve one-shot deletion error handling and attempt budgets
EldertGrootenboer Nov 9, 2026
2439571
fix: Align management setup contracts and result documentation
EldertGrootenboer Nov 9, 2026
c2d6262
fix: Reject invalid batch-delete cutoff values before dispatch
EldertGrootenboer Nov 9, 2026
fb565e5
fix: Allow bounded management-link cleanup after setup expiry
EldertGrootenboer Nov 9, 2026
cdf04e5
fix: Use compatible CI typing extensions on Python 3.15
EldertGrootenboer Nov 9, 2026
1e3ad22
fix: Preserve upstream pip pin beside CI compatibility repair
EldertGrootenboer Nov 9, 2026
418a981
infra: Merge current main for Python 3.15 CI repair
EldertGrootenboer Nov 9, 2026
af48cea
test: Make core stream connection failures deterministic
EldertGrootenboer Nov 9, 2026
cb51745
fix: Prepare native test dependencies in PR validation
EldertGrootenboer Nov 10, 2026
fe503c9
test: Make unknown authority discovery checks deterministic
EldertGrootenboer Nov 10, 2026
8b105a5
test: Apply required formatting to authority discovery test
EldertGrootenboer Nov 10, 2026
db72cbb
test: Isolate mocked ARM registration policies from proxies
EldertGrootenboer Nov 10, 2026
6f853a7
infra: Integrate final main updates for Service Bus review
EldertGrootenboer Nov 10, 2026
bce0d3c
infra: Align shared CI typing pin with upstream
EldertGrootenboer Nov 10, 2026
a7bc83d
infra: Unblock AutoRest legacy compatibility checks
EldertGrootenboer Nov 10, 2026
104fd5f
test: Isolate Cosmos startup health probes by client
EldertGrootenboer Nov 10, 2026
9b863be
test: Format AutoRest pipeline regression tests
EldertGrootenboer Nov 10, 2026
bc2ee06
test: Clean up Cosmos resources after async setup failure
EldertGrootenboer Nov 10, 2026
7361a11
test: Diagnose cross-process OBO cache misses
EldertGrootenboer Nov 10, 2026
e14cce5
fix: Reconcile live native setup with upstream Rust support
EldertGrootenboer Nov 10, 2026
6d24d99
test: Diagnose refresh-cache worker key errors
EldertGrootenboer Nov 10, 2026
173c900
test: Format the cross-process cache diagnostic fixture
EldertGrootenboer Nov 11, 2026
8bf4767
test: Preserve shared cache ownership during Cosmos teardown
EldertGrootenboer Nov 11, 2026
80bc364
test: Attribute isolation regression probes to owned clients
EldertGrootenboer Nov 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion eng/ci_tools.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ doc-warden==0.7.2
beautifulsoup4==4.13.3
pkginfo==1.12.1.2
pip==26.2.2
typing-extensions==4.12.2
typing-extensions==4.16.0
pyproject-api==1.8.0
cibuildwheel
importlib-metadata==8.5.0
Expand Down
18 changes: 13 additions & 5 deletions eng/pipelines/autorest_checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,24 +41,32 @@ jobs:
versionSpec: $(PythonVersion)

- script: |
npm install -g pnpm
set -euo pipefail
git clone $(auto_rest_clone_url)
cd autorest.python
pnpm install
# Legacy clients are checked in; they need the test server, not the generator workspace.
test_server_version=$(node -p "require('$(Build.SourcesDirectory)/autorest.python/packages/autorest.python/package.json').devDependencies['@microsoft.azure/autorest.testserver']")
test_server_directory="$(Agent.TempDirectory)/autorest-testserver"
mkdir -p "$test_server_directory"
cd "$test_server_directory"
npm init --yes
npm install --ignore-scripts --no-audit --no-fund "@microsoft.azure/autorest.testserver@$test_server_version"
ln -s "$test_server_directory/node_modules" "$(Build.SourcesDirectory)/autorest.python/packages/autorest.python/node_modules"
displayName: 'Prepare Environment'

- script: |
set -euo pipefail
cd $(Build.SourcesDirectory)/autorest.python/packages/autorest.python/test/vanilla/legacy
python -m pip install $(Build.SourcesDirectory)/$(source_path_azure_core)
python -m pip install -r requirements.txt
python -m pip install $(Build.SourcesDirectory)/$(source_path_azure_core)
pip freeze
pytest $(Build.SourcesDirectory)/autorest.python/packages/autorest.python/test/vanilla/legacy
displayName: 'Install azure-core and Test Vanilla Legacy'

- script: |
set -euo pipefail
cd $(Build.SourcesDirectory)/autorest.python/packages/autorest.python/test/azure/legacy
python -m pip install $(Build.SourcesDirectory)/$(source_path_azure_mgmt_core)
python -m pip install -r requirements.txt
python -m pip install $(Build.SourcesDirectory)/$(source_path_azure_core) $(Build.SourcesDirectory)/$(source_path_azure_mgmt_core)
pip freeze
pytest $(Build.SourcesDirectory)/autorest.python/packages/autorest.python/test/azure/legacy
displayName: 'Install azure-mgmt-core and Test Azure Legacy'
3 changes: 3 additions & 0 deletions eng/pipelines/templates/jobs/ci.tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,9 @@ jobs:
parameters:
AgentImage: ${{ parameters.OSName }}

# Test dependencies may need native wheels even when the targeted service does not.
- template: ../steps/prepare-native-test-dependencies.yml

- template: ../steps/build-test.yml
parameters:
ServiceDirectory: ${{ parameters.ServiceDirectory }}
Expand Down
30 changes: 29 additions & 1 deletion eng/pipelines/templates/jobs/live.tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,15 @@ parameters:
- name: DisableAzureResourceCreation
type: boolean
default: false
- name: InstallMsRustToolchain
type: boolean
default: false
- name: MsRustWorkingDirectory
type: string
default: ''
- name: MsRustToolchainFeed
type: string
default: ''

jobs:
- job:
Expand Down Expand Up @@ -174,16 +183,30 @@ jobs:
}
displayName: 'Check for compiled dev requirements'

- ${{ if parameters.InstallMsRustToolchain }}:
Comment thread
EldertGrootenboer marked this conversation as resolved.
Resolved
- template: /eng/pipelines/templates/steps/install-msrust-toolchain.yml
parameters:
ToolchainFeed: ${{ parameters.MsRustToolchainFeed }}
WorkingDirectory: ${{ parameters.MsRustWorkingDirectory }}
Condition: and(succeeded(), eq(variables['CIBUILDWHEEL_DEV_REQ'], 'true'))

- pwsh: |
Write-Host "##vso[task.setvariable variable=CIBW_ARCHS]native"
Write-Host "##vso[task.setvariable variable=CIBW_SKIP]pp* *musllinux*"
Write-Host "##vso[task.setvariable variable=CIBW_TEST_SKIP]*"
# CIBW_ENVIRONMENT_PASS_LINUX, not CIBW_ENVIRONMENT: the latter would clobber the package's
# own [tool.cibuildwheel].environment (CFLAGS). PIP_INDEX_URL is set by the time the test step
# runs (use-python-version.yml, then auth-dev-feed.yml inside build-test.yml).
Write-Host "##vso[task.setvariable variable=CIBW_ENVIRONMENT_PASS_LINUX]PIP_INDEX_URL"
$passVariables = @('PIP_INDEX_URL')
if ($env:RUST_ENVIRONMENT_PASS) {
$passVariables += $env:RUST_ENVIRONMENT_PASS.Split(' ')
}
Write-Host "##vso[task.setvariable variable=CIBW_ENVIRONMENT_PASS_LINUX]$($passVariables -join ' ')"
displayName: 'Configure cibuildwheel for dev requirement builds'
condition: and(succeeded(), eq(variables['CIBUILDWHEEL_DEV_REQ'], 'true'))
env:
${{ if parameters.InstallMsRustToolchain }}:
RUST_ENVIRONMENT_PASS: MSRUSTUP_ACCESS_TOKEN MSRUSTUP_FEED_URL CARGO_REGISTRIES_AZURE_SDK_FOR_RUST_PUBLIC_INDEX CARGO_REGISTRIES_AZURE_SDK_FOR_RUST_PUBLIC_TOKEN CARGO_REGISTRIES_AZURE_SDK_FOR_RUST_PUBLIC_CREDENTIAL_PROVIDER

# Download the Python versions selected by cibuildwheel from the approved feed.
# This test job builds only for the current machine's architecture, not ARM64.
Expand All @@ -207,6 +230,11 @@ jobs:
CoverageArg: $(CoverageArg)
EnvVars:
AZURE_RUN_MODE: 'Live' #Record, Playback
${{ if parameters.InstallMsRustToolchain }}:
MSRUSTUP_ACCESS_TOKEN: $(System.AccessToken)
MSRUSTUP_FEED_URL: $(MSRUSTUP_FEED_URL)
CARGO_REGISTRIES_AZURE_SDK_FOR_RUST_PUBLIC_TOKEN: $(CARGO_REGISTRIES_AZURE_SDK_FOR_RUST_PUBLIC_TOKEN)
CARGO_REGISTRIES_AZURE_SDK_FOR_RUST_PUBLIC_CREDENTIAL_PROVIDER: $(CARGO_REGISTRIES_AZURE_SDK_FOR_RUST_PUBLIC_CREDENTIAL_PROVIDER)
${{ insert }}: ${{ parameters.EnvVars }}
PythonVersion: $(PythonVersion)
OSVmImage: $(OSVmImage)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
parameters:
- name: Condition
type: string
default: succeeded()

steps:
- pwsh: |
Write-Host "##vso[task.setvariable variable=CIBW_ARCHS]native"
Write-Host "##vso[task.setvariable variable=CIBW_SKIP]pp* *musllinux*"
Write-Host "##vso[task.setvariable variable=CIBW_TEST_SKIP]*"
# Forward the authenticated pip index without replacing package CFLAGS.
Write-Host "##vso[task.setvariable variable=CIBW_ENVIRONMENT_PASS_LINUX]PIP_INDEX_URL"
displayName: 'Configure cibuildwheel for dev requirement builds'
condition: ${{ parameters.Condition }}

- task: NuGetAuthenticate@1
displayName: 'Authenticate to NuGet feed'
condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Windows_NT'))

- pwsh: |
$ErrorActionPreference = 'Stop'
$feed = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-net/nuget/v3/index.json"
$cache = Join-Path "$(Agent.TempDirectory)" "cibw-cache"
Write-Host "##vso[task.setvariable variable=CIBW_CACHE_PATH]$cache"
Write-Host "##vso[task.setvariable variable=AZURESDK_PYTHON_NUGET_FEED]$feed"
displayName: 'Pre-provision CPython for cibuildwheel'
condition: and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Windows_NT'))
91 changes: 86 additions & 5 deletions eng/tools/azure-sdk-tools/tests/test_native_build_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,46 @@ def test_analysis_checkout_has_history_for_api_comparison():
}


def test_autorest_legacy_tests_install_only_the_declared_test_server():
pipeline = yaml.safe_load((REPO_ROOT / "eng" / "pipelines" / "autorest_checks.yml").read_text())
steps = pipeline["jobs"][0]["steps"]
assert steps[0]["template"].endswith("create-authenticated-npmrc.yml")
prepare = next(step["script"] for step in steps if step.get("displayName") == "Prepare Environment")
assert prepare.startswith("set -euo pipefail\n")
assert "git clone $(auto_rest_clone_url)" in prepare
assert "devDependencies['@microsoft.azure/autorest.testserver']" in prepare
assert (
"npm install --ignore-scripts --no-audit --no-fund "
'"@microsoft.azure/autorest.testserver@$test_server_version"'
) in prepare
assert 'ln -s "$test_server_directory/node_modules"' in prepare
assert "pnpm install" not in prepare


@pytest.mark.parametrize("kind", ["Vanilla", "Azure"])
def test_autorest_legacy_requirements_cannot_replace_the_pr_packages(kind):
pipeline = yaml.safe_load((REPO_ROOT / "eng" / "pipelines" / "autorest_checks.yml").read_text())
step = next(
step for step in pipeline["jobs"][0]["steps"] if step.get("displayName", "").endswith(f"Test {kind} Legacy")
)
assert step["script"].startswith("set -euo pipefail\n")
commands = step["script"].splitlines()
requirements = commands.index("python -m pip install -r requirements.txt")
local_packages = next(
index
for index, command in enumerate(commands)
if command.startswith("python -m pip install $(Build.SourcesDirectory)")
)
assert requirements < local_packages
assert "$(source_path_azure_core)" in commands[local_packages]
if kind == "Azure":
assert "$(source_path_azure_mgmt_core)" in commands[local_packages]
suite = kind.lower()
assert commands[-1] == (
f"pytest $(Build.SourcesDirectory)/autorest.python/packages/autorest.python/test/{suite}/legacy"
)


def test_rust_support_is_disabled_by_default_and_forwarded():
archetype = load_template("stages/archetype-sdk-client.yml")
jobs = load_template("jobs/ci.yml")
Expand Down Expand Up @@ -135,15 +175,54 @@ def test_windows_provisioning_configuration(tmp_path, rust):


def test_dev_requirements_share_selected_target_provisioning(tmp_path):
steps = [step for step in load_template("jobs/live.tests.yml")["jobs"][0]["steps"] if isinstance(step, dict)]
template = "prepare-native-test-dependencies.yml"
for job in ("ci.tests.yml", "live.tests.yml"):
steps = [step for step in load_template(f"jobs/{job}")["jobs"][0]["steps"] if isinstance(step, dict)]
test_index = next(i for i, step in enumerate(steps) if step.get("template", "").endswith("build-test.yml"))
if job == "live.tests.yml":
configure = next(
step for step in steps if step.get("displayName") == "Configure cibuildwheel for dev requirement builds"
)
assert configure["condition"] == ("and(succeeded(), eq(variables['CIBUILDWHEEL_DEV_REQ'], 'true'))")
provision = next(
step for step in steps if step.get("displayName") == "Pre-provision CPython for cibuildwheel"
)
authenticate = next(step for step in steps if step.get("task") == "NuGetAuthenticate@1")
assert (
authenticate["condition"]
== provision["condition"]
== (
"and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'), "
"eq(variables['CIBUILDWHEEL_DEV_REQ'], 'true'))"
)
)
assert steps.index(configure) < steps.index(authenticate) < steps.index(provision) < test_index
result = run_powershell(configure["pwsh"], RUST_ENVIRONMENT_PASS="")
assert result.returncode == 0, result.stderr
for variable in ("CIBW_ARCHS]native", "CIBW_SKIP]pp* *musllinux*", "CIBW_TEST_SKIP]*"):
assert "variable=" + variable in result.stdout
assert "variable=CIBW_ENVIRONMENT_PASS_LINUX]PIP_INDEX_URL" in result.stdout
else:
configure_index = next(i for i, step in enumerate(steps) if step.get("template", "").endswith(template))
assert configure_index < test_index
assert "parameters" not in steps[configure_index]

preparation = load_template(f"steps/{template}")
assert preparation["parameters"][0]["default"] == "succeeded()"
steps = preparation["steps"]
provision = next(step for step in steps if step.get("displayName") == "Pre-provision CPython for cibuildwheel")
assert provision["condition"] == (
"and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'), eq(variables['CIBUILDWHEEL_DEV_REQ'], 'true'))"
)
assert provision["condition"] == ("and(${{ parameters.Condition }}, eq(variables['Agent.OS'], 'Windows_NT'))")
authenticate = next(step for step in steps if step.get("task") == "NuGetAuthenticate@1")
assert authenticate["condition"] == provision["condition"]
configure = next(
step for step in steps if step.get("displayName") == "Configure cibuildwheel for dev requirement builds"
)
assert "variable=CIBW_ARCHS]native" in configure["pwsh"]
assert configure["condition"] == "${{ parameters.Condition }}"
result = run_powershell(configure["pwsh"])
assert result.returncode == 0, result.stderr
assert "variable=CIBW_ARCHS]native" in result.stdout
assert "variable=CIBW_ENVIRONMENT_PASS_LINUX]PIP_INDEX_URL" in result.stdout
assert "variable=CIBW_ENVIRONMENT]" not in result.stdout
assert "nuget install" not in provision["pwsh"]
assert "3.10.11" not in provision["pwsh"]
result = run_powershell(provision["pwsh"].replace("$(Agent.TempDirectory)", str(tmp_path)))
Expand Down Expand Up @@ -238,6 +317,7 @@ def test_cargo_feed_configuration_uses_default_cargo_home(tmp_path):
CARGO_HOME="",
CARGO_FEED_URL=feed,
HOME=str(tmp_path),
USERPROFILE=str(tmp_path),
RUST_TOOLCHAIN_FEED="example-feed",
)

Expand All @@ -251,6 +331,7 @@ def test_build_powershell_scripts_parse():
for template_path in (
"steps/install-msrust-toolchain.yml",
"steps/build-package-artifacts.yml",
"steps/prepare-native-test-dependencies.yml",
"steps/resolve-build-platforms.yml",
):
template = load_template(template_path)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
# Licensed under the MIT License. See LICENSE.txt in the project root for
# license information.
# -------------------------------------------------------------------------
from unittest.mock import patch

import aiohttp
import pytest

from azure.core.exceptions import HttpResponseError, ServiceRequestError
Expand Down Expand Up @@ -50,10 +53,15 @@ async def test_iter_with_error(client):

assert response.is_closed

request = HttpRequest("GET", "http://doesNotExist")
with pytest.raises(ServiceRequestError):
async with await client.send_request(request, stream=True):
raise ValueError("Should error before entering")
request = HttpRequest("GET", "/streams/basic")
connection_error = aiohttp.ClientConnectionError("Connection failed")
# A CI proxy can turn a DNS failure into an HTTP response instead.
with patch("aiohttp.ClientSession._request", side_effect=connection_error) as mock_request:
with pytest.raises(ServiceRequestError) as error:
async with await client.send_request(request, stream=True, retry_total=0):
raise ValueError("Should error before entering")
mock_request.assert_awaited_once()
assert error.value.inner_exception is connection_error
assert response.is_closed


Expand Down
16 changes: 12 additions & 4 deletions sdk/core/azure-core/tests/test_rest_stream_responses.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
# Licensed under the MIT License. See LICENSE.txt in the project root for
# license information.
# -------------------------------------------------------------------------
from unittest.mock import patch

import pytest
import requests
from azure.core.rest import HttpRequest
from azure.core.exceptions import StreamClosedError, StreamConsumedError, ResponseNotReadError
from azure.core.exceptions import HttpResponseError, ServiceRequestError
Expand Down Expand Up @@ -58,10 +61,15 @@ def test_iter_with_error(client):
response.raise_for_status()
assert response.is_closed

request = HttpRequest("GET", "http://doesNotExist")
with pytest.raises(ServiceRequestError):
with client.send_request(request, stream=True) as response:
raise ValueError("Should error before entering")
request = HttpRequest("GET", "/streams/basic")
connection_error = requests.ConnectionError("Connection failed")
# A CI proxy can turn a DNS failure into an HTTP response instead.
with patch("requests.Session.request", side_effect=connection_error) as mock_request:
with pytest.raises(ServiceRequestError) as error:
with client.send_request(request, stream=True, retry_total=0):
raise ValueError("Should error before entering")
mock_request.assert_called_once()
assert error.value.inner_exception is connection_error
assert response.is_closed


Expand Down
17 changes: 13 additions & 4 deletions sdk/core/azure-mgmt-core/tests/test_policies.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,17 @@ def sleep(_):
monkeypatch.setattr(time, "sleep", sleep)


@pytest.fixture(params=[None, "http://127.0.0.1:1"])
def proxy_environment(monkeypatch, request):
for name in ("HTTPS_PROXY", "https_proxy", "ALL_PROXY", "all_proxy", "NO_PROXY", "no_proxy"):
monkeypatch.delenv(name, raising=False)
monkeypatch.setenv("NO_PROXY", "" if request.param else "*")
if request.param:
monkeypatch.setenv("HTTPS_PROXY", request.param)


@httpretty.activate
@pytest.mark.usefixtures("sleepless")
@pytest.mark.usefixtures("sleepless", "proxy_environment")
def test_register_rp_policy():
"""Protocol:
- We call the provider and get a 409 provider error
Expand Down Expand Up @@ -121,14 +130,14 @@ def test_register_rp_policy():
policies = [
ARMAutoResourceProviderRegistrationPolicy(),
]
with Pipeline(RequestsTransport(), policies=policies) as pipeline:
with Pipeline(RequestsTransport(use_env_settings=False), policies=policies) as pipeline:
response = pipeline.run(request)

assert json.loads(response.http_response.text())["success"]


@httpretty.activate
@pytest.mark.usefixtures("sleepless")
@pytest.mark.usefixtures("sleepless", "proxy_environment")
def test_register_failed_policy():
"""Protocol:
- We call the provider and get a 409 provider error
Expand Down Expand Up @@ -174,7 +183,7 @@ def test_register_failed_policy():
policies = [
ARMAutoResourceProviderRegistrationPolicy(),
]
with Pipeline(RequestsTransport(), policies=policies) as pipeline:
with Pipeline(RequestsTransport(use_env_settings=False), policies=policies) as pipeline:
response = pipeline.run(request)

assert response.http_response.status_code == 409
Expand Down
Loading
Loading