Fix null sessions in HttpContextWrapper.Session
[mono.git] / mcs / class / System.ServiceModel / Test / System.ServiceModel.Description / WsdlImporterTest.cs
1 //
2 // WsdlImporterTest.cs
3 //
4 // Author:
5 //      Ankit Jain <JAnkit@novell.com>
6 //      Atsushi Enomoto <atsushi@ximian.com>
7 //
8 // Copyright (C) 2006 Novell, Inc.  http://www.novell.com
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29
30 using System;
31 using System.Collections.Generic;
32 using System.Collections.ObjectModel;
33 using System.IO;
34 using System.Text;
35 using System.Web.Services;
36 using System.Web.Services.Description;
37 using System.ServiceModel;
38 using System.ServiceModel.Channels;
39 using System.ServiceModel.Description;
40 using System.Xml;
41 using System.Xml.Schema;
42 using Microsoft.CSharp;
43 using NUnit.Framework;
44
45 using WSServiceDescription = System.Web.Services.Description.ServiceDescription;
46 using SMBinding = System.ServiceModel.Channels.Binding;
47
48 namespace MonoTests.System.ServiceModel.Description
49 {
50         [TestFixture]
51         public class WsdlImporterTest
52         {
53                 MetadataSet ms = null;
54                 WsdlImporter wi = null;
55                 XmlReader xtr = null;
56
57                 void NoExtensionsSetup ()
58                 {
59                         XmlReaderSettings xs = new XmlReaderSettings ();
60                         xs.IgnoreWhitespace = true;
61                         xtr = XmlTextReader.Create ("Test/System.ServiceModel.Description/dump.xml", xs);
62
63                         xtr.Read ();
64
65                         //FIXME: skipping Headers
66                         while (xtr.LocalName != "Body") {
67                                 if (!xtr.Read ())
68                                         return;
69                         }
70
71                         //Move to <Metadata ..
72                         xtr.Read ();
73                         ms = MetadataSet.ReadFrom (xtr);
74
75                         //MyWsdlImportExtension mw = new MyWsdlImportExtension ();
76                         List<IWsdlImportExtension> list = new List<IWsdlImportExtension> ();
77                         //list.Add (mw);
78                         list.Add (new DataContractSerializerMessageContractImporter ());
79
80                         /*list.Add (new MessageEncodingBindingElementImporter ());
81                         list.Add (new TransportBindingElementImporter ());
82                         list.Add (new StandardBindingImporter ());*/
83
84                         wi = new WsdlImporter (ms, null, list);
85                 }
86
87                 [TearDown]
88                 public void TearDown ()
89                 {
90                         if (xtr != null)
91                                 xtr.Close ();
92                 }
93
94                 [Test]
95                 public void CtorTest ()
96                 {
97                         NoExtensionsSetup ();
98                         Assert.AreEqual (2, wi.WsdlDocuments.Count, "#CT1");
99                         Assert.AreEqual (3, wi.XmlSchemas.Count, "#CT2");
100                 }
101
102                 [Test]
103                 [ExpectedException (typeof (ArgumentNullException))]
104                 public void CtorNullTest1 ()
105                 {
106                         new WsdlImporter (null);
107                 }
108
109                 private void CheckDefaultPolicyImportExtensions (KeyedByTypeCollection<IPolicyImportExtension> list)
110                 {
111                         Assert.IsNotNull (list, "#CN1");
112                         // 9 in 3.0, 10 in 3.5
113                         // Assert.AreEqual (10, list.Count, "#CN2");
114
115                         Assert.AreEqual (typeof (PrivacyNoticeBindingElementImporter), list [0].GetType (), "#CN3");
116                         Assert.AreEqual (typeof (UseManagedPresentationBindingElementImporter), list [1].GetType (), "#CN4");
117                         Assert.AreEqual (typeof (TransactionFlowBindingElementImporter), list [2].GetType (), "#CN5");
118                         Assert.AreEqual (typeof (ReliableSessionBindingElementImporter), list [3].GetType (), "#CN6");
119                         Assert.AreEqual (typeof (SecurityBindingElementImporter), list [4].GetType (), "#CN7");
120                         Assert.AreEqual (typeof (CompositeDuplexBindingElementImporter), list [5].GetType (), "#CN8");
121                         Assert.AreEqual (typeof (OneWayBindingElementImporter), list [6].GetType (), "#CN9");
122                         Assert.AreEqual (typeof (MessageEncodingBindingElementImporter), list [7].GetType (), "#CN10");
123                         Assert.AreEqual (typeof (TransportBindingElementImporter), list [8].GetType (), "#CN11");
124                         // It is in System.WorkflowServices.dll (3.5)
125                         //Assert.AreEqual (typeof (ContextBindingElementImporter), list [9].GetType (), "#CN12");
126                 }
127
128                 private void CheckDefaultWsdlImportExtensions (KeyedByTypeCollection<IWsdlImportExtension> list)
129                 {
130                         Assert.IsNotNull (list, "#CN20");
131                         // 5 in 3.0, 6 in 3.5
132                         // Assert.AreEqual (6, list.Count, "#CN21");
133
134                         Assert.AreEqual (typeof (DataContractSerializerMessageContractImporter), list [0].GetType (), "#CN22");
135                         Assert.AreEqual (typeof (XmlSerializerMessageContractImporter), list [1].GetType (), "#CN23");
136                         Assert.AreEqual (typeof (MessageEncodingBindingElementImporter), list [2].GetType (), "#CN24");
137                         Assert.AreEqual (typeof (TransportBindingElementImporter), list [3].GetType (), "#CN25");
138                         Assert.AreEqual (typeof (StandardBindingImporter), list [4].GetType (), "#CN26");
139                         // It is in System.WorkflowServices.dll (3.5)
140                         //Assert.AreEqual (typeof (ContextBindingElementImporter), list [5].GetType (), "#CN27");
141                 }
142
143                 [Test]
144                 [Category ("NotWorking")]
145                 public void CtorNullTest2 ()
146                 {
147                         WsdlImporter wi = new WsdlImporter (new MetadataSet (), null, new List<IWsdlImportExtension> ());
148
149                         Assert.IsNotNull (wi.WsdlImportExtensions, "#CN12");
150                         Assert.AreEqual (0, wi.WsdlImportExtensions.Count, "#CN13");
151
152                         /* FIXME: Not all importers are implemented yet */
153                         CheckDefaultPolicyImportExtensions (wi.PolicyImportExtensions);
154                 }
155
156                 [Test]
157                 [Category ("NotWorking")]
158                 public void CtorNullTest3 ()
159                 {
160                         WsdlImporter wi = new WsdlImporter (new MetadataSet (), new List<IPolicyImportExtension> (), null);
161
162                         Assert.IsNotNull (wi.PolicyImportExtensions, "#CN18");
163                         Assert.AreEqual (0, wi.PolicyImportExtensions.Count, "#CN19");
164
165                         /* FIXME: Not all importers are implemented yet */
166                         CheckDefaultWsdlImportExtensions (wi.WsdlImportExtensions);
167                 }
168
169                 [Test]
170                 [Category ("NotWorking")]
171                 public void CtorNullTest4 ()
172                 {
173                         WsdlImporter wi = new WsdlImporter (new MetadataSet (), null, null);
174                         /* FIXME: Not all importers are implemented yet */
175                         CheckDefaultPolicyImportExtensions (wi.PolicyImportExtensions);
176                         CheckDefaultWsdlImportExtensions (wi.WsdlImportExtensions);
177                 }
178
179                 public void CtorNullTest5 ()
180                 {
181                         WsdlImporter wi = new WsdlImporter (new MetadataSet ());
182                         CheckDefaultWsdlImportExtensions (wi.WsdlImportExtensions);
183                         CheckDefaultPolicyImportExtensions (wi.PolicyImportExtensions);
184                 }
185
186                 [Test]
187                 public void ExtensionsTest ()
188                 {
189                         XmlReaderSettings xs = new XmlReaderSettings ();
190                         xs.IgnoreWhitespace = true;
191                         xtr = XmlTextReader.Create ("Test/System.ServiceModel.Description/dump.xml", xs);
192
193                         xtr.Read ();
194
195                         //FIXME: skipping Headers
196                         while (xtr.LocalName != "Body") {
197                                 if (!xtr.Read ())
198                                         return;
199                         }
200
201                         //Move to <Metadata ..
202                         xtr.Read ();
203                         ms = MetadataSet.ReadFrom (xtr);
204
205                         Assert.AreEqual (typeof (WSServiceDescription), ms.MetadataSections [0].Metadata.GetType (), "#ET1");
206                         WSServiceDescription wsd = ms.MetadataSections [1].Metadata as WSServiceDescription;
207
208                         //ServiceDescription
209                         Assert.IsNotNull (wsd.Extensions, "#ET2");
210                         Assert.AreEqual (0, wsd.Extensions.Count, "#ET3");
211
212                         //Binding [0]
213                         Assert.IsNotNull (wsd.Bindings [0].Extensions, "#ET4");
214                         Assert.AreEqual (1, wsd.Bindings [0].Extensions.Count, "#ET5");
215                         Assert.AreEqual (typeof (SoapBinding), wsd.Bindings [0].Extensions [0].GetType (), "#ET6");
216
217                         //Binding [0].Operations [0]
218                         Assert.IsNotNull (wsd.Bindings [0].Operations [0].Extensions, "#ET7");
219                         Assert.AreEqual (1, wsd.Bindings [0].Operations [0].Extensions.Count, "#ET8");
220                         Assert.AreEqual (typeof (SoapOperationBinding), wsd.Bindings [0].Operations [0].Extensions [0].GetType (), "#ET9");
221
222                         //Binding [0].Operations [1]
223                         Assert.IsNotNull (wsd.Bindings [0].Operations [1].Extensions, "#ET10");
224                         Assert.AreEqual (1, wsd.Bindings [0].Operations [1].Extensions.Count, "#ET11");
225                         Assert.AreEqual (typeof (SoapOperationBinding), wsd.Bindings [0].Operations [1].Extensions [0].GetType (), "#ET12");
226
227                         //Service.Port
228                         Assert.IsNotNull (wsd.Services [0].Ports [0].Extensions, "#ET13");
229                         Assert.AreEqual (1, wsd.Services [0].Ports [0].Extensions.Count, "#ET14");
230                         Assert.AreEqual (typeof (SoapAddressBinding), wsd.Services [0].Ports [0].Extensions [0].GetType (), "#ET15");
231                 }
232
233                 void CheckXmlElement (object o, string name)
234                 {
235                         Assert.AreEqual (typeof (XmlElement), o.GetType ());
236                         Assert.AreEqual (name, ((XmlElement) o).Name);
237                 }
238
239                 [Test]
240                 public void BindingsTest ()
241                 {
242                         NoExtensionsSetup ();
243                         IEnumerable<SMBinding> bindings = wi.ImportAllBindings ();
244
245                         int count = 0;
246                         foreach (SMBinding b in bindings) {
247                                 Assert.AreEqual (typeof (CustomBinding), b.GetType (), "#B1");
248                                 Assert.AreEqual ("BasicHttpBinding_IEchoService", b.Name, "#B2");
249                                 Assert.AreEqual ("http://tempuri.org/", b.Namespace, "#B3");
250                                 Assert.AreEqual ("", b.Scheme, "#B4");
251
252                                 //FIXME: Test BindingElements
253
254                                 count++;
255                         }
256                         Assert.AreEqual (1, count);
257                 }
258
259                 [Test]
260                 [Category ("NotWorking")]
261                 public void ContractsTest ()
262                 {
263                         NoExtensionsSetup ();
264                         Collection<ContractDescription> cds = wi.ImportAllContracts ();
265
266                         Assert.AreEqual (1, cds.Count);
267                         CheckContractDescription (cds [0]);
268
269                 }
270
271                 //Used only for contract from test.xml
272                 private void CheckContractDescription (ContractDescription cd)
273                 {
274                         Assert.AreEqual ("IEchoService", cd.Name, "#CD1");
275                         Assert.AreEqual ("http://myns/echo", cd.Namespace, "#CD2");
276                         Assert.AreEqual (0, cd.Behaviors.Count, "#CD3");
277
278                         Assert.IsNull (cd.CallbackContractType, "#CD4");
279                         Assert.IsNull (cd.ContractType, "#CD5");
280
281                         Assert.IsFalse (cd.HasProtectionLevel, "#CD6");
282                         Assert.AreEqual (SessionMode.Allowed, cd.SessionMode, "#CD7");
283
284                         //Operations
285                         Assert.AreEqual (2, cd.Operations.Count, "#CD8");
286                         Assert.AreEqual (cd, cd.Operations [1].DeclaringContract, "#CD10");
287                         CheckOperationDescriptionEcho (cd.Operations [0]);
288                         CheckOperationDescriptionDouble_it (cd.Operations [1]);
289
290                 }
291
292                 public void CheckOperationDescriptionEcho (OperationDescription od)
293                 {
294                         //OperationDescription od = cd.Operations [0];
295                         Assert.AreEqual ("Echo", od.Name, "#CD9");
296
297                         Assert.IsNull (od.BeginMethod, "#CD11");
298                         Assert.IsNull (od.EndMethod, "#CD12");
299
300                         Assert.AreEqual (0, od.Faults.Count, "#CD13");
301                         Assert.IsTrue (od.IsInitiating, "#CD14");
302                         Assert.IsFalse (od.IsOneWay, "#CD15");
303                         Assert.IsFalse (od.IsTerminating, "#CD16");
304
305                         //FIXME: Behaviors
306
307                         //OperationDescription.Message
308                         Assert.AreEqual (2, od.Messages.Count, "#CD17");
309
310                         MessageDescription md = od.Messages [0];
311                         #region MessageDescription 0
312                         Assert.AreEqual ("http://myns/echo/IEchoService/Echo", md.Action, "#CD18");
313                         Assert.AreEqual (MessageDirection.Input, md.Direction, "#CD19");
314                         Assert.AreEqual (0, md.Headers.Count, "#CD20");
315                         Assert.AreEqual (0, md.Properties.Count, "#CD21");
316
317                         //MessageDescription.MessageBodyDescription
318
319                         Assert.IsNull (md.Body.ReturnValue, "#CD22");
320                         Assert.AreEqual ("Echo", md.Body.WrapperName, "#CD23");
321                         Assert.AreEqual ("http://myns/echo", md.Body.WrapperNamespace, "#CD24");
322                         #region MessagePartDescription
323                         //MessagePartDescription 0
324
325                         Assert.AreEqual (3, md.Body.Parts.Count, "#CD25");
326                         MessagePartDescription mpd = md.Body.Parts [0];
327
328                         Assert.AreEqual (0, mpd.Index, "#CD26");
329                         Assert.IsFalse (mpd.Multiple, "#CD27");
330                         Assert.AreEqual ("msg", mpd.Name, "#CD28");
331                         Assert.AreEqual ("http://myns/echo", mpd.Namespace, "#CD29");
332                         Assert.IsNull (mpd.Type, "#CD30");
333
334                         //MessagePartDescription 1
335
336                         mpd = md.Body.Parts [1];
337
338                         Assert.AreEqual (0, mpd.Index, "#CD31");
339                         Assert.IsFalse (mpd.Multiple, "#CD32");
340                         Assert.AreEqual ("num", mpd.Name, "#CD33");
341                         Assert.AreEqual ("http://myns/echo", mpd.Namespace, "#CD34");
342                         Assert.IsNull (mpd.Type, "#CD35");
343
344                         //MessagePartDescription 2
345
346                         mpd = md.Body.Parts [2];
347
348                         Assert.AreEqual (0, mpd.Index, "#CD31");
349                         Assert.IsFalse (mpd.Multiple, "#CD32");
350                         Assert.AreEqual ("d", mpd.Name, "#CD33");
351                         Assert.AreEqual ("http://myns/echo", mpd.Namespace, "#CD34");
352                         Assert.IsNull (mpd.Type, "#CD35");
353
354                         #endregion
355                         #endregion
356
357                         md = od.Messages [1];
358
359                         #region MessageDescription 1
360
361                         Assert.AreEqual ("http://myns/echo/IEchoService/EchoResponse", md.Action, "#CD36");
362                         Assert.AreEqual (MessageDirection.Output, md.Direction, "#CD37");
363                         Assert.AreEqual (0, md.Headers.Count, "#CD38");
364                         Assert.AreEqual (0, md.Properties.Count, "#CD39");
365
366                         //MessageDescription.MessageBodyDescription
367
368                         //Return value
369                         Assert.IsNotNull (md.Body.ReturnValue, "#CD40");
370
371                         Assert.AreEqual ("EchoResponse", md.Body.WrapperName, "#CD44");
372                         Assert.AreEqual ("http://myns/echo", md.Body.WrapperNamespace, "#CD45");
373                         Assert.AreEqual (0, md.Body.Parts.Count, "#CD46");
374
375                         #endregion
376
377                 }
378
379                 public void CheckOperationDescriptionDouble_it (OperationDescription od)
380                 {
381                         //OperationDescription od = cd.Operations [0];
382                         Assert.AreEqual ("DoubleIt", od.Name, "#CD9");
383
384                         Assert.IsNull (od.BeginMethod, "#CD11");
385                         Assert.IsNull (od.EndMethod, "#CD12");
386
387                         Assert.AreEqual (0, od.Faults.Count, "#CD13");
388                         Assert.IsTrue (od.IsInitiating, "#CD14");
389                         Assert.IsFalse (od.IsOneWay, "#CD15");
390                         Assert.IsFalse (od.IsTerminating, "#CD16");
391
392                         //FIXME: Behaviors
393
394                         //OperationDescription.Message
395                         Assert.AreEqual (2, od.Messages.Count, "#CD17");
396
397                         MessageDescription md = od.Messages [0];
398                         #region MessageDescription 0
399                         Assert.AreEqual ("http://myns/echo/IEchoService/DoubleIt", md.Action, "#CD18");
400                         Assert.AreEqual (MessageDirection.Input, md.Direction, "#CD19");
401                         Assert.AreEqual (0, md.Headers.Count, "#CD20");
402                         Assert.AreEqual (0, md.Properties.Count, "#CD21");
403
404                         //MessageDescription.MessageBodyDescription
405
406                         Assert.IsNull (md.Body.ReturnValue, "#CD22");
407                         Assert.AreEqual ("DoubleIt", md.Body.WrapperName, "#CD23");
408                         Assert.AreEqual ("http://myns/echo", md.Body.WrapperNamespace, "#CD24");
409                         #region MessagePartDescription
410                         //MessagePartDescription 0
411
412                         //Assert.AreEqual (0, md.Body.Parts.Count, "#CD25");
413                         MessagePartDescription mpd = md.Body.Parts [0];
414
415                         Assert.AreEqual (0, mpd.Index, "#CD26");
416                         Assert.IsFalse (mpd.Multiple, "#CD27");
417                         Assert.AreEqual ("it", mpd.Name, "#CD28");
418                         Assert.AreEqual ("http://myns/echo", mpd.Namespace, "#CD29");
419                         Assert.IsNull (mpd.Type, "#CD30");
420
421                         //MessagePartDescription 1
422
423                         mpd = md.Body.Parts [1];
424
425                         Assert.AreEqual (0, mpd.Index, "#CD31");
426                         Assert.IsFalse (mpd.Multiple, "#CD32");
427                         Assert.AreEqual ("prefix", mpd.Name, "#CD33");
428                         Assert.AreEqual ("http://myns/echo", mpd.Namespace, "#CD34");
429                         Assert.IsNull (mpd.Type, "#CD35");
430
431                         #endregion
432                         #endregion
433
434                         md = od.Messages [1];
435
436                         #region MessageDescription 1
437
438                         Assert.AreEqual ("http://myns/echo/IEchoService/DoubleItResponse", md.Action, "#CD36");
439                         Assert.AreEqual (MessageDirection.Output, md.Direction, "#CD37");
440                         Assert.AreEqual (0, md.Headers.Count, "#CD38");
441                         Assert.AreEqual (0, md.Properties.Count, "#CD39");
442
443                         //MessageDescription.MessageBodyDescription
444
445                         //Return value
446                         Assert.IsNotNull (md.Body.ReturnValue, "#CD40");
447
448                         Assert.AreEqual ("DoubleItResponse", md.Body.WrapperName, "#CD44");
449                         Assert.AreEqual ("http://myns/echo", md.Body.WrapperNamespace, "#CD45");
450                         Assert.AreEqual (0, md.Body.Parts.Count, "#CD46");
451
452                         #endregion
453
454                 }
455
456                 [Test]
457                 [Category ("NotWorking")]
458                 public void EndpointsTest ()
459                 {
460                         NoExtensionsSetup ();
461                         ServiceEndpointCollection sec = wi.ImportAllEndpoints ();
462
463                         Assert.AreEqual (1, sec.Count);
464
465                         ServiceEndpoint se = sec [0];
466
467                         //.Address
468                         Assert.IsNull (se.Address, "#ep1");
469
470                         Assert.AreEqual (0, se.Behaviors.Count, "#ep6");
471
472                         //Binding
473                         Assert.AreEqual (typeof (CustomBinding), se.Binding.GetType (), "#ep7");
474
475                         CustomBinding c = (CustomBinding) se.Binding;
476
477                         Assert.AreEqual ("BasicHttpBinding_IEchoService", c.Name, "#ep8");
478                         Assert.AreEqual ("http://tempuri.org/", c.Namespace, "#ep9");
479                         Assert.AreEqual ("", c.Scheme, "#ep10");
480
481                         Assert.AreEqual (1, c.Elements.Count, "#ep11");
482                         Assert.AreEqual (typeof (TextMessageEncodingBindingElement), c.Elements [0].GetType (), "#ep12");
483                         //FIXME: Check c.Elements [0]. properties?
484
485                         CheckContractDescription (se.Contract);
486
487                         Assert.IsNull (se.ListenUri, "#ep13");
488                         Assert.AreEqual (ListenUriMode.Explicit, se.ListenUriMode, "#ep14");
489                 }
490
491                 void ExtensionsSetup (List<IWsdlImportExtension> list)
492                 {
493                         XmlReaderSettings xs = new XmlReaderSettings ();
494                         xs.IgnoreWhitespace = true;
495                         //xtr = XmlTextReader.Create ("Test/System.ServiceModel.Description/test2a.xml", xs);
496                         xtr = XmlTextReader.Create ("Test/System.ServiceModel.Description/dump.xml", xs);
497
498                         xtr.Read ();
499
500                         //FIXME: skipping Headers
501                         while (xtr.LocalName != "Body") {
502                                 if (!xtr.Read ())
503                                         return;
504                         }
505
506                         //Move to <Metadata ..
507                         xtr.Read ();
508                         ms = MetadataSet.ReadFrom (xtr);
509
510                         /*MyWsdlImportExtension mw = new MyWsdlImportExtension ();
511                         List<IWsdlImportExtension> list = new List<IWsdlImportExtension> ();
512                         list.Add (mw);
513                         list.Add (new DataContractSerializerMessageContractImporter ());
514
515                         /*list.Add (new MessageEncodingBindingElementImporter ());
516                         list.Add (new TransportBindingElementImporter ());
517                         list.Add (new StandardBindingImporter ());*/
518
519                         wi = new WsdlImporter (ms, null, list);
520                 }
521
522
523                 [Test]
524                 [Category ("NotWorking")]
525                 public void EndpointTestWithExtensions ()
526                 {
527                         List<IWsdlImportExtension> list = new List<IWsdlImportExtension> ();
528                         list.Add (new TransportBindingElementImporter ());
529
530                         ExtensionsSetup (list);
531                         ServiceEndpointCollection sec = wi.ImportAllEndpoints ();
532
533                         Assert.AreEqual (1, sec.Count, "#epe0");
534                         ServiceEndpoint se = sec [0];
535
536                         Assert.IsNotNull (se.Address, "#epe1");
537                         Assert.AreEqual (0, se.Address.Headers.Count, "#epe2");
538                         Assert.IsNull (se.Address.Identity, "#epe3");
539                         Assert.AreEqual (new Uri ("http://localhost:8080/echo/svc"), se.Address.Uri, "#epe4");
540
541                         //Bindings
542                         Assert.AreEqual (typeof (CustomBinding), se.Binding.GetType (), "#epe5");
543                         CustomBinding cb = se.Binding as CustomBinding;
544                         Assert.AreEqual (2, cb.Elements.Count, "#epe6");
545                         Assert.AreEqual (typeof (TextMessageEncodingBindingElement), cb.Elements [0].GetType (), "#epe7");
546                         Assert.AreEqual (typeof (HttpTransportBindingElement), cb.Elements [1].GetType (), "#epe8");
547
548                         Assert.AreEqual (new Uri ("http://localhost:8080/echo/svc"), se.ListenUri, "#epe9");
549                         Assert.AreEqual ("http", cb.Scheme, "#epe10");
550
551                 }
552
553                 MetadataSet GetMetadataSetFromWsdl (string path)
554                 {
555                         var ms = new MetadataSet ();
556                         var sd = WSServiceDescription.Read (XmlReader.Create (path));
557                         ms.MetadataSections.Add (MetadataSection.CreateFromServiceDescription (sd));
558                         foreach (XmlSchema xs in sd.Types.Schemas)
559                                 foreach (XmlSchemaImport import in xs.Includes)
560                                         using (var xr = XmlReader.Create (Path.Combine (Path.GetDirectoryName (path), import.SchemaLocation)))
561                                                 ms.MetadataSections.Add (MetadataSection.CreateFromSchema (XmlSchema.Read (xr, null)));
562                         return ms;
563                 }
564
565                 [Test]
566                 [Ignore ("Until make dist gets fixed I won't enable any of new external-source-dependent tests")]
567                 public void ImportMethodWithArrayOfint ()
568                 {
569                         var ms = GetMetadataSetFromWsdl ("Test/Resources/xml/service1.wsdl");
570                         var imp = new WsdlImporter (ms);
571                         var cg = new ServiceContractGenerator ();
572                         var cd = imp.ImportAllContracts () [0];
573                         cg.GenerateServiceContractType (cd);
574                         var sw = new StringWriter ();
575                         new CSharpCodeProvider ().GenerateCodeFromCompileUnit (
576                                 cg.TargetCompileUnit, sw, null);
577                         // sort of hacky test
578                         Assert.IsTrue (sw.ToString ().IndexOf ("int[] GetSearchData") > 0, "#1");
579                 }
580
581                 [Test]
582                 [Category ("NotWorking")]
583                 public void ImportXmlTypes ()
584                 {
585                         // part of bug #670945
586                         var mset = new MetadataSet ();
587                         WSServiceDescription sd = null;
588
589                         sd = WSServiceDescription.Read (XmlReader.Create ("670945.wsdl"));
590                         mset.MetadataSections.Add (new MetadataSection () {
591                                 Dialect = MetadataSection.ServiceDescriptionDialect,
592                                 Metadata = sd });
593
594                         var imp = new WsdlImporter (mset);
595                         var sec = imp.ImportAllContracts ();
596                         
597                         // FIXME: examine resulting operations.
598                 }
599
600                 [Test]
601                 [Ignore ("FIXME: Using external source")]
602                 public void ImportMethodWithDateTime ()
603                 {
604                         var ms = GetMetadataSetFromWsdl ("Test/Resources/DateTime.wsdl");
605                         var imp = new WsdlImporter (ms);
606                         var cg = new ServiceContractGenerator ();
607                         var cd = imp.ImportAllContracts () [0];
608                         cg.GenerateServiceContractType (cd);
609                         var sw = new StringWriter ();
610                         new CSharpCodeProvider ().GenerateCodeFromCompileUnit (
611                                 cg.TargetCompileUnit, sw, null);
612                         // sort of hacky test
613                         Assert.IsTrue (sw.ToString ().IndexOf ("System.DateTime GetDate") > 0, "#1");
614                 }
615         }
616 }