public void Branching() { var br1Commit = Persister.Commit(new VcsCommit { File = new FileDescriptor { Path = "test" }, Branch = "br1" }, GenerateStreamFromString("test data")); var br2Commit = Persister.Commit(new VcsCommit { File = new FileDescriptor { Path = "test" }, Branch = "br2" }, GenerateStreamFromString("SOMETESTDATA")); var pickedFirst = Persister.Pick(new VcsCommit { Branch = "br1", File = new FileDescriptor { Path = "test" } }); var pickedSecond = Persister.Pick(new VcsCommit { Branch = "br2", File = new FileDescriptor { Path = "test" } }); Assert.IsNotNull(pickedFirst); Assert.IsNotNull(pickedSecond); var contentFirst = new StreamReader(pickedFirst).ReadToEnd(); var contentSecond = new StreamReader(pickedSecond).ReadToEnd(); Assert.AreEqual("test data", contentFirst); Assert.AreEqual("SOMETESTDATA", contentSecond); }
public void CanCommitFile() { var elementFirst = Persister.Commit(new VcsCommit { File = new FileDescriptor { Path = Guid.NewGuid().ToString() } }, GenerateStreamFromString("test data")); var elementSecond = Persister.Commit(new VcsCommit { File = new FileDescriptor { Path = Guid.NewGuid().ToString() } }, GenerateStreamFromString("SOMETESTDATA")); var pickedFirst = Persister.Pick(elementFirst); var pickedSecond = Persister.Pick(elementSecond); Assert.IsNotNull(pickedFirst); Assert.IsNotNull(pickedSecond); var contentFirst = new StreamReader(pickedFirst).ReadToEnd(); var contentSecond = new StreamReader(pickedSecond).ReadToEnd(); Assert.AreEqual("test data", contentFirst); Assert.AreEqual("SOMETESTDATA", contentSecond); }
/// <summary> /// Given the search request, build the response. /// </summary> /// <param name="search"></param> /// <returns></returns> private async Task <ISearchResponse> BuildResponse(SearchRequest search) { // we want the stopwatch to include the getting of the transaction as well. var stopwatch = new Stopwatch(); stopwatch.Start(); var log = new StringBuilder(); var token = CancellationToken.None; var transaction = await Persister.BeginRead(token).ConfigureAwait(false); log.AppendLine($" > Got transaction Time Elapsed: {stopwatch.Elapsed:g}"); try { // search the words. var words = await GetWords(search, token).ConfigureAwait(false); log.AppendLine($" > Got Words Time Elapsed: {stopwatch.Elapsed:g}"); // get the percent complete var status = await GetStatus(token).ConfigureAwait(false); log.AppendLine($" > Got Status Time Elapsed: {stopwatch.Elapsed:g}"); // we are done here. Persister.Commit(transaction); log.AppendLine($" > Committed Time Elapsed: {stopwatch.Elapsed:g}"); // log it. stopwatch.Stop(); log.Append($"Completed search for '{search.What}' found {words.Count} result(s) (Time Elapsed: {stopwatch.Elapsed:g})"); Logger.Information(log.ToString()); // we can now build the response model. return(new SearchResponse(words, stopwatch.ElapsedMilliseconds, status)); } catch (Exception e) { Persister.Rollback(transaction); Logger.Exception(e); } // return nothing return(new SearchResponse()); }
public void CanRevert() { var elementFirst = Persister.Commit(new VcsCommit { File = new FileDescriptor { Path = "test" } }, GenerateStreamFromString("test data")); var elementSecond = Persister.Commit(new VcsCommit { File = new FileDescriptor { Path = "test" } }, GenerateStreamFromString("SOMETESTDATA")); var elementThird = Persister.Commit(new VcsCommit { File = new FileDescriptor { Path = "test" } }, GenerateStreamFromString("ANOTHERDTA")); var picked = Persister.Pick(new VcsCommit { File = new FileDescriptor { Path = "test" } }); Assert.IsNotNull(picked); var sr = new StreamReader(picked); var content = sr.ReadToEnd(); sr.Close(); Assert.AreEqual("ANOTHERDTA", content); Persister.Revert(elementSecond); picked = Persister.Pick(new VcsCommit { File = new FileDescriptor { Path = "test" } }); content = new StreamReader(picked).ReadToEnd(); Assert.AreEqual("SOMETESTDATA", content); // выражает то, что изначально у на было три элемента, а после реверта стало 4, т.е. // ревер не сносит все старшие комиты, а накатывает поверх Assert.AreEqual(4, Persister.Count(new FileDescriptor { Path = "test" })); }