/// <summary> /// Runs the algorithm with the given settings and file /// </summary> /// <param name="settings">Settings for Lean</param> /// <param name="file">File to run</param> private void RunLiveAlgorithm(BaseLiveAlgorithmSettings settings, ProjectFile file) { // Create a new project var project = ApiClient.CreateProject($"Test project - {DateTime.Now.ToStringInvariant()}", Language.CSharp, TestOrganization); // Add Project Files var addProjectFile = ApiClient.AddProjectFile(project.Projects.First().ProjectId, file.Name, file.Code); Assert.IsTrue(addProjectFile.Success); // Create compile var compile = ApiClient.CreateCompile(project.Projects.First().ProjectId); Assert.IsTrue(compile.Success); // Wait at max 30 seconds for project to compile Compile compileCheck = WaitForCompilerResponse(project.Projects.First().ProjectId, compile.CompileId, 30); Assert.IsTrue(compileCheck.Success); Assert.IsTrue(compileCheck.State == CompileState.BuildSuccess); // Get a live node to launch the algorithm on var nodes = ApiClient.ReadNodes(TestOrganization); Assert.IsTrue(nodes.Success); var freeNode = nodes.LiveNodes.Where(x => x.Busy == false); Assert.IsNotEmpty(freeNode, "No free Live Nodes found"); // Create live default algorithm var createLiveAlgorithm = ApiClient.CreateLiveAlgorithm(project.Projects.First().ProjectId, compile.CompileId, freeNode.FirstOrDefault().Id, settings); Assert.IsTrue(createLiveAlgorithm.Success); if (StopLiveAlgos) { // Liquidate live algorithm; will also stop algorithm var liquidateLive = ApiClient.LiquidateLiveAlgorithm(project.Projects.First().ProjectId); Assert.IsTrue(liquidateLive.Success); // Delete the project var deleteProject = ApiClient.DeleteProject(project.Projects.First().ProjectId); Assert.IsTrue(deleteProject.Success); } }
public void CRUD_ProjectFiles_Successfully() { var fakeFile = new ProjectFile { Name = "Hello.cs", Code = HttpUtility.HtmlEncode("Hello, world!") }; var realFile = new ProjectFile { Name = "main.cs", Code = HttpUtility.HtmlEncode(File.ReadAllText("../../../Algorithm.CSharp/BasicTemplateAlgorithm.cs")) }; var secondRealFile = new ProjectFile() { Name = "algorithm.cs", Code = HttpUtility.HtmlEncode(File.ReadAllText("../../../Algorithm.CSharp/BubbleAlgorithm.cs")) }; // Create a new project var project = ApiClient.CreateProject($"Test project - {DateTime.Now.ToStringInvariant()}", Language.CSharp, TestOrganization); Assert.IsTrue(project.Success); Assert.IsTrue(project.Projects.First().ProjectId > 0); // Add random file var randomAdd = ApiClient.AddProjectFile(project.Projects.First().ProjectId, fakeFile.Name, fakeFile.Code); Assert.IsTrue(randomAdd.Success); Assert.IsTrue(randomAdd.Files.First().Code == fakeFile.Code); Assert.IsTrue(randomAdd.Files.First().Name == fakeFile.Name); // Update names of file var updatedName = ApiClient.UpdateProjectFileName(project.Projects.First().ProjectId, randomAdd.Files.First().Name, realFile.Name); Assert.IsTrue(updatedName.Success); // Replace content of file var updateContents = ApiClient.UpdateProjectFileContent(project.Projects.First().ProjectId, realFile.Name, realFile.Code); Assert.IsTrue(updateContents.Success); // Read single file var readFile = ApiClient.ReadProjectFile(project.Projects.First().ProjectId, realFile.Name); Assert.IsTrue(readFile.Success); Assert.IsTrue(readFile.Files.First().Code == realFile.Code); Assert.IsTrue(readFile.Files.First().Name == realFile.Name); // Add a second file var secondFile = ApiClient.AddProjectFile(project.Projects.First().ProjectId, secondRealFile.Name, secondRealFile.Code); Assert.IsTrue(secondFile.Success); Assert.IsTrue(secondFile.Files.First().Code == secondRealFile.Code); Assert.IsTrue(secondFile.Files.First().Name == secondRealFile.Name); // Read multiple files var readFiles = ApiClient.ReadProjectFiles(project.Projects.First().ProjectId); Assert.IsTrue(readFiles.Success); Assert.IsTrue(readFiles.Files.Count == 4); // 2 Added + 2 Automatic (Research.ipynb & Main.cs) // Delete the second file var deleteFile = ApiClient.DeleteProjectFile(project.Projects.First().ProjectId, secondRealFile.Name); Assert.IsTrue(deleteFile.Success); // Read files var readFilesAgain = ApiClient.ReadProjectFiles(project.Projects.First().ProjectId); Assert.IsTrue(readFilesAgain.Success); Assert.IsTrue(readFilesAgain.Files.Count == 3); Assert.IsTrue(readFilesAgain.Files.Any(x => x.Name == realFile.Name)); // Delete the project var deleteProject = ApiClient.DeleteProject(project.Projects.First().ProjectId); Assert.IsTrue(deleteProject.Success); }
private void Perform_CreateCompileBackTest_Tests(string projectName, Language language, string algorithmName, string code) { //Test create a new project successfully var project = ApiClient.CreateProject(projectName, language, TestOrganization); Assert.IsTrue(project.Success); Assert.IsTrue(project.Projects.First().ProjectId > 0); Assert.IsTrue(project.Projects.First().Name == projectName); // Make sure the project just created is now present var projects = ApiClient.ListProjects(); Assert.IsTrue(projects.Success); Assert.IsTrue(projects.Projects.Any(p => p.ProjectId == project.Projects.First().ProjectId)); // Test read back the project we just created var readProject = ApiClient.ReadProject(project.Projects.First().ProjectId); Assert.IsTrue(readProject.Success); Assert.IsTrue(readProject.Projects.First().Name == projectName); // Test set a project file for the project var file = new ProjectFile { Name = algorithmName, Code = code }; var addProjectFile = ApiClient.AddProjectFile(project.Projects.First().ProjectId, file.Name, file.Code); Assert.IsTrue(addProjectFile.Success); // Download the project again to validate its got the new file var verifyRead = ApiClient.ReadProject(project.Projects.First().ProjectId); Assert.IsTrue(verifyRead.Success); // Compile the project we've created var compileCreate = ApiClient.CreateCompile(project.Projects.First().ProjectId); Assert.IsTrue(compileCreate.Success); Assert.IsTrue(compileCreate.State == CompileState.InQueue); // Read out the compile var compileSuccess = WaitForCompilerResponse(project.Projects.First().ProjectId, compileCreate.CompileId); Assert.IsTrue(compileSuccess.Success); Assert.IsTrue(compileSuccess.State == CompileState.BuildSuccess); // Update the file, create a build error, test we get build error file.Code += "[Jibberish at end of the file to cause a build error]"; ApiClient.UpdateProjectFileContent(project.Projects.First().ProjectId, file.Name, file.Code); var compileError = ApiClient.CreateCompile(project.Projects.First().ProjectId); compileError = WaitForCompilerResponse(project.Projects.First().ProjectId, compileError.CompileId); Assert.IsTrue(compileError.Success); // Successfully processed rest request. Assert.IsTrue(compileError.State == CompileState.BuildError); //Resulting in build fail. // Using our successful compile; launch a backtest! var backtestName = $"{DateTime.Now.ToStringInvariant("u")} API Backtest"; var backtest = ApiClient.CreateBacktest(project.Projects.First().ProjectId, compileSuccess.CompileId, backtestName); Assert.IsTrue(backtest.Success); // Now read the backtest and wait for it to complete var backtestRead = WaitForBacktestCompletion(project.Projects.First().ProjectId, backtest.BacktestId); Assert.IsTrue(backtestRead.Success); Assert.IsTrue(backtestRead.Progress == 1); Assert.IsTrue(backtestRead.Name == backtestName); Assert.IsTrue(backtestRead.Statistics["Total Trades"] == "1"); Assert.IsTrue(backtestRead.Charts["Benchmark"].Series.Count > 0); // Verify we have the backtest in our project var listBacktests = ApiClient.ListBacktests(project.Projects.First().ProjectId); Assert.IsTrue(listBacktests.Success); Assert.IsTrue(listBacktests.Backtests.Count >= 1); Assert.IsTrue(listBacktests.Backtests[0].Name == backtestName); // Update the backtest name and test its been updated backtestName += "-Amendment"; var renameBacktest = ApiClient.UpdateBacktest(project.Projects.First().ProjectId, backtest.BacktestId, backtestName); Assert.IsTrue(renameBacktest.Success); backtestRead = ApiClient.ReadBacktest(project.Projects.First().ProjectId, backtest.BacktestId); Assert.IsTrue(backtestRead.Name == backtestName); //Update the note and make sure its been updated: var newNote = DateTime.Now.ToStringInvariant("u"); var noteBacktest = ApiClient.UpdateBacktest(project.Projects.First().ProjectId, backtest.BacktestId, note: newNote); Assert.IsTrue(noteBacktest.Success); backtestRead = ApiClient.ReadBacktest(project.Projects.First().ProjectId, backtest.BacktestId); Assert.IsTrue(backtestRead.Note == newNote); // Delete the backtest we just created var deleteBacktest = ApiClient.DeleteBacktest(project.Projects.First().ProjectId, backtest.BacktestId); Assert.IsTrue(deleteBacktest.Success); // Test delete the project we just created var deleteProject = ApiClient.DeleteProject(project.Projects.First().ProjectId); Assert.IsTrue(deleteProject.Success); }