public RunFromPackageHandlerTests() { _environment = new TestEnvironment(); _meshServiceClientMock = new Mock <IMeshServiceClient>(MockBehavior.Strict); _bashCmdHandlerMock = new Mock <IBashCommandHandler>(MockBehavior.Strict); _zipHandler = new Mock <IUnZipHandler>(MockBehavior.Strict); _metricsLogger = new TestMetricsLogger(); _httpClient = new Mock <HttpClient>().Object; _logger = NullLogger <RunFromPackageHandler> .Instance; _runFromPackageHandler = new RunFromPackageHandler(_environment, _httpClient, _meshServiceClientMock.Object, _bashCmdHandlerMock.Object, _zipHandler.Object, _metricsLogger, _logger); }
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 MountsZipFileIfMountEnabledUsingFileCommand(bool azureFilesMounted) { var isWarmUpRequest = false; var extension = "unknown"; _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) }); _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); _meshServiceClientMock .Setup(m => m.MountFuse(MeshServiceClient.ZipOperation, It.Is <string>(s => url.EndsWith(Path.GetFileName(s))), TargetScriptPath)) .Returns(Task.FromResult(true)); _bashCmdHandlerMock.Setup(b => b.RunBashCommand( It.Is <string>(s => s.StartsWith(BashCommandHandler.FileCommand) && url.EndsWith(Path.GetFileName(s), StringComparison.OrdinalIgnoreCase)), MetricEventNames.LinuxContainerSpecializationFileCommand)).Returns(("zip", string.Empty, 0)); 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)); _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 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); } }