Example #1
0
        public void AllJoynStructs()
        {
            TestStruct testStruct = new TestStruct();
            testStruct.a = 42;
            testStruct.b = "Hello";
            testStruct.c = "World";
            testStruct.d = 88;

            AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
            object[] mystruct = new object[4];
            mystruct[0] = testStruct.a;
            mystruct[1] = testStruct.b;
            mystruct[2] = testStruct.c;
            mystruct[3] = testStruct.d;
            AllJoyn.QStatus status = arg.Set("(issi)", mystruct);
            Assert.Equal(AllJoyn.QStatus.OK, status);

            object outstruct;
            status = arg.Get("(issi)", out outstruct);
            Assert.Equal(AllJoyn.QStatus.OK, status);
            object[] outstructa = (object[])outstruct;
            Assert.Equal(4, outstructa.Length);
            Assert.Equal(testStruct.a, (int)outstructa[0]);
            Assert.Equal(testStruct.b, (string)outstructa[1]);
            Assert.Equal(testStruct.c, (string)outstructa[2]);
            Assert.Equal(testStruct.d, (int)outstructa[3]);
            arg.Dispose();
            arg = new AllJoyn.MsgArg();

            //struct within a struct
            object[] mystruct2 = new object[2];
            mystruct2[0] = "bob";
            mystruct2[1] = mystruct;
            status = arg.Set("(s(issi))", mystruct2);
            Assert.Equal(AllJoyn.QStatus.OK, status);

            status = arg.Get("(s(issi))", out outstruct);
            object[] outstruct1 = (object[])outstruct;
            Assert.Equal(2, outstruct1.Length);
            object[] outstruct2 = (object[])outstruct1[1];
            Assert.Equal(4, outstruct2.Length);

            Assert.Equal("bob", (string)outstruct1[0]);
            Assert.Equal(testStruct.a, (int)outstruct2[0]);
            Assert.Equal(testStruct.b, (string)outstruct2[1]);
            Assert.Equal(testStruct.c, (string)outstruct2[2]);
            Assert.Equal(testStruct.d, (int)outstruct2[3]);
        }
Example #2
0
		public void Properties()
		{
			//SetUp Service
			//start service BusAttachment
			AllJoyn.BusAttachment serviceBus = new AllJoyn.BusAttachment("MessageTestService", true);
			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.Start());
			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.Connect(AllJoynTestCommon.GetConnectSpec()));

			TestBusListener testBusListener = new TestBusListener(this);
			serviceBus.RegisterBusListener(testBusListener);

			//Create and activate the service Interface
			AllJoyn.InterfaceDescription testIntf = null;
			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.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();

			//create and register BusObject
			MessageTestBusObject busObj = new MessageTestBusObject(OBJECT_PATH);
			busObj.AddInterface(testIntf);
			AllJoyn.InterfaceDescription.Member ping;
			ping = testIntf.GetMember("ping");
			Assert.NotNull(ping);

			Assert.Equal(AllJoyn.QStatus.OK, busObj.AddMethodHandler(ping, busObj.Ping));

			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.RegisterBusObject(busObj));

			_nameOwnerChangedFlag = false;
			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.RequestName(WELLKNOWN_NAME, AllJoyn.DBus.NameFlags.ReplaceExisting |
																					AllJoyn.DBus.NameFlags.DoNotQueue |
																					AllJoyn.DBus.NameFlags.AllowReplacement));
			Wait(TimeSpan.FromSeconds(2));

			Assert.True(_nameOwnerChangedFlag);


			// SetUp Client
			// start client BusAttachment
			AllJoyn.BusAttachment clientBus = new AllJoyn.BusAttachment("MessageTestClient", true);
			Assert.Equal(AllJoyn.QStatus.OK, clientBus.Start());
			Assert.Equal(AllJoyn.QStatus.OK, clientBus.Connect(AllJoynTestCommon.GetConnectSpec()));

			AllJoyn.ProxyBusObject proxyObj = new AllJoyn.ProxyBusObject(clientBus, INTERFACE_NAME, OBJECT_PATH, 0);

			Assert.Equal(AllJoyn.QStatus.OK, proxyObj.IntrospectRemoteObject());

			AllJoyn.Message reply = new AllJoyn.Message(clientBus);
			AllJoyn.MsgArg input = new AllJoyn.MsgArg("s", "AllJoyn");

			proxyObj.MethodCall(INTERFACE_NAME, "ping", input, reply, 25000, 0);

			// Actual tests for GetArg/GetArgs
			// check the message properties
			Assert.False(reply.IsBroadcastSignal);
			Assert.False(reply.IsGlobalBroadcast);
			Assert.False(reply.IsSessionless);
			Assert.False(reply.IsExpired());
			uint timeLeft;
			reply.IsExpired(out timeLeft);
			Assert.True(timeLeft > 0);
			Assert.False(reply.IsUnreliable);
			Assert.False(reply.IsEncrypted);
			// we don't expect any flags
			Assert.Equal((byte)0, reply.Flags);
			// no security is being used so there should be no security mechanism
			Assert.Equal("", reply.AuthMechanism);
			Assert.Equal(AllJoyn.Message.Type.MethodReturn, reply.MessageType);
			// The serial is unknown before hand but it should not be zero
			Assert.NotEqual<uint>(0u, reply.CallSerial);
			Assert.NotEqual<uint>(0u, reply.ReplySerial);
			// A method return does not have an Object Path
			Assert.Equal("", reply.ObjectPath);
			// A method return does not have an interface specified
			Assert.Equal("", reply.Interface);
			// The member name is not specified on a message return
			Assert.Equal("", reply.MemberName);
			// TODO possible error the documentation for Sender states it should
			// be returning the well-known name however in this case it is
			// returning the unique name of the sender.
			Assert.Equal(serviceBus.UniqueName, reply.Sender);
			Assert.Equal(clientBus.UniqueName, reply.ReceiveEndPointName);
			Assert.Equal(clientBus.UniqueName, reply.Destination);
			Assert.Equal(0u, reply.CompressionToken);
			// no session set up for this test Session Id should be 0
			Assert.Equal(0u, reply.SessionId);
			String errorMsg;
			// TODO produce test that generates actual error Message
			Assert.Null(reply.GetErrorName(out errorMsg));
			Assert.Equal("", errorMsg);
			// The  ToString method only returns a string when running debug code
