Merge pull request #2392 from akoeplinger/web-wizard-sharing-violation
[mono.git] / mcs / class / System.Web / Test / System.Web.Mail / SmtpMailCas.cs
1 //
2 // SmtpMailCas.cs - CAS unit tests for System.Web.Mail.SmtpMail
3 //
4 // Author:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
8 //
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:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
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.
27 //
28
29 using NUnit.Framework;
30
31 using System;
32 using System.IO;
33 using System.Reflection;
34 using System.Security;
35 using System.Security.Permissions;
36 using System.Text;
37 using System.Web;
38 using System.Web.Mail;
39
40 namespace MonoCasTests.System.Web.Mail {
41
42         [TestFixture]
43         [Category ("CAS")]
44         public class SmtpMailCas : AspNetHostingMinimal {
45
46                 private MailMessage msg;
47
48                 [TestFixtureSetUp]
49                 public void FixtureSetUp ()
50                 {
51                         string fname = Path.GetTempFileName ();
52                         using (FileStream fs = File.OpenWrite (fname)) {
53                                 fs.WriteByte (0);
54                                 fs.Close ();
55                         }
56                         msg = new MailMessage ();
57                         msg.Attachments.Add (new MailAttachment (fname));
58                         msg.Bcc = "bcc@localhost.com";
59                         msg.Body = "Hola!";
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);
72                 }
73
74                 [Test]
75                 [PermissionSet (SecurityAction.Deny, Unrestricted = true)]
76                 public void SmtpServer_Deny_Unrestricted ()
77                 {
78                         // get/set
79                         SmtpMail.SmtpServer = "localhost";
80                         Assert.AreEqual ("localhost", SmtpMail.SmtpServer, "SmtpServer");
81                 }
82
83                 [Test]
84                 [AspNetHostingPermission (SecurityAction.Deny, Level = AspNetHostingPermissionLevel.Medium)]
85                 [ExpectedException (typeof (SecurityException))]
86                 public void SendMessage_Deny_Medium ()
87                 {
88                         SmtpMail.Send (msg);
89                 }
90
91                 [Test]
92                 [AspNetHostingPermission (SecurityAction.PermitOnly, Level = AspNetHostingPermissionLevel.Medium)]
93                 public void SendMessage_PermitOnly_Medium ()
94                 {
95                         try {
96                                 SmtpMail.Send (msg);
97                         }
98                         catch (Exception e) {
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
104                         }
105                 }
106
107                 [Test]
108                 [AspNetHostingPermission (SecurityAction.Deny, Level = AspNetHostingPermissionLevel.Medium)]
109                 [ExpectedException (typeof (SecurityException))]
110                 public void Send_Deny_Medium ()
111                 {
112                         SmtpMail.Send (msg.From, msg.To, msg.Subject, msg.Body);
113                 }
114
115                 [Test]
116                 [AspNetHostingPermission (SecurityAction.PermitOnly, Level = AspNetHostingPermissionLevel.Medium)]
117                 public void Send_PermitOnly_Medium ()
118                 {
119                         try {
120                                 SmtpMail.Send (msg.From, msg.To, msg.Subject, msg.Body);
121                         }
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
128                         }
129                 }
130
131                 // LinkDemand tests
132
133                 public override object CreateControl (SecurityAction action, AspNetHostingPermissionLevel level)
134                 {
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);
141                 }
142
143                 public override Type Type {
144                         get { return typeof (SmtpMail); }
145                 }
146         }
147 }