// // MonoTests.Remoting.BaseCalls.cs // // Author: Lluis Sanchez Gual (lluis@ximian.com) // // 2003 (C) Copyright, Ximian, Inc. // using System; using System.Net; using System.Text; using System.Threading; using System.Collections; using System.Globalization; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Messaging; using System.Runtime.Remoting.Lifetime; using System.Runtime.Remoting.Channels.Tcp; using System.Runtime.Remoting.Activation; using System.Runtime.Remoting.Contexts; using System.Runtime.InteropServices; using NUnit.Framework; namespace MonoTests.Remoting { public abstract class BaseCallTest { IChannelSender chs; string[] remoteUris; CallsDomainServer server; int remoteDomId; [TestFixtureSetUp] public void Run() { remoteDomId = CreateServer (); } [TestFixtureTearDown] public void End () { ShutdownServer (); } protected virtual int CreateServer () { ChannelManager cm = CreateChannelManager (); chs = cm.CreateClientChannel (); ChannelServices.RegisterChannel (chs); AppDomain domain = AppDomain.CreateDomain ("testdomain"); server = (CallsDomainServer) domain.CreateInstanceAndUnwrap(GetType().Assembly.FullName,"MonoTests.Remoting.CallsDomainServer"); remoteUris = server.Start (cm); return server.GetDomId (); } protected virtual void ShutdownServer () { if (server != null) { server.Stop (); if (chs != null) ChannelServices.UnregisterChannel (chs); } } protected virtual RemoteObject CreateRemoteInstance () { return (RemoteObject) Activator.GetObject (typeof(RemoteObject), remoteUris[0]); } protected virtual AbstractRemoteObject CreateRemoteAbstract () { return (AbstractRemoteObject) Activator.GetObject (typeof(AbstractRemoteObject), remoteUris[1]); } protected virtual IRemoteObject CreateRemoteInterface () { return (IRemoteObject) Activator.GetObject (typeof(IRemoteObject), remoteUris[2]); } public InstanceSurrogate InternalGetInstanceSurrogate () { InstanceSurrogate s = GetInstanceSurrogate (); s.RemoteObject = CreateRemoteInstance (); return s; } public AbstractSurrogate InternalGetAbstractSurrogate () { AbstractSurrogate s = GetAbstractSurrogate (); s.RemoteObject = CreateRemoteAbstract (); return s; } public InterfaceSurrogate InternalGetInterfaceSurrogate () { InterfaceSurrogate s = GetInterfaceSurrogate (); s.RemoteObject = CreateRemoteInterface (); return s; } public abstract InstanceSurrogate GetInstanceSurrogate (); public abstract AbstractSurrogate GetAbstractSurrogate (); public abstract InterfaceSurrogate GetInterfaceSurrogate (); public virtual ChannelManager CreateChannelManager () { return null; } // // The tests // [Test] public void TestInstanceSimple () { RunTestSimple (InternalGetInstanceSurrogate()); } [Test] public void TestAbstractSimple () { RunTestSimple (InternalGetAbstractSurrogate()); } [Test] public void TestInterfaceSimple () { RunTestSimple (InternalGetInterfaceSurrogate()); } [Test] public void TestInstancePrimitiveParams () { RunTestPrimitiveParams (InternalGetInstanceSurrogate()); } [Test] public void TestAbstractPrimitiveParams () { RunTestPrimitiveParams (InternalGetAbstractSurrogate()); } [Test] public void TestInterfacePrimitiveParams () { RunTestPrimitiveParams (InternalGetInterfaceSurrogate()); } [Test] public void TestInstancePrimitiveParamsInOut () { RunTestPrimitiveParamsInOut (InternalGetInstanceSurrogate()); } [Test] public void TestAbstractPrimitiveParamsInOut () { RunTestPrimitiveParamsInOut (InternalGetAbstractSurrogate()); } [Test] public void TestInterfacePrimitiveParamsInOut () { RunTestPrimitiveParamsInOut (InternalGetInterfaceSurrogate()); } [Test] public void TestInstanceComplexParams () { RunTestComplexParams (InternalGetInstanceSurrogate()); } [Test] public void TestAbstractComplexParams () { RunTestComplexParams (InternalGetAbstractSurrogate()); } [Test] public void TestInterfaceComplexParams () { RunTestComplexParams (InternalGetInterfaceSurrogate()); } [Test] public void TestInstanceComplexParamsInOut () { RunTestComplexParamsInOut (InternalGetInstanceSurrogate()); } [Test] public void TestAbstractComplexParamsInOut () { RunTestComplexParamsInOut (InternalGetAbstractSurrogate()); } [Test] public void TestInterfaceComplexParamsInOut () { RunTestComplexParamsInOut (InternalGetInterfaceSurrogate()); } [Test] public void TestInstanceProcessContextData () { RunTestProcessContextData (InternalGetInstanceSurrogate()); } [Test] public void TestAbstractProcessContextData () { RunTestProcessContextData (InternalGetAbstractSurrogate()); } [Test] public void TestInterfaceProcessContextData () { RunTestProcessContextData (InternalGetInterfaceSurrogate()); } // // The tests runners // public void RunTestSimple (IRemoteObject testerSurrogate) { Assert.AreEqual (130772 + remoteDomId, testerSurrogate.Simple (), "ReturnValue"); } public void RunTestPrimitiveParams (IRemoteObject testerSurrogate) { Assert.AreEqual ("11-22-L-SG@"+remoteDomId, testerSurrogate.PrimitiveParams (11, 22, 'L', "SG"), "ReturnValue"); } public void RunTestPrimitiveParamsInOut (IRemoteObject testerSurrogate) { int a2, a1 = 9876543; float b2, b1 = 82437.83f; char c2, c1 = 's'; string d2, d1 = "asdASDzxcZXC"; string res = testerSurrogate.PrimitiveParamsInOut (ref a1, out a2, ref b1, out b2, 9821, ref c1, out c2, ref d1, out d2); Assert.AreEqual ("9876543-82437.83-s-asdASDzxcZXC@" + remoteDomId, res, "ReturnValue"); Assert.AreEqual (12345678, a2, "a2"); Assert.AreEqual (53455.345f, b2, "b2"); Assert.AreEqual ('g', c2, "c2"); Assert.AreEqual ("sfARREG$5345DGDfgY7656gDFG>><