public async Task ReadOnlyPramsWriteFail() { var i = 0; var j = 0; var values = new List <Pv2ParamType> { new Pv2IntParamType($"INT{i}", $"Description of param {i}", $"GROUP{j}", "{0} items", "items", flags: Pv2ParamFlags.ReadOnly), new Pv2UIntParamType($"UINT{i}", $"Description of param {i}", $"GROUP{j}", "{0} items", "items", flags: Pv2ParamFlags.ReadOnly), new Pv2DoubleParamType($"Double{i}", $"Description of param {i}", $"GROUP{j}", "{0} items", "items", flags: Pv2ParamFlags.ReadOnly), new Pv2FloatParamType($"Float{i}", $"Description of param {i}", $"GROUP{j}", "{0} items", "items", flags: Pv2ParamFlags.ReadOnly), new Pv2StringParamType($"String{i}", $"Description of param {i}", $"GROUP{j}", defaultValue: $"{i:N5}", flags: Pv2ParamFlags.ReadOnly), new Pv2EnumParamType($"Enum{i}", $"Description of param {i}", $"GROUP{j}", "ITEM1", Pv2ParamFlags.ReadOnly, "ITEM0", "ITEM1", "ITEM2"), new Pv2BoolParamType($"Bool{i}", $"Description of param {i}", $"GROUP{j}", flags: Pv2ParamFlags.ReadOnly), new Pv2FlagsParamType($"Flags{i}", $"Description of param {i}", $"GROUP{j}", "On", "Off", Pv2ParamFlags.ReadOnly, ("Flag0", true), ("Flag1", true), ("Flag2", true), ("Flag3", true), ("Flag4", true), ("Flag5", true) ) }; PayloadV2TestHelper.CreateParams(out var clientParams, out var serverParams, values); await clientParams.RequestAll(); foreach (var value in values) { await Assert.ThrowsAsync <InternalPv2Exception>(async() => { await clientParams.Write(value, (type, paramValue) => { }); }); } }
public async Task Over300Params(int count, int groups) { var values = new List <Pv2ParamType>(count); for (var j = 0; j < groups; j++) { for (var i = 0; i < count; i++) { values.Add(new Pv2IntParamType($"INT{i}", $"Description of param {i}", $"GROUP{j}", "{0} items", "items")); values.Add(new Pv2UIntParamType($"UINT{i}", $"Description of param {i}", $"GROUP{j}", "{0} items", "items")); values.Add(new Pv2DoubleParamType($"Double{i}", $"Description of param {i}", $"GROUP{j}", "{0} items", "items")); values.Add(new Pv2FloatParamType($"Float{i}", $"Description of param {i}", $"GROUP{j}", "{0} items", "items")); values.Add(new Pv2StringParamType($"String{i}", $"Description of param {i}", $"GROUP{j}", $"{i:N5}")); values.Add(new Pv2EnumParamType($"Enum{i}", $"Description of param {i}", $"GROUP{j}", "ITEM1", Pv2ParamFlags.NoFlags, "ITEM0", "ITEM1", "ITEM2")); values.Add(new Pv2BoolParamType($"Bool{i}", $"Description of param {i}", $"GROUP{j}")); values.Add(new Pv2FlagsParamType($"Flags{i}", $"Description of param {i}", $"GROUP{j}", "On", "Off", Pv2ParamFlags.NoFlags, ("Flag0", true), ("Flag1", true), ("Flag2", true), ("Flag3", true), ("Flag4", true), ("Flag5", true) )); } } _output.WriteLine($"Total params {values.Count} items"); PayloadV2TestHelper.CreateParams(out var clientParams, out var serverParams, values); //serverParams.IsSendUpdateEnabled = false; for (var i = 0; i < values.Count; i++) { switch (values[i].TypeEnum) { case Pv2ParamTypeEnum.Unknown: break; case Pv2ParamTypeEnum.Int: serverParams.WriteInt(values[i], 10 * (i % 2 == 0 ? -1 : 1)); var value = serverParams.ReadInt(values[i]); Assert.Equal(10 * (i % 2 == 0 ? -1 : 1), value); break; case Pv2ParamTypeEnum.UInt: serverParams.WriteUInt(values[i], (uint)(i * 20)); var value2 = serverParams.ReadUInt(values[i]); Assert.Equal((uint)(i * 20), value2); break; case Pv2ParamTypeEnum.Double: serverParams.WriteDouble(values[i], (i * double.Epsilon)); var value3 = serverParams.ReadDouble(values[i]); Assert.Equal((i * double.Epsilon), value3); break; case Pv2ParamTypeEnum.Float: serverParams.WriteFloat(values[i], (i * float.Epsilon)); var value4 = serverParams.ReadFloat(values[i]); Assert.Equal((i * float.Epsilon), value4); break; case Pv2ParamTypeEnum.String: serverParams.WriteString(values[i], (i * float.Epsilon).ToString()); var value5 = serverParams.ReadString(values[i]); Assert.Equal((i * float.Epsilon).ToString(), value5); break; case Pv2ParamTypeEnum.Enum: var enumStr = "ITEM" + (i % 3); serverParams.WriteEnum(values[i], enumStr); var value9 = serverParams.ReadEnum(values[i]); Assert.Equal(enumStr, value9); break; case Pv2ParamTypeEnum.Bool: var boolVal = i % 2 == 0; serverParams.WriteBool(values[i], boolVal); var value10 = serverParams.ReadBool(values[i]); Assert.Equal(boolVal, value10); break; case Pv2ParamTypeEnum.Flags: var flagValue = new UintBitArray(Enumerable.Range(0, 6).Select(_ => _ % 3 == 0)); serverParams.WriteFlagValue(values[i], flagValue); var value11 = serverParams.ReadFlagValue(values[i]); Assert.Equal(flagValue.Value, value11.Value); break; default: throw new ArgumentOutOfRangeException(); } } var sw = new Stopwatch(); while (serverParams.IsSendingUpdate.Value == false) { await Task.Delay(TimeSpan.FromMilliseconds(30)); } sw.Start(); while (serverParams.IsSendingUpdate.Value == true) { await Task.Delay(TimeSpan.FromMilliseconds(30)); } //serverParams.IsSendUpdateEnabled = true; _output.WriteLine($"Sending updated {sw.ElapsedMilliseconds} ms"); sw.Restart(); await clientParams.RequestAll(); sw.Stop(); _output.WriteLine($"Request all by {sw.ElapsedMilliseconds} ms"); for (var i = 0; i < values.Count; i++) { switch (values[i].TypeEnum) { case Pv2ParamTypeEnum.Unknown: break; case Pv2ParamTypeEnum.Int: var value = clientParams.ReadInt(values[i]); var serverValue = serverParams.ReadInt(values[i]); Assert.Equal(serverValue, value); break; case Pv2ParamTypeEnum.UInt: var value2 = clientParams.ReadUInt(values[i]); var serverValue2 = serverParams.ReadUInt(values[i]); Assert.Equal(serverValue2, value2); break; case Pv2ParamTypeEnum.Double: var value3 = clientParams.ReadDouble(values[i]); var serverValue3 = serverParams.ReadDouble(values[i]); Assert.Equal(serverValue3, value3); break; case Pv2ParamTypeEnum.Float: var value4 = clientParams.ReadFloat(values[i]); var serverValue4 = serverParams.ReadFloat(values[i]); Assert.Equal(value4, serverValue4); break; case Pv2ParamTypeEnum.String: var value5 = clientParams.ReadString(values[i]); var serverValue5 = serverParams.ReadString(values[i]); Assert.Equal(value5, serverValue5); break; case Pv2ParamTypeEnum.Enum: var enumStr = "ITEM" + (i % 3); var value9 = clientParams.ReadEnum(values[i]); var serverValue9 = serverParams.ReadEnum(values[i]); Assert.Equal(enumStr, value9); Assert.Equal(enumStr, serverValue9); break; case Pv2ParamTypeEnum.Bool: var boolVal = i % 2 == 0; var value10 = clientParams.ReadBool(values[i]); var serverValue10 = serverParams.ReadBool(values[i]); Assert.Equal(boolVal, value10); Assert.Equal(boolVal, serverValue10); break; case Pv2ParamTypeEnum.Flags: var flagValue = new UintBitArray(Enumerable.Range(0, 6).Select(_ => _ % 3 == 0)); var value11 = clientParams.ReadFlagValue(values[i]); var serverValue11 = serverParams.ReadFlagValue(values[i]); Assert.Equal(flagValue.Value, value11.Value); Assert.Equal(flagValue.Value, serverValue11.Value); break; default: throw new ArgumentOutOfRangeException(); } } sw.Restart(); await clientParams.RequestAll(); _output.WriteLine($"Request only values {sw.ElapsedMilliseconds} ms"); var rxBytesSrv = serverParams.Server.Server.MavlinkV2Connection.DataStream.RxBytes; var txBytesSrv = serverParams.Server.Server.MavlinkV2Connection.DataStream.TxBytes; var rxPacketsSrv = serverParams.Server.Server.MavlinkV2Connection.RxPackets; var txPacketsSrv = serverParams.Server.Server.MavlinkV2Connection.TxPackets; _output.WriteLine($"SERVER: TX {txBytesSrv:N} bytes ({txPacketsSrv:N} packets)"); _output.WriteLine($"SERVER: RX {rxBytesSrv:N} bytes ({rxPacketsSrv:N} packets)"); var rxBytesClient = clientParams.Client.Client.MavlinkV2Connection.DataStream.RxBytes; var txBytesClient = clientParams.Client.Client.MavlinkV2Connection.DataStream.TxBytes; var rxPacketsClient = clientParams.Client.Client.MavlinkV2Connection.RxPackets; var txPacketsClient = clientParams.Client.Client.MavlinkV2Connection.TxPackets; _output.WriteLine($"CLIENT: TX {txBytesClient:N} bytes ({txPacketsClient:N} packets)"); _output.WriteLine($"CLIENT: RX {rxBytesClient:N} bytes ({rxPacketsClient:N} packets)"); }