Imported Upstream version 4.3.2.467

Former-commit-id: 9c2cb47f45fa221e661ab616387c9cda183f283d
This commit is contained in:
Xamarin Public Jenkins
2016-02-22 11:00:01 -05:00
parent f302175246
commit f3e3aab35a
4097 changed files with 122406 additions and 82300 deletions

View File

@@ -1054,7 +1054,6 @@ namespace MonoTests.System.IO
Assert.AreEqual (TempFolder + DSC + "ToString.Test", info.ToString ());
}
#if NET_4_0
[Test]
public void EnumerateFileSystemInfosTest ()
{
@@ -1069,7 +1068,6 @@ namespace MonoTests.System.IO
l.Sort ();
Assert.AreEqual ("1,2,a,b", string.Join (",", l), "#1");
}
#endif
#if !MOBILE
[Test]

View File

@@ -69,13 +69,11 @@ public class DirectoryTest
Assert.AreEqual (afile, files0 [0], "#2");
Assert.AreEqual (bfile, files0 [1], "#3");
#if NET_4_0
var files1 = new List<string> (Directory.EnumerateFiles (TempFolder, "*.src")).ToArray ();
Array.Sort (files1);
Assert.AreEqual (2, files1.Length, "#1.b");
Assert.AreEqual (afile, files1 [0], "#2.b");
Assert.AreEqual (bfile, files1 [1], "#3.b");
#endif
var files2 = Directory.GetFileSystemEntries (TempFolder, "*.src");
Array.Sort (files2);
@@ -84,14 +82,12 @@ public class DirectoryTest
Assert.AreEqual (bfile, files2 [1], "#3.c");
Assert.AreEqual (cdir, files2 [2], "#4.c");
#if NET_4_0
var files3 = new List<string> (Directory.EnumerateFileSystemEntries (TempFolder, "*.src")).ToArray ();
Array.Sort (files3);
Assert.AreEqual (3, files3.Length, "#1.d");
Assert.AreEqual (afile, files3 [0], "#2.d");
Assert.AreEqual (bfile, files3 [1], "#3.d");
Assert.AreEqual (cdir, files3 [2], "#4.d");
#endif
}
#endif
[Test]

View File

@@ -16,6 +16,7 @@ using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using Microsoft.Win32.SafeHandles;
namespace MonoTests.System.IO
{
@@ -1531,15 +1532,23 @@ namespace MonoTests.System.IO
static IAsyncResult DoBeginWrite(Stream stream, ManualResetEvent mre, byte[] RandomBuffer)
{
return stream.BeginWrite (RandomBuffer, 0, RandomBuffer.Length, ar => {
stream.EndWrite (ar);
IAsyncResult begin_write_recursive_ares;
// we don't supply an ManualResetEvent so this will throw an NRE on the second run
// which nunit-console will ignore (but other test runners don't like that)
if (mre == null)
return;
try {
stream.EndWrite (ar);
DoBeginWrite (stream, null, RandomBuffer).AsyncWaitHandle.WaitOne ();
mre.Set ();
// we don't supply an ManualResetEvent so this will throw an NRE on the second run
// which nunit-console will ignore (but other test runners don't like that)
if (mre == null)
return;
begin_write_recursive_ares = DoBeginWrite (stream, null, RandomBuffer);
begin_write_recursive_ares.AsyncWaitHandle.WaitOne ();
mre.Set ();
} catch (ObjectDisposedException e) {
Console.WriteLine ("stream was disposed: {0}", e);
}
}, null);
}
@@ -1548,12 +1557,19 @@ namespace MonoTests.System.IO
{
string path = TempFolder + Path.DirectorySeparatorChar + "temp";
DeleteFile (path);
using (FileStream stream = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Write)) {
var mre = new ManualResetEvent (false);
var RandomBuffer = new byte[1024];
DoBeginWrite (stream, mre, RandomBuffer);
Assert.IsTrue (mre.WaitOne (5000), "#1");
IAsyncResult begin_write_ares = null;
try {
using (FileStream stream = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Write)) {
var mre = new ManualResetEvent (false);
var RandomBuffer = new byte[1024];
begin_write_ares = DoBeginWrite (stream, mre, RandomBuffer);
Assert.IsTrue (mre.WaitOne (5000), "#1");
}
} finally {
if (begin_write_ares != null)
begin_write_ares.AsyncWaitHandle.WaitOne ();
}
}
@@ -1644,6 +1660,25 @@ namespace MonoTests.System.IO
}
[Test]
public void OpenCharDeviceRepeatedly ()
{
// https://bugzilla.xamarin.com/show_bug.cgi?id=38408
try {
using (var f = new FileStream ("/dev/zero", FileMode.Open))
{
}
} catch (FileNotFoundException) {
// Only run this test on platforms where /dev/zero exists
Assert.Ignore();
}
// this shouldn't throw
using (var g = new FileStream ("/dev/zero", FileMode.Open))
{
}
}
#if !MOBILE
[Test]
public void WriteWithExposedHandle ()
@@ -1678,6 +1713,17 @@ namespace MonoTests.System.IO
DeleteFile (path);
}
}
[Test]
public void Ctor_InvalidSafeHandle ()
{
var sf = new SafeFileHandle (IntPtr.Zero, true);
try {
new FileStream (sf, FileAccess.ReadWrite);
Assert.Fail ("#1");
} catch (ArgumentException) {
}
}
#endif
}
}

