public async Task IfAUserAttemptsToWriteOutsideTheContainerByBypassingTheUpChecker_ThenTheWriteFails() { var taskOutputStorage = new TaskOutputStorage(StorageAccount, _jobId, _taskId); var ex = await Assert.ThrowsAsync <StorageException>(async() => await taskOutputStorage.SaveAsyncImpl(TaskOutputKind.TaskIntermediate, FileSubfolder("File\\Under\\Further"), @"Under\..\..\..\..\TestTextForFarOutsideWorkingDirectory.txt") ); Assert.Equal(404, ex.RequestInformation.HttpStatusCode); }
public async Task IfAFileWithAMultiLevelPathIsSaved_ThenItAppearsInTheList() { var taskOutputStorage = new TaskOutputStorage(StorageAccount, _jobId, _taskId); await taskOutputStorage.SaveAsyncImpl(TaskOutputKind.TaskPreview, FileBase, "File\\Under\\TestText2.txt"); var blobs = taskOutputStorage.ListOutputs(TaskOutputKind.TaskPreview).ToList(); Assert.NotEqual(0, blobs.Count); Assert.Contains(blobs, b => b.Uri.AbsoluteUri.EndsWith($"{_jobId}/{_taskId}/$TaskPreview/File/Under/TestText2.txt")); }
public async Task IfAFileIsSaved_ThenItAppearsInTheList() { var taskOutputStorage = new TaskOutputStorage(StorageAccount, _jobId, _taskId); await taskOutputStorage.SaveAsyncImpl(TaskOutputKind.TaskPreview, FileBase, "TestText1.txt"); var blobs = taskOutputStorage.ListOutputs(TaskOutputKind.TaskPreview).ToList(); Assert.NotEmpty(blobs); Assert.Contains(blobs, b => b.Uri.AbsoluteUri.EndsWith($"{_jobId}/{_taskId}/$TaskPreview/TestText1.txt")); }
public async Task IfAFileIsSavedWithAPathOutsideTheWorkingDirectory_ThenTheUpPartsOfThePathAreStripped() { var taskOutputStorage = new TaskOutputStorage(StorageAccount, _jobId, _taskId); await taskOutputStorage.SaveAsyncImpl(TaskOutputKind.TaskIntermediate, FileSubfolder("File"), @"..\TestTextForOutsideWorkingDirectory.txt"); var blob = await taskOutputStorage.GetOutputAsync(TaskOutputKind.TaskIntermediate, "TestTextForOutsideWorkingDirectory.txt"); var blobContent = await blob.ReadAsByteArrayAsync(); var originalContent = File.ReadAllBytes(FilePath("TestTextForOutsideWorkingDirectory.txt")); Assert.Equal(originalContent, blobContent); }