* FileWebRequest.cs: Fixed PreAuthenticate and Proxy properties to
[mono.git] / mcs / class / System / Test / System.Net / FileWebResponseTest.cs
1 //
2 // FileWebResponseTest.cs - NUnit Test Cases for System.Net.FileWebResponse
3 //
4 // Authors:
5 //   Gert Driesen (drieseng@users.sourceforge.net)
6 //
7 // (C) 2007 Gert Driesen
8 //
9
10 using System;
11 using System.IO;
12 using System.Net;
13
14 using NUnit.Framework;
15
16 namespace MonoTests.System.Net
17 {
18         [TestFixture]
19         public class FileWebResponseTest
20         {
21                 private string _tempDirectory;
22                 private string _tempFile;
23                 private Uri _tempFileUri;
24
25                 [SetUp]
26                 public void SetUp ()
27                 {
28                         _tempDirectory = Path.Combine (Path.GetTempPath (), "MonoTests.System.Net.FileWebResponseTest");
29                         _tempFile = Path.Combine (_tempDirectory, "FileWebResponseTest.tmp");
30                         if (!Directory.Exists (_tempDirectory)) {
31                                 Directory.CreateDirectory (_tempDirectory);
32                         } else {
33                                 // ensure no files are left over from previous runs
34                                 string [] files = Directory.GetFiles (_tempDirectory, "*");
35                                 foreach (string file in files)
36                                         File.Delete (file);
37                         }
38                         _tempFileUri = GetTempFileUri ();
39                 }
40
41                 [TearDown]
42                 public void TearDown ()
43                 {
44                         if (Directory.Exists (_tempDirectory)) {
45                                 string [] files = Directory.GetFiles (_tempDirectory, "*");
46                                 foreach (string file in files)
47                                         File.Delete (file);
48                                 Directory.Delete (_tempDirectory, true);
49                         }
50                 }
51
52                 [Test]
53                 public void ContentLength ()
54                 {
55                         FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
56                         req.Method = "PUT";
57                         req.ContentLength = 100;
58                         using (Stream s = req.GetRequestStream ()) {
59                                 s.WriteByte (72);
60                                 s.WriteByte (110);
61                                 s.WriteByte (80);
62                                 s.Flush ();
63                         }
64                         req = (FileWebRequest) WebRequest.Create (_tempFileUri);
65                         using (FileWebResponse resp = (FileWebResponse) req.GetResponse ()) {
66                                 Assert.AreEqual (3, resp.ContentLength, "#1");
67                                 Assert.AreEqual (2, resp.Headers.Count, "#2");
68                                 Assert.AreEqual ("Content-Length", resp.Headers.Keys [0], "#3");
69                                 Assert.AreEqual ("3", resp.Headers.Get (0), "#4");
70                                 resp.Headers.Clear ();
71                                 Assert.AreEqual (3, resp.ContentLength, "#5");
72                                 Assert.AreEqual (0, resp.Headers.Count, "#6");
73                         }
74                 }
75
76                 [Test]
77                 public void ContentType ()
78                 {
79                         FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
80                         req.Method = "PUT";
81                         req.ContentType = "image/png";
82                         using (Stream s = req.GetRequestStream ()) {
83                                 s.WriteByte (72);
84                                 s.WriteByte (110);
85                                 s.WriteByte (80);
86                                 s.Flush ();
87                         }
88                         req = (FileWebRequest) WebRequest.Create (_tempFileUri);
89                         using (FileWebResponse resp = (FileWebResponse) req.GetResponse ()) {
90                                 Assert.AreEqual ("application/octet-stream", resp.ContentType, "#1");
91                                 Assert.AreEqual (2, resp.Headers.Count, "#2");
92                                 Assert.AreEqual ("Content-Type", resp.Headers.Keys [1], "#3");
93                                 Assert.AreEqual ("application/octet-stream", resp.Headers.Get (1), "#4");
94                                 resp.Headers.Clear ();
95                                 Assert.AreEqual ("application/octet-stream", resp.ContentType, "#5");
96                                 Assert.AreEqual (0, resp.Headers.Count, "#6");
97                         }
98                 }
99
100                 [Test]
101                 public void GetResponseStream ()
102                 {
103                         FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
104                         req.Method = "PUT";
105                         req.ContentType = "image/png";
106                         using (Stream s = req.GetRequestStream ()) {
107                                 s.WriteByte (72);
108                                 s.WriteByte (110);
109                                 s.WriteByte (80);
110                                 s.Flush ();
111                         }
112                         req = (FileWebRequest) WebRequest.Create (_tempFileUri);
113                         FileWebResponse respA = null;
114                         FileWebResponse respB = null;
115                         FileStream fsA = null;
116                         FileStream fsB = null;
117                         try {
118                                 respA = (FileWebResponse) req.GetResponse ();
119                                 fsA = respA.GetResponseStream () as FileStream;
120                                 Assert.IsNotNull (fsA, "#A1");
121                                 Assert.IsTrue (fsA.CanRead, "#A2");
122                                 Assert.IsTrue (fsA.CanSeek, "#A3");
123 #if NET_2_0
124                                 Assert.IsFalse (fsA.CanTimeout, "#A4");
125 #endif
126                                 Assert.IsFalse (fsA.CanWrite, "#A5");
127                                 Assert.AreEqual (3, fsA.Length, "#A6");
128                                 Assert.AreEqual (0, fsA.Position, "#A7");
129 #if NET_2_0
130                                 try {
131                                         int i = fsA.ReadTimeout;
132                                         Assert.Fail ("#A8:" + i);
133                                 } catch (InvalidOperationException) {
134                                 }
135                                 try {
136                                         int i = fsA.WriteTimeout;
137                                         Assert.Fail ("#A9:" + i);
138                                 } catch (InvalidOperationException) {
139                                 }
140 #endif
141
142                                 respB = (FileWebResponse) req.GetResponse ();
143                                 fsB = respB.GetResponseStream () as FileStream;
144                                 Assert.IsNotNull (fsB, "#B1");
145                                 Assert.IsTrue (fsB.CanRead, "#B2");
146                                 Assert.IsTrue (fsB.CanSeek, "#B3");
147 #if NET_2_0
148                                 Assert.IsFalse (fsB.CanTimeout, "#B4");
149 #endif
150                                 Assert.IsFalse (fsB.CanWrite, "#B5");
151                                 Assert.AreEqual (3, fsB.Length, "#B6");
152                                 Assert.AreEqual (0, fsB.Position, "#B7");
153 #if NET_2_0
154                                 try {
155                                         int i = fsB.ReadTimeout;
156                                         Assert.Fail ("#B8:" + i);
157                                 } catch (InvalidOperationException) {
158                                 }
159                                 try {
160                                         int i = fsB.WriteTimeout;
161                                         Assert.Fail ("#B9:" + i);
162                                 } catch (InvalidOperationException) {
163                                 }
164 #endif
165                         } finally {
166                                 if (respA != null)
167                                         respA.Close ();
168                                 if (respB != null)
169                                         respB.Close ();
170                         }
171                 }
172
173                 [Test]
174                 public void Headers ()
175                 {
176                         FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
177                         req.Method = "PUT";
178                         req.Headers.Add ("Disposition", "attach");
179                         using (Stream s = req.GetRequestStream ()) {
180                                 s.WriteByte (72);
181                                 s.WriteByte (110);
182                                 s.WriteByte (80);
183                                 s.Flush ();
184                         }
185                         req = (FileWebRequest) WebRequest.Create (_tempFileUri);
186                         using (FileWebResponse resp = (FileWebResponse) req.GetResponse ()) {
187                                 Assert.AreEqual (2, resp.Headers.Count, "#1");
188                                 Assert.AreEqual ("Content-Length", resp.Headers.Keys [0], "#2");
189                                 Assert.AreEqual ("Content-Type", resp.Headers.Keys [1], "#3");
190                         }
191                 }
192
193                 [Test]
194                 public void ResponseUri ()
195                 {
196                         FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
197                         req.Method = "PUT";
198                         req.ContentType = "image/png";
199                         using (Stream s = req.GetRequestStream ()) {
200                                 s.WriteByte (72);
201                                 s.WriteByte (110);
202                                 s.WriteByte (80);
203                                 s.Flush ();
204                         }
205                         req = (FileWebRequest) WebRequest.Create (_tempFileUri);
206                         using (FileWebResponse resp = (FileWebResponse) req.GetResponse ()) {
207                                 Assert.AreEqual (_tempFileUri, resp.ResponseUri);
208                         }
209                 }
210
211                 private Uri GetTempFileUri ()
212                 {
213                         string tempFile = _tempFile;
214                         if (RunningOnUnix) {
215                                 // remove leading slash for absolute paths
216                                 tempFile = tempFile.TrimStart ('/');
217                         } else {
218                                 tempFile = tempFile.Replace ('\\', '/');
219                         }
220                         return new Uri ("file:///" + tempFile);
221                 }
222
223                 private bool RunningOnUnix {
224                         get {
225                                 // check for Unix platforms - see FAQ for more details
226                                 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
227                                 int platform = (int) Environment.OSVersion.Platform;
228                                 return ((platform == 4) || (platform == 128));
229                         }
230                 }
231         }
232 }