1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Web;
using System.Web.Compilation;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load (object sender, EventArgs e)
{
List<string> messages = new List<string> ();
AppDomain ad = AppDomain.CurrentDomain;
try {
RunTest ("myFile.cache", "1", messages);
// Subdirs not allowed
RunTest ("subdir/myFile.cache", "2", messages);
// File doesn't exist
RunTest ("myAnotherFile.cache", "3", messages, true);
//
RunTest (null, "4", messages);
RunTest (String.Empty, "5", messages);
var sb = new StringBuilder ();
foreach (string s in messages)
sb.AppendLine (s);
log.InnerText = sb.ToString ();
} finally {
ad.SetData ("TestRunData", messages);
}
}
void Log (List<string> messages, string format, params object [] parms)
{
if (parms == null || parms.Length == 0)
messages.Add (format);
else
messages.Add (String.Format (format, parms));
}
void RunTest (string fileName, string logTag, List <string> messages, bool noCreate = false)
{
string codeGenDir = null;
if (!noCreate) {
try {
codeGenCreate.InnerText = codeGenDir = HttpRuntime.CodegenDir;
Log (messages, "create[{0}]: codeGen", logTag);
} catch (Exception ex) {
Log (messages, "create[{0}]: error codeGen ({1})", logTag, ex.GetType ());
}
try {
using (FileStream st = BuildManager.CreateCachedFile (fileName) as FileStream) {
if (st != null) {
string path = st.Name;
Log (messages, "create[{0}]: fileStream", logTag);
filePathCreate.InnerText = path;
Log (messages, "create[{0}]: can{1} read", logTag, st.CanRead ? String.Empty : "not");
Log (messages, "create[{0}]: can{1} write", logTag, st.CanWrite ? String.Empty : "not");
if (codeGenDir != null && path.StartsWith (codeGenDir))
Log (messages, "create[{0}]: pathSubdirOfCodeGen", logTag);
if (Path.GetFileName (path) == fileName)
Log (messages, "create[{0}]: our file name", logTag);
using (var sw = new StreamWriter (st)) {
sw.Write ("test");
}
} else
Log (messages, "create[{0}]: stream is null", logTag);
}
} catch (Exception ex) {
Log (messages, "create[{0}]: error write ({1})", logTag, ex.GetType ());
}
}
try {
codeGenRead.InnerText = codeGenDir = HttpRuntime.CodegenDir;
Log (messages, "read[{0}]: codeGen", logTag);
} catch (Exception ex) {
Log (messages, "read[{0}]: error codeGen ({1})", logTag, ex.GetType ());
}
try {
using (FileStream st = BuildManager.ReadCachedFile (fileName) as FileStream) {
if (st != null) {
string path = st.Name;
Log (messages, "read[{0}]: fileStream", logTag);
filePathRead.InnerText = path;
Log (messages, "read[{0}]: can{1} read", logTag, st.CanRead ? String.Empty : "not");
Log (messages, "read[{0}]: can{1} write", logTag, st.CanWrite ? String.Empty : "not");
if (codeGenDir != null && path.StartsWith (codeGenDir))
Log (messages, "read[{0}]: pathSubdirOfCodeGen", logTag);
if (Path.GetFileName (path) == fileName)
Log (messages, "read[{0}]: our file name", logTag);
string contents;
using (var sr = new StreamReader (st)) {
contents = sr.ReadToEnd ();
}
if (contents != null && contents == "test")
Log (messages, "read[{0}]: contents ok", logTag);
} else
Log (messages, "read[{0}]: stream is null", logTag);
}
} catch (Exception ex) {
Log (messages, "read[{0}]: error read ({1})", logTag, ex.GetType ());
}
}
}
|