Author: gert
Date: 2007-11-20 17:30:45 -0500 (Tue, 20 Nov 2007)
New Revision: 90042

Added:
   trunk/gert/standalone/bug341443/
   trunk/gert/standalone/bug341443/default.build
   trunk/gert/standalone/bug341443/test.cs
Modified:
   trunk/gert/standalone/known-issues
Log:
Added test for bug #341443.


Added: trunk/gert/standalone/bug341443/default.build
===================================================================
--- trunk/gert/standalone/bug341443/default.build       2007-11-20 22:12:21 UTC 
(rev 90041)
+++ trunk/gert/standalone/bug341443/default.build       2007-11-20 22:30:45 UTC 
(rev 90042)
@@ -0,0 +1,51 @@
+<project name="bug341443" default="rebuild">
+       <target name="mono-2.0">
+               <property name="csc.defines" 
value="NET_1_0,NET_1_1,NET_2_0,ONLY_2_0,MONO" />
+       </target>
+
+       <target name="net-2.0">
+               <property name="csc.defines" 
value="NET_1_0,NET_1_1,NET_2_0,ONLY_2_0" />
+       </target>
+
+       <property name="frameworks" value="mono-2.0,net-2.0" />
+
+       <target name="clean">
+               <delete>
+                       <fileset>
+                               <include name="out" />
+                               <include name="test.exe" />
+                       </fileset>
+               </delete>
+       </target>
+
+       <target name="build">
+               <property name="original.targetframework" 
value="${nant.settings.currentframework}" />
+
+               <foreach property="framework" item="String" in="${frameworks}" 
delim=",">
+                       <if test="${framework::exists(framework)}">
+                               <property name="nant.settings.currentframework" 
value="${framework}" />
+                               <call 
target="${nant.settings.currentframework}" />
+                               <call target="run" />
+                               <call target="clean" />
+                       </if>
+               </foreach>
+
+               <property name="nant.settings.currentframework" 
value="${original.targetframework}" />
+       </target>
+
+       <target name="compile">
+               <csc target="exe" define="${csc.defines}" output="test.exe" 
warnaserror="true" warninglevel="4">
+                       <sources>
+                               <include name="../../build/common/Assert.cs" />
+                               <include name="test.cs" />
+                       </sources>
+               </csc>
+       </target>
+
+       <target name="run" depends="compile">
+               <exec program="test.exe" managed="true" output="out" />
+               <fail if="${file::exists('out')}" />
+       </target>
+
+       <target name="rebuild" depends="clean, build" />
+</project>


