protected JResult DoSettingsTest(ServiceSettings s, OnResolveSettings resolveSettings, OnAssertSettingsValidateRun postAction, string[] cmd)
        {
            Func<string, ExecutionElement, ExecutionElement> resolve =
            (dir, e) =>
              {
            var ret = e.SClone();
            ret.Program = Path.Combine(dir, e.Program);
            ret.WorkDir = e.WorkDir == null ? dir : Path.Combine(dir, e.WorkDir);

            if (ret.Termination != null)
            {
              if (ret.Termination.Timeout == null) ret.Termination.Timeout = "2";
              if (ret.Termination.Execution != null)
              {
                var se = ret.Termination.Execution;
                se.Program = Path.Combine(dir, se.Program);
                se.WorkDir = se.WorkDir == null ? ret.WorkDir : Path.Combine(dir, se.WorkDir);
              }
            } else
            {
              ret.Termination = new TerminationElement
                                  {
                                    Timeout = "2"
                                  };
            }

            resolveSettings(dir, ret);
            return ret;
              };

              return TempFilesHolder.WithTempDirectory(
            dir =>
              {
            var ee = resolve(dir, s.Execution);
            if (!File.Exists(ee.Program))
            {
              File.WriteAllText(ee.Program, "mock");
            }

            if (ee.Termination != null && ee.Termination.Execution != null && !File.Exists(ee.Termination.Execution.Program))
            {
              File.WriteAllText(ee.Termination.Execution.Program, "smock");
            }

            var r = ExecuteWithSettings(s, dir, cmd);
            postAction(r, s, ee, dir);
            return r;
              });
        }
        protected JResult DoValidateSettingsTest(ServiceSettings s, OnResolveSettings resolve, params string[] cmd)
        {
            return DoSettingsTest(
            s,
            resolve,
            (r, ss, ee, dir) =>
              {
            Assert.That(r.ExitCode, Is.EqualTo(0));

            AssertServiceParameters(s, r, ee);
              },
            cmd);
        }