public MFTestResults FileShare_Open_Matrix() { MFTestResults result = MFTestResults.Pass; try { // Given the previous fileshare info and the requested fileaccess and fileshare // the following is the ONLY combinations that we should allow -- All others // should failed with IOException // (Behavior verified on desktop .NET) // // Previous FileShare Requested FileAccess Requested FileShare // Read Read ReadWrite // Write Write ReadWrite // ReadWrite Read ReadWrite // ReadWrite Write ReadWrite // ReadWrite ReadWrite ReadWrite MatrixTestCase[] testCases = new MatrixTestCase[] { // pass cases new MatrixTestCase(FileShare.Read, FileAccess.Read, FileShare.ReadWrite, true), new MatrixTestCase(FileShare.Write, FileAccess.Write, FileShare.ReadWrite, true), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Read, FileShare.ReadWrite, true), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Write, FileShare.ReadWrite, true), new MatrixTestCase(FileShare.ReadWrite, FileAccess.ReadWrite, FileShare.ReadWrite, true), // fail cases new MatrixTestCase(FileShare.Read, FileAccess.Read, FileShare.Read, false), new MatrixTestCase(FileShare.Read, FileAccess.Read, FileShare.Write, false), new MatrixTestCase(FileShare.Read, FileAccess.Read, FileShare.None, false), new MatrixTestCase(FileShare.Read, FileAccess.Write, FileShare.Read, false), new MatrixTestCase(FileShare.Read, FileAccess.Write, FileShare.Write, false), new MatrixTestCase(FileShare.Read, FileAccess.Write, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.Read, FileAccess.Write, FileShare.None, false), new MatrixTestCase(FileShare.Read, FileAccess.ReadWrite, FileShare.Read, false), new MatrixTestCase(FileShare.Read, FileAccess.ReadWrite, FileShare.Write, false), new MatrixTestCase(FileShare.Read, FileAccess.ReadWrite, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.Read, FileAccess.ReadWrite, FileShare.None, false), new MatrixTestCase(FileShare.Write, FileAccess.Read, FileShare.Read, false), new MatrixTestCase(FileShare.Write, FileAccess.Read, FileShare.Write, false), new MatrixTestCase(FileShare.Write, FileAccess.Read, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.Write, FileAccess.Read, FileShare.None, false), new MatrixTestCase(FileShare.Write, FileAccess.Write, FileShare.Read, false), new MatrixTestCase(FileShare.Write, FileAccess.Write, FileShare.Write, false), new MatrixTestCase(FileShare.Write, FileAccess.Write, FileShare.None, false), new MatrixTestCase(FileShare.Write, FileAccess.ReadWrite, FileShare.Read, false), new MatrixTestCase(FileShare.Write, FileAccess.ReadWrite, FileShare.Write, false), new MatrixTestCase(FileShare.Write, FileAccess.ReadWrite, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.Write, FileAccess.ReadWrite, FileShare.None, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Read, FileShare.Read, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Read, FileShare.Write, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Read, FileShare.None, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Write, FileShare.Read, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Write, FileShare.Write, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Write, FileShare.None, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.ReadWrite, FileShare.Read, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.ReadWrite, FileShare.Write, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.ReadWrite, FileShare.None, false), new MatrixTestCase(FileShare.None, FileAccess.Read, FileShare.Read, false), new MatrixTestCase(FileShare.None, FileAccess.Read, FileShare.Write, false), new MatrixTestCase(FileShare.None, FileAccess.Read, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.None, FileAccess.Read, FileShare.None, false), new MatrixTestCase(FileShare.None, FileAccess.Write, FileShare.Read, false), new MatrixTestCase(FileShare.None, FileAccess.Write, FileShare.Write, false), new MatrixTestCase(FileShare.None, FileAccess.Write, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.None, FileAccess.Write, FileShare.None, false), new MatrixTestCase(FileShare.None, FileAccess.ReadWrite, FileShare.Read, false), new MatrixTestCase(FileShare.None, FileAccess.ReadWrite, FileShare.Write, false), new MatrixTestCase(FileShare.None, FileAccess.ReadWrite, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.None, FileAccess.ReadWrite, FileShare.None, false) }; // create file if it doesn't exist. We are just opening, so worries what it contains if (!File.Exists(fileName)) File.Create(fileName).Close(); foreach (MatrixTestCase testcase in testCases) { Log.Comment("Previous share: " + testcase.previousShare); Log.Comment("Requested access: " + testcase.requestedAccess); Log.Comment("Requested share: " + testcase.requestedShare); try { using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, testcase.previousShare)) { using (FileStream fs2 = new FileStream(fileName, FileMode.Open, testcase.requestedAccess, testcase.requestedShare)) { } if (!testcase.expectSuccess) { Log.Exception("Unexpected IOException - Expected failure"); result = MFTestResults.Fail; } else { Log.Comment("Case passes"); } } } catch (IOException) { if (testcase.expectSuccess) { Log.Exception("Unexpected IOException - Expected success"); result = MFTestResults.Fail; } } catch (Exception ex) { Log.Exception("Unexpected exception: " + ex.Message); result = MFTestResults.Fail; } } } catch (Exception ex) { Log.Exception("Unexpected exception: " + ex.Message); result = MFTestResults.Fail; } return result; }
public MFTestResults FileShare_Open_Matrix() { MFTestResults result = MFTestResults.Pass; try { // Given the previous fileshare info and the requested fileaccess and fileshare // the following is the ONLY combinations that we should allow -- All others // should failed with IOException // (Behavior verified on desktop .NET) // // Previous FileShare Requested FileAccess Requested FileShare // Read Read ReadWrite // Write Write ReadWrite // ReadWrite Read ReadWrite // ReadWrite Write ReadWrite // ReadWrite ReadWrite ReadWrite MatrixTestCase[] testCases = new MatrixTestCase[] { // pass cases new MatrixTestCase(FileShare.Read, FileAccess.Read, FileShare.ReadWrite, true), new MatrixTestCase(FileShare.Write, FileAccess.Write, FileShare.ReadWrite, true), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Read, FileShare.ReadWrite, true), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Write, FileShare.ReadWrite, true), new MatrixTestCase(FileShare.ReadWrite, FileAccess.ReadWrite, FileShare.ReadWrite, true), // fail cases new MatrixTestCase(FileShare.Read, FileAccess.Read, FileShare.Read, false), new MatrixTestCase(FileShare.Read, FileAccess.Read, FileShare.Write, false), new MatrixTestCase(FileShare.Read, FileAccess.Read, FileShare.None, false), new MatrixTestCase(FileShare.Read, FileAccess.Write, FileShare.Read, false), new MatrixTestCase(FileShare.Read, FileAccess.Write, FileShare.Write, false), new MatrixTestCase(FileShare.Read, FileAccess.Write, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.Read, FileAccess.Write, FileShare.None, false), new MatrixTestCase(FileShare.Read, FileAccess.ReadWrite, FileShare.Read, false), new MatrixTestCase(FileShare.Read, FileAccess.ReadWrite, FileShare.Write, false), new MatrixTestCase(FileShare.Read, FileAccess.ReadWrite, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.Read, FileAccess.ReadWrite, FileShare.None, false), new MatrixTestCase(FileShare.Write, FileAccess.Read, FileShare.Read, false), new MatrixTestCase(FileShare.Write, FileAccess.Read, FileShare.Write, false), new MatrixTestCase(FileShare.Write, FileAccess.Read, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.Write, FileAccess.Read, FileShare.None, false), new MatrixTestCase(FileShare.Write, FileAccess.Write, FileShare.Read, false), new MatrixTestCase(FileShare.Write, FileAccess.Write, FileShare.Write, false), new MatrixTestCase(FileShare.Write, FileAccess.Write, FileShare.None, false), new MatrixTestCase(FileShare.Write, FileAccess.ReadWrite, FileShare.Read, false), new MatrixTestCase(FileShare.Write, FileAccess.ReadWrite, FileShare.Write, false), new MatrixTestCase(FileShare.Write, FileAccess.ReadWrite, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.Write, FileAccess.ReadWrite, FileShare.None, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Read, FileShare.Read, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Read, FileShare.Write, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Read, FileShare.None, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Write, FileShare.Read, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Write, FileShare.Write, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.Write, FileShare.None, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.ReadWrite, FileShare.Read, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.ReadWrite, FileShare.Write, false), new MatrixTestCase(FileShare.ReadWrite, FileAccess.ReadWrite, FileShare.None, false), new MatrixTestCase(FileShare.None, FileAccess.Read, FileShare.Read, false), new MatrixTestCase(FileShare.None, FileAccess.Read, FileShare.Write, false), new MatrixTestCase(FileShare.None, FileAccess.Read, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.None, FileAccess.Read, FileShare.None, false), new MatrixTestCase(FileShare.None, FileAccess.Write, FileShare.Read, false), new MatrixTestCase(FileShare.None, FileAccess.Write, FileShare.Write, false), new MatrixTestCase(FileShare.None, FileAccess.Write, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.None, FileAccess.Write, FileShare.None, false), new MatrixTestCase(FileShare.None, FileAccess.ReadWrite, FileShare.Read, false), new MatrixTestCase(FileShare.None, FileAccess.ReadWrite, FileShare.Write, false), new MatrixTestCase(FileShare.None, FileAccess.ReadWrite, FileShare.ReadWrite, false), new MatrixTestCase(FileShare.None, FileAccess.ReadWrite, FileShare.None, false) }; // create file if it doesn't exist. We are just opening, so worries what it contains if (!File.Exists(fileName)) { File.Create(fileName).Close(); } foreach (MatrixTestCase testcase in testCases) { Log.Comment("Previous share: " + testcase.previousShare); Log.Comment("Requested access: " + testcase.requestedAccess); Log.Comment("Requested share: " + testcase.requestedShare); try { using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, testcase.previousShare)) { using (FileStream fs2 = new FileStream(fileName, FileMode.Open, testcase.requestedAccess, testcase.requestedShare)) { } if (!testcase.expectSuccess) { Log.Exception("Unexpected IOException - Expected failure"); result = MFTestResults.Fail; } else { Log.Comment("Case passes"); } } } catch (IOException) { if (testcase.expectSuccess) { Log.Exception("Unexpected IOException - Expected success"); result = MFTestResults.Fail; } } catch (Exception ex) { Log.Exception("Unexpected exception: " + ex.Message); result = MFTestResults.Fail; } } } catch (Exception ex) { Log.Exception("Unexpected exception: " + ex.Message); result = MFTestResults.Fail; } return(result); }