#if DEBUG
			Assert.True(reply.ToString().StartsWith("<message endianness="));
			Assert.True(reply.ToString().Contains("<header field=\"REPLY_SERIAL\">"));
			Assert.True(reply.ToString().Contains("<header field=\"DESTINATION\">"));
			Assert.True(reply.ToString().Contains("<header field=\"SENDER\">"));
			Assert.True(reply.ToString().Contains("<header field=\"SIGNATURE\">"));
			Assert.True(reply.ToString().Contains("<signature>s</signature>"));
			Assert.True(reply.ToString().Contains("<string>AllJoyn</string>"));
			Assert.True(reply.ToString().EndsWith("</message>"));

			// this call to description should return 'METHID_RET[<reply serial>](s)'
			Assert.True(reply.Description.StartsWith("METHOD_RET["));
#else
			Assert.Equal("", reply.ToString());
			Assert.Equal("", reply.Description);
#endif
			// TODO figure out a good way to test the TimeStamp property
			//reply.TimeStamp

			// CleanUp
			serviceBus.UnregisterBusListener(testBusListener);
			reply.Dispose();
			input.Dispose();
			proxyObj.Dispose();
			clientBus.Dispose();

			testBusListener.Dispose();
			busObj.Dispose();
			serviceBus.Dispose();
		}
