1 //
2 // SocketAsyncEventArgsTest.cs - NUnit Test Cases for SocketAsyncEventArgs
3 //
4 // Author:
5 //	Sebastien Pouliot (sebastien@ximian.com)
6 //
7 // Copyright (C) 2009 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 
29 
30 using System;
31 using System.Collections.Generic;
32 using System.Net.Sockets;
33 using System.Text;
34 
35 using NUnit.Framework;
36 
37 namespace MonoTests.System.Net.Sockets {
38 
39 	[TestFixture]
40 	public class SocketAsyncEventArgsTest {
41 
42 		[Test]
Defaults()43 		public void Defaults ()
44 		{
45 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
46 			Assert.IsNull (saea.AcceptSocket, "AcceptSocket");
47 			Assert.IsNull (saea.Buffer, "Buffer");
48 			Assert.IsNull (saea.BufferList, "BufferList");
49 			Assert.AreEqual (0, saea.BytesTransferred, "BytesTransferred");
50 			Assert.AreEqual (0, saea.Count, "Count");
51 			Assert.IsFalse (saea.DisconnectReuseSocket, "DisconnectReuseSocket");
52 			Assert.AreEqual (SocketAsyncOperation.None, saea.LastOperation, "LastOperation");
53 			Assert.AreEqual (0, saea.Offset, "Offset");
54 			Assert.IsNull (saea.RemoteEndPoint, "RemoteEndPoint");
55 #if !MOBILE
56 			Assert.IsNotNull (saea.ReceiveMessageFromPacketInfo, "ReceiveMessageFromPacketInfo");
57 			Assert.IsNull (saea.SendPacketsElements, "SendPacketsElements");
58 			Assert.AreEqual (TransmitFileOptions.UseDefaultWorkerThread, saea.SendPacketsFlags, "SendPacketsFlags");
59 #endif
60 			Assert.AreEqual (-1, saea.SendPacketsSendSize, "SendPacketsSendSize");
61 			Assert.AreEqual (SocketError.Success, saea.SocketError, "SocketError");
62 			Assert.AreEqual (SocketFlags.None, saea.SocketFlags, "SocketFlags");
63 			Assert.IsNull (saea.UserToken, "UserToken");
64 
65 			saea.Dispose ();
66 			saea.Dispose (); // twice
67 		}
68 
69 		[Test]
SetBuffer_ByteArray()70 		public void SetBuffer_ByteArray ()
71 		{
72 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
73 
74 			byte [] buffer = new byte [0];
75 			saea.SetBuffer (buffer, 0, 0);
76 			Assert.AreEqual (0, saea.Buffer.Length, "0");
77 			Assert.AreSame (saea.Buffer, buffer, "same");
78 
79 			saea.SetBuffer (null, 0, 0);
80 			Assert.IsNull (saea.Buffer, "null");
81 		}
82 
83 		[Test]
84 		[ExpectedException (typeof (ArgumentException))]
SetBuffer_BufferList_ByteArray()85 		public void SetBuffer_BufferList_ByteArray ()
86 		{
87 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
88 			saea.BufferList = new List<ArraySegment<byte>> ();
89 			saea.SetBuffer (new byte [0], 0, 0);
90 		}
91 
92 		[Test]
SetBuffer_BufferList_NullByteArray()93 		public void SetBuffer_BufferList_NullByteArray ()
94 		{
95 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
96 			saea.BufferList = new List<ArraySegment<byte>> ();
97 			saea.SetBuffer (null, 0, 0);
98 		}
99 
100 		[Test]
101 		[ExpectedException (typeof (ArgumentException))]
SetBuffer_ByteArray_BufferList()102 		public void SetBuffer_ByteArray_BufferList ()
103 		{
104 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
105 			saea.SetBuffer (new byte [0], 0, 0);
106 			saea.BufferList = new List<ArraySegment<byte>> ();
107 		}
108 
109 		[Test]
SetBuffer_NullByteArray_BufferList()110 		public void SetBuffer_NullByteArray_BufferList ()
111 		{
112 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
113 			saea.SetBuffer (null, 0, 0);
114 			saea.BufferList = new List<ArraySegment<byte>> ();
115 			Assert.IsNull (saea.Buffer, "Buffer");
116 		}
117 
118 		[Test]
119 		[ExpectedException (typeof (ArgumentOutOfRangeException))]
SetBuffer_ByteArray_StartNegative()120 		public void SetBuffer_ByteArray_StartNegative ()
121 		{
122 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
123 			saea.SetBuffer (new byte [10], -1, 0);
124 		}
125 
126 		[Test]
SetBuffer_Null_StartNegative()127 		public void SetBuffer_Null_StartNegative ()
128 		{
129 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
130 			saea.SetBuffer (null, -1, 0);
131 			Assert.IsNull (saea.Buffer, "Buffer");
132 			Assert.IsNull (saea.BufferList, "BufferList");
133 			Assert.AreEqual (0, saea.Count, "Count");
134 			Assert.AreEqual (0, saea.Offset, "Offset");
135 		}
136 
137 		[Test]
138 		[ExpectedException (typeof (ArgumentOutOfRangeException))]
SetBuffer_ByteArray_CountNegative()139 		public void SetBuffer_ByteArray_CountNegative ()
140 		{
141 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
142 			saea.SetBuffer (new byte [10], 1, -1);
143 		}
144 
145 		[Test]
SetBuffer_BufferList()146 		public void SetBuffer_BufferList ()
147 		{
148 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
149 			saea.BufferList = new List<ArraySegment<byte>> ();
150 			saea.SetBuffer (1, -1);
151 			saea.SetBuffer (-1, 0);
152 		}
153 
154 		[Test]
SetBuffer_Null_CountNegative()155 		public void SetBuffer_Null_CountNegative ()
156 		{
157 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
158 			saea.SetBuffer (null, 1, -1);
159 			Assert.IsNull (saea.Buffer, "Buffer");
160 			Assert.IsNull (saea.BufferList, "BufferList");
161 			Assert.AreEqual (0, saea.Count, "Count");
162 			Assert.AreEqual (0, saea.Offset, "Offset");
163 		}
164 
165 		[Test]
166 		[ExpectedException (typeof (ArgumentOutOfRangeException))]
SetBuffer_ByteArray_StartOverflow()167 		public void SetBuffer_ByteArray_StartOverflow ()
168 		{
169 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
170 			saea.SetBuffer (new byte [10], Int32.MaxValue, 1);
171 		}
172 
173 		[Test]
SetBuffer_Null_StartOverflow()174 		public void SetBuffer_Null_StartOverflow ()
175 		{
176 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
177 			saea.SetBuffer (null, Int32.MaxValue, 1);
178 			Assert.IsNull (saea.Buffer, "Buffer");
179 			Assert.IsNull (saea.BufferList, "BufferList");
180 			Assert.AreEqual (0, saea.Count, "Count");
181 			Assert.AreEqual (0, saea.Offset, "Offset");
182 		}
183 
184 		[Test]
185 		[ExpectedException (typeof (ArgumentOutOfRangeException))]
SetBuffer_ByteArray_CountOverflow()186 		public void SetBuffer_ByteArray_CountOverflow ()
187 		{
188 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
189 			saea.SetBuffer (new byte [10], 1, Int32.MaxValue);
190 		}
191 
192 		[Test]
SetBuffer_Null_CountOverflow()193 		public void SetBuffer_Null_CountOverflow ()
194 		{
195 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
196 			saea.SetBuffer (null, 1, Int32.MaxValue);
197 			Assert.IsNull (saea.Buffer, "Buffer");
198 			Assert.IsNull (saea.BufferList, "BufferList");
199 			Assert.AreEqual (0, saea.Count, "Count");
200 			Assert.AreEqual (0, saea.Offset, "Offset");
201 		}
202 
203 		[Test]
204 		[ExpectedException (typeof (ArgumentOutOfRangeException))]
SetBuffer_StartNegative()205 		public void SetBuffer_StartNegative ()
206 		{
207 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
208 			saea.SetBuffer (new byte [0], 0, 0);
209 			saea.SetBuffer (-1, 0);
210 		}
211 
212 		[Test]
213 		[ExpectedException (typeof (ArgumentOutOfRangeException))]
SetBuffer_CountNegative()214 		public void SetBuffer_CountNegative ()
215 		{
216 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
217 			saea.SetBuffer (new byte [10], 1, -1);
218 		}
219 
220 		[Test]
221 		[ExpectedException (typeof (ArgumentOutOfRangeException))]
SetBuffer_StartOverflow()222 		public void SetBuffer_StartOverflow ()
223 		{
224 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
225 			saea.SetBuffer (new byte [10], Int32.MaxValue, 1);
226 		}
227 
228 		[Test]
229 		[ExpectedException (typeof (ArgumentOutOfRangeException))]
SetBuffer_CountOverflow()230 		public void SetBuffer_CountOverflow ()
231 		{
232 			SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
233 			saea.SetBuffer (new byte [10], 1, Int32.MaxValue);
234 		}
235 
236 		class SocketAsyncEventArgsPoker : SocketAsyncEventArgs {
237 
OnCompleted_(SocketAsyncEventArgs e)238 			public void OnCompleted_ (SocketAsyncEventArgs e)
239 			{
240 				base.OnCompleted (e);
241 			}
242 		}
243 
244 		[Test]
OnCompleted_Null()245 		public void OnCompleted_Null ()
246 		{
247 			SocketAsyncEventArgsPoker saea = new SocketAsyncEventArgsPoker ();
248 			saea.OnCompleted_ (null);
249 		}
250 
251 		[Test]
TransparentDispose()252 		public void TransparentDispose ()
253 		{
254 			var buffer = new byte[5];
255 			var elements = new SendPacketsElement[2];
256 			var utoken = new object();
257 
258 			var saea = new SocketAsyncEventArgs();
259 			saea.SetBuffer(buffer, 0, 3);
260 			saea.SendPacketsElements = elements;
261 			saea.UserToken = utoken;
262 
263 			saea.Dispose();
264 
265 			Assert.AreEqual (buffer, saea.Buffer);
266 			Assert.AreEqual (elements, saea.SendPacketsElements);
267 			Assert.AreEqual (utoken, saea.UserToken);
268 		}
269 	}
270 }
271 
272 
273