View File

@@ -334,39 +334,44 @@ namespace MonoTests.System.IO
wh.Close ();
}
[Test]
public void BeginReadIsBlockingNextRead ()
{
byte[] readBytes = new byte[5];
byte[] readBytes2 = new byte[3];
var wh = new ManualResetEvent (false);
var end = new ManualResetEvent (false);
ManualResetEvent begin_read_unblock = new ManualResetEvent (false);
ManualResetEvent begin_read_blocking = new ManualResetEvent (false);
Task begin_read_task = null;
using (var testStream = new SignaledMemoryStream (testStreamData, wh)) {
var res = testStream.BeginRead (readBytes, 0, 5, null, null);
try {
using (var testStream = new SignaledMemoryStream (testStreamData, begin_read_unblock)) {
IAsyncResult begin_read_1_ares = testStream.BeginRead (readBytes, 0, 5, null, null);
bool blocking = true;
ThreadPool.QueueUserWorkItem (l => {
var res2 = testStream.BeginRead (readBytes2, 0, 3, null, null);
blocking = false;
Assert.IsTrue (res2.AsyncWaitHandle.WaitOne (2000), "#10");
Assert.IsTrue (res2.IsCompleted, "#11");
Assert.AreEqual (3, testStream.EndRead (res2), "#12");
Assert.AreEqual (95, readBytes2[0], "#13");
end.Set ();
});
begin_read_task = Task.Factory.StartNew (() => {
IAsyncResult begin_read_2_ares = testStream.BeginRead (readBytes2, 0, 3, null, null);
begin_read_blocking.Set ();
Assert.IsFalse (res.IsCompleted, "#1");
Thread.Sleep (500); // Lame but don't know how to wait for another BeginRead which does not return
Assert.IsTrue (blocking, "#2");
Assert.IsTrue (begin_read_2_ares.AsyncWaitHandle.WaitOne (2000), "#10");
Assert.IsTrue (begin_read_2_ares.IsCompleted, "#11");
Assert.AreEqual (3, testStream.EndRead (begin_read_2_ares), "#12");
Assert.AreEqual (95, readBytes2[0], "#13");
});
wh.Set ();
Assert.IsTrue (res.AsyncWaitHandle.WaitOne (2000), "#3");
Assert.IsTrue (res.IsCompleted, "#4");
Assert.AreEqual (5, testStream.EndRead (res), "#5");
Assert.IsTrue (end.WaitOne (2000), "#6");
Assert.AreEqual (100, readBytes[0], "#7");
Assert.IsFalse (begin_read_1_ares.IsCompleted, "#1");
Assert.IsFalse (begin_read_blocking.WaitOne (500), "#2");
begin_read_unblock.Set ();
Assert.IsTrue (begin_read_1_ares.AsyncWaitHandle.WaitOne (2000), "#3");
Assert.IsTrue (begin_read_1_ares.IsCompleted, "#4");
Assert.AreEqual (5, testStream.EndRead (begin_read_1_ares), "#5");
Assert.IsTrue (begin_read_task.Wait (2000), "#6");
Assert.AreEqual (100, readBytes[0], "#7");
}
} finally {
if (begin_read_task != null)
begin_read_task.Wait ();
}
}
@@ -395,34 +400,38 @@ namespace MonoTests.System.IO
{
byte[] readBytes = new byte[5];
byte[] readBytes2 = new byte[3] { 1, 2, 3 };
var wh = new ManualResetEvent (false);
var end = new ManualResetEvent (false);
ManualResetEvent begin_read_unblock = new ManualResetEvent (false);
ManualResetEvent begin_write_blocking = new ManualResetEvent (false);
Task begin_write_task = null;
using (var testStream = new SignaledMemoryStream (testStreamData, wh)) {
var res = testStream.BeginRead (readBytes, 0, 5, null, null);
try {
using (MemoryStream stream = new SignaledMemoryStream (testStreamData, begin_read_unblock)) {
IAsyncResult begin_read_ares = stream.BeginRead (readBytes, 0, 5, null, null);
bool blocking = true;
ThreadPool.QueueUserWorkItem (l => {
var res2 = testStream.BeginWrite (readBytes2, 0, 3, null, null);
blocking = false;
Assert.IsTrue (res2.AsyncWaitHandle.WaitOne (2000), "#10");
Assert.IsTrue (res2.IsCompleted, "#11");
testStream.EndWrite (res2);
end.Set ();
});
begin_write_task = Task.Factory.StartNew (() => {
var begin_write_ares = stream.BeginWrite (readBytes2, 0, 3, null, null);
begin_write_blocking.Set ();
Assert.IsTrue (begin_write_ares.AsyncWaitHandle.WaitOne (2000), "#10");
Assert.IsTrue (begin_write_ares.IsCompleted, "#11");
stream.EndWrite (begin_write_ares);
});
Assert.IsFalse (res.IsCompleted, "#1");
Thread.Sleep (500); // Lame but don't know how to wait for another BeginWrite which does not return
Assert.IsTrue (blocking, "#2");
Assert.IsFalse (begin_read_ares.IsCompleted, "#1");
Assert.IsFalse (begin_write_blocking.WaitOne (500), "#2");
wh.Set ();
Assert.IsTrue (res.AsyncWaitHandle.WaitOne (2000), "#3");
Assert.IsTrue (res.IsCompleted, "#4");
Assert.AreEqual (5, testStream.EndRead (res), "#5");
Assert.IsTrue (end.WaitOne (2000), "#6");
begin_read_unblock.Set ();
Assert.IsTrue (begin_read_ares.AsyncWaitHandle.WaitOne (2000), "#3");
Assert.IsTrue (begin_read_ares.IsCompleted, "#4");
Assert.AreEqual (5, stream.EndRead (begin_read_ares), "#5");
Assert.IsTrue (begin_write_task.Wait (2000), "#6");
}
} finally {
if (begin_write_task != null)
begin_write_task.Wait ();
}
}
[Test]
public void BeginWrite ()
{

View File

@@ -201,9 +201,7 @@ namespace MonoTests.System.IO
expected = "one" + DSC + "two" + DSC;
Assert.AreEqual (expected, testPath, "Combine #07");
#if NET_4_0
Assert.AreEqual ("a", Path.Combine (new [] { "a", "" }), "Combine #08");
#endif
}
[Test]
@@ -1242,7 +1240,6 @@ namespace MonoTests.System.IO
}
}
#if NET_4_0
string Concat (string sep, params string [] parms)
{
return String.Join (sep, parms);
@@ -1382,7 +1379,6 @@ namespace MonoTests.System.IO
Assert.AreEqual ("", Path.Combine ("", "", "", "", ""), "#A4");
}
#endif
}
}