Example #3
0
		public void GetArgs()
		{
			//SetUp Service
			//start service BusAttachment
			AllJoyn.BusAttachment serviceBus = new AllJoyn.BusAttachment("MessageTestService", true);
			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.Start());
			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.Connect(AllJoynTestCommon.GetConnectSpec()));

			TestBusListener testBusListener = new TestBusListener(this);
			serviceBus.RegisterBusListener(testBusListener);

			//Create and activate the service Interface
			AllJoyn.InterfaceDescription testIntf = null;
			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.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();

			//create and register BusObject
			MessageTestBusObject busObj = new MessageTestBusObject(OBJECT_PATH);
			busObj.AddInterface(testIntf);
			AllJoyn.InterfaceDescription.Member ping;
			ping = testIntf.GetMember("ping");
			Assert.NotNull(ping);

			Assert.Equal(AllJoyn.QStatus.OK, busObj.AddMethodHandler(ping, busObj.Ping));

			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.RegisterBusObject(busObj));

			_nameOwnerChangedFlag = false;
			Assert.Equal(AllJoyn.QStatus.OK, serviceBus.RequestName(WELLKNOWN_NAME, AllJoyn.DBus.NameFlags.ReplaceExisting |
																					AllJoyn.DBus.NameFlags.DoNotQueue |
																					AllJoyn.DBus.NameFlags.AllowReplacement));
			Wait(TimeSpan.FromSeconds(2));
			Assert.True(_nameOwnerChangedFlag);


			//SetUp Client
			//start client BusAttachment
			AllJoyn.BusAttachment clientBus = new AllJoyn.BusAttachment("MessageTestClient", true);
			Assert.Equal(AllJoyn.QStatus.OK, clientBus.Start());
			Assert.Equal(AllJoyn.QStatus.OK, clientBus.Connect(AllJoynTestCommon.GetConnectSpec()));

			AllJoyn.ProxyBusObject proxyObj = new AllJoyn.ProxyBusObject(clientBus, WELLKNOWN_NAME, OBJECT_PATH, 0);

			Assert.Equal(AllJoyn.QStatus.OK, proxyObj.IntrospectRemoteObject());

			AllJoyn.Message reply = new AllJoyn.Message(clientBus);
			AllJoyn.MsgArg input = new AllJoyn.MsgArg("s", "AllJoyn");

			proxyObj.MethodCall(INTERFACE_NAME, "ping", input, reply, 25000, 0);

			//Actual tests for GetArg/GetArgs
			// call using GetArg specifying the array index
			Assert.Equal("AllJoyn", (string)reply.GetArg(0));
			// use the this[] operator call to get the MsgArg
			Assert.Equal("AllJoyn", (string)(reply[0]));
			// Return the MsgArgs note could be multiple values
			AllJoyn.MsgArg replyArg = reply.GetArgs();
			Assert.Equal(1, replyArg.Length);
			Assert.Equal("AllJoyn", (string)replyArg);
			// Parse the Message Drectly
			object replyString;
			Assert.Equal(AllJoyn.QStatus.OK, reply.GetArgs("s", out replyString));
			Assert.Equal("AllJoyn", (string)replyString);

			serviceBus.UnregisterBusListener(testBusListener);
			reply.Dispose();
			input.Dispose();
			proxyObj.Dispose();
			clientBus.Dispose();

			testBusListener.Dispose();
			busObj.Dispose();
			serviceBus.Dispose();
		}
Example #4
0
        public void VariantOfVariants()
        {
            string s = "this is a string";
            AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
            AllJoyn.MsgArg variantArg1 = new AllJoyn.MsgArg();
            AllJoyn.MsgArg variantArg2 = new AllJoyn.MsgArg();

            Assert.Equal(AllJoyn.QStatus.OK, arg.Set("s", s));
            Assert.Equal(AllJoyn.QStatus.OK, variantArg1.Set("v", arg));
            Assert.Equal(AllJoyn.QStatus.OK, variantArg2.Set("v", variantArg1));

            string s_out;
            Assert.Equal(AllJoyn.QStatus.OK, variantArg2.Get(out s_out));
            Assert.Equal(s, s_out);
            arg.Dispose();
            variantArg1.Dispose();
            variantArg2.Dispose();

            arg = new AllJoyn.MsgArg();
            variantArg1 = new AllJoyn.MsgArg();
            variantArg2 = new AllJoyn.MsgArg();
            //with struct container (See VariantOfStructs test)
            object[] in_v_struct = new object[] { (byte)24, true, (short)42, 3.14159, "Gonzo the magnificant" };
            Assert.Equal(AllJoyn.QStatus.OK, arg.Set("(ybnds)", in_v_struct));

            Assert.Equal(AllJoyn.QStatus.OK, variantArg1.Set("v", arg));
            Assert.Equal(AllJoyn.QStatus.OK, variantArg2.Set("v", variantArg1));

            //nest variants do not have to be unpacked multiple times even when they have a container type
            object tmp;
            Assert.Equal(AllJoyn.QStatus.OK, variantArg2.Get("v", out tmp));
            object tmp2;
            Assert.Equal(AllJoyn.QStatus.BUS_SIGNATURE_MISMATCH, ((AllJoyn.MsgArg)tmp).Get("v", out tmp2));
            object out_v_struct;
            Assert.Equal(AllJoyn.QStatus.BUS_BAD_SIGNATURE, variantArg2.Get("(ybnds)", out out_v_struct));
            Assert.Equal(AllJoyn.QStatus.OK, ((AllJoyn.MsgArg)tmp).Get("(ybnds)", out out_v_struct));
            object[] ovs = (object[])out_v_struct;
            Assert.Equal(5, ovs.Length);
            Assert.Equal((byte)24, (byte)ovs[0]);
            Assert.True((bool)ovs[1]);
            Assert.Equal((short)42, (short)ovs[2]);
            Assert.Equal(3.14159, (double)ovs[3]);
            Assert.Equal("Gonzo the magnificant", (string)ovs[4]);
        }