2 // SmtpMailCas.cs - CAS unit tests for System.Web.Mail.SmtpMail
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using NUnit.Framework;
33 using System.Reflection;
34 using System.Security;
35 using System.Security.Permissions;
38 using System.Web.Mail;
40 namespace MonoCasTests.System.Web.Mail {
44 public class SmtpMailCas : AspNetHostingMinimal {
46 private MailMessage msg;
49 public void FixtureSetUp ()
51 string fname = Path.GetTempFileName ();
52 using (FileStream fs = File.OpenWrite (fname)) {
56 msg = new MailMessage ();
57 msg.Attachments.Add (new MailAttachment (fname));
58 msg.Bcc = "bcc@localhost.com";
60 msg.BodyEncoding = Encoding.ASCII;
61 msg.Cc = "cc@localhost.com";
62 msg.Fields["mono"] = "monkey";
63 msg.From = "from@localhost.com";
64 msg.Headers["monkey"] = "mono";
65 msg.Priority = MailPriority.High;
66 msg.Subject = "Monkey business";
67 msg.To = "to@localhost.com";
68 msg.UrlContentBase = "http://www.mono-project.com";
69 msg.UrlContentLocation = "http://www.go-mono.com";
70 // ensure the static ctor is called at full trust
71 Assert.IsNotNull (SmtpMail.SmtpServer);
75 [PermissionSet (SecurityAction.Deny, Unrestricted = true)]
76 public void SmtpServer_Deny_Unrestricted ()
79 SmtpMail.SmtpServer = "localhost";
80 Assert.AreEqual ("localhost", SmtpMail.SmtpServer, "SmtpServer");
84 [AspNetHostingPermission (SecurityAction.Deny, Level = AspNetHostingPermissionLevel.Medium)]
85 [ExpectedException (typeof (SecurityException))]
86 public void SendMessage_Deny_Medium ()
92 [AspNetHostingPermission (SecurityAction.PermitOnly, Level = AspNetHostingPermissionLevel.Medium)]
93 public void SendMessage_PermitOnly_Medium ()
99 // HttpException: can't sent mail
100 // TypeInitializationException: missing stuff in machine.config
101 // ConfigurationException: missing stuff in machine.config
102 if (e is SecurityException)
103 throw e; // that's the one we're looking for
108 [AspNetHostingPermission (SecurityAction.Deny, Level = AspNetHostingPermissionLevel.Medium)]
109 [ExpectedException (typeof (SecurityException))]
110 public void Send_Deny_Medium ()
112 SmtpMail.Send (msg.From, msg.To, msg.Subject, msg.Body);
116 [AspNetHostingPermission (SecurityAction.PermitOnly, Level = AspNetHostingPermissionLevel.Medium)]
117 public void Send_PermitOnly_Medium ()
120 SmtpMail.Send (msg.From, msg.To, msg.Subject, msg.Body);
122 catch (Exception e) {
123 // HttpException: can't sent mail
124 // TypeInitializationException: missing stuff in machine.config
125 // ConfigurationException: missing stuff in machine.config
126 if (e is SecurityException)
127 throw e; // that's the one we're looking for
133 public override object CreateControl (SecurityAction action, AspNetHostingPermissionLevel level)
135 // in this case testing with a (private) ctor isn't very conveniant
136 // and the LinkDemand promotion (to Demand) will still occurs on other stuff
137 // and (finally) we know that the SmtpServer properties isn't protected ifself
138 MethodInfo mi = this.Type.GetProperty ("SmtpServer").GetGetMethod ();
139 Assert.IsNotNull (mi, "get");
140 return mi.Invoke (null, null);
143 public override Type Type {
144 get { return typeof (SmtpMail); }