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