示例#1
0
        public void JobShouldRunIfRunnerThreadIsRunning()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);

            fm.StopJobRunnerThread();
            fm.JobQueue.Clear();
            fm.StartJobRunnerThread();

            JobConf conf = fm.CreateJob(name);

            TestWorker.ValueToCheck = false;
            TestWorker worker = new TestWorker();

            conf.AddWorker(worker);
            Expect.IsFalse(TestWorker.ValueToCheck);

            bool?          finished = false;
            AutoResetEvent signal   = new AutoResetEvent(false);

            fm.WorkerFinished += (o, a) =>
            {
                Expect.IsTrue(TestWorker.ValueToCheck);
                finished = true;
                signal.Set();
            };

            fm.EnqueueJob(conf);
            signal.WaitOne(10000);
            Expect.IsTrue(finished == true);
        }
示例#2
0
        public void ShouldBeAbleToRunJobWithSpecifiedStepNumber()
        {
            string name = MethodBase.GetCurrentMethod().Name;

            TestWorker.ValueToCheck     = false;
            StepTestWorker.ValueToCheck = false;
            JobConductorService jc = GetTestJobConductor(name);
            string jobName         = "Job_" + name;

            jc.AddWorker(typeof(TestWorker).AssemblyQualifiedName, "TestWorker", jobName);
            jc.AddWorker(typeof(StepTestWorker).AssemblyQualifiedName, "StepTestWorker", jobName);

            Expect.IsFalse(TestWorker.ValueToCheck);
            Expect.IsFalse(StepTestWorker.ValueToCheck);
            bool?          finished = false;
            AutoResetEvent signal   = new AutoResetEvent(false);

            jc.JobFinished += (o, a) =>
            {
                Expect.IsFalse(TestWorker.ValueToCheck, "testworker value should have been false after job finished");
                Expect.IsTrue(StepTestWorker.ValueToCheck, "Step test worker value should have been true after job finished");
                finished = true;
                signal.Set();
            };

            JobConf conf = jc.GetJob(jobName);

            jc.RunJob(conf.CreateJob(), 1);
            signal.WaitOne(10000);
            Expect.IsTrue(finished.Value, "finished value should have been set");
        }
示例#3
0
        public void ExistsShouldBeTrueAfterCreate()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);
            string testJobName     = name + "_JobName_".RandomLetters(4);

            fm.CreateJob(testJobName);
            Expect.IsTrue(fm.JobExists(testJobName));
        }
示例#4
0
        public void JobConductorShouldCreateJobConfWithJobDirectorySet()
        {
            string name = MethodBase.GetCurrentMethod().Name;
            JobConductorService foreman = GetTestJobConductor(name);
            JobConf             conf    = foreman.CreateJobConf(name);

            Expect.AreEqual(name, conf.Name);
            Expect.IsTrue(conf.JobDirectory.StartsWith(foreman.JobsDirectory), "conf directory wasn't set correctly");
        }
示例#5
0
        public void JobConductorShouldCreaetJobConf()
        {
            JobConductorService.Default.JobsDirectory = new DirectoryInfo(MethodBase.GetCurrentMethod().Name).FullName;
            JobConductorService fm = JobConductorService.Default;
            string  name           = "JobConfTest_".RandomLetters(4);
            JobConf conf           = fm.CreateJob(name);
            string  path           = Path.Combine(fm.JobsDirectory, conf.Name, conf.Name + ".job");

            Expect.IsTrue(File.Exists(path));
        }
示例#6
0
        public void AddWorkerShouldSetWorkerName()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);
            string workerName      = "worker_" + name;
            string jobName         = "Job_" + name;

            fm.AddWorker(typeof(TestWorker).AssemblyQualifiedName, workerName, jobName);
            Expect.IsTrue(fm.WorkerExists(jobName, workerName));
        }
示例#7
0
        protected override WorkState Do(WorkState currentWorkState)
        {
            SuspendedJob             suspended = JobConductorService.SuspendJob(Job);;
            WorkState <SuspendedJob> result    = new WorkState <SuspendedJob>(this, suspended)
            {
                Status = Status.Suspended
            };

            return(result);
        }
