예제 #1
0
 public void GetWorkingLine()
 {
     try
     {
         using (ProxyBE p = new ProxyBE())
         {
             WorkingLine line = p.Client.GetWorkingLine(SenderUser, parm.WorkingLineID);
             Response.Write(JSONHelper.Object2Json(line));
         }
     }
     catch (Exception ex)
     {
         WriteError(ex.Message, ex);
     }
 }
예제 #2
0
        private void ParallelCancellationTestCase(WorkingLine wl, EventMonitor <WorkingLine> wlMon)
        {
            var q        = wl.Queue;
            var tasks    = Enumerable.Range(0, 18).Select(i => new TestTask(i.ToString())).ToArray();
            var taskMons = tasks.Select(t => new EventMonitor <TestTask>(t)).ToArray();

            var cancelTask = tasks[9];

            cancelTask.StateChanging += (s, e) =>
            {
                if (e.NewValue == TaskState.InProgress)
                {
                    wl.Cancel();
                }
            };

            wl.Enqueue(tasks);

            Assert.IsTrue(wl.WaitForEnd(timeout: 4000));

            AssertState(wl, isDisposed: false, busy: false);
            Assert.AreEqual(0, wl.CurrentTasks.Length);
            Assert.IsTrue(wl.Queue.IsEmpty);

            Assert.AreEqual(TaskState.Succeeded, tasks.First().State);
            Assert.AreEqual(TaskState.Obsolete, tasks.Last().State);
            Assert.AreEqual(tasks.Length,
                            tasks.Where(t =>
                                        t.State == TaskState.Succeeded ||
                                        t.State == TaskState.Canceled ||
                                        t.State == TaskState.Obsolete)
                            .Count());

            wlMon.FilterHistory(ByEventName(
                                    nameof(WorkingLine.BusyChanged),
                                    nameof(WorkingLine.Cancelled)))
            .AssertEventNames(
                nameof(WorkingLine.BusyChanged),
                nameof(WorkingLine.Cancelled),
                nameof(WorkingLine.BusyChanged));

            wlMon.FilterHistory(ByEventName(nameof(WorkingLine.BusyChanged)))
            .AssertPropertyValues(true, false);

            wlMon.FilterHistory(ByEventName(nameof(WorkingLine.BusyWorkerCountChanged)))
            .AssertPropertyValues(1, 2, 3, 2, 1, 0);
        }
예제 #3
0
 public void newWorkingLine()
 {
     try
     {
         using (ProxyBE p = new ProxyBE())
         {
             WorkingLine line = new WorkingLine();
             line.WorkingLineID   = Guid.NewGuid();
             line.WorkingLineName = "";
             line.Remark          = "";
             Response.Write(JSONHelper.Object2Json(line));
         }
     }
     catch (Exception ex)
     {
         WriteError(ex.Message, ex);
     }
 }
예제 #4
0
        private void SingleWorkerSingleTaskTestCase(WorkingLine wl, EventMonitor <WorkingLine> wlMon)
        {
            var q       = wl.Queue;
            var task    = new TestTask("single");
            var taskMon = new EventMonitor <TestTask>(task);

            Assert.IsTrue(q.IsEmpty);
            wl.Enqueue(task);
            Assert.IsFalse(q.IsEmpty);
            AssertState(wl, isDisposed: false, busy: false);

            wl.Start();
            wl.WaitForEnd(timeout: 10000);

            Assert.IsTrue(q.IsEmpty);
            AssertState(wl, isDisposed: false, busy: false);
            wlMon.History.AssertSender(wl);
            wlMon.FilterHistory(ByEventName(
                                    nameof(WorkingLine.TaskBegin),
                                    nameof(WorkingLine.TaskEnd)))
            .AssertEventNames(
                nameof(WorkingLine.TaskBegin),
                nameof(WorkingLine.TaskEnd));
            wlMon.FilterHistory(ByEventName(
                                    nameof(WorkingLine.BusyChanged),
                                    nameof(WorkingLine.BusyWorkerCountChanged)))
            .AssertEventNames(
                nameof(WorkingLine.BusyChanged),
                nameof(WorkingLine.BusyWorkerCountChanged),
                nameof(WorkingLine.BusyWorkerCountChanged),
                nameof(WorkingLine.BusyChanged));
            wlMon.FilterHistory(ByPropertyChanges <bool>(nameof(WorkingLine.Busy)))
            .AssertPropertyValues(true, false);
            wlMon.FilterHistory(ByPropertyChanges <int>(nameof(WorkingLine.BusyWorkerCount)))
            .AssertPropertyValues(1, 0);

            taskMon.History.AssertSender(task);
            taskMon.FilterHistory(ByPropertyChanges <TaskState>(nameof(ITask.State)))
            .AssertPropertyValues(
                TaskState.InProgress,
                TaskState.CleaningUp,
                TaskState.Succeeded);
        }
