internal static void CurrentTransactionIsNull() { #if DEBUG Console.WriteLine("CurrentTransactionIsNull"); #endif var managedPath = "Data" + Path.DirectorySeparatorChar + "create-file-is-new-no-current-transaction.txt"; var manager = new CreateNonEmptyFileManager( managedPath, overwrite: true); FileStream stream = (FileStream)FileManagerReflection.Invoke( manager, "OnPrepareFileStream", new string[] { managedPath }); ExceptionAssert.IsThrown( () => { manager.EnlistVolatile(EnlistmentOptions.None); }, expectedType: typeof(InvalidOperationException), expectedMessage: String.Format( "Cannot enlist resource {0}: no ambient transaction detected.", managedPath)); }
public static void OnRollbackNoScope() { #if DEBUG Console.WriteLine("FileIsNew_OnRollbackNoScope"); #endif var managedPath = "Data" + Path.DirectorySeparatorChar + "edit-file-is-new-on-rollback-no-scope.txt"; // Simulate a preparation var manager = new DeleteFileManager( managedPath); ExceptionAssert.IsThrown( () => { FileStream stream = (FileStream)FileManagerReflection.Invoke( manager, "OnPrepareFileStream", new string[] { managedPath }); }, expectedType: typeof(TargetInvocationException), expectedMessage: "Exception has been thrown by the target of an invocation.", expectedInnerType: typeof(FileNotFoundException), expectedInnerMessage: "Could not find file '" + Path.Combine(Environment.CurrentDirectory, managedPath) + "'."); }
public static void Dispose(bool overwrite) { #if DEBUG Console.WriteLine("Dispose"); #endif string managedPath = overwrite ? "Data" + Path.DirectorySeparatorChar + "create-file-is-new-dispose.txt" : "Data" + Path.DirectorySeparatorChar + "create-file-is-new-dispose-cannot-overwrite.txt"; // Assure that the managed file is new // in case of overwrite: false if (!overwrite) { File.Delete(managedPath); } // Simulate a preparation var manager = new CreateNonEmptyFileManager( managedPath, overwrite: overwrite); Assert.AreEqual(false, FileManagerReflection.GetField(manager, "disposed")); FileStream stream = (FileStream)FileManagerReflection.Invoke( manager, "OnPrepareFileStream", new string[] { managedPath }); FileManagerReflection.SetStream(manager, stream); stream = null; // Dispose the manager manager.Dispose(); // Expected results Assert.AreEqual(true, FileManagerReflection.GetField(manager, "disposed")); // Dispose the manager, again ExceptionAssert.IsNotThrown( () => { manager.Dispose(); } ); }
public static void OnRollbackNoScope() { #if DEBUG Console.WriteLine("FileAlreadyExists_OnRollbackNoScope"); #endif var sourcePath = "Data" + Path.DirectorySeparatorChar + "copy-file-source.txt"; var managedPath = "Data" + Path.DirectorySeparatorChar + "copy-file-already-exists-on-rollback-no-scope.txt"; // Simulate a preparation bool overwrite = true; var manager = new CopyFileManager(sourcePath, managedPath, overwrite: overwrite); FileStream stream = (FileStream)FileManagerReflection.Invoke( manager, "OnPrepareFileStream", new string[] { managedPath }); FileManagerReflection.SetStream(manager, stream); stream = null; Assert.AreEqual(overwrite, manager.CanOverwrite); Assert.AreEqual(true, manager.FileAlreadyExists); // Simulate a rollback FileManagerReflection.Invoke( manager, "OnRollback", null); // Expected results Assert.IsTrue(File.Exists(managedPath)); using (stream = File.OpenRead(managedPath)) { using (StreamReader reader = new StreamReader(stream)) { var content = reader.ReadLine(); Assert.AreEqual("existing-file", content); } } }
public static void OnRollbackNoScope(bool overwrite) { #if DEBUG Console.WriteLine("FileIsNew_OnRollbackNoScope"); #endif var sourcePath = "Data" + Path.DirectorySeparatorChar + "copy-file-source.txt"; var managedPath = "Data" + Path.DirectorySeparatorChar + "copy-file-is-new-on-rollback-no-scope.txt"; // Simulate a preparation var manager = new CopyFileManager(sourcePath, managedPath, overwrite: overwrite); FileStream stream = (FileStream)FileManagerReflection.Invoke( manager, "OnPrepareFileStream", new string[] { managedPath }); FileManagerReflection.SetStream(manager, stream); stream = null; Assert.AreEqual(overwrite, manager.CanOverwrite); Assert.AreEqual(false, manager.FileAlreadyExists); // Simulate a rollback FileManagerReflection.Invoke( manager, "OnRollback", null); // Expected results // Dispose the manager, so that // the following call to File.Exists // has the required permissions // to investigate the managed file. manager.Dispose(); Assert.IsTrue(!File.Exists(managedPath)); }
public static void OnRollbackNoScope() { #if DEBUG Console.WriteLine("FileAlreadyExists_OnRollbackNoScope"); #endif var managedPath = "Data" + Path.DirectorySeparatorChar + "edit-file-already-exists-on-rollback-no-scope.txt"; // Simulate a preparation var manager = new EditExistingFileManager( managedPath); var stream = (FileStream)FileManagerReflection.Invoke( manager, "OnPrepareFileStream", new string[] { managedPath }); FileManagerReflection.SetStream(manager, stream); stream = null; // Simulate a rollback (NOP) // We want to access the managed file to inspect its // edited contents, hence we need to dispose // its manager. manager.Dispose(); // Expected results Assert.IsTrue(File.Exists(managedPath)); using (stream = File.OpenRead(managedPath)) { using (StreamReader reader = new StreamReader(stream)) { var content = reader.ReadLine(); Assert.AreEqual("existing-file", content); } } }
public static void Dispose() { #if DEBUG Console.WriteLine("Dispose"); #endif var managedPath = "Data" + Path.DirectorySeparatorChar + "edit-file-already-exists-dispose.txt"; // Simulate a preparation var manager = new EditExistingFileManager( managedPath); Assert.AreEqual(false, FileManagerReflection.GetField(manager, "disposed")); FileStream stream = (FileStream)FileManagerReflection.Invoke( manager, "OnPrepareFileStream", new string[] { managedPath }); FileManagerReflection.SetStream(manager, stream); stream = null; // Dispose the manager manager.Dispose(); // Expected results Assert.AreEqual(true, FileManagerReflection.GetField(manager, "disposed")); // Dispose the manager, again ExceptionAssert.IsNotThrown( () => { manager.Dispose(); } ); }