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