//\r
// ServicePointTest.cs - NUnit Test Cases for System.Net.ServicePoint\r
//\r
-// Author:\r
+// Authors:\r
// Lawrence Pit (loz@cable.a2000.nl)\r
+// Martin Willemoes Hansen (mwh@sysrq.dk)\r
+//\r
+// (C) 2003 Martin Willemoes Hansen\r
//\r
\r
using NUnit.Framework;\r
namespace MonoTests.System.Net\r
{\r
\r
-public class ServicePointTest : TestCase\r
+[TestFixture]\r
+public class ServicePointTest\r
{\r
- public ServicePointTest () :\r
- base ("[MonoTests.System.Net.ServicePointTest]") {}\r
-\r
- public ServicePointTest (string name) : base (name) {}\r
-\r
- protected override void SetUp () {}\r
+ static private int max;\r
+ [SetUp]\r
+ public void SaveMax () {\r
+ max = ServicePointManager.MaxServicePoints;\r
+ ServicePointManager.MaxServicePoints = 0;\r
+ }\r
\r
- protected override void TearDown () {}\r
+ [TearDown]\r
+ public void RestoreMax () {\r
+ ServicePointManager.MaxServicePoints = max;\r
+ }\r
\r
- public static ITest Suite\r
- {\r
- get {\r
- return new TestSuite (typeof (ServicePointTest));\r
- }\r
- }\r
- \r
- public void TestAll ()\r
+ [Test]\r
+ [Category ("InetAccess")]\r
+#if TARGET_JVM\r
+ [Ignore ("Unsupported - ServicePointManager.FindServicePoint")]\r
+#endif\r
+ public void All ()\r
{\r
- try {\r
- ServicePoint p = ServicePointManager.FindServicePoint (new Uri ("mailto:xx@yyy.com"));\r
- WriteServicePoint ("A servicepoint that isn't really", p); \r
- \r
- ServicePointManager.MaxServicePoints = 2;\r
- ServicePoint google = ServicePointManager.FindServicePoint (new Uri ("http://www.google.com"));\r
- try { \r
- ServicePoint slashdot = ServicePointManager.FindServicePoint (new Uri ("http://www.slashdot.org"));\r
- Fail ("#1");\r
- } catch (InvalidOperationException) { }\r
- ServicePointManager.MaxServicePoints = 0;\r
- \r
- WriteServicePoint ("google before getting a webrequest", google);\r
- \r
- HttpWebRequest req = (HttpWebRequest) WebRequest.Create ("http://www.google.com");\r
- HttpWebResponse res = (HttpWebResponse) req.GetResponse (); \r
- \r
- WriteServicePoint ("google after getting a response", google);\r
- ServicePoint google2 = ServicePointManager.FindServicePoint (new Uri ("http://www.google.com/dilbert.html"));\r
- AssertEquals ("#equals", google, google2);\r
- res.Close ();\r
- \r
- // in both instances property CurrentConnections is 0 according to ms.net.\r
- // let's see what it says when we do async operations...\r
- \r
- HttpWebRequest req2 = (HttpWebRequest) WebRequest.Create ("http://www.google.com");\r
- req2.Method = "PUT";\r
- IAsyncResult async = req2.BeginGetRequestStream (null, null);\r
- WriteServicePoint ("after async BeginGetRequestStream", google);\r
- // CurrentConnections: 1\r
- Stream stream2 = req2.EndGetRequestStream (async);\r
- WriteServicePoint ("after async EndGetRequestStream", google);\r
- // CurrentConnections: 1\r
- stream2.Close ();\r
- \r
- req2 = (HttpWebRequest) WebRequest.Create ("http://www.google.com");\r
- async = req2.BeginGetResponse (null, null);\r
- WriteServicePoint ("after async BeginGetResponse", google);\r
- // CurrentConnections: 2\r
- WebResponse res2 = req2.EndGetResponse (async);\r
- WriteServicePoint ("after async EndGetResponse", google);\r
- // CurrentConnections: 0 \r
- // curious that after you get the webresponse object CurrentConnections is set to 0.\r
- // you'd think that you'd still be connected until you close the webresponse..\r
- Console.WriteLine ("ContentLength: " + res2.ContentLength);\r
- res2.Close ();\r
- \r
- \r
- // unless of course some buffering is taking place.. let's check\r
- Uri uri2 = new Uri ("http://www.apache.org/dist/httpd/httpd-2.0.36.tar.gz");\r
- ServicePoint sp2 = ServicePointManager.FindServicePoint (uri2);\r
- req2 = (HttpWebRequest) WebRequest.Create (uri2);\r
- async = req2.BeginGetResponse (null, null);\r
- WriteServicePoint ("Large file: after async BeginGetResponse", sp2);\r
- // CurrentConnections: 1\r
- res2 = req2.EndGetResponse (async);\r
- WriteServicePoint ("Large file: after async EndGetResponse", sp2);\r
- // CurrentConnections: 1\r
- // and so it shows\r
- Console.WriteLine ("ContentLength: " + res2.ContentLength);\r
- res2.Close ();\r
- \r
- \r
- // what's the limit of the cache?\r
- req2 = (HttpWebRequest) WebRequest.Create ("http://www.apache.org/");\r
- res2 = req2.GetResponse ();\r
- sp2 = ServicePointManager.FindServicePoint (new Uri("http://www.apache.org/"));\r
- WriteServicePoint ("apache", sp2);\r
- Console.WriteLine ("ContentLength: " + res2.ContentLength);\r
- // CurrentConnections: 1\r
- res2.Close ();\r
- // curious other effect: address is actually the full Uri of the previous request\r
- // anyways, buffer is probably 4096 bytes\r
-\r
- \r
- } catch (WebException e) {\r
- Console.WriteLine("\nThe following Exception was raised : {0}", e.Message);\r
- }\r
+ ServicePoint p = ServicePointManager.FindServicePoint (new Uri ("mailto:xx@yyy.com"));\r
+ //WriteServicePoint ("A servicepoint that isn't really", p); \r
+ \r
+ ServicePointManager.MaxServicePoints = 2;\r
+ ServicePoint google = ServicePointManager.FindServicePoint (new Uri ("http://www.google.com"));\r
+ try { \r
+ ServicePoint slashdot = ServicePointManager.FindServicePoint (new Uri ("http://www.slashdot.org"));\r
+ Assert.Fail ("#1");\r
+ } catch (InvalidOperationException) { }\r
+ ServicePointManager.MaxServicePoints = 0;\r
+ \r
+ //WriteServicePoint ("google before getting a webrequest", google);\r
+ \r
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create ("http://www.google.com");\r
+ HttpWebResponse res = (HttpWebResponse) req.GetResponse (); \r
+ \r
+ //WriteServicePoint ("google after getting a response", google);\r
+ ServicePoint google2 = ServicePointManager.FindServicePoint (new Uri ("http://www.google.com/dilbert.html"));\r
+ Assert.AreEqual (google, google2, "#equals");\r
+ res.Close ();\r
+ \r
+ // in both instances property CurrentConnections is 0 according to ms.net.\r
+ // let's see what it says when we do async operations...\r
+ \r
+ HttpWebRequest req2 = (HttpWebRequest) WebRequest.Create ("http://www.google.com");\r
+ req2.Method = "PUT";\r
+ IAsyncResult async = req2.BeginGetRequestStream (null, null);\r
+ //WriteServicePoint ("after async BeginGetRequestStream", google);\r
+ // CurrentConnections: 1\r
+ Stream stream2 = req2.EndGetRequestStream (async);\r
+ //WriteServicePoint ("after async EndGetRequestStream", google);\r
+ // CurrentConnections: 1\r
+ stream2.Close ();\r
+ \r
+ req2 = (HttpWebRequest) WebRequest.Create ("http://www.google.com");\r
+ async = req2.BeginGetResponse (null, null);\r
+ //WriteServicePoint ("after async BeginGetResponse", google);\r
+ // CurrentConnections: 2\r
+ WebResponse res2 = req2.EndGetResponse (async);\r
+ //WriteServicePoint ("after async EndGetResponse", google);\r
+ // CurrentConnections: 0 \r
+ // curious that after you get the webresponse object CurrentConnections is set to 0.\r
+ // you'd think that you'd still be connected until you close the webresponse..\r
+ //Console.WriteLine ("ContentLength: " + res2.ContentLength);\r
+ res2.Close ();\r
+ \r
+ \r
+ // unless of course some buffering is taking place.. let's check\r
+ Uri uri2 = new Uri ("http://freedesktop.org/Software/pkgconfig/releases/pkgconfig-0.15.0.tar.gz");\r
+ ServicePoint sp2 = ServicePointManager.FindServicePoint (uri2);\r
+ req2 = (HttpWebRequest) WebRequest.Create (uri2);\r
+ async = req2.BeginGetResponse (null, null);\r
+ //WriteServicePoint ("Large file: after async BeginGetResponse", sp2);\r
+ // CurrentConnections: 1\r
+ res2 = req2.EndGetResponse (async);\r
+ //WriteServicePoint ("Large file: after async EndGetResponse", sp2);\r
+ // CurrentConnections: 1\r
+ // and so it shows\r
+ //Console.WriteLine ("ContentLength: " + res2.ContentLength);\r
+ res2.Close ();\r
+ \r
+ \r
+ // what's the limit of the cache?\r
+ req2 = (HttpWebRequest) WebRequest.Create ("http://www.apache.org/");\r
+ res2 = req2.GetResponse ();\r
+ sp2 = ServicePointManager.FindServicePoint (new Uri("http://www.apache.org/"));\r
+ //WriteServicePoint ("apache", sp2);\r
+ //Console.WriteLine ("ContentLength: " + res2.ContentLength);\r
+ // CurrentConnections: 1\r
+ res2.Close ();\r
+ // curious other effect: address is actually the full Uri of the previous request\r
+ // anyways, buffer is probably 4096 bytes\r
}\r
\r
// try getting the stream to 5 web response objects \r
// while ConnectionLimit equals 2\r
- /*\r
- public void TestConnectionLimit ()\r
+\r
+ [Test]\r
+ [Category ("InetAccess")]\r
+#if TARGET_JVM\r
+ [Ignore ("The System.Net.ServicePointManager.FindServicePoint(Uri) is not supported")]\r
+#endif \r
+ public void ConnectionLimit ()\r
{ \r
- try {\r
- // the default is already 2, just in case it isn't..\r
- ServicePointManager.DefaultConnectionLimit = 2;\r
- \r
- Uri uri = new Uri ("http://www.apache.org/dist/httpd/httpd-2.0.36.tar.gz");\r
- ServicePoint sp = ServicePointManager.FindServicePoint (uri); \r
- WebResponse [] res = new WebResponse [5];\r
- for (int i = 0; i < 5; i++) {\r
- Console.WriteLine ("GOT1 : " + i);\r
- HttpWebRequest req = (HttpWebRequest) WebRequest.Create (uri);\r
- Console.WriteLine ("GOT2 : " + i);\r
- res [i] = req.GetResponse ();\r
- WriteServicePoint ("after getting " + (i + 1) + " web response objects", sp);\r
- }\r
- \r
- for (int i = 0; i < 5; i++) {\r
- Stream stream = res [i].GetResponseStream();\r
- Console.WriteLine ("Reading stream: " + i + " : " + stream);\r
- int len = 0;\r
- while (stream.ReadByte () != -1)\r
- len++;\r
- Console.WriteLine ("Finished reading: " + len + " bytes");\r
- }\r
- \r
- for (int i = 0; i < 5; i++) {\r
- res [i].Close ();\r
- }\r
- } catch (WebException e) {\r
- Console.WriteLine("\nThe following Exception was raised : {0}", e.Message);\r
- } \r
+ // the default is already 2, just in case it isn't..\r
+ ServicePointManager.DefaultConnectionLimit = 5;\r
+ \r
+ Uri uri = new Uri ("http://www.go-mono.com/");\r
+ ServicePoint sp = ServicePointManager.FindServicePoint (uri); \r
+ WebResponse [] res = new WebResponse [5];\r
+ for (int i = 0; i < 5; i++) {\r
+ //Console.WriteLine ("GOT1 : " + i);\r
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (uri);\r
+ //Console.WriteLine ("GOT2 : " + i);\r
+ res [i] = req.GetResponse ();\r
+ //WriteServicePoint ("after getting " + (i + 1) + " web response objects", sp);\r
+ }\r
+ \r
+ for (int i = 0; i < 5; i++) {\r
+ Stream stream = res [i].GetResponseStream();\r
+ //Console.WriteLine ("Reading stream: " + i + " : " + stream);\r
+ int len = 0;\r
+ while (stream.ReadByte () != -1)\r
+ len++;\r
+ //Console.WriteLine ("Finished reading: " + len + " bytes");\r
+ }\r
+ \r
+ for (int i = 0; i < 5; i++) {\r
+ res [i].Close ();\r
+ }\r
}\r
- */\r
- \r
+\r
+#if NET_2_0\r
+ [Test]\r
+ [Category ("InetAccess")]\r
+#if TARGET_JVM\r
+ [Ignore ("The System.Net.ServicePointManager.FindServicePoint(Uri) is not supported")]\r
+#endif \r
+ public void EndPointBind ()\r
+ {\r
+ Uri uri = new Uri ("http://www.go-mono.com/");\r
+ ServicePoint sp = ServicePointManager.FindServicePoint (uri);\r
+\r
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (uri);\r
+\r
+ bool called = false;\r
+#if !TARGET_JVM\r
+ sp.BindIPEndPointDelegate = delegate {\r
+ Assert.IsTrue (!called);\r
+ called = true;\r
+ return null;\r
+ };\r
+#endif\r
+ req.GetResponse ().Close ();\r
+\r
+ Assert.IsTrue (called);\r
+\r
+ req = (HttpWebRequest) WebRequest.Create (uri);\r
+ called = false;\r
+#if !TARGET_JVM\r
+ sp.BindIPEndPointDelegate = delegate(ServicePoint point, IPEndPoint remote, int times) {\r
+ Assert.IsTrue (times < 5);\r
+ called = true;\r
+ return new IPEndPoint(IPAddress.Parse("0.0.0.0"), 12345 + times);\r
+ };\r
+#endif\r
+ req.GetResponse ().Close ();\r
+\r
+ Assert.IsTrue (called);\r
+ }\r
+#endif\r
+\r
+// Debug code not used now, but could be useful later\r
+/*\r
private void WriteServicePoint (string label, ServicePoint sp)\r
{\r
Console.WriteLine ("\n" + label);\r
Console.WriteLine ("ProtocolVersion: " + sp.ProtocolVersion);\r
Console.WriteLine ("SupportsPipelining: " + sp.SupportsPipelining); \r
}\r
+*/\r
}\r
-\r
}\r
\r