3 using System
.Runtime
.Remoting
;
4 using System
.Runtime
.InteropServices
;
6 using System
.Runtime
.Serialization
;
8 public class Test
: MarshalByRefObject
10 public static int Main (string[] args
)
12 AppDomain domain
= AppDomain
.CreateDomain ("testdomain1");
13 Test server
= (Test
) domain
.CreateInstanceAndUnwrap(typeof(Test
).Assembly
.FullName
, "Test");
14 return server
.RunTest ();
23 AppDomain domain
= AppDomain
.CreateDomain ("testdomain");
24 Remo server
= (Remo
) domain
.CreateInstanceAndUnwrap(typeof(Test
).Assembly
.FullName
,"Remo");
25 if (System
.Threading
.Thread
.GetDomainID () == server
.GetDomainId ())
26 throw new TestException ("Object not created in new domain", 1);
32 server
.Run2 (88, "hola");
33 server
.Run3 (99, d
, "adeu");
35 string r
= server
.Run4 (200, d
, "que");
36 CheckValue (r
, "vist", 140);
39 server
.Run5 (200, d
, "que");
40 throw new TestException ("Exception expected", 150);
42 catch (Exception ex
) {
43 CheckValue (ex
.Message
, "peta", 151);
47 d
= server
.Run6 (99, out d2
, "adeu");
48 CheckValue (d
.p
, 987, 161);
49 CheckValue (d2
.p
, 987, 162);
53 CheckValue (d
.p
, 22, 170);
54 CheckValue (d2
.p
, 33, 170);
56 byte[] ba
= new byte[5];
57 for (byte n
=0; n
<ba
.Length
; n
++)
62 for (int n
=0; n
<ba
.Length
; n
++)
63 CheckValue (ba
[n
], (byte) (ba
.Length
- n
), 180);
65 StringBuilder sb
= new StringBuilder ("un");
67 Test
.CheckValue (sb
, new StringBuilder ("un"), 190);
69 StringBuilder sb2
= new StringBuilder ("prefix");
70 StringBuilder sb3
= server
.Run9_2 (sb2
);
71 Test
.CheckValue (sb2
, new StringBuilder ("prefix"), 192);
72 Test
.CheckValue (sb3
, new StringBuilder ("prefix-middle"), 192);
73 StringBuilder sb4
= server
.Run9_3 (sb3
);
74 Test
.CheckValue (sb3
, new StringBuilder ("prefix-middle"), 193);
75 Test
.CheckValue (sb4
, new StringBuilder ("prefix-middle-end"), 193);
79 catch (TestException ex
)
81 Console
.WriteLine ("TEST ERROR ({0}): {1}", ex
.Code
, ex
);
86 Console
.WriteLine ("TEST ERROR: " + ex
);
92 public static void CheckDomain (object ob
, Type t
, int ec
)
94 if (ob
== null) return;
95 if (ob
.GetType () != t
) {
96 if (t
.ToString() == ob
.GetType().ToString())
97 throw new TestException ("Parameter not properly marshalled", ec
);
99 throw new TestException ("Wrong type (maybe wrong domain?)", ec
);
103 public static void CheckValue (object ob1
, object ob2
, int ec
)
105 if ((ob1
== null || ob2
== null) && ob1
!= ob2
)
106 throw new TestException ("Null objects are not equal", ec
);
108 if (ob2
.GetType () != ob1
.GetType ())
109 throw new TestException ("Wrong type (maybe wrong domain?)", ec
);
111 if (ob1
is StringBuilder
) {
112 if (Object
.ReferenceEquals (ob1
, ob2
))
113 throw new TestException ("StringBuilders are ReferenceEquals", ec
);
115 StringBuilder sb1
= (StringBuilder
) ob1
;
116 StringBuilder sb2
= (StringBuilder
) ob2
;
118 if (sb1
.ToString () != sb2
.ToString ())
119 throw new TestException ("String in StringBuilders are not equal", ec
);
121 if (sb1
.Length
!= sb2
.Length
)
122 throw new TestException ("Lengths in StringBuilders are not equal", ec
);
124 else if (!ob1
.Equals (ob2
))
125 throw new TestException ("Objects are not equal", ec
);
129 public class Remo
: MarshalByRefObject
135 domid
= System
.Threading
.Thread
.GetDomainID ();
138 public int GetDomainId ()
143 public void CheckThisDomain (int ec
)
145 if (domid
!= System
.Threading
.Thread
.GetDomainID ())
146 throw new TestException ("Wrong domain", ec
);
151 CheckThisDomain (10);
154 public void Run2 (int a
, string b
)
156 CheckThisDomain (20);
157 Test
.CheckValue (a
, 88, 21);
158 Test
.CheckValue (b
, "hola", 22);
161 public void Run3 (int a
, Dada d
, string b
)
163 CheckThisDomain (30);
164 Test
.CheckValue (a
, 99, 31);
165 Test
.CheckValue (b
, "adeu", 32);
166 Test
.CheckValue (d
.p
, 22, 33);
169 public string Run4 (int a
, Dada d
, string b
)
171 CheckThisDomain (40);
172 Test
.CheckValue (a
, 200, 41);
173 Test
.CheckValue (b
, "que", 42);
174 Test
.CheckValue (d
.p
, 22, 43);
178 public Dada
Run5 (int a
, Dada d
, string b
)
180 CheckThisDomain (50);
181 Test
.CheckValue (a
, 200, 51);
182 Test
.CheckValue (b
, "que", 52);
183 Test
.CheckValue (d
.p
, 22, 53);
188 public Dada
Run6 (int a
, out Dada d
, string b
)
190 CheckThisDomain (60);
191 Test
.CheckValue (a
, 99, 61);
192 Test
.CheckValue (b
, "adeu", 62);
199 public Dada
Run7 (Dada d
)
201 CheckThisDomain (70);
202 Test
.CheckValue (d
.p
, 22, 71);
207 public void Run8 ([In
,Out
] byte[] bytes
)
209 CheckThisDomain (80);
210 Test
.CheckDomain (bytes
, typeof(byte[]), 81);
211 for (int n
=0; n
< bytes
.Length
; n
++) {
212 Test
.CheckValue (bytes
[n
], (byte)n
, 82);
213 bytes
[n
] = (byte) (bytes
.Length
- n
);
217 public void Run9_1 ([In
,Out
] StringBuilder sb
)
219 CheckThisDomain (90);
220 Test
.CheckValue (sb
, new StringBuilder ("un"), 91);
224 public StringBuilder
Run9_2 ([In
] StringBuilder sb
)
226 CheckThisDomain (91);
227 Test
.CheckValue (sb
, new StringBuilder ("prefix"), 92);
228 sb
.Append ("-middle");
232 public StringBuilder
Run9_3 ([In
,Out
] StringBuilder sb
)
234 CheckThisDomain (92);
235 Test
.CheckValue (sb
, new StringBuilder ("prefix-middle"), 93);
243 throw new Exception ("peta");
254 public class MyException
: Exception
256 public MyException (string s
): base (s
) {}
260 public class TestException
: Exception
262 public int Code
= -1;
264 public TestException (SerializationInfo i
, StreamingContext ctx
): base (i
, ctx
) {
265 Code
= i
.GetInt32 ("Code");
268 public TestException (string txt
, int code
): base (txt
+ " (code: " + code
+ ")")
273 public override void GetObjectData (SerializationInfo info
, StreamingContext context
)
275 base.GetObjectData (info
, context
);
276 info
.AddValue ("Code", Code
);