예제 #5
0
 public void GetWorkingLines()
 {
     try
     {
         using (ProxyBE p = new ProxyBE())
         {
             List <WorkingLine> lines = p.Client.GetAllWorkingLines(SenderUser);
             WorkingLine        wf    = new WorkingLine();
             wf.WorkingLineName = "请选择";
             wf.WorkingLineID   = Guid.Empty;
             lines.Insert(0, wf);
             //lines.Sort((x, y) => x.WorkingLineName.CompareTo(y.WorkingLineName));
             Response.Write(JSONHelper.Object2JSON(lines));
         }
     }
     catch (Exception ex)
     {
         WriteError(ex.Message, ex);
     }
 }
예제 #6
0
        private void SequentialCancellationTestCase(WorkingLine wl, EventMonitor <WorkingLine> wlMon)
        {
            var q     = wl.Queue;
            var tasks = Enumerable.Range(0, 4).Select(i => new TestTask(i.ToString())).ToArray();

            var cancelTask = tasks[1];

            cancelTask.StateChanging += (s, e) =>
            {
                if (e.NewValue == TaskState.InProgress)
                {
                    wl.Cancel();
                }
            };

            wl.Enqueue(tasks);

            Assert.IsTrue(wl.WaitForEnd(timeout: 4000));

            AssertState(wl, isDisposed: false, busy: false);
            Assert.AreEqual(0, wl.CurrentTasks.Length);
            Assert.IsTrue(wl.Queue.IsEmpty);

            Assert.AreEqual(TaskState.Succeeded, tasks[0].State);
            Assert.AreEqual(TaskState.Canceled, tasks[1].State);
            Assert.AreEqual(TaskState.Obsolete, tasks[2].State);
            Assert.AreEqual(TaskState.Obsolete, tasks[3].State);

            wlMon.History
            .AssertSender(wl)
            .AssertEventNames(
                nameof(WorkingLine.TaskBegin),
                nameof(WorkingLine.BusyChanged),
                nameof(WorkingLine.BusyWorkerCountChanged),
                nameof(WorkingLine.TaskEnd),
                nameof(WorkingLine.TaskBegin),
                nameof(WorkingLine.Cancelled),
                nameof(WorkingLine.TaskEnd),
                nameof(WorkingLine.BusyWorkerCountChanged),
                nameof(WorkingLine.BusyChanged));
        }
예제 #7
0
 public bool WorkingLineIsDuplicated(Sender sender, WorkingLine WorkingLine)
 {
     try
     {
         using (ObjectProxy op = new ObjectProxy())
         {
             WorkingLine obj = new WorkingLine();
             obj.WorkingLineName = WorkingLine.WorkingLineName;
             if (op.LoadWorkingLineByWorkingLineName(obj) == 0)
             {
                 return(false);
             }
             return(obj.WorkingLineID != WorkingLine.WorkingLineID);
         }
     }
     catch (Exception ex)
     {
         PLogger.LogError(ex);
         throw ex;
     }
 }
예제 #8
0
 public WorkingLine GetWorkingLine(Sender sender, Guid WorkingLineID)
 {
     try
     {
         using (ObjectProxy op = new ObjectProxy())
         {
             WorkingLine obj = new WorkingLine();
             obj.WorkingLineID = WorkingLineID;
             if (op.LoadWorkingLineByWorkingLineID(obj) == 0)
             {
                 return(null);
             }
             return(obj);
         }
     }
     catch (Exception ex)
     {
         PLogger.LogError(ex);
         throw ex;
     }
 }
예제 #9
0
 private void LifeCycleTestCase(WorkingLine wl, EventMonitor <WorkingLine> wlMon)
 {
     // nothing
 }
예제 #10
0
 public static void AssertState(WorkingLine wl,
                                bool isDisposed, bool busy)
 {
     Assert.AreEqual(isDisposed, wl.IsDisposed, $"The disposed state of the {nameof(WorkerThread)} is unexpected.");
     Assert.AreEqual(busy, wl.Busy, $"The busy state of the {nameof(WorkingLine)} is unexpected.");
 }