blob: 6c8fdcefb75478d233380ec35fc9d4cf267c3ef9 [file] [log] [blame]
// $Id$
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
using System;
using Org.Apache.Etch.Bindings.Csharp.Msg;
using Org.Apache.Etch.Bindings.Csharp.Transport;
using Org.Apache.Etch.Bindings.Csharp.Util;
using NUnit.Framework;
//using Etch.Support;
namespace Org.Apache.Etch.Bindings.Csharp.Support
{
[TestFixture]
public class TestRemoteBase : RemoteBase
{
public TestRemoteBase() : this(new MyDeliveryService(),new MyDefaultValueFactory())
{
}
public TestRemoteBase(MyDeliveryService svc, MyDefaultValueFactory vf) : base(svc,vf)
{
this.svc = svc;
}
[TestFixtureSetUp]
public void First()
{
Console.WriteLine();
Console.Write( "TestRemoteBase" );
}
[SetUp]
public void Init()
{
svc.what = null;
svc.xmsg = null;
svc.xresponseType = null;
svc.xresponseField = null;
svc.xtimeout = 0;
}
private readonly MyDeliveryService svc;
/* private static MyDeliveryService svc = new MyDeliveryService(); //declared static
//private static DefaultValueFactory vf = new DefaultValueFactory();//declared static
private static MyDefaultValueFactory vf = new MyDefaultValueFactory();
private RemoteBase rb = new RemoteBase(svc, vf); */
private XType mt = new XType( "foo" );
private XType rmt = new XType( "bar" );
private Field rmf = new Field( "baz" );
[Test]
public void NewMessage()
{
Message msg = _NewMessage( mt );
msg.CheckType( mt );
Assert.IsNull( svc.what );
Assert.IsNull( svc.xmsg );
Assert.IsNull( svc.xresponseType );
Assert.IsNull( svc.xresponseField );
Assert.AreEqual( 0, svc.xtimeout );
}
[Test]
public void Send()
{
Message msg = _NewMessage( mt );
_Send( msg );
Assert.IsTrue( svc.what.Equals(What.SEND));
Assert.AreSame( svc.xmsg, msg );
Assert.IsNull( svc.xresponseType );
Assert.IsNull( svc.xresponseField );
Assert.AreEqual( 0, svc.xtimeout );
}
[Test]
public void Call()
{
Message msg = _NewMessage( mt );
rmt.ResponseField = rmf;
rmt.Timeout = 98;
Object result = _EndCall( _BeginCall( msg ), rmt );
Assert.IsTrue( svc.what.Equals(What.CALL));
Assert.AreSame( svc.xmsg, msg );
Assert.AreSame( svc.xresponseType, rmt );
Assert.AreSame( svc.xresponseField, rmf );
Assert.AreEqual( svc.xtimeout, 98 );
Assert.AreEqual( result, 23 );
}
public enum What { SEND, CALL, SHUTDOWN, BEGINCALL };
public class MyDeliveryService : DeliveryService, MailboxManager
{
public Enum what;
public void Init()
{
what = null;
}
public Message xmsg;
public XType xresponseType;
public Field xresponseField;
public int xtimeout;
public Mailbox xmb;
public void Send( Message msg )
{
Assert.IsNull( what );
what = What.SEND;
this.xmsg = msg;
}
public Mailbox BeginCall( Message msg )
{
Init();
Assert.IsNull( what );
what = What.BEGINCALL;
this.xmsg = msg;
this.xmb = new PlainMailbox(this, 0L);
return this.xmb;
}
public Object EndCall( Mailbox mb, XType responseType )
{
Assert.AreEqual( What.BEGINCALL, what );
Assert.AreEqual( xmb, mb );
what = What.CALL;
xmb = null;
this.xresponseType = responseType;
this.xresponseField = responseType.ResponseField;
this.xtimeout = responseType.Timeout;
return 23;
}
public void TransportNotify( Object eventObj )
{
// ignore
}
public Object TransportQuery( Object query )
{
// ignore
return null;
}
public void TransportControl( Object control, Object value )
{
// ignore
}
public void Redeliver(Who sender, Message msg)
{
// ignore
}
public void Unregister(Mailbox mb)
{
// ignore
}
#region TransportMessage Members
public void TransportMessage(Who recipient, Message msg)
{
Assert.IsNull(what);
what = What.SEND;
this.xmsg = msg;
}
#endregion
#region Transport<SessionMessage> Members
public void SetSession(SessionMessage session)
{
throw new Exception("The method or operation is not implemented.");
}
public SessionMessage GetSession()
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
#region SessionMessage Members
public bool SessionMessage(Who sender, Message msg)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
#region Session Members
public object SessionQuery(object query)
{
throw new Exception("The method or operation is not implemented.");
}
public void SessionControl(object control, object value)
{
throw new Exception("The method or operation is not implemented.");
}
public void SessionNotify(object eventObj)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
#region MailboxManager Members
public Mailbox TransportCall(Who recipient, Message msg)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
}
/// <summary>
/// A fake implementation of DefaultValueFactory for testing
/// </summary>
///
public class MyDefaultValueFactory : DefaultValueFactory
{
private readonly static TypeMap types = new TypeMap();
private readonly static Class2TypeMap class2type =
new Class2TypeMap();
static MyDefaultValueFactory()
{
DefaultValueFactory.Init( types, class2type );
}
/**
* Constructs the ValueFactoryFake.
*/
public MyDefaultValueFactory() : base("none:",types, class2type)
{
}
}
}
}