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"); }); }
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); }
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++; } }); }