示例#8
0
        public void AddWorkerShouldCreateJob()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);
            string jobName         = "Job_".RandomLetters(4);

            Expect.IsFalse(fm.JobExists(jobName));

            fm.AddWorker(typeof(TestWorker).AssemblyQualifiedName, "worker", jobName);

            Expect.IsTrue(fm.JobExists(jobName));
        }
示例#9
0
        public void CreateJobShouldThrowExceptionIfItExists()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);
            string testJobName     = name + "_JobName_".RandomLetters(4);

            fm.CreateJob(testJobName);
            Expect.IsTrue(fm.JobExists(testJobName));
            Expect.Throws(() =>
            {
                fm.CreateJob(testJobName);
            }, "Should have thrown an exception but didn't");
        }
示例#10
0
        private static JobConductorService GetTestJobConductor(string jobConductorName)
        {
            DirectoryInfo dir = new DirectoryInfo("JobConductor_" + jobConductorName);

            if (dir.Exists)
            {
                dir.Delete(true);
            }
            JobConductorService fm = new JobConductorService();

            fm.JobsDirectory = dir.FullName;
            return(fm);
        }
示例#11
0
        public void ShouldBeAbleToAddWorker()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);
            string jobName         = "Job_" + name;
            string workerName      = "worker_1";

            fm.AddWorker(typeof(TestWorker).AssemblyQualifiedName, workerName, jobName);

            JobConf job = fm.GetJob(jobName);

            Expect.IsTrue(job.WorkerExists(workerName));
        }
示例#12
0
        public void AddWorkerShouldThrowArgumentNullException()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);

            Expect.Throws(() =>
            {
                fm.AddWorker("noTypeByThisNameShouldBeFound".RandomLetters(4), "work_" + name, "JobName");
            }, (ex) =>
            {
                ex.IsInstanceOfType <ArgumentNullException>("Exception wasn't the right type");
            }, "Should have thrown an exception but didn't");
        }
示例#13
0
        public void GetJobShouldCreateNewJob()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);

            Expect.IsFalse(fm.JobExists(name));
            JobConf validate = fm.GetJob(name);

            Expect.IsNotNull(validate);
            Expect.AreEqual(name, validate.Name);
            Expect.IsTrue(fm.JobExists(validate.Name));
            Expect.IsTrue(File.Exists(validate.GetFilePath()));
        }
示例#14
0
        public void GetJobShouldReturnExistingJob()
        {
            string name = MethodBase.GetCurrentMethod().Name;
            JobConductorService orch = GetTestJobConductor(name);

            Expect.IsFalse(orch.JobExists(name));
            JobConf conf = orch.CreateJob(name);

            Expect.IsTrue(orch.JobExists(name));

            JobConf validate = orch.GetJobConf(name);

            Expect.IsNotNull(validate);
            Expect.AreEqual(name, validate.Name);
        }
示例#15
0
        public void AfterAddWorkerCreateJobShouldHaveCorrectWorkers()
        {
            string name            = MethodBase.GetCurrentMethod().Name;
            JobConductorService fm = GetTestJobConductor(name);
            string jobName         = "Job_" + name;

            fm.AddWorker(typeof(TestWorker).AssemblyQualifiedName, "one", jobName);
            fm.AddWorker(typeof(TestWorker).AssemblyQualifiedName, "two", jobName);

            JobConf conf = fm.GetJob(jobName);
            Job     job  = conf.CreateJob();

            Expect.IsTrue(job.WorkerNames.Length == 2);
            Expect.IsNotNull(job["one"]);
            Expect.IsNotNull(job["two"]);
            Expect.AreEqual("one", job["one"].Name);
            Expect.AreEqual("two", job["two"].Name);
        }
示例#16
0
        public void JobsDirectoryShouldBeInAppDataFolder()
        {
            JobConductorService orchestrator = new JobConductorService();

            Expect.AreEqual(Path.Combine(RuntimeSettings.AppDataFolder, "Jobs"), orchestrator.JobsDirectory);
        }