//-----------------------------------------------------------------------
//
// Copyright (c) 2013, AllSeen Alliance. All rights reserved.
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
//-----------------------------------------------------------------------
using System;
using System.Threading;
using AllJoynUnity;
using Xunit;
namespace AllJoynUnityTest
{
public class ProxyBusObjectTest : IDisposable
{
//private static string WELLKNOWN_NAME = "org.alljoyn.test.ProxyBusObjectTest";
//private static string OBJECT_PATH = "/org/alljoyn/test/ProxyBusObjectTest";
private static string INTERFACE_NAME = "org.alljoyn.test.ProxyBusObjectTest";
private AllJoyn.BusAttachment busAttachment = null;
private AllJoyn.ProxyBusObject proxyBusObject = null;
private bool disposed = false;
public ProxyBusObjectTest()
{
busAttachment = new AllJoyn.BusAttachment("ProxyBusObjectTest", false);
Assert.Equal(AllJoyn.QStatus.OK, busAttachment.Start());
Assert.Equal(AllJoyn.QStatus.OK, busAttachment.Connect(AllJoynTestCommon.GetConnectSpec()));
}
~ProxyBusObjectTest()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
if (proxyBusObject != null)
{
proxyBusObject.Dispose();
}
Assert.Equal(AllJoyn.QStatus.OK, busAttachment.Stop());
Assert.Equal(AllJoyn.QStatus.OK, busAttachment.Join());
busAttachment.Dispose();
}
disposed = true;
}
}
[Fact]
public void CreateDispose()
{
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, "org.alljoyn.Bus", "/org/alljoyn/Bus", 0);
Assert.NotNull(proxyBusObject);
}
[Fact]
public void IntrospectRemoteObject()
{
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, "org.alljoyn.Bus", "/org/alljoyn/Bus", 0);
Assert.NotNull(proxyBusObject);
Assert.Equal(AllJoyn.QStatus.OK, proxyBusObject.IntrospectRemoteObject());
AllJoyn.InterfaceDescription interfaceDescription = proxyBusObject.GetInterface("org.freedesktop.DBus.Introspectable");
string expectedIntrospect = "\n" +
" \n" +
" \n" +
" \n" +
"\n";
Assert.Equal(expectedIntrospect, interfaceDescription.Introspect());
}
[Fact]
public void Path()
{
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, "org.alljoyn.Bus", "/org/alljoyn/Bus", 0);
Assert.NotNull(proxyBusObject);
Assert.Equal("/org/alljoyn/Bus", proxyBusObject.Path);
}
[Fact]
public void ServiceName()
{
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, "org.alljoyn.Bus", "/org/alljoyn/Bus", 0);
Assert.NotNull(proxyBusObject);
Assert.Equal("org.alljoyn.Bus", proxyBusObject.ServiceName);
}
[Fact]
public void SessionId()
{
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, "org.alljoyn.Bus", "/org/alljoyn/Bus", 0);
Assert.NotNull(proxyBusObject);
Assert.Equal(0u, proxyBusObject.SessionId);
/*
* TODO set up a session with a real session and make sure that proxyObj
* has and will return the proper sessionid.
*/
}
[Fact]
public void ImplementsInterface()
{
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, "org.alljoyn.Bus", "/org/alljoyn/Bus", 0);
Assert.NotNull(proxyBusObject);
Assert.Equal(AllJoyn.QStatus.OK, proxyBusObject.IntrospectRemoteObject());
Assert.True(proxyBusObject.ImplementsInterface("org.alljoyn.Bus"));
Assert.True(proxyBusObject.ImplementsInterface("org.alljoyn.Daemon"));
Assert.False(proxyBusObject.ImplementsInterface("org.alljoyn.Invalid"));
}
[Fact]
public void GetInteface()
{
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, "org.alljoyn.Bus", "/org/alljoyn/Bus", 0);
Assert.NotNull(proxyBusObject);
Assert.Equal(AllJoyn.QStatus.OK, proxyBusObject.IntrospectRemoteObject());
AllJoyn.InterfaceDescription iface = proxyBusObject.GetInterface("org.freedesktop.DBus.Introspectable");
string expectedIntrospect = "\n" +
" \n" +
" \n" +
" \n" +
"\n";
Assert.Equal(expectedIntrospect, iface.Introspect());
Assert.Null(proxyBusObject.GetInterface("org.alljoyn.not.a.real.interface"));
}
[Fact]
public void AddInterface()
{
AllJoyn.InterfaceDescription testIntf = null;
Assert.Equal(AllJoyn.QStatus.OK, busAttachment.CreateInterface(INTERFACE_NAME, out testIntf));
Assert.NotNull(testIntf);
Assert.Equal(AllJoyn.QStatus.OK, testIntf.AddMember(AllJoyn.Message.Type.MethodCall, "ping", "s", "s", "in,out"));
testIntf.Activate();
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, "org.alljoyn.Bus", "/org/alljoyn/Bus", 0);
Assert.NotNull(proxyBusObject);
Assert.Equal(AllJoyn.QStatus.OK, proxyBusObject.AddInterface(testIntf));
Assert.True(proxyBusObject.ImplementsInterface(INTERFACE_NAME));
}
[Fact]
public void ParseXml()
{
string busObjectXML = "" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
"\n";
proxyBusObject = new AllJoyn.ProxyBusObject(busAttachment, null, null, 0);
Assert.NotNull(proxyBusObject);
Assert.Equal(AllJoyn.QStatus.OK, proxyBusObject.ParseXml(busObjectXML));
Assert.True(proxyBusObject.ImplementsInterface("org.alljoyn.test.ProxyBusObjectTest"));
AllJoyn.InterfaceDescription iface = proxyBusObject.GetInterface("org.alljoyn.test.ProxyBusObjectTest");
Assert.NotNull(iface);
string expectedIntrospect = "\n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
"\n";
Assert.Equal(expectedIntrospect, iface.Introspect());
}
}
}