public async Task ApplyContextHandlesFailures(bool throwOnFailure) { if (throwOnFailure) { await Assert.ThrowsAsync <NullReferenceException>(async() => await _runFromPackageHandler.ApplyBlobPackageContext(null, string.Empty, true, throwOnFailure)); } else { Assert.False(await _runFromPackageHandler.ApplyBlobPackageContext(null, string.Empty, true, throwOnFailure)); } }
public async Task ApplyContextHandlesFailures(bool throwOnFailure) { if (throwOnFailure) { _packageDownloadHandler.Setup(h => h.Download(It.IsAny <RunFromPackageContext>())) .Returns(Task.FromResult(string.Empty)); await Assert.ThrowsAsync <NullReferenceException>(async() => await _runFromPackageHandler.ApplyBlobPackageContext(null, string.Empty, true, throwOnFailure)); } else { Assert.False(await _runFromPackageHandler.ApplyBlobPackageContext(null, string.Empty, true, throwOnFailure)); } }
public async Task MountsSquashFsFileIfMountEnabledUsingFileCommand(bool azureFilesMounted, string isMountEnabled) { var isWarmUpRequest = false; int packageLength = 100; var extension = "unknown"; _environment.SetEnvironmentVariable(EnvironmentSettingNames.MountEnabled, isMountEnabled); _environment.SetEnvironmentVariable(EnvironmentSettingNames.MeshInitURI, MeshInitUri); // httpDownload var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); handlerMock.Protected().Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()).ReturnsAsync(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new ReadOnlyMemoryContent(ReadOnlyMemory <byte> .Empty) }); _httpClientFactory = TestHelpers.CreateHttpClientFactory(handlerMock.Object); var packageDownloadHandler = new PackageDownloadHandler(_httpClientFactory, new Mock <IManagedIdentityTokenProvider>(MockBehavior.Strict).Object, _bashCmdHandlerMock.Object, NullLogger <PackageDownloadHandler> .Instance, _metricsLogger); _runFromPackageHandler = new RunFromPackageHandler(_environment, _meshServiceClientMock.Object, _bashCmdHandlerMock.Object, _zipHandler.Object, packageDownloadHandler, _metricsLogger, _logger); var url = $"http://url/zip-file.{extension}"; var runFromPackageContext = new RunFromPackageContext(EnvironmentSettingNames.AzureWebsiteRunFromPackage, url, packageLength, isWarmUpRequest); _bashCmdHandlerMock.Setup(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith(BashCommandHandler.FileCommand) && url.EndsWith(Path.GetFileName(s), StringComparison.OrdinalIgnoreCase)), MetricEventNames.LinuxContainerSpecializationFileCommand)).Returns(("squashfs", string.Empty, 0)); _meshServiceClientMock.Setup(m => m.MountFuse(MeshServiceClient.SquashFsOperation, It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), TargetScriptPath)) .Returns(Task.FromResult(true)); var applyBlobContextResult = await _runFromPackageHandler.ApplyBlobPackageContext(runFromPackageContext, TargetScriptPath, azureFilesMounted, true); Assert.True(applyBlobContextResult); handlerMock.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(r => IsZipDownloadRequest(r, url)), ItExpr.IsAny <CancellationToken>()); _bashCmdHandlerMock.Verify(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith(BashCommandHandler.FileCommand) && url.EndsWith(Path.GetFileName(s), StringComparison.OrdinalIgnoreCase)), MetricEventNames.LinuxContainerSpecializationFileCommand), Times.Once); _meshServiceClientMock.Verify(m => m.MountFuse(MeshServiceClient.SquashFsOperation, It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), TargetScriptPath), Times.Once); }
public async Task ApplyContextFailsForUnknownFileTypes(bool azureFilesMounted, string isMountEnabled) { var isWarmUpRequest = false; int packageLength = 100; var extension = "unknown"; _environment.SetEnvironmentVariable(EnvironmentSettingNames.MountEnabled, isMountEnabled); _environment.SetEnvironmentVariable(EnvironmentSettingNames.MeshInitURI, MeshInitUri); // httpDownload var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); handlerMock.Protected().Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()).ReturnsAsync(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new ReadOnlyMemoryContent(ReadOnlyMemory <byte> .Empty) }); _httpClient = new HttpClient(handlerMock.Object); _runFromPackageHandler = new RunFromPackageHandler(_environment, _httpClient, _meshServiceClientMock.Object, _bashCmdHandlerMock.Object, _zipHandler.Object, _metricsLogger, _logger); var url = $"http://url/zip-file.{extension}"; var runFromPackageContext = new RunFromPackageContext(EnvironmentSettingNames.AzureWebsiteRunFromPackage, url, packageLength, isWarmUpRequest); _bashCmdHandlerMock.Setup(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith(BashCommandHandler.FileCommand) && url.EndsWith(Path.GetFileName(s), StringComparison.OrdinalIgnoreCase)), MetricEventNames.LinuxContainerSpecializationFileCommand)).Returns(("unknown", string.Empty, 0)); await Assert.ThrowsAsync <InvalidOperationException>(async() => await _runFromPackageHandler.ApplyBlobPackageContext(runFromPackageContext, TargetScriptPath, azureFilesMounted, true)); handlerMock.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(r => IsZipDownloadRequest(r, url)), ItExpr.IsAny <CancellationToken>()); _bashCmdHandlerMock.Verify(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith(BashCommandHandler.FileCommand) && url.EndsWith(Path.GetFileName(s), StringComparison.OrdinalIgnoreCase)), MetricEventNames.LinuxContainerSpecializationFileCommand), Times.Once); }
public async Task MountsZipFileIfMountEnabled(bool azureFilesMounted) { var isWarmUpRequest = false; var extension = "zip"; _environment.SetEnvironmentVariable(EnvironmentSettingNames.MountEnabled, "1"); _environment.SetEnvironmentVariable(EnvironmentSettingNames.MeshInitURI, MeshInitUri); // httpDownload var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); handlerMock.Protected().Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()).ReturnsAsync(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new ReadOnlyMemoryContent(ReadOnlyMemory <byte> .Empty) }); _httpClient = new HttpClient(handlerMock.Object); _runFromPackageHandler = new RunFromPackageHandler(_environment, _httpClient, _meshServiceClientMock.Object, _bashCmdHandlerMock.Object, _zipHandler.Object, _metricsLogger, _logger); var url = $"http://url/zip-file.{extension}"; var runFromPackageContext = new RunFromPackageContext(EnvironmentSettingNames.AzureWebsiteRunFromPackage, url, DefaultPackageLength, isWarmUpRequest); _meshServiceClientMock .Setup(m => m.MountFuse(MeshServiceClient.ZipOperation, It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), TargetScriptPath)) .Returns(Task.FromResult(true)); var applyBlobContextResult = await _runFromPackageHandler.ApplyBlobPackageContext(runFromPackageContext, TargetScriptPath, azureFilesMounted, true); Assert.True(applyBlobContextResult); handlerMock.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(r => IsZipDownloadRequest(r, url)), ItExpr.IsAny <CancellationToken>()); _meshServiceClientMock .Setup(m => m.MountFuse(MeshServiceClient.ZipOperation, It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), TargetScriptPath)) .Returns(Task.FromResult(true)); }
public async Task UnsquashesSquashFsFileIfMountDisabled(bool azureFilesMounted) { var isWarmUpRequest = false; var extension = "squashfs"; _environment.SetEnvironmentVariable(EnvironmentSettingNames.MountEnabled, "0"); _environment.SetEnvironmentVariable(EnvironmentSettingNames.MeshInitURI, MeshInitUri); // httpDownload var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); handlerMock.Protected().Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()).ReturnsAsync(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new ReadOnlyMemoryContent(ReadOnlyMemory <byte> .Empty) }); _httpClient = new HttpClient(handlerMock.Object); _runFromPackageHandler = new RunFromPackageHandler(_environment, _httpClient, _meshServiceClientMock.Object, _bashCmdHandlerMock.Object, _zipHandler.Object, _metricsLogger, _logger); if (azureFilesMounted) { _bashCmdHandlerMock .Setup(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith($"{RunFromPackageHandler.UnsquashFSExecutable} -f -d '{EnvironmentSettingNames.DefaultLocalSitePackagesPath}'")), MetricEventNames.LinuxContainerSpecializationUnsquash)).Returns((string.Empty, string.Empty, 0)); _meshServiceClientMock .Setup(m => m.CreateBindMount(EnvironmentSettingNames.DefaultLocalSitePackagesPath, TargetScriptPath)) .Returns(Task.FromResult(true)); } else { _bashCmdHandlerMock .Setup(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith($"{RunFromPackageHandler.UnsquashFSExecutable} -f -d '{TargetScriptPath}'")), MetricEventNames.LinuxContainerSpecializationUnsquash)).Returns((string.Empty, string.Empty, 0)); } var url = $"http://url/zip-file.{extension}"; var runFromPackageContext = new RunFromPackageContext(EnvironmentSettingNames.AzureWebsiteRunFromPackage, url, DefaultPackageLength, isWarmUpRequest); var applyBlobContextResult = await _runFromPackageHandler.ApplyBlobPackageContext(runFromPackageContext, TargetScriptPath, azureFilesMounted, true); Assert.True(applyBlobContextResult); handlerMock.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(r => IsZipDownloadRequest(r, url)), ItExpr.IsAny <CancellationToken>()); if (azureFilesMounted) { _bashCmdHandlerMock .Verify(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith( $"{RunFromPackageHandler.UnsquashFSExecutable} -f -d '{EnvironmentSettingNames.DefaultLocalSitePackagesPath}'")), MetricEventNames.LinuxContainerSpecializationUnsquash), Times.Once); _meshServiceClientMock .Verify(m => m.CreateBindMount(EnvironmentSettingNames.DefaultLocalSitePackagesPath, TargetScriptPath), Times.Once); } else { _bashCmdHandlerMock .Verify(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith($"{RunFromPackageHandler.UnsquashFSExecutable} -f -d '{TargetScriptPath}'")), MetricEventNames.LinuxContainerSpecializationUnsquash), Times.Once); } }
public async Task MountsZipFileIfMountDisabled(bool azureFilesMounted, string mountEnabled) { var isWarmUpRequest = false; var extension = "zip"; _environment.SetEnvironmentVariable(EnvironmentSettingNames.MountEnabled, mountEnabled); _environment.SetEnvironmentVariable(EnvironmentSettingNames.MeshInitURI, MeshInitUri); // httpDownload var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); handlerMock.Protected().Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()).ReturnsAsync(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new ReadOnlyMemoryContent(ReadOnlyMemory <byte> .Empty) }); _httpClientFactory = TestHelpers.CreateHttpClientFactory(handlerMock.Object); var packageDownloadHandler = new PackageDownloadHandler(_httpClientFactory, new Mock <IManagedIdentityTokenProvider>(MockBehavior.Strict).Object, _bashCmdHandlerMock.Object, NullLogger <PackageDownloadHandler> .Instance, _metricsLogger); _runFromPackageHandler = new RunFromPackageHandler(_environment, _meshServiceClientMock.Object, _bashCmdHandlerMock.Object, _zipHandler.Object, packageDownloadHandler, _metricsLogger, _logger); var url = $"http://url/zip-file.{extension}"; var runFromPackageContext = new RunFromPackageContext(EnvironmentSettingNames.AzureWebsiteRunFromPackage, url, DefaultPackageLength, isWarmUpRequest); if (azureFilesMounted) { _zipHandler .Setup(b => b.UnzipPackage(It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), EnvironmentSettingNames.DefaultLocalSitePackagesPath)); _meshServiceClientMock .Setup(m => m.CreateBindMount(EnvironmentSettingNames.DefaultLocalSitePackagesPath, TargetScriptPath)).Returns(Task.FromResult(true)); } else { _zipHandler.Setup(b => b.UnzipPackage(It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), TargetScriptPath)); } var applyBlobContextResult = await _runFromPackageHandler.ApplyBlobPackageContext(runFromPackageContext, TargetScriptPath, azureFilesMounted, true); Assert.True(applyBlobContextResult); handlerMock.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>(r => IsZipDownloadRequest(r, url)), ItExpr.IsAny <CancellationToken>()); if (azureFilesMounted) { _zipHandler .Verify( b => b.UnzipPackage(It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), EnvironmentSettingNames.DefaultLocalSitePackagesPath), Times.Once); _meshServiceClientMock .Verify(m => m.CreateBindMount(EnvironmentSettingNames.DefaultLocalSitePackagesPath, TargetScriptPath), Times.Once); } else { _zipHandler.Verify(b => b.UnzipPackage(It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), TargetScriptPath), Times.Once); } }