From fd4cadfd0b68eb92d4f2e37d84a4b6d5f86983ba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:59:36 +0000 Subject: [PATCH 1/5] Add network-chaos-simulation sample for resilience testing Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- samples/network-chaos-simulation/README.md | 106 ++++++++++++++++++ .../assets/sample.json | 87 ++++++++++++++ .../network-chaos-simulation/devproxyrc.json | 38 +++++++ .../network-errors.json | 65 +++++++++++ 4 files changed, 296 insertions(+) create mode 100644 samples/network-chaos-simulation/README.md create mode 100644 samples/network-chaos-simulation/assets/sample.json create mode 100644 samples/network-chaos-simulation/devproxyrc.json create mode 100644 samples/network-chaos-simulation/network-errors.json diff --git a/samples/network-chaos-simulation/README.md b/samples/network-chaos-simulation/README.md new file mode 100644 index 0000000..cae5e09 --- /dev/null +++ b/samples/network-chaos-simulation/README.md @@ -0,0 +1,106 @@ +# Simulate slow and failing network conditions + +## Summary + +This sample contains a preset to simulate slow and failing network conditions for resilience testing. It combines the LatencyPlugin to add realistic network delays with the GenericRandomErrorPlugin to randomly return server errors, helping you test how your applications handle challenging network environments. + +Using this preset, you can verify that your app properly handles: +- Slow API responses (200ms to 10 seconds of latency) +- Random server errors (500, 503, 504) +- Retry logic and back-off strategies +- Loading states and timeout handling + +![Dev Proxy simulating network chaos](assets/screenshot.png) + +## Compatibility + +![Dev Proxy v2.0.0](https://aka.ms/devproxy/badge/v2.0.0) + +## Contributors + +* [Copilot](https://github.com/copilot) + +## Version history + +Version|Date|Comments +-------|----|-------- +1.0|January 6, 2026|Initial release + +## Minimal path to awesome + +* Clone this repository (or [download this solution as a .ZIP file](https://pnp.github.io/download-partial/?url=https://github.com/pnp/proxy-samples/tree/main/samples/network-chaos-simulation) then unzip it) +* Start Dev Proxy specifying the path to the config file: `devproxy --config-file devproxyrc.json` +* Test the simulation by making requests to the watched URLs: + +```bash +# Test with JSONPlaceholder API (included in urlsToWatch) +curl -ikx http://127.0.0.1:8000 https://jsonplaceholder.typicode.com/posts/1 + +# Test multiple requests to see varying latency and errors +curl -ikx http://127.0.0.1:8000 https://jsonplaceholder.typicode.com/users +curl -ikx http://127.0.0.1:8000 https://jsonplaceholder.typicode.com/todos/1 + +# Add your own API URLs to urlsToWatch in devproxyrc.json +``` + +## Features + +This preset combines two plugins to simulate realistic network chaos: + +**LatencyPlugin** - Adds artificial delays to responses: +- Minimum delay: 200ms (simulating typical network latency) +- Maximum delay: 10,000ms (simulating very slow connections or timeouts) +- Random delay applied to each request within this range + +**GenericRandomErrorPlugin** - Returns random server errors: +- 30% of requests fail with a random error +- 500 Internal Server Error - unexpected server failures +- 503 Service Unavailable - temporary service outages with Retry-After header +- 504 Gateway Timeout - upstream server timeouts + +**RetryAfterPlugin** - Validates retry behavior: +- Ensures clients respect the Retry-After header +- Helps test back-off strategies + +Using this sample you can use Dev Proxy to: + +* Test your app's loading spinners and progress indicators +* Verify timeout handling and user feedback +* Test retry logic with exponential back-off +* Validate error messages shown to users +* Ensure graceful degradation under poor network conditions +* Build apps that work reliably on slow connections + +## Customization + +You can adjust the simulation parameters in `devproxyrc.json`: + +```json +"latencyPlugin": { + "minMs": 200, // Minimum latency in milliseconds + "maxMs": 10000 // Maximum latency in milliseconds +} +``` + +```json +"networkErrors": { + "errorsFile": "network-errors.json", + "rate": 30 // Percentage of requests that fail (0-100) +} +``` + +## Help + +We do not support samples, but this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues. + +You can try looking at [issues related to this sample](https://github.com/pnp/proxy-samples/issues?q=label%3A%22sample%3A%20network-chaos-simulation%22) to see if anybody else is having the same issues. + +If you encounter any issues using this sample, [create a new issue](https://github.com/pnp/proxy-samples/issues/new). + +Finally, if you have an idea for improvement, [make a suggestion](https://github.com/pnp/proxy-samples/issues/new). + +## Disclaimer + +**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +![](https://m365-visitor-stats.azurewebsites.net/SamplesGallery/pnp-devproxy-network-chaos-simulation) diff --git a/samples/network-chaos-simulation/assets/sample.json b/samples/network-chaos-simulation/assets/sample.json new file mode 100644 index 0000000..6e733d4 --- /dev/null +++ b/samples/network-chaos-simulation/assets/sample.json @@ -0,0 +1,87 @@ +[ + { + "name": "pnp-devproxy-network-chaos-simulation", + "source": "pnp", + "title": "Simulate slow and failing network conditions", + "shortDescription": "This sample contains a preset to simulate slow and failing network conditions for resilience testing. It combines the LatencyPlugin to add realistic network delays (200ms to 10 seconds) with the GenericRandomErrorPlugin to randomly return server errors (500, 503, 504), helping you test how your applications handle challenging network environments.", + "url": "https://github.com/pnp/proxy-samples/tree/main/samples/network-chaos-simulation", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/proxy-samples/tree/main/samples/network-chaos-simulation", + "longDescription": [ + "This sample contains a preset to simulate slow and failing network conditions for resilience testing. It combines the LatencyPlugin to add realistic network delays (200ms to 10 seconds) with the GenericRandomErrorPlugin to randomly return server errors (500, 503, 504), helping you test how your applications handle challenging network environments." + ], + "creationDateTime": "2026-01-06", + "updateDateTime": "2026-01-06", + "products": [ + "Dev Proxy" + ], + "metadata": [ + { + "key": "SAMPLE ID", + "value": "network-chaos-simulation" + }, + { + "key": "PRESET", + "value": "Yes" + }, + { + "key": "MOCKS", + "value": "Yes" + }, + { + "key": "PLUGIN", + "value": "No" + }, + { + "key": "PROXY VERSION", + "value": "v2.0.0" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://github.com/pnp/proxy-samples/raw/main/samples/network-chaos-simulation/assets/screenshot.png", + "alt": "Dev Proxy simulating network chaos" + } + ], + "authors": [ + { + "gitHubAccount": "copilot", + "pictureUrl": "https://github.com/copilot.png", + "name": "Copilot" + } + ], + "references": [ + { + "name": "Get started with the Dev Proxy", + "description": "The tutorial will introduce you to the Dev Proxy and show you how to use its features.", + "url": "https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/get-started" + }, + { + "name": "Use preset configurations", + "description": "Instructions on how to configure the Dev Proxy to use a different configuration file.", + "url": "https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/how-to/use-preset-configurations" + }, + { + "name": "Simulate slow API responses", + "description": "How to use the LatencyPlugin to simulate slow API responses.", + "url": "https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/how-to/simulate-slow-api-responses" + }, + { + "name": "Test my app with random errors", + "description": "How to test your app with random errors using the GenericRandomErrorPlugin.", + "url": "https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/how-to/test-my-app-with-random-errors" + }, + { + "name": "LatencyPlugin reference", + "description": "Technical reference for the LatencyPlugin.", + "url": "https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/latencyplugin" + }, + { + "name": "GenericRandomErrorPlugin reference", + "description": "Technical reference for the GenericRandomErrorPlugin.", + "url": "https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/genericrandomerrorplugin" + } + ] + } +] diff --git a/samples/network-chaos-simulation/devproxyrc.json b/samples/network-chaos-simulation/devproxyrc.json new file mode 100644 index 0000000..9ce1162 --- /dev/null +++ b/samples/network-chaos-simulation/devproxyrc.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/rc.schema.json", + "plugins": [ + { + "name": "RetryAfterPlugin", + "enabled": true, + "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll" + }, + { + "name": "LatencyPlugin", + "enabled": true, + "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll", + "configSection": "latencyPlugin" + }, + { + "name": "GenericRandomErrorPlugin", + "enabled": true, + "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll", + "configSection": "networkErrors" + } + ], + "urlsToWatch": [ + "https://jsonplaceholder.typicode.com/*", + "https://api.example.com/*" + ], + "logLevel": "information", + "newVersionNotification": "stable", + "latencyPlugin": { + "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/latencyplugin.schema.json", + "minMs": 200, + "maxMs": 10000 + }, + "networkErrors": { + "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/genericrandomerrorplugin.schema.json", + "errorsFile": "network-errors.json", + "rate": 30 + } +} diff --git a/samples/network-chaos-simulation/network-errors.json b/samples/network-chaos-simulation/network-errors.json new file mode 100644 index 0000000..31a607d --- /dev/null +++ b/samples/network-chaos-simulation/network-errors.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/genericrandomerrorplugin.errorsfile.schema.json", + "errors": [ + { + "request": { + "url": "*" + }, + "responses": [ + { + "statusCode": 500, + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + } + ], + "body": { + "error": { + "code": "InternalServerError", + "message": "An unexpected error occurred on the server. Please try again later." + } + } + }, + { + "statusCode": 503, + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Retry-After", + "value": "@dynamic" + } + ], + "body": { + "error": { + "code": "ServiceUnavailable", + "message": "The service is temporarily unavailable. Please retry after the specified time." + } + } + }, + { + "statusCode": 504, + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Retry-After", + "value": "@dynamic" + } + ], + "body": { + "error": { + "code": "GatewayTimeout", + "message": "The server did not receive a timely response from the upstream server." + } + } + } + ] + } + ] +} From b8a8a541f16b51265799103f5cc9b8b489cb2e09 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 6 Jan 2026 12:04:53 +0000 Subject: [PATCH 2/5] Address review feedback: update author and add placeholder screenshot Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- samples/network-chaos-simulation/README.md | 2 +- .../network-chaos-simulation/assets/sample.json | 6 +++--- .../assets/screenshot.png | Bin 0 -> 42122 bytes 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 samples/network-chaos-simulation/assets/screenshot.png diff --git a/samples/network-chaos-simulation/README.md b/samples/network-chaos-simulation/README.md index cae5e09..45e6616 100644 --- a/samples/network-chaos-simulation/README.md +++ b/samples/network-chaos-simulation/README.md @@ -18,7 +18,7 @@ Using this preset, you can verify that your app properly handles: ## Contributors -* [Copilot](https://github.com/copilot) +* [Waldek Mastykarz](https://github.com/waldekmastykarz) ## Version history diff --git a/samples/network-chaos-simulation/assets/sample.json b/samples/network-chaos-simulation/assets/sample.json index 6e733d4..5079e95 100644 --- a/samples/network-chaos-simulation/assets/sample.json +++ b/samples/network-chaos-simulation/assets/sample.json @@ -46,9 +46,9 @@ ], "authors": [ { - "gitHubAccount": "copilot", - "pictureUrl": "https://github.com/copilot.png", - "name": "Copilot" + "gitHubAccount": "waldekmastykarz", + "pictureUrl": "https://github.com/waldekmastykarz.png", + "name": "Waldek Mastykarz" } ], "references": [ diff --git a/samples/network-chaos-simulation/assets/screenshot.png b/samples/network-chaos-simulation/assets/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..fa863ed51f1d1869dc396e2fae855d8df1471530 GIT binary patch literal 42122 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
    CndvxHP*ZHWEHlN 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 L{`1}W8xQ;+KF+ae literal 0 HcmV?d00001 From 2124cefc1ba6ff9c2307ac967fba24db330dbdf5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 10:13:53 +0000 Subject: [PATCH 3/5] Update sample dates to 2026-01-10 Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- samples/network-chaos-simulation/README.md | 2 +- samples/network-chaos-simulation/assets/sample.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/network-chaos-simulation/README.md b/samples/network-chaos-simulation/README.md index 45e6616..6f96f40 100644 --- a/samples/network-chaos-simulation/README.md +++ b/samples/network-chaos-simulation/README.md @@ -24,7 +24,7 @@ Using this preset, you can verify that your app properly handles: Version|Date|Comments -------|----|-------- -1.0|January 6, 2026|Initial release +1.0|January 10, 2026|Initial release ## Minimal path to awesome diff --git a/samples/network-chaos-simulation/assets/sample.json b/samples/network-chaos-simulation/assets/sample.json index 5079e95..6c48828 100644 --- a/samples/network-chaos-simulation/assets/sample.json +++ b/samples/network-chaos-simulation/assets/sample.json @@ -9,8 +9,8 @@ "longDescription": [ "This sample contains a preset to simulate slow and failing network conditions for resilience testing. It combines the LatencyPlugin to add realistic network delays (200ms to 10 seconds) with the GenericRandomErrorPlugin to randomly return server errors (500, 503, 504), helping you test how your applications handle challenging network environments." ], - "creationDateTime": "2026-01-06", - "updateDateTime": "2026-01-06", + "creationDateTime": "2026-01-10", + "updateDateTime": "2026-01-10", "products": [ "Dev Proxy" ], From eff49fa4be0a57242b252c64a137e2bf4ca06292 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 14:53:45 +0000 Subject: [PATCH 4/5] Move config files to .devproxy folder and remove default values Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- .../{ => .devproxy}/devproxyrc.json | 2 -- .../{ => .devproxy}/network-errors.json | 0 samples/network-chaos-simulation/README.md | 6 +++--- 3 files changed, 3 insertions(+), 5 deletions(-) rename samples/network-chaos-simulation/{ => .devproxy}/devproxyrc.json (94%) rename samples/network-chaos-simulation/{ => .devproxy}/network-errors.json (100%) diff --git a/samples/network-chaos-simulation/devproxyrc.json b/samples/network-chaos-simulation/.devproxy/devproxyrc.json similarity index 94% rename from samples/network-chaos-simulation/devproxyrc.json rename to samples/network-chaos-simulation/.devproxy/devproxyrc.json index 9ce1162..a9b54f3 100644 --- a/samples/network-chaos-simulation/devproxyrc.json +++ b/samples/network-chaos-simulation/.devproxy/devproxyrc.json @@ -23,8 +23,6 @@ "https://jsonplaceholder.typicode.com/*", "https://api.example.com/*" ], - "logLevel": "information", - "newVersionNotification": "stable", "latencyPlugin": { "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/latencyplugin.schema.json", "minMs": 200, diff --git a/samples/network-chaos-simulation/network-errors.json b/samples/network-chaos-simulation/.devproxy/network-errors.json similarity index 100% rename from samples/network-chaos-simulation/network-errors.json rename to samples/network-chaos-simulation/.devproxy/network-errors.json diff --git a/samples/network-chaos-simulation/README.md b/samples/network-chaos-simulation/README.md index 6f96f40..f37550c 100644 --- a/samples/network-chaos-simulation/README.md +++ b/samples/network-chaos-simulation/README.md @@ -29,7 +29,7 @@ Version|Date|Comments ## Minimal path to awesome * Clone this repository (or [download this solution as a .ZIP file](https://pnp.github.io/download-partial/?url=https://github.com/pnp/proxy-samples/tree/main/samples/network-chaos-simulation) then unzip it) -* Start Dev Proxy specifying the path to the config file: `devproxy --config-file devproxyrc.json` +* Start Dev Proxy specifying the path to the config file: `devproxy --config-file .devproxy/devproxyrc.json` * Test the simulation by making requests to the watched URLs: ```bash @@ -40,7 +40,7 @@ curl -ikx http://127.0.0.1:8000 https://jsonplaceholder.typicode.com/posts/1 curl -ikx http://127.0.0.1:8000 https://jsonplaceholder.typicode.com/users curl -ikx http://127.0.0.1:8000 https://jsonplaceholder.typicode.com/todos/1 -# Add your own API URLs to urlsToWatch in devproxyrc.json +# Add your own API URLs to urlsToWatch in .devproxy/devproxyrc.json ``` ## Features @@ -73,7 +73,7 @@ Using this sample you can use Dev Proxy to: ## Customization -You can adjust the simulation parameters in `devproxyrc.json`: +You can adjust the simulation parameters in `.devproxy/devproxyrc.json`: ```json "latencyPlugin": { From 6c0cce359b6ac5c00523747f784151fc7a229cf8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 18 Jan 2026 15:05:41 +0000 Subject: [PATCH 5/5] Fix startup command - remove unnecessary --config-file flag Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- samples/network-chaos-simulation/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/network-chaos-simulation/README.md b/samples/network-chaos-simulation/README.md index f37550c..4e06f9b 100644 --- a/samples/network-chaos-simulation/README.md +++ b/samples/network-chaos-simulation/README.md @@ -29,7 +29,7 @@ Version|Date|Comments ## Minimal path to awesome * Clone this repository (or [download this solution as a .ZIP file](https://pnp.github.io/download-partial/?url=https://github.com/pnp/proxy-samples/tree/main/samples/network-chaos-simulation) then unzip it) -* Start Dev Proxy specifying the path to the config file: `devproxy --config-file .devproxy/devproxyrc.json` +* Start Dev Proxy: `devproxy` * Test the simulation by making requests to the watched URLs: ```bash