/// <summary> /// Adds a policy for Azure resource manager client http call. /// </summary> /// <param name="policy"> The http call policy in the pipeline. </param> /// <param name="position"> The position of the http call policy in the pipeline. </param> public new void AddPolicy(HttpPipelinePolicy policy, HttpPipelinePosition position) { // TODO policy lists are internal hence we don't have acces to them by inheriting ClientOptions in this Asembly, this is a wrapper for now to convert to the concrete // policy options. switch (position) { case HttpPipelinePosition.PerCall: PerCallPolicies.Add(policy); break; case HttpPipelinePosition.PerRetry: PerRetryPolicies.Add(policy); break; default: throw new ArgumentOutOfRangeException(nameof(position), position, null); } base.AddPolicy(policy, position); }
public async Task CanAddCustomPolicy(HttpPipelinePosition position, int expectedCount) { var policy = new CounterPolicy(); var transport = new MockTransport(new MockResponse(503), new MockResponse(200)); var options = new TestOptions(); options.AddPolicy(policy, position); options.Transport = transport; HttpPipeline pipeline = HttpPipelineBuilder.Build(options); using Request request = transport.CreateRequest(); request.Method = RequestMethod.Get; request.Uri.Reset(new Uri("http://example.com")); Response response = await pipeline.SendRequestAsync(request, CancellationToken.None); Assert.AreEqual(200, response.Status); Assert.AreEqual(expectedCount, policy.ExecutionCount); }
public static void AddPolicy(this BlobClientOptions options, HttpPipelinePolicy policy, HttpPipelinePosition position) { options.AddPolicy(position, policy); }