Mark tests as not working under TARGET_JVM
[mono.git] / mcs / class / System / Test / System.Net.Sockets / TcpClientTest.cs
1 // System.Net.Sockets.TcpClientTest.cs\r
2 //\r
3 // Authors:\r
4 //    Phillip Pearson (pp@myelin.co.nz)\r
5 //    Martin Willemoes Hansen (mwh@sysrq.dk)\r
6 //\r
7 // (C) Copyright 2001 Phillip Pearson (http://www.myelin.co.nz)\r
8 // (C) Copyright 2003 Martin Willemoes Hansen\r
9 //\r
10 \r
11 using System;\r
12 using System.Net;\r
13 using System.Net.Sockets;\r
14 using NUnit.Framework;\r
15 \r
16 namespace MonoTests.System.Net.Sockets {\r
17 \r
18         /// <summary>\r
19         /// Tests System.Net.Sockets.TcpClient\r
20         /// </summary>\r
21         [TestFixture]\r
22         public class TcpClientTest {\r
23                 \r
24                 /// <summary>\r
25                 /// Tests the TcpClient object\r
26                 /// (from System.Net.Sockets)\r
27                 /// </summary>\r
28                 [Test]\r
29                 public void TcpClient()\r
30                 {\r
31                         // set up a listening Socket\r
32                         Socket lSock = new Socket(AddressFamily.InterNetwork,\r
33                                 SocketType.Stream, ProtocolType.Tcp);\r
34                         \r
35                         lSock.Bind(new IPEndPoint(IPAddress.Any, 8765));\r
36                         lSock.Listen(-1);\r
37 \r
38 \r
39                         // connect to it with a TcpClient\r
40                         TcpClient outClient = new TcpClient("localhost", 8765);\r
41                         Socket inSock = lSock.Accept();\r
42 \r
43                         \r
44                         // now try exchanging data\r
45                         NetworkStream stream = outClient.GetStream();\r
46 \r
47                         const int len = 1024;\r
48                         byte[] outBuf = new Byte[len];\r
49                         for (int i=0; i<len; i++) \r
50                         {\r
51                                 outBuf[i] = (byte)(i % 256);\r
52                         }\r
53 \r
54                         // send it\r
55                         stream.Write(outBuf,0,len);\r
56 \r
57                         // and see if it comes back\r
58                         byte[] inBuf = new Byte[len];\r
59                         int ret = inSock.Receive(inBuf, 0, len, 0);\r
60                         Assertion.Assert(ret != 0);\r
61 \r
62                         for (int i=0; i<len; i++) \r
63                         {\r
64                                 Assertion.Assert(inBuf[i] == outBuf[i]);\r
65                         }\r
66                         \r
67 \r
68                         // tidy up\r
69                         inSock.Close();\r
70                         outClient.Close();\r
71                         lSock.Close();\r
72                         \r
73                 }\r
74 \r
75                 [Test] // bub #81105\r
76                 public void CloseTest ()\r
77                 {\r
78                         IPEndPoint localEP = new IPEndPoint (IPAddress.Loopback, 8765);\r
79                         using (SocketResponder sr = new SocketResponder (localEP, new SocketRequestHandler (CloseRequestHandler))) {\r
80                                 sr.Start ();\r
81 \r
82                                 TcpClient tcpClient = new TcpClient (IPAddress.Loopback.ToString (), 8765);\r
83                                 NetworkStream ns = tcpClient.GetStream ();\r
84                                 Assert.IsNotNull (ns, "#A1");\r
85 #if NET_2_0\r
86                                 Assert.AreEqual (0, tcpClient.Available, "#A2");\r
87                                 Assert.IsTrue (tcpClient.Connected, "#A3");\r
88                                 // Assert.IsFalse (tcpClient.ExclusiveAddressUse, "#A4");\r
89 #endif\r
90                                 tcpClient.Close ();\r
91 #if NET_2_0\r
92                                 Assert.IsNotNull (tcpClient.Client, "#A5");\r
93                                 try {\r
94                                         int available = tcpClient.Available;\r
95                                         Assert.Fail ("#A6: " + available);\r
96                                 } catch (ObjectDisposedException) {\r
97                                 }\r
98                                 Assert.IsFalse (tcpClient.Connected, "#A7");\r
99                                 // not supported on linux\r
100                                 /*\r
101                                 try {\r
102                                         bool exclusive = tcpClient.ExclusiveAddressUse;\r
103                                         Assert.Fail ("#A8: " + exclusive);\r
104                                 } catch (ObjectDisposedException) {\r
105                                 }\r
106                                 */\r
107 #endif\r
108                         }\r
109 \r
110                         using (SocketResponder sr = new SocketResponder (localEP, new SocketRequestHandler (CloseRequestHandler))) {\r
111                                 sr.Start ();\r
112 \r
113                                 TcpClient tcpClient = new TcpClient (IPAddress.Loopback.ToString (), 8765);\r
114 #if NET_2_0\r
115                                 Assert.AreEqual (0, tcpClient.Available, "#B1");\r
116                                 Assert.IsTrue (tcpClient.Connected, "#B2");\r
117                                 // Assert.IsFalse (tcpClient.ExclusiveAddressUse, "#B3");\r
118 #endif\r
119                                 tcpClient.Close ();\r
120 #if NET_2_0\r
121                                 Assert.IsNull (tcpClient.Client, "#B4");\r
122                                 try {\r
123                                         int available = tcpClient.Available;\r
124                                         Assert.Fail ("#B5: " + available);\r
125                                 } catch (NullReferenceException) {\r
126                                 }\r
127                                 try {\r
128                                         bool connected = tcpClient.Connected;\r
129                                         Assert.Fail ("#B6: " + connected);\r
130                                 } catch (NullReferenceException) {\r
131                                 }\r
132                                 // not supported on linux\r
133                                 /*\r
134                                 try {\r
135                                         bool exclusive = tcpClient.ExclusiveAddressUse;\r
136                                         Assert.Fail ("#B7: " + exclusive);\r
137                                 } catch (NullReferenceException) {\r
138                                 }\r
139                                 */\r
140 #endif\r
141                         }\r
142                 }\r
143 \r
144                 byte [] CloseRequestHandler (Socket socket)\r
145                 {\r
146                         return new byte [0];\r
147                 }\r
148 \r
149 #if NET_2_0\r
150                 [Test]\r
151                 [ExpectedException (typeof(ArgumentNullException))]\r
152                 public void ConnectMultiNull ()\r
153                 {\r
154                         TcpClient client = new TcpClient ();\r
155                         IPAddress[] ipAddresses = null;\r
156                         \r
157                         client.Connect (ipAddresses, 1234);\r
158                 }\r
159                 \r
160                 [Test]\r
161                 public void ConnectMultiAny ()\r
162                 {\r
163                         TcpClient client = new TcpClient ();\r
164                         IPAddress[] ipAddresses = new IPAddress[1];\r
165                         \r
166                         ipAddresses[0] = IPAddress.Any;\r
167                         \r
168                         try {\r
169                                 client.Connect (ipAddresses, 1234);\r
170                                 Assert.Fail ("ConnectMultiAny #1");\r
171                         } catch (SocketException ex) {\r
172                                 Assertion.AssertEquals ("ConnectMultiAny #2",\r
173                                                         10049, ex.ErrorCode);\r
174                         } catch {\r
175                                 Assert.Fail ("ConnectMultiAny #3");\r
176                         }\r
177                 }\r
178                 \r
179                 [Test]\r
180                 public void ConnectMultiRefused ()\r
181                 {\r
182                         TcpClient client = new TcpClient ();\r
183                         IPAddress[] ipAddresses = new IPAddress[1];\r
184                         \r
185                         ipAddresses[0] = IPAddress.Loopback;\r
186                         \r
187                         try {\r
188                                 client.Connect (ipAddresses, 1234);\r
189                                 Assert.Fail ("ConnectMultiRefused #1");\r
190                         } catch (SocketException ex) {\r
191                                 Assertion.AssertEquals ("ConnectMultiRefused #2", 10061, ex.ErrorCode);\r
192                         } catch {\r
193                                 Assert.Fail ("ConnectMultiRefused #3");\r
194                         }\r
195                 }\r
196                 \r
197 #endif\r
198                 \r
199         }\r
200 \r
201 }\r