public void TestTask() { var tasks = new EquipartitionTaskContainer(); var task1 = tasks.Create("a", "o", 5, "task1"); var task2 = tasks.Create("a", "p", 1, "task2"); var task3 = tasks.Create("b", "q", 2, "task3"); Assert.AreEqual(5, task1.Count); Assert.AreEqual(1, task2.Count); Assert.AreEqual(2, task3.Count); Assert.AreEqual(5, task1.GetWaitingOrProcessingFragments().Count()); Assert.AreEqual(1, task2.GetWaitingOrProcessingFragments().Count()); Assert.AreEqual(2, task3.GetWaitingOrProcessingFragments().Count()); Assert.AreEqual(0, task1.GetProcessingFragments().Count()); Assert.AreEqual(0, task2.GetProcessingFragments().Count()); Assert.AreEqual(0, task3.GetProcessingFragments().Count()); Assert.AreEqual(0, task1.GetDoneFragments().Count()); Assert.AreEqual(0, task2.GetDoneFragments().Count()); Assert.AreEqual(0, task3.GetDoneFragments().Count()); var f = task1.Pick(); Assert.AreEqual(EquipartitionTask.FragmentStates.Working, f.State); Assert.AreEqual(1, task1.GetProcessingFragments().Count()); task1.UpdateFragment(f, EquipartitionTask.FragmentStates.Success); Assert.AreEqual(EquipartitionTask.FragmentStates.Success, f.State); Assert.AreEqual(0, task1.GetProcessingFragments().Count()); f = task1.Pick(); Assert.AreEqual(EquipartitionTask.FragmentStates.Working, f.State); task1.UpdateFragment(f, EquipartitionTask.FragmentStates.Failure); Assert.AreEqual(EquipartitionTask.FragmentStates.Failure, f.State); Assert.AreEqual(0, task1.GetProcessingFragments().Count()); f = task1.Pick(); Assert.AreEqual(EquipartitionTask.FragmentStates.Retrying, f.State); Assert.AreEqual(1, task1.GetProcessingFragments().Count()); Assert.AreEqual(0, task2.GetProcessingFragments().Count()); task1.UpdateFragment(f, EquipartitionTask.FragmentStates.Fatal); Assert.AreEqual(EquipartitionTask.FragmentStates.Fatal, f.State); Assert.AreEqual(0, task1.GetProcessingFragments().Count()); Assert.AreEqual(0, task2.GetProcessingFragments().Count()); Assert.AreEqual(0, task3.GetProcessingFragments().Count()); Assert.AreEqual(2, task1.GetDoneFragments().Count()); Assert.AreEqual(0, task2.GetDoneFragments().Count()); Assert.AreEqual(0, task3.GetDoneFragments().Count()); Assert.AreEqual(3, task1.GetWaitingOrProcessingFragments().Count()); task3.Pick(); f = task3.Pick(); Assert.AreEqual(2, task3.GetProcessingFragments().Count()); var fStr = f.ToJsonString(); f = EquipartitionTask.Fragment.Parse(fStr); fStr = f.ToQueryData().ToString(); f = EquipartitionTask.Fragment.Parse(fStr); var status = task1.UpdateFragment(f, EquipartitionTask.FragmentStates.Success); Assert.AreEqual(0, task1.GetProcessingFragments().Count()); Assert.AreEqual(2, task3.GetProcessingFragments().Count()); Assert.AreEqual(false, status); task3.UpdateFragment(f, EquipartitionTask.FragmentStates.Success); Assert.AreEqual(0, task1.GetProcessingFragments().Count()); Assert.AreEqual(1, task3.GetProcessingFragments().Count()); Assert.AreEqual(EquipartitionTask.FragmentStates.Success, f.State); f = task3.Pick(); Assert.IsNull(f); task3.UpdateFragment(task3[0], EquipartitionTask.FragmentStates.Success); Assert.AreEqual(0, task1.GetProcessingFragments().Count()); }
private void TestEquipartitionTaskAsync() { Console.WriteLine("Equipartition task testing."); var tasks = new EquipartitionTaskContainer(); tasks.Created += (sender, ev) => { if (ev.NewValue == null) { Console.WriteLine("N/A"); return; } Console.WriteLine($"{ev.NewValue.Description ?? ev.NewValue.Id}\t{ev.Key}\tCreated"); }; var task1 = tasks.Create("a", "o", 5, "task1"); WriteLine(task1); var task2 = tasks.Create("a", "p", 1, "task2"); WriteLine(task2); var task3 = tasks.Create("b", "q", 2, "task3"); WriteLine(task3); Console.WriteLine("Pick from " + (task1.Description ?? task1.Id)); var f = task1.Pick(); f = task1.Pick(); WriteLine(task1); task1.UpdateFragment(f, EquipartitionTask.FragmentStates.Success); WriteLine(task1); f = task1.Pick(); WriteLine(task1); task1.UpdateFragment(f, EquipartitionTask.FragmentStates.Failure); WriteLine(task1); Console.WriteLine(f.State); f = task1.Pick(); Console.WriteLine(f.State); task1.UpdateFragment(f, EquipartitionTask.FragmentStates.Fatal); Console.WriteLine(f.State); WriteLine(task1); WriteLine(task2); WriteLine(task3); Console.WriteLine("Pick from " + (task3.Description ?? task3.Id)); f = task3.Pick(); f = task3.Pick(); WriteLine(task1); WriteLine(task2); WriteLine(task3); var fStr = f.ToJsonString(); Console.WriteLine(fStr); f = EquipartitionTask.Fragment.Parse(fStr); fStr = f.ToQueryData().ToString(); Console.WriteLine(fStr); f = EquipartitionTask.Fragment.Parse(fStr); task1.UpdateFragment(f, EquipartitionTask.FragmentStates.Success); WriteLine(task1); WriteLine(task2); WriteLine(task3); task3.UpdateFragment(f, EquipartitionTask.FragmentStates.Success); WriteLine(task1); WriteLine(task2); WriteLine(task3); f = task3.Pick(); Console.WriteLine("No more fragment in task3."); if (f != null) { Console.WriteLine("Error!"); return; } task3.UpdateFragment(task3[0], EquipartitionTask.FragmentStates.Success); WriteLine(task1); WriteLine(task2); WriteLine(task3); Console.WriteLine("Done!"); }