blob: da314905305d78b57df0933491dbe55b124f388a [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.Support;
using Org.Apache.Etch.Bindings.Csharp.Util;
using NUnit.Framework;
namespace Org.Apache.Etch.Bindings.Csharp.Transport.Filter
{
[TestFixture]
public class TestLogger
{
private MyTransport transport;
private MySession session;
private MyValueFactory vf;
private Resources resources;
[SetUp]
public void Initialize()
{
transport = new MyTransport();
session = new MySession();
vf = new MyValueFactory("tcp:");
resources = new Resources();
resources.Add(TransportConsts.VALUE_FACTORY, vf);
}
private Logger newLogger(string uri)
{
return new Logger(transport,new URL(uri),null);
}
[Test]
public void constructor1() {
String uri = "tcp://localhost:4008?filter=Logger";
Logger.testFlag = true;
Logger logger = newLogger(uri);
Assert.AreEqual(logger.GetFileName(),"Log.txt");
Assert.AreNotSame(logger.GetFileName(),logger.GetTestRenamedFileName());
}
[Test]
public void constructor2()
{
String uri = "tcp://localhost:4008?filter=Logger&Logger.filePath=Test.txt";
Logger.testFlag = true;
Logger logger = newLogger(uri);
Assert.AreEqual(logger.GetFileName(), "Test.txt");
Assert.AreNotSame(logger.GetFileName(), logger.GetTestRenamedFileName());
}
[Test]
public void logger() {
String uri = "tcp://localhost:4008?filter=Logger";
Logger.testFlag = true;
Logger logger = newLogger(uri);
logger.SetSession( session );
Assert.AreSame(transport.GetSession(),logger);
Assert.AreSame(logger.GetSession(),session);
}
[Test]
public void logger1()
{
String uri = "tcp://localhost:4008?filter=Logger";
Logger.testFlag = true;
Logger logger = newLogger(uri);
logger.SetSession(session);
Assert.AreSame(transport.GetSession(), logger);
Assert.AreSame(logger.GetSession(), session);
Message m = constructMessage();
logger.TransportMessage(null,m);
Assert.AreEqual(m.ToString(),transport.msg.ToString());
}
[Test]
public void logger2()
{
String uri = "tcp://localhost:4008?filter=Logger";
Logger.testFlag = true;
Logger logger = newLogger(uri);
logger.SetSession(session);
Assert.AreSame(transport.GetSession(), logger);
Assert.AreSame(logger.GetSession(), session);
Message m = constructMessage();
logger.SessionMessage(null, m);
Assert.AreEqual(m.ToString(), session.msg.ToString());
}
private Message constructMessage()
{
XType mt_request = new XType( "_Etch_Logger_Test" );
XType mt_response = new XType( "_Etch_Logger_Test_Resp" );
mt_request.SetResult( mt_response );
vf.AddType( mt_request);
Message msg = new Message( mt_request, vf );
return msg;
}
public enum What
{
TRANSPORT_MESSAGE,
SESSION_MESSAGE
}
static Object cook(Object o)
{
if (o is Exception)
{
Exception e = (Exception)o;
e.GetBaseException();
throw e;
}
return o;
}
public class MyTransport : TransportMessage
{
public What what;
public Who recipient;
public Message msg;
public Object is_server;
private SessionMessage session;
#region TransportMessage Members
public void TransportMessage(Who recipient, Org.Apache.Etch.Bindings.Csharp.Msg.Message msg)
{
this.what = What.TRANSPORT_MESSAGE;
this.recipient = recipient;
this.msg = msg;
}
#endregion
#region Transport<SessionMessage> Members
public object TransportQuery(object query)
{
if ((string)query == TransportConsts.IS_SERVER)
return cook(is_server);
throw new Exception("The method or operation is not implemented.");
}
public void TransportControl(object control, object value)
{
throw new Exception("The method or operation is not implemented.");
}
public void TransportNotify(object eventObj)
{
throw new Exception("The method or operation is not implemented.");
}
public void SetSession(SessionMessage session)
{
this.session = session;
}
public SessionMessage GetSession()
{
return session;
}
#endregion
}
public class MySession : SessionMessage
{
public What what;
public Who sender;
public Message msg;
public bool handled;
public Object user;
public Object password;
public Boolean up;
#region SessionMessage Members
public bool SessionMessage(Who sender, Org.Apache.Etch.Bindings.Csharp.Msg.Message msg)
{
this.what = What.SESSION_MESSAGE;
this.sender = sender;
this.msg = msg;
return handled;
}
#endregion
#region Session Members
public object SessionQuery(object query)
{
return query;
}
public void SessionControl(object control, object value)
{
throw new Exception("The method or operation is not implemented.");
}
public void SessionNotify(object eventObj)
{
if (eventObj.Equals(SessionConsts.UP))
{
up = true;
return;
}
if (eventObj.Equals(SessionConsts.DOWN))
{
up = false;
return;
}
throw new Exception("The method or operation is not implemented.");
}
#endregion
}
public class MyValueFactory : DefaultValueFactory
{
public MyValueFactory(String uri)
: base(uri, types, class2type)
{
}
private readonly static TypeMap types = new TypeMap();
private readonly static Class2TypeMap class2type = new Class2TypeMap();
static MyValueFactory()
{
DefaultValueFactory.Init(types, class2type);
}
}
}
}