// Unpack, delete the entropy dirs, repack. public static CanvasDocument RemoveEntropy(string pathToMsApp) { using (var temp1 = new TempDir()) { (CanvasDocument doc1, var errors) = CanvasDocument.LoadFromMsapp(pathToMsApp); errors.ThrowOnErrors(); doc1.SaveToSources(temp1.Dir); var entropyDir = Path.Combine(temp1.Dir, "Entropy"); if (!Directory.Exists(entropyDir)) { throw new Exception($"Missing entropy dir: " + entropyDir); } Directory.Delete(entropyDir, recursive: true); (var doc2, var errors2) = CanvasDocument.LoadFromSources(temp1.Dir); errors.ThrowOnErrors(); return(doc2); } }
// Given an msapp (original source of truth), stress test the conversions public static bool StressTest(string pathToMsApp) { try { using (var temp1 = new TempFile()) { string outFile = temp1.FullPath; var log = TextWriter.Null; // MsApp --> Model CanvasDocument msapp; ErrorContainer errors = new ErrorContainer(); try { using (var stream = new FileStream(pathToMsApp, FileMode.Open)) { msapp = MsAppSerializer.Load(stream, errors); } errors.Write(log); errors.ThrowOnErrors(); // We can still get warnings here. Commonly: // - PA2001, checksum mismatch // - PA2999, colliding asset names } catch (NotSupportedException) { errors.FormatNotSupported($"Too old: {pathToMsApp}"); return(false); } // Model --> MsApp errors = msapp.SaveToMsApp(outFile); errors.ThrowOnErrors(); var ok = MsAppTest.Compare(pathToMsApp, outFile, log); if (!ok) { return(false); } // Model --> Source using (var tempDir = new TempDir()) { string outSrcDir = tempDir.Dir; errors = msapp.SaveToSources(outSrcDir, verifyOriginalPath: pathToMsApp); errors.ThrowOnErrors(); } } // end using if (!MsAppTest.TestClone(pathToMsApp)) { return(false); } if (!MsAppTest.DiffStressTest(pathToMsApp)) { return(false); } } catch (Exception e) { Console.WriteLine(e.ToString()); return(false); } return(true); }
// Given an msapp (original source of truth), stress test the conversions public static bool StressTest(string pathToMsApp) { try { using (var temp1 = new TempFile()) { string outFile = temp1.FullPath; var log = TextWriter.Null; // MsApp --> Model CanvasDocument msapp; ErrorContainer errors = new ErrorContainer(); try { using (var stream = new FileStream(pathToMsApp, FileMode.Open)) { msapp = MsAppSerializer.Load(stream, errors); } errors.ThrowOnErrors(); } catch (NotSupportedException) { errors.FormatNotSupported($"Too old: {pathToMsApp}"); return(false); } // Model --> MsApp errors = msapp.SaveToMsApp(outFile); errors.ThrowOnErrors(); var ok = MsAppTest.Compare(pathToMsApp, outFile, log); if (!ok) { return(false); } // Model --> Source using (var tempDir = new TempDir()) { string outSrcDir = tempDir.Dir; errors = msapp.SaveToSources(outSrcDir); errors.ThrowOnErrors(); // Source --> Model (var msapp2, var errors2) = CanvasDocument.LoadFromSources(outSrcDir); errors2.ThrowOnErrors(); errors2 = msapp2.SaveToMsApp(outFile); // Write out .pa files. errors2.ThrowOnErrors(); var ok2 = MsAppTest.Compare(pathToMsApp, outFile, log); return(ok2); } } } catch (Exception e) { Console.WriteLine(e.ToString()); return(false); } }