public void TestAddFile_AssociateDoesntNeedServer() { // this client only touches item.BlobIdentifier and returns 'Associated' var dropClient = new MockDropClient(addFileFunc: (item) => { Assert.NotNull(item.BlobIdentifier); return(Task.FromResult(AddFileResult.Associated)); }); WithSetup(dropClient, (daemon, etwListener) => { var provider = IpcFactory.GetProvider(); var connStr = provider.CreateNewConnectionString(); var contentInfo = new FileContentInfo(new ContentHash(HashType.Vso0), length: 123456); var client = new Client(provider.GetClient(connStr, new ClientConfig())); var addFileItem = new DropItemForBuildXLFile(client, filePath: "file-which-doesnt-exist.txt", fileId: "23423423:1", chunkDedup: TestChunkDedup, fileContentInfo: contentInfo); // addfile succeeds without needing BuildXL server nor the file on disk IIpcResult result = daemon.AddFileAsync(addFileItem).GetAwaiter().GetResult(); XAssert.IsTrue(result.Succeeded); // calling MaterializeFile fails because no BuildXL server is running Assert.Throws <DaemonException>(() => addFileItem.EnsureMaterialized().GetAwaiter().GetResult()); }); }
public void TestLazilyMaterializedSymlinkRejected() { string fileId = "142342:3"; string filePath = Path.Combine(TestOutputDirectory, nameof(TestLazilyMaterializedSymlinkRejected) + "-test.txt"); if (File.Exists(filePath)) { File.Delete(filePath); } // this client wants to read the file var dropClient = new MockDropClient(addFileFunc: (item) => { Assert.NotNull(item.BlobIdentifier); var ex = Assert.Throws <DaemonException>(() => item.EnsureMaterialized().GetAwaiter().GetResult()); // rethrowing because that's what a real IDropClient would do (then Daemon is expected to handle it) throw ex; }); WithSetup(dropClient, (daemon, etwListener, dropConfig) => { var dropName = GetDropFullName(dropConfig); var ipcProvider = IpcFactory.GetProvider(); var ipcExecutor = new LambdaIpcOperationExecutor(op => { // this mock BuildXL server materializes a regular file, which we will treat as a symlink in this test var cmd = ReceiveMaterializeFileCmdAndCheckItMatchesFileId(op.Payload, fileId); File.WriteAllText(filePath, TestFileContent); return(IpcResult.Success(cmd.RenderResult(true))); }); WithIpcServer( ipcProvider, ipcExecutor, new ServerConfig(), (moniker, mockServer) => { var client = new Client(ipcProvider.GetClient(ipcProvider.RenderConnectionString(moniker), new ClientConfig())); var addFileItem = new DropItemForBuildXLFile( symlinkTester: (file) => file == filePath ? true : false, client: client, fullDropName: dropName, filePath: filePath, fileId: fileId, fileContentInfo: TestFileContentInfo); // addfile files IIpcResult result = daemon.AddFileAsync(addFileItem).GetAwaiter().GetResult(); XAssert.IsFalse(result.Succeeded, "expected addfile to fail; instead it succeeded and returned payload: " + result.Payload); XAssert.IsTrue(result.Payload.Contains(DropItemForBuildXLFile.MaterializationResultIsSymlinkErrorPrefix)); }); }); }
public void TestAddBuildXLFile_UploadCallsBuildXLServer() { string fileId = "142342:2"; string filePath = Path.Combine(TestOutputDirectory, nameof(TestAddBuildXLFile_UploadCallsBuildXLServer) + "-test.txt"); if (File.Exists(filePath)) { File.Delete(filePath); } // this client wants to read the file var dropClient = new MockDropClient(addFileFunc: (item) => { Assert.NotNull(item.BlobIdentifier); var fileInfo = item.EnsureMaterialized().GetAwaiter().GetResult(); XAssert.IsTrue(fileInfo != null && fileInfo.Exists); XAssert.AreEqual(TestFileContent, File.ReadAllText(fileInfo.FullName)); return(Task.FromResult(AddFileResult.UploadedAndAssociated)); }); WithSetup(dropClient, (daemon, etwListener, dropConfig) => { var dropName = GetDropFullName(dropConfig); var ipcProvider = IpcFactory.GetProvider(); var ipcExecutor = new LambdaIpcOperationExecutor(op => { var cmd = ReceiveMaterializeFileCmdAndCheckItMatchesFileId(op.Payload, fileId); File.WriteAllText(filePath, TestFileContent); return(IpcResult.Success(cmd.RenderResult(true))); }); WithIpcServer( ipcProvider, ipcExecutor, new ServerConfig(), (moniker, mockServer) => { var client = new Client(ipcProvider.GetClient(ipcProvider.RenderConnectionString(moniker), new ClientConfig())); var addFileItem = new DropItemForBuildXLFile(client, dropName, filePath, fileId, fileContentInfo: TestFileContentInfo); // addfile succeeds IIpcResult result = daemon.AddFileAsync(addFileItem).GetAwaiter().GetResult(); XAssert.IsTrue(result.Succeeded, result.Payload); }); }); }