|
10 | 10 | using System.Linq; |
11 | 11 | using System.Linq.Expressions; |
12 | 12 | using System.Net; |
| 13 | +using System.Security.Principal; |
13 | 14 | using System.Threading.Tasks; |
14 | 15 | using System.Web; |
15 | 16 | using System.Web.Mvc; |
@@ -64,7 +65,8 @@ public TestableApiController( |
64 | 65 | IGalleryConfigurationService configurationService, |
65 | 66 | MockBehavior behavior = MockBehavior.Default, |
66 | 67 | ISecurityPolicyService securityPolicyService = null, |
67 | | - IUserService userService = null) |
| 68 | + IUserService userService = null, |
| 69 | + Mock<HttpResponseBase> responseMock = null) |
68 | 70 | { |
69 | 71 | SetOwinContextOverride(Fakes.CreateOwinContext()); |
70 | 72 | ApiScopeEvaluator = (MockApiScopeEvaluator = new Mock<IApiScopeEvaluator>()).Object; |
@@ -159,6 +161,12 @@ public TestableApiController( |
159 | 161 | requestMock.Setup(m => m.IsSecureConnection).Returns(true); |
160 | 162 | requestMock.Setup(m => m.Url).Returns(new Uri(TestUtility.GallerySiteRootHttps)); |
161 | 163 |
|
| 164 | + if (responseMock == null) |
| 165 | + { |
| 166 | + responseMock = new Mock<HttpResponseBase>(); |
| 167 | + responseMock.Setup(m => m.IsClientConnected).Returns(true); |
| 168 | + } |
| 169 | + |
162 | 170 | var httpContextMock = new Mock<HttpContextBase>(); |
163 | 171 | httpContextMock.Setup(m => m.Request).Returns(requestMock.Object); |
164 | 172 |
|
@@ -244,6 +252,33 @@ public async Task CreateSymbolPackage_ReturnsFailedActionWhenValidationFails() |
244 | 252 | ResultAssert.IsStatusCode(result, HttpStatusCode.BadRequest); |
245 | 253 | } |
246 | 254 |
|
| 255 | + [Fact] |
| 256 | + public async Task CreateSymbolPackage_TracksClientDisconnectedWithoutFailureMetric() |
| 257 | + { |
| 258 | + // Arrange |
| 259 | + var responseMock = new Mock<HttpResponseBase>(); |
| 260 | + responseMock.Setup(x => x.IsClientConnected).Returns(false); |
| 261 | + |
| 262 | + var controller = new TestableApiController(GetConfigurationService(), responseMock: responseMock); |
| 263 | + controller.SetCurrentUser(new User() { EmailAddress = "[email protected]" }); |
| 264 | + controller.MockSymbolPackageUploadService |
| 265 | + .Setup(p => p.ValidateUploadedSymbolsPackage( |
| 266 | + It.IsAny<Stream>(), |
| 267 | + It.IsAny<User>())) |
| 268 | + .Throws(new HttpException()); |
| 269 | + |
| 270 | + controller.SetupPackageFromInputStream(TestPackage.CreateTestSymbolPackageStream()); |
| 271 | + |
| 272 | + // Act |
| 273 | + var result = await controller.CreateSymbolPackagePutAsync(); |
| 274 | + |
| 275 | + // Assert |
| 276 | + ResultAssert.IsStatusCode(result, HttpStatusCode.BadRequest, "The package upload failed due to the client disconnecting."); |
| 277 | + controller.MockTelemetryService.Verify(x => x.TrackSymbolPackagePushDisconnectEvent(), Times.Once); |
| 278 | + controller.MockTelemetryService.Verify(x => x.TrackSymbolPackagePushEvent(It.IsAny<string>(), It.IsAny<string>()), Times.Never); |
| 279 | + controller.MockTelemetryService.Verify(x => x.TrackSymbolPackagePushFailureEvent(It.IsAny<string>(), It.IsAny<string>()), Times.Never); |
| 280 | + } |
| 281 | + |
247 | 282 | [Fact] |
248 | 283 | public async Task CreateSymbolPackage_UnauthorizedUserWillGet403() |
249 | 284 | { |
@@ -456,6 +491,36 @@ public async Task CreatePackage_TracksFailureIfUnexpectedExceptionWithoutIdVersi |
456 | 491 | controller.MockTelemetryService.Verify(x => x.TrackPackagePushFailureEvent(null, null), Times.Once()); |
457 | 492 | } |
458 | 493 |
|
| 494 | + [Fact] |
| 495 | + public async Task CreatePackage_TracksClientDisconnectedWithoutFailureMetric() |
| 496 | + { |
| 497 | + // Arrange |
| 498 | + var responseMock = new Mock<HttpResponseBase>(); |
| 499 | + responseMock.Setup(x => x.IsClientConnected).Returns(false); |
| 500 | + |
| 501 | + var controller = new TestableApiController(GetConfigurationService(), responseMock: responseMock); |
| 502 | + controller.SetCurrentUser(new User() { EmailAddress = "[email protected]" }); |
| 503 | + controller.MockPackageUploadService |
| 504 | + .Setup(p => p.GeneratePackageAsync( |
| 505 | + It.IsAny<string>(), |
| 506 | + It.IsAny<PackageArchiveReader>(), |
| 507 | + It.IsAny<PackageStreamMetadata>(), |
| 508 | + It.IsAny<User>(), |
| 509 | + It.IsAny<User>())) |
| 510 | + .Throws(new HttpException()); |
| 511 | + |
| 512 | + controller.SetupPackageFromInputStream(TestPackage.CreateTestPackageStream()); |
| 513 | + |
| 514 | + // Act |
| 515 | + var result = await controller.CreatePackagePut(); |
| 516 | + |
| 517 | + // Assert |
| 518 | + ResultAssert.IsStatusCode(result, HttpStatusCode.BadRequest, "The package upload failed due to the client disconnecting."); |
| 519 | + controller.MockTelemetryService.Verify(x => x.TrackPackagePushDisconnectEvent(), Times.Once); |
| 520 | + controller.MockTelemetryService.Verify(x => x.TrackPackagePushEvent(It.IsAny<Package>(), It.IsAny<User>(), It.IsAny<IIdentity>()), Times.Never); |
| 521 | + controller.MockTelemetryService.Verify(x => x.TrackPackagePushFailureEvent(It.IsAny<string>(), It.IsAny<NuGetVersion>()), Times.Never); |
| 522 | + } |
| 523 | + |
459 | 524 | [Fact] |
460 | 525 | public async Task CreatePackage_TracksFailureIfUnexpectedExceptionWithIdVersion() |
461 | 526 | { |
|
0 commit comments