| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117 |
- //
- // ProcessTest.cs - NUnit Test Cases for System.Diagnostics.Process
- //
- // Authors:
- // Gert Driesen ([email protected])
- // Robert Jordan <[email protected]>
- //
- // (C) 2007 Gert Driesen
- //
- using System;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.IO;
- using System.Text;
- using System.Threading;
- using NUnit.Framework;
- namespace MonoTests.System.Diagnostics
- {
- [TestFixture]
- public class ProcessTest
- {
- [Test]
- public void GetProcessById_MachineName_Null ()
- {
- try {
- Process.GetProcessById (1, (string) null);
- Assert.Fail ("#1");
- } catch (ArgumentNullException ex) {
- Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
- Assert.IsNotNull (ex.Message, "#3");
- Assert.IsNotNull (ex.ParamName, "#4");
- Assert.AreEqual ("machineName", ex.ParamName, "#5");
- Assert.IsNull (ex.InnerException, "#6");
- }
- }
- [Test]
- public void GetProcesses_MachineName_Null ()
- {
- try {
- Process.GetProcesses ((string) null);
- Assert.Fail ("#1");
- } catch (ArgumentNullException ex) {
- Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
- Assert.IsNotNull (ex.Message, "#3");
- Assert.IsNotNull (ex.ParamName, "#4");
- Assert.AreEqual ("machineName", ex.ParamName, "#5");
- Assert.IsNull (ex.InnerException, "#6");
- }
- }
- [Test] // Covers #26363
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void GetProcesses_StartTime ()
- {
- foreach (var p in Process.GetProcesses ()) {
- if (!p.HasExited && p.StartTime.Year < 1800)
- Assert.Fail ("Process should not be started since the 18th century.");
- }
- }
- [Test]
- public void PriorityClass_NotStarted ()
- {
- Process process = new Process ();
- try {
- process.PriorityClass = ProcessPriorityClass.Normal;
- Assert.Fail ("#A1");
- } catch (InvalidOperationException ex) {
- // No process is associated with this object
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
- Assert.IsNull (ex.InnerException, "#A3");
- Assert.IsNotNull (ex.Message, "#A4");
- }
- try {
- Assert.Fail ("#B1:" + process.PriorityClass);
- } catch (InvalidOperationException ex) {
- // No process is associated with this object
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
- Assert.IsNull (ex.InnerException, "#B3");
- Assert.IsNotNull (ex.Message, "#B4");
- }
- }
- [Test]
- public void PriorityClass_Invalid ()
- {
- Process process = new Process ();
- try {
- process.PriorityClass = (ProcessPriorityClass) 666;
- Assert.Fail ("#1");
- } catch (InvalidEnumArgumentException ex) {
- Assert.AreEqual (typeof (InvalidEnumArgumentException), ex.GetType (), "#2");
- Assert.IsNull (ex.InnerException, "#3");
- Assert.IsNotNull (ex.Message, "#4");
- Assert.IsTrue (ex.Message.IndexOf ("666") != -1, "#5");
- Assert.IsTrue (ex.Message.IndexOf (typeof (ProcessPriorityClass).Name) != -1, "#6");
- Assert.IsNotNull (ex.ParamName, "#7");
- Assert.AreEqual ("value", ex.ParamName, "#8");
- }
- }
- #if MONO_FEATURE_PROCESS_START
- [Test] // Start ()
- public void Start1_FileName_Empty ()
- {
- Process process = new Process ();
- process.StartInfo = new ProcessStartInfo (string.Empty);
- // no shell
- process.StartInfo.UseShellExecute = false;
- try {
- process.Start ();
- Assert.Fail ("#A1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
- Assert.IsNull (ex.InnerException, "#A3");
- Assert.IsNotNull (ex.Message, "#A4");
- }
- // shell
- process.StartInfo.UseShellExecute = true;
- try {
- process.Start ();
- Assert.Fail ("#B1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
- Assert.IsNull (ex.InnerException, "#B3");
- Assert.IsNotNull (ex.Message, "#B4");
- }
- }
- [Test] // Start ()
- public void Start1_FileName_InvalidPathCharacters ()
- {
- if (RunningOnUnix)
- // on unix, all characters are allowed
- Assert.Ignore ("Running on Unix.");
- string systemDir = Environment.GetFolderPath (Environment.SpecialFolder.System);
- string exe = "\"" + Path.Combine (systemDir, "calc.exe") + "\"";
- Process process = new Process ();
- process.StartInfo = new ProcessStartInfo (exe);
- // no shell
- process.StartInfo.UseShellExecute = false;
- Assert.IsTrue (process.Start ());
- process.Kill ();
- // shell
- process.StartInfo.UseShellExecute = true;
- Assert.IsTrue (process.Start ());
- process.Kill ();
- }
- [Test] // Start ()
- public void Start1_FileName_NotFound ()
- {
- Process process = new Process ();
- string exe = RunningOnUnix ? exe = "/usr/bin/shouldnoteverexist"
- : @"c:\shouldnoteverexist.exe";
- // absolute path, no shell
- process.StartInfo = new ProcessStartInfo (exe);
- process.StartInfo.UseShellExecute = false;
- try {
- process.Start ();
- Assert.Fail ("#A1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#A2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#A3");
- Assert.IsNull (ex.InnerException, "#A4");
- Assert.IsNotNull (ex.Message, "#A5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#A6");
- }
- // relative path, no shell
- process.StartInfo.FileName = "shouldnoteverexist.exe";
- process.StartInfo.UseShellExecute = false;
- try {
- process.Start ();
- Assert.Fail ("#B1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#B2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#B3");
- Assert.IsNull (ex.InnerException, "#B4");
- Assert.IsNotNull (ex.Message, "#B5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#B6");
- }
- if (RunningOnUnix)
- Assert.Ignore ("On Unix and Mac OS X, we try " +
- "to open any file (using xdg-open, ...)" +
- " and we do not report an exception " +
- "if this fails.");
- // absolute path, shell
- process.StartInfo.FileName = exe;
- process.StartInfo.UseShellExecute = true;
- try {
- process.Start ();
- Assert.Fail ("#C1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#C2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#C3");
- Assert.IsNull (ex.InnerException, "#C4");
- Assert.IsNotNull (ex.Message, "#C5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#C6");
- }
- // relative path, shell
- process.StartInfo.FileName = "shouldnoteverexist.exe";
- process.StartInfo.UseShellExecute = true;
- try {
- process.Start ();
- Assert.Fail ("#D1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#D2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#D3");
- Assert.IsNull (ex.InnerException, "#D4");
- Assert.IsNotNull (ex.Message, "#D5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#D6");
- }
- }
- [Test] // Start ()
- public void Start1_FileName_Null ()
- {
- Process process = new Process ();
- process.StartInfo = new ProcessStartInfo ((string) null);
- // no shell
- process.StartInfo.UseShellExecute = false;
- try {
- process.Start ();
- Assert.Fail ("#A1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
- Assert.IsNull (ex.InnerException, "#A3");
- Assert.IsNotNull (ex.Message, "#A4");
- }
- // shell
- process.StartInfo.UseShellExecute = true;
- try {
- process.Start ();
- Assert.Fail ("#B1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
- Assert.IsNull (ex.InnerException, "#B3");
- Assert.IsNotNull (ex.Message, "#B4");
- }
- }
- [Test] // Start ()
- public void Start1_FileName_Whitespace ()
- {
- Process process = new Process ();
- process.StartInfo = new ProcessStartInfo (" ");
- process.StartInfo.UseShellExecute = false;
- try {
- process.Start ();
- Assert.Fail ("#1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#3");
- Assert.IsNull (ex.InnerException, "#4");
- Assert.IsNotNull (ex.Message, "#5");
- // TODO: On windows we get ACCESS_DENIED (5) instead of FILE_NOT_FOUND (2) and .NET
- // gives ERROR_INVALID_PARAMETER (87). See https://bugzilla.xamarin.com/show_bug.cgi?id=44514
- Assert.IsTrue (ex.NativeErrorCode == 2 || ex.NativeErrorCode == 5 || ex.NativeErrorCode == 87, "#6");
- }
- }
- [Test] // Start (ProcessStartInfo)
- public void Start2_FileName_Empty ()
- {
- ProcessStartInfo startInfo = new ProcessStartInfo (string.Empty);
- // no shell
- startInfo.UseShellExecute = false;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#A1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
- Assert.IsNull (ex.InnerException, "#A3");
- Assert.IsNotNull (ex.Message, "#A4");
- }
- // shell
- startInfo.UseShellExecute = true;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#B1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
- Assert.IsNull (ex.InnerException, "#B3");
- Assert.IsNotNull (ex.Message, "#B4");
- }
- }
- [Test] // Start (ProcessStartInfo)
- public void Start2_FileName_NotFound ()
- {
- ProcessStartInfo startInfo = new ProcessStartInfo ();
- string exe = RunningOnUnix ? exe = "/usr/bin/shouldnoteverexist"
- : @"c:\shouldnoteverexist.exe";
- // absolute path, no shell
- startInfo.FileName = exe;
- startInfo.UseShellExecute = false;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#A1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#A2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#A3");
- Assert.IsNull (ex.InnerException, "#A4");
- Assert.IsNotNull (ex.Message, "#A5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#A6");
- }
- // relative path, no shell
- startInfo.FileName = "shouldnoteverexist.exe";
- startInfo.UseShellExecute = false;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#B1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#B2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#B3");
- Assert.IsNull (ex.InnerException, "#B4");
- Assert.IsNotNull (ex.Message, "#B5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#B6");
- }
- if (RunningOnUnix)
- Assert.Ignore ("On Unix and Mac OS X, we try " +
- "to open any file (using xdg-open, ...)" +
- " and we do not report an exception " +
- "if this fails.");
- // absolute path, shell
- startInfo.FileName = exe;
- startInfo.UseShellExecute = true;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#C1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#C2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#C3");
- Assert.IsNull (ex.InnerException, "#C4");
- Assert.IsNotNull (ex.Message, "#C5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#C6");
- }
- // relative path, shell
- startInfo.FileName = "shouldnoteverexist.exe";
- startInfo.UseShellExecute = true;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#D1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#D2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#D3");
- Assert.IsNull (ex.InnerException, "#D4");
- Assert.IsNotNull (ex.Message, "#D5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#D6");
- }
- }
- [Test] // Start (ProcessStartInfo)
- public void Start2_FileName_Null ()
- {
- ProcessStartInfo startInfo = new ProcessStartInfo ((string) null);
- // no shell
- startInfo.UseShellExecute = false;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#A1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
- Assert.IsNull (ex.InnerException, "#A3");
- Assert.IsNotNull (ex.Message, "#A4");
- }
- // shell
- startInfo.UseShellExecute = true;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#B1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
- Assert.IsNull (ex.InnerException, "#B3");
- Assert.IsNotNull (ex.Message, "#B4");
- }
- }
- [Test] // Start (ProcessStartInfo)
- public void Start2_FileName_Whitespace ()
- {
- ProcessStartInfo startInfo = new ProcessStartInfo (" ");
- startInfo.UseShellExecute = false;
- try {
- Process.Start (startInfo);
- Assert.Fail ("#1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#3");
- Assert.IsNull (ex.InnerException, "#4");
- Assert.IsNotNull (ex.Message, "#5");
- // TODO: On windows we get ACCESS_DENIED (5) instead of FILE_NOT_FOUND (2) and .NET
- // gives ERROR_INVALID_PARAMETER (87). See https://bugzilla.xamarin.com/show_bug.cgi?id=44514
- Assert.IsTrue (ex.NativeErrorCode == 2 || ex.NativeErrorCode == 5 || ex.NativeErrorCode == 87, "#6");
- }
- }
- [Test] // Start (ProcessStartInfo)
- public void Start2_StartInfo_Null ()
- {
- try {
- Process.Start ((ProcessStartInfo) null);
- Assert.Fail ("#1");
- } catch (ArgumentNullException ex) {
- Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
- Assert.IsNull (ex.InnerException, "#3");
- Assert.IsNotNull (ex.Message, "#4");
- Assert.IsNotNull (ex.ParamName, "#5");
- Assert.AreEqual ("startInfo", ex.ParamName, "#6");
- }
- }
- [Test] // Start (string)
- public void Start3_FileName_Empty ()
- {
- try {
- Process.Start (string.Empty);
- Assert.Fail ("#1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
- Assert.IsNull (ex.InnerException, "#3");
- Assert.IsNotNull (ex.Message, "#4");
- }
- }
- [Test] // Start (string)
- public void Start3_FileName_NotFound ()
- {
- if (RunningOnUnix)
- Assert.Ignore ("On Unix and Mac OS X, we try " +
- "to open any file (using xdg-open, ...)" +
- " and we do not report an exception " +
- "if this fails.");
- string exe = @"c:\shouldnoteverexist.exe";
- // absolute path, no shell
- try {
- Process.Start (exe);
- Assert.Fail ("#A1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#A2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#A3");
- Assert.IsNull (ex.InnerException, "#A4");
- Assert.IsNotNull (ex.Message, "#A5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#A6");
- }
- // relative path, no shell
- try {
- Process.Start ("shouldnoteverexist.exe");
- Assert.Fail ("#B1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#B2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#B3");
- Assert.IsNull (ex.InnerException, "#B4");
- Assert.IsNotNull (ex.Message, "#B5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#B6");
- }
- }
- [Test] // Start (string)
- public void Start3_FileName_Null ()
- {
- try {
- Process.Start ((string) null);
- Assert.Fail ("#1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
- Assert.IsNull (ex.InnerException, "#3");
- Assert.IsNotNull (ex.Message, "#4");
- }
- }
- [Test] // Start (string, string)
- public void Start4_Arguments_Null ()
- {
- if (RunningOnUnix)
- Assert.Ignore ("On Unix and Mac OS X, we try " +
- "to open any file (using xdg-open, ...)" +
- " and we do not report an exception " +
- "if this fails.");
- string exe = @"c:\shouldnoteverexist.exe";
- try {
- Process.Start ("whatever.exe", (string) null);
- Assert.Fail ("#1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#B2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#B3");
- Assert.IsNull (ex.InnerException, "#B4");
- Assert.IsNotNull (ex.Message, "#B5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#B6");
- }
- }
- [Test] // Start (string, string)
- public void Start4_FileName_Empty ()
- {
- try {
- Process.Start (string.Empty, string.Empty);
- Assert.Fail ("#1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
- Assert.IsNull (ex.InnerException, "#3");
- Assert.IsNotNull (ex.Message, "#4");
- }
- }
- [Test] // Start (string, string)
- public void Start4_FileName_NotFound ()
- {
- if (RunningOnUnix)
- Assert.Ignore ("On Unix and Mac OS X, we try " +
- "to open any file (using xdg-open, ...)" +
- " and we do not report an exception " +
- "if this fails.");
- string exe = @"c:\shouldnoteverexist.exe";
- // absolute path, no shell
- try {
- Process.Start (exe, string.Empty);
- Assert.Fail ("#A1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#A2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#A3");
- Assert.IsNull (ex.InnerException, "#A4");
- Assert.IsNotNull (ex.Message, "#A5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#A6");
- }
- // relative path, no shell
- try {
- Process.Start ("shouldnoteverexist.exe", string.Empty);
- Assert.Fail ("#B1");
- } catch (Win32Exception ex) {
- // The system cannot find the file specified
- Assert.AreEqual (typeof (Win32Exception), ex.GetType (), "#B2");
- Assert.AreEqual (-2147467259, ex.ErrorCode, "#B3");
- Assert.IsNull (ex.InnerException, "#B4");
- Assert.IsNotNull (ex.Message, "#B5");
- Assert.AreEqual (2, ex.NativeErrorCode, "#B6");
- }
- }
- [Test]
- public void Start_UseShellExecuteWithEmptyUserName ()
- {
- if (RunningOnUnix)
- Assert.Ignore ("On Unix and Mac OS X, we try " +
- "to open any file (using xdg-open, ...)" +
- " and we do not report an exception " +
- "if this fails.");
- string exe = @"c:\shouldnoteverexist.exe";
- try {
- Process p = new Process ();
- p.StartInfo.FileName = exe;
- p.StartInfo.UseShellExecute = true;
- p.StartInfo.UserName = "";
- p.Start ();
- Assert.Fail ("#1");
- } catch (InvalidOperationException) {
- Assert.Fail ("#2");
- } catch (Win32Exception) {
- }
- try {
- Process p = new Process ();
- p.StartInfo.FileName = exe;
- p.StartInfo.UseShellExecute = true;
- p.StartInfo.UserName = null;
- p.Start ();
- Assert.Fail ("#3");
- } catch (InvalidOperationException) {
- Assert.Fail ("#4");
- } catch (Win32Exception) {
- }
- }
-
- [Test] // Start (string, string)
- public void Start4_FileName_Null ()
- {
- try {
- Process.Start ((string) null, string.Empty);
- Assert.Fail ("#1");
- } catch (InvalidOperationException ex) {
- // Cannot start process because a file name has
- // not been provided
- Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
- Assert.IsNull (ex.InnerException, "#3");
- Assert.IsNotNull (ex.Message, "#4");
- }
- }
- [Test]
- public void StartInfo ()
- {
- ProcessStartInfo startInfo = new ProcessStartInfo ();
- Process p = new Process ();
- Assert.IsNotNull (p.StartInfo, "#A1");
- p.StartInfo = startInfo;
- Assert.AreSame (startInfo, p.StartInfo, "#A2");
- }
- [Test]
- public void StartInfo_Null ()
- {
- Process p = new Process ();
- try {
- p.StartInfo = null;
- Assert.Fail ("#1");
- } catch (ArgumentNullException ex) {
- Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
- Assert.IsNull (ex.InnerException, "#3");
- Assert.IsNotNull (ex.Message, "#4");
- Assert.IsNotNull (ex.ParamName, "#5");
- Assert.AreEqual ("value", ex.ParamName, "#6");
- }
- }
- [Test]
- [NUnit.Framework.Category ("NotDotNet")]
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void TestRedirectedOutputIsAsync ()
- {
- // Test requires cygwin, so we just bail out for now.
- if (Path.DirectorySeparatorChar == '\\')
- Assert.Ignore ("Test requires cygwin.");
-
- Process p = new Process ();
- p.StartInfo = new ProcessStartInfo ("/bin/sh", "-c \"sleep 2; echo hello\"");
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.UseShellExecute = false;
- p.Start ();
- Stream stdout = p.StandardOutput.BaseStream;
- byte [] buffer = new byte [200];
- // start async Read operation
- DateTime start = DateTime.Now;
- IAsyncResult ar = stdout.BeginRead (buffer, 0, buffer.Length,
- new AsyncCallback (Read), stdout);
- Assert.IsTrue ((DateTime.Now - start).TotalMilliseconds < 1000, "#01 BeginRead was not async");
- p.WaitForExit ();
- Assert.AreEqual (0, p.ExitCode, "#02 script failure");
- /*
- ar.AsyncWaitHandle.WaitOne (2000, false);
- if (bytesRead < "hello".Length)
- Assert.Fail ("#03 got {0} bytes", bytesRead);
- Assert.AreEqual ("hello", Encoding.Default.GetString (buffer, 0, 5), "#04");
- */
- }
-
- void Read (IAsyncResult ar)
- {
- Stream stm = (Stream) ar.AsyncState;
- bytesRead = stm.EndRead (ar);
- }
- static bool RunningOnUnix {
- get {
- int p = (int)Environment.OSVersion.Platform;
- return ((p == 128) || (p == 4) || (p == 6));
- }
- }
- public int bytesRead = -1;
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- // This was for bug #459450
- public void TestEventRaising ()
- {
- EventWaitHandle errorClosed = new ManualResetEvent(false);
- EventWaitHandle outClosed = new ManualResetEvent(false);
- EventWaitHandle exited = new ManualResetEvent(false);
- Process p = new Process();
-
- p.StartInfo = GetCrossPlatformStartInfo ();
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardError = true;
- p.StartInfo.RedirectStandardInput = false;
- p.OutputDataReceived += (object sender, DataReceivedEventArgs e) => {
- if (e.Data == null) {
- outClosed.Set();
- }
- };
-
- p.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => {
- if (e.Data == null) {
- errorClosed.Set();
- }
- };
-
- p.Exited += (object sender, EventArgs e) => {
- exited.Set ();
- };
-
- p.EnableRaisingEvents = true;
- p.Start();
- p.BeginErrorReadLine();
- p.BeginOutputReadLine();
- Console.WriteLine("started, waiting for handles");
- bool r = WaitHandle.WaitAll(new WaitHandle[] { errorClosed, outClosed, exited }, 10000, false);
- Assert.AreEqual (true, r, "Null Argument Events Raised");
- }
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void TestEnableEventsAfterExitedEvent ()
- {
- Process p = new Process ();
-
- p.StartInfo = GetCrossPlatformStartInfo ();
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardError = true;
- var exitedCalledCounter = 0;
- var exited = new ManualResetEventSlim ();
- p.Exited += (object sender, EventArgs e) => {
- exitedCalledCounter++;
- Assert.IsTrue (p.HasExited);
- exited.Set ();
- };
- p.EnableRaisingEvents = true;
- p.Start ();
- p.BeginErrorReadLine ();
- p.BeginOutputReadLine ();
- p.WaitForExit ();
- exited.Wait (10000);
- Assert.AreEqual (1, exitedCalledCounter);
- Thread.Sleep (50);
- Assert.AreEqual (1, exitedCalledCounter);
- }
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void TestEnableEventsBeforeExitedEvent ()
- {
- Process p = new Process ();
-
- p.StartInfo = GetCrossPlatformStartInfo ();
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardError = true;
- p.EnableRaisingEvents = true;
- var exitedCalledCounter = 0;
- var exited = new ManualResetEventSlim ();
- p.Exited += (object sender, EventArgs e) => {
- exitedCalledCounter++;
- Assert.IsTrue (p.HasExited);
- exited.Set ();
- };
- p.Start ();
- p.BeginErrorReadLine ();
- p.BeginOutputReadLine ();
- p.WaitForExit ();
- Assert.IsTrue (exited.Wait (10000));
- Assert.AreEqual (1, exitedCalledCounter);
- Thread.Sleep (50);
- Assert.AreEqual (1, exitedCalledCounter);
- }
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void TestDisableEventsBeforeExitedEvent ()
- {
- Process p = new Process ();
-
- p.StartInfo = GetCrossPlatformStartInfo ();
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardError = true;
- p.EnableRaisingEvents = false;
- ManualResetEvent mre = new ManualResetEvent (false);
- p.Exited += (object sender, EventArgs e) => {
- mre.Set ();
- };
- p.Start ();
- p.BeginErrorReadLine ();
- p.BeginOutputReadLine ();
- p.WaitForExit ();
- Assert.IsFalse (mre.WaitOne (1000));
- }
- ProcessStartInfo GetCrossPlatformStartInfo ()
- {
- if (RunningOnUnix) {
- string path;
- #if MONODROID
- path = "/system/bin/ls";
- #else
- path = "/bin/ls";
- #endif
- return new ProcessStartInfo (path, "/");
- } else
- return new ProcessStartInfo ("help", "");
- }
- ProcessStartInfo GetEchoCrossPlatformStartInfo ()
- {
- if (RunningOnUnix) {
- string path;
- #if MONODROID
- path = "/system/bin/cat";
- #else
- path = "/bin/cat";
- #endif
- return new ProcessStartInfo (path);
- } else {
- var psi = new ProcessStartInfo ("findstr");
- psi.Arguments = "\"^\"";
- return psi;
- }
- }
- #endif // MONO_FEATURE_PROCESS_START
- [Test]
- public void ProcessName_NotStarted ()
- {
- Process p = new Process ();
- Exception e = null;
- try {
- String.IsNullOrEmpty (p.ProcessName);
- } catch (Exception ex) {
- e = ex;
- }
-
- Assert.IsNotNull (e, "ProcessName should raise if process was not started");
-
- //msg should be "No process is associated with this object"
- Assert.AreEqual (e.GetType (), typeof (InvalidOperationException),
- "exception should be IOE, I got: " + e.GetType ().Name);
-
- Assert.IsNull (e.InnerException, "IOE inner exception should be null");
- }
-
- #if MONO_FEATURE_PROCESS_START
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void ProcessName_AfterExit ()
- {
- Process p = new Process ();
- p.StartInfo = GetCrossPlatformStartInfo ();
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardError = true;
- p.Start ();
- p.BeginErrorReadLine();
- p.BeginOutputReadLine();
- p.WaitForExit ();
- String.IsNullOrEmpty (p.ExitCode + "");
-
- Exception e = null;
- try {
- String.IsNullOrEmpty (p.ProcessName);
- } catch (Exception ex) {
- e = ex;
- }
-
- Assert.IsNotNull (e, "ProcessName should raise if process was finished");
-
- //msg should be "Process has exited, so the requested information is not available"
- Assert.AreEqual (e.GetType (), typeof (InvalidOperationException),
- "exception should be IOE, I got: " + e.GetType ().Name);
-
- Assert.IsNull (e.InnerException, "IOE inner exception should be null");
- }
- #endif // MONO_FEATURE_PROCESS_START
- [Test]
- public void Handle_ThrowsOnNotStarted ()
- {
- Process p = new Process ();
- try {
- var x = p.Handle;
- Assert.Fail ("Handle should throw for unstated procs, but returned " + x);
- } catch (InvalidOperationException) {
- }
- }
- [Test]
- public void HasExitedCurrent () {
- Assert.IsFalse (Process.GetCurrentProcess ().HasExited);
- }
- #if MONO_FEATURE_PROCESS_START
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void DisposeWithDisposedStreams ()
- {
- var psi = GetCrossPlatformStartInfo ();
- psi.RedirectStandardInput = true;
- psi.RedirectStandardOutput = true;
- psi.UseShellExecute = false;
- var p = Process.Start (psi);
- p.StandardInput.BaseStream.Dispose ();
- p.StandardOutput.BaseStream.Dispose ();
- p.Dispose ();
- }
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void StandardInputWrite ()
- {
- var psi = GetEchoCrossPlatformStartInfo ();
- psi.RedirectStandardInput = true;
- psi.RedirectStandardOutput = true;
- psi.UseShellExecute = false;
- using (var p = Process.Start (psi)) {
- // drain stdout
- p.OutputDataReceived += (s, e) => {};
- p.BeginOutputReadLine ();
- for (int i = 0; i < 1024 * 9; ++i) {
- p.StandardInput.Write ('x');
- if (i > 0 && i % 128 == 0)
- p.StandardInput.WriteLine ();
- }
- p.StandardInput.Close ();
- p.WaitForExit ();
- }
- }
- #endif // MONO_FEATURE_PROCESS_START
- [Test]
- public void Modules () {
- var modules = Process.GetCurrentProcess ().Modules;
- foreach (var a in AppDomain.CurrentDomain.GetAssemblies ()) {
- var found = false;
- var name = a.GetName ();
- StringBuilder sb = new StringBuilder ();
- sb.AppendFormat ("Could not found: {0} {1}\n", name.Name, name.Version);
- sb.AppendLine ("Looked in modules:");
- foreach (var o in modules) {
- var m = (ProcessModule) o;
- sb.AppendFormat (" {0} {1}.{2}.{3}\n", m.FileName.ToString (),
- m.FileVersionInfo.FileMajorPart,
- m.FileVersionInfo.FileMinorPart,
- m.FileVersionInfo.FileBuildPart);
- if (!m.FileName.StartsWith ("[In Memory] " + name.Name))
- continue;
- var fv = m.FileVersionInfo;
- if (fv.FileBuildPart != name.Version.Build ||
- fv.FileMinorPart != name.Version.Minor ||
- fv.FileMajorPart != name.Version.Major)
- continue;
- found = true;
- }
- Assert.IsTrue (found, sb.ToString ());
- }
- }
- #if MONO_FEATURE_PROCESS_START
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- [ExpectedException (typeof (InvalidOperationException))]
- public void TestDoubleBeginOutputReadLine ()
- {
- using (Process p = new Process ()) {
- p.StartInfo = GetCrossPlatformStartInfo ();
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardError = true;
- p.Start ();
- p.BeginOutputReadLine ();
- p.BeginOutputReadLine ();
- Assert.Fail ();
- }
- }
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- [ExpectedException (typeof (InvalidOperationException))]
- public void TestDoubleBeginErrorReadLine ()
- {
- using (Process p = new Process ()) {
- p.StartInfo = GetCrossPlatformStartInfo ();
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardError = true;
- p.Start ();
- p.BeginErrorReadLine ();
- p.BeginErrorReadLine ();
- Assert.Fail ();
- }
- }
- [Test]
- [NUnit.Framework.Category ("MobileNotWorking")]
- public void TestExitedRaisedTooSoon ()
- {
- if (!RunningOnUnix)
- Assert.Ignore ("using sleep command, only available on unix");
- int sleeptime = 5;
- using (Process p = Process.Start("sleep", sleeptime.ToString ())) {
- ManualResetEvent mre = new ManualResetEvent (false);
- p.EnableRaisingEvents = true;
- p.Exited += (sender, e) => {
- mre.Set ();
- };
- Assert.IsFalse (mre.WaitOne ((sleeptime - 2) * 1000), "Exited triggered before the process returned");
- }
- }
- #endif // MONO_FEATURE_PROCESS_START
- }
- }
|