Property changes on: trunk/gert/standalone/bug341443/default.build
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/gert/standalone/bug341443/test.cs
===================================================================
--- trunk/gert/standalone/bug341443/test.cs     2007-11-20 22:12:21 UTC (rev 
90041)
+++ trunk/gert/standalone/bug341443/test.cs     2007-11-20 22:30:45 UTC (rev 
90042)
@@ -0,0 +1,151 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+using System.Threading;
+
+internal class Program
+{
+       static void Main (string [] args)
+       {
+               Server http = new Server ();
+               Proxy proxy = new Proxy ();
+
+               new Thread (http.Run).Start ();
+               new Thread (proxy.Run).Start ();
+
+               IPAddress ip = GetIPv4Address (Dns.GetHostName ());
+
+               HttpWebRequest request = (HttpWebRequest) WebRequest.Create 
("http://"; + ip.ToString () + ":8080/default.htm");
+               request.Proxy = new WebProxy (ip.ToString (), 8081);
+
+               try {
+                       HttpWebResponse response = (HttpWebResponse) 
request.GetResponse ();
+                       Assert.IsNull (response.CharacterSet, "#A1");
+                       Assert.AreEqual (HttpStatusCode.OK, 
response.StatusCode, "#A2");
+                       Assert.AreEqual (string.Empty, 
response.ContentEncoding, "#A3");
+                       Assert.AreEqual (string.Empty, response.ContentType, 
"#A4");
+
+                       using (StreamReader sr = new StreamReader 
(response.GetResponseStream ())) {
+                               string body = sr.ReadToEnd ();
+                               Assert.AreEqual 
("<html><body>ok</body></html>", body, "#A5");
+                       }
+               } catch (WebException ex) {
+                       if (ex.Response != null) {
+                               StreamReader sr = new StreamReader 
(ex.Response.GetResponseStream ());
+                               Console.WriteLine (sr.ReadToEnd ());
+                       }
+                       throw;
+               } finally {
+                       http.Stop ();
+                       proxy.Stop ();
+               }
+       }
+
+       public static IPAddress GetIPv4Address (string hostName)
+       {
+               IPAddress [] addresses = Dns.GetHostEntry (Dns.GetHostName 
()).AddressList;
+               foreach (IPAddress address in addresses)
+                       if (address.AddressFamily == AddressFamily.InterNetwork)
+                               return address;
+               throw new Exception ("No IPv4 address found.");
+       }
+}
+
+internal class Proxy
+{
+       private readonly TcpListener Listener;
+       private readonly IPAddress ip;
+
+       public Proxy ()
+       {
+               ip = Program.GetIPv4Address (Dns.GetHostName ());
+               Listener = new TcpListener (ip, 8081);
+               Listener.Start ();
+       }
+
+       public void Stop ()
+       {
+               Listener.Stop ();
+       }
+
+       public void Run ()
+       {
+               Socket client;
+               try {
+                       while (true) {
+                               client = Listener.AcceptSocket ();
+                               byte [] buffer = new byte [50000];
+
+                               int bytesReceived = client.Receive (buffer);
+
+                               string request = Encoding.UTF8.GetString 
(buffer, 0, bytesReceived);
+
+                               string expected = string.Format 
(CultureInfo.InvariantCulture,
+                                       "GET http://{0}:8080/default.htm 
HTTP/1.1{1}" +
+                                       "Host: {0}:8080{1}" +
+                                       "Proxy-Connection: Keep-Alive{1}{1}",
+                                       ip.ToString (), Environment.NewLine);
+
+                               Assert.AreEqual (expected, request, "#B");
+
+                               Socket req = new Socket 
(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+                               req.Connect (ip, 8080);
+                               req.Send (buffer, 0, bytesReceived, 
SocketFlags.None);
+
+                               buffer = new byte [50000];
+
+                               bytesReceived = req.Receive (buffer);
+                               req.Close ();
+
+                               client.Send (buffer, 0, bytesReceived, 
SocketFlags.None);
+                               client.Shutdown (SocketShutdown.Both);
+                               client.Close ();
+                       }
+               } catch (SocketException) {
+               }
+
+       }
+}
+
+internal class Server
+{
+       private HttpListener Listener = new HttpListener ();
+
+       public Server ()
+       {
+               IPAddress ip = Program.GetIPv4Address (Dns.GetHostName ());
+               Listener.Prefixes.Add (@"http://"; + ip.ToString () + ":8080/");
+               Listener.Start ();
+       }
+
+       public void Stop ()
+       {
+               Listener.Stop ();
+       }
+
+       public void Run ()
+       {
+               while (Listener.IsListening) {
+                       try {
+                               HttpListenerContext context = 
Listener.GetContext ();
+                               HttpListenerResponse response = 
context.Response;
+
+                               StringBuilder sb = new StringBuilder ();
+                               sb.Append ("<html>");
+                               sb.Append ("<body>ok</body>");
+                               sb.Append ("</html>");
+                               response.ContentLength64 = sb.Length;
+
+                               using (StreamWriter writer = new StreamWriter 
(response.OutputStream)) {
+                                       writer.Write (sb.ToString ());
+                               }
+                               context.Response.Close ();
+                       } catch (HttpListenerException) {
+                       }
+               }
+       }
+}


Property changes on: trunk/gert/standalone/bug341443/test.cs
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/gert/standalone/known-issues
===================================================================
--- trunk/gert/standalone/known-issues  2007-11-20 22:12:21 UTC (rev 90041)
+++ trunk/gert/standalone/known-issues  2007-11-20 22:30:45 UTC (rev 90042)
@@ -125,5 +125,6 @@
 bug339538/**
 bug339747/**
 bug341112/**
+bug341443/**
 bug341726/**
 bug341743/**

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to