Exemple #1
0
        public void TriggeredJobAcceptsArguments()
        {
            RunScenario("TriggeredJobAcceptsArguments", appManager =>
            {
                const string jobName = "job1";

                TestTracer.Trace("Copying the script to the triggered job directory");

                appManager.JobsManager.CreateTriggeredJobAsync(jobName, "run.cmd", "echo %*").Wait();

                var expectedTriggeredJob = new TriggeredJob()
                {
                    Name       = jobName,
                    JobType    = "triggered",
                    RunCommand = "run.cmd"
                };

                TestTracer.Trace("Trigger the job");

                VerifyTriggeredJobTriggers(appManager, jobName, 1, "Success", "echo test arguments", expectedError: null, arguments: "test arguments");
            });
        }
Exemple #2
0
 private void AssertTriggeredJob(TriggeredJob expectedTriggeredJob, TriggeredJob actualTriggeredJob)
 {
     AssertJob(expectedTriggeredJob, actualTriggeredJob);
     Assert.NotNull(actualTriggeredJob);
     Assert.NotNull(actualTriggeredJob.HistoryUrl);
 }
        public string StartJobRun(TriggeredJob triggeredJob, JobSettings jobSettings, string trigger, Action <string, string> reportAction)
        {
            JobSettings = jobSettings;

            if (Settings.IsWebJobsStopped())
            {
                throw new WebJobsStoppedException();
            }

            if (!_lockFile.Lock(String.Format("Starting {0} triggered WebJob", triggeredJob.Name)))
            {
                throw new ConflictException();
            }

            TriggeredJobRunLogger logger = TriggeredJobRunLogger.LogNewRun(triggeredJob, trigger, Environment, TraceFactory, Settings);

            Debug.Assert(logger != null);

            try
            {
                if (_currentRunningJobWaitHandle != null)
                {
                    _currentRunningJobWaitHandle.Dispose();
                    _currentRunningJobWaitHandle = null;
                }

                _currentRunningJobWaitHandle = new ManualResetEvent(false);

                var tracer = TraceFactory.GetTracer();
                var step   = tracer.Step("Run {0} {1}", triggeredJob.JobType, triggeredJob.Name);
                ThreadPool.QueueUserWorkItem(_ =>
                {
                    try
                    {
                        InitializeJobInstance(triggeredJob, logger);
                        RunJobInstance(triggeredJob, logger, logger.Id, trigger, tracer);
                    }
                    catch (Exception ex)
                    {
                        logger.LogError("WebJob run failed due to: " + ex);
                    }
                    finally
                    {
                        step.Dispose();
                        logger.ReportEndRun();
                        _lockFile.Release();
                        reportAction(triggeredJob.Name, logger.Id);
                        _currentRunningJobWaitHandle.Set();
                    }
                });
            }
            catch (Exception ex)
            {
                logger.LogError("Failed to start job due to: " + ex);
                _lockFile.Release();
                throw;
            }

            // Return the run ID
            return(logger.Id);
        }
Exemple #4
0
        public void ExtraInfoUrlTemplateShouldBeUsedWhenExists()
        {
            RunScenario("ExtraInfoUrlTemplateShouldBeUsedWhenExists", appManager =>
            {
                TestTracer.Trace("Adding jobs");

                var extraInfoUrlTemplates = new string[]
                {
                    "/sb?jobName={jobName}&jobType={jobType}",
                    "",
                    null,
                    "/some/other/link",
                    "/some/other/{jobName}/link",
                    "http://someplace.else.com/{jobType}/index.html"
                };

                // Extract expected url (remove any user/password that might exists in the service url)
                var serviceUrl         = new Uri(appManager.ServiceUrl);
                string expectedBaseUrl = appManager.ServiceUrl.Replace(serviceUrl.UserInfo + '@', String.Empty);

                var extraInfoUrlExpectedResults = new string[]
                {
                    expectedBaseUrl + "sb?jobName=job1&jobType=triggered",
                    expectedBaseUrl + "JobRuns/history.html?jobName=job2",
                    expectedBaseUrl + "JobRuns/history.html?jobName=job3",
                    expectedBaseUrl + "some/other/link",
                    expectedBaseUrl + "some/other/job5/link",
                    "http://someplace.else.com/triggered/index.html"
                };

                int index = 1;
                foreach (string extraInfoUrlTemplate in extraInfoUrlTemplates)
                {
                    string jobName                 = "job" + index;
                    string jobScriptPath           = TriggeredJobBinPath + "/" + jobName + "/run.cmd";
                    string jobExtraInfoUrlFilePath = TriggeredJobDataPath + "/" + jobName + "/job.extra_info_url.template";

                    appManager.VfsManager.WriteAllText(jobScriptPath, "echo echo echo echo");

                    if (extraInfoUrlTemplate != null)
                    {
                        appManager.VfsManager.WriteAllText(jobExtraInfoUrlFilePath, extraInfoUrlTemplate);
                    }

                    index++;
                }

                index = 1;
                foreach (string extraUrlExpectedResult in extraInfoUrlExpectedResults)
                {
                    TestTracer.Trace("Verify - " + extraUrlExpectedResult);

                    string jobName = "job" + index;

                    TriggeredJob triggeredJob = appManager.JobsManager.GetTriggeredJobAsync(jobName).Result;
                    Assert.Equal(extraUrlExpectedResult, triggeredJob.ExtraInfoUrl.ToString());

                    index++;
                }
            });
        }