This is an automated email from the ASF dual-hosted git repository. aaronai pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
commit 912b37526452a8f328a4dfc382f4073074ea53b7 Author: Aaron Ai <yangkun....@gmail.com> AuthorDate: Mon Mar 6 18:30:09 2023 +0800 Add more tests --- .../examples/ProducerTransactionMessageExample.cs | 2 +- csharp/examples/SimpleConsumerExample.cs | 2 +- csharp/rocketmq-client-csharp/Broker.cs | 2 +- csharp/rocketmq-client-csharp/ClientManager.cs | 4 +- csharp/rocketmq-client-csharp/ClientMeter.cs | 6 +- .../ConfigFileCredentialsProvider.cs | 18 ++-- csharp/rocketmq-client-csharp/Consumer.cs | 2 +- .../ExponentialBackoffRetryPolicy.cs | 6 +- csharp/rocketmq-client-csharp/IClientManager.cs | 44 ++++++++- csharp/rocketmq-client-csharp/IConsumer.cs | 27 ------ csharp/rocketmq-client-csharp/IRetryPolicy.cs | 7 +- csharp/rocketmq-client-csharp/Message.cs | 4 + csharp/rocketmq-client-csharp/MessageQueue.cs | 2 +- csharp/rocketmq-client-csharp/Producer.cs | 8 +- csharp/rocketmq-client-csharp/PublishingMessage.cs | 2 +- .../rocketmq-client-csharp/PublishingSettings.cs | 2 +- csharp/rocketmq-client-csharp/Resource.cs | 4 +- csharp/rocketmq-client-csharp/Settings.cs | 4 +- csharp/rocketmq-client-csharp/Topic.cs | 4 +- .../rocketmq-client-csharp/TopicRouteException.cs | 29 ------ csharp/rocketmq-client-csharp/Transaction.cs | 4 +- .../TransactionResolution.cs | 6 +- .../rocketmq-client-csharp.csproj | 2 +- csharp/tests/ConfigFileCredentialsProviderTest.cs | 11 ++- csharp/tests/DateTimeTest.cs | 14 +-- csharp/tests/EndpointsTest.cs | 17 +++- csharp/tests/MessageTest.cs | 22 ++++- csharp/tests/MqLogManagerTest.cs | 1 + csharp/tests/PublishingMessageTest.cs | 103 +++++++++++++++++++++ csharp/tests/SendResultTest.cs | 33 ------- csharp/tests/SignatureTest.cs | 44 --------- csharp/tests/TopicTest.cs | 51 ---------- csharp/tests/UnitTest1.cs | 82 ---------------- csharp/tests/tests.csproj | 4 +- 34 files changed, 238 insertions(+), 335 deletions(-) diff --git a/csharp/examples/ProducerTransactionMessageExample.cs b/csharp/examples/ProducerTransactionMessageExample.cs index f9c34ffa..1b5b7aa4 100644 --- a/csharp/examples/ProducerTransactionMessageExample.cs +++ b/csharp/examples/ProducerTransactionMessageExample.cs @@ -31,7 +31,7 @@ namespace examples public TransactionResolution Check(MessageView messageView) { Logger.Info("Receive transaction check, messageId={}", messageView.MessageId); - return TransactionResolution.COMMIT; + return TransactionResolution.Commit; } } diff --git a/csharp/examples/SimpleConsumerExample.cs b/csharp/examples/SimpleConsumerExample.cs index 25fba533..fd0d9d7a 100644 --- a/csharp/examples/SimpleConsumerExample.cs +++ b/csharp/examples/SimpleConsumerExample.cs @@ -56,7 +56,7 @@ namespace examples var messageViews = await simpleConsumer.Receive(16, TimeSpan.FromSeconds(15)); foreach (var message in messageViews) { - Logger.Info($"Received a message, topic={message.Topic}, message-id={message.MessageId}"); + Logger.Info($"Received a message, topic={message.Topic}, message-id={message.MessageId}, body-size={message.Body.Length}"); await simpleConsumer.Ack(message); Logger.Info($"Message is acknowledged successfully, message-id={message.MessageId}"); // await simpleConsumer.ChangeInvisibleDuration(message, TimeSpan.FromSeconds(15)); diff --git a/csharp/rocketmq-client-csharp/Broker.cs b/csharp/rocketmq-client-csharp/Broker.cs index 6a2f957a..d42d03b1 100644 --- a/csharp/rocketmq-client-csharp/Broker.cs +++ b/csharp/rocketmq-client-csharp/Broker.cs @@ -34,7 +34,7 @@ namespace Org.Apache.Rocketmq public Proto.Broker ToProtobuf() { - return new Proto.Broker() + return new Proto.Broker { Name = Name, Id = Id, diff --git a/csharp/rocketmq-client-csharp/ClientManager.cs b/csharp/rocketmq-client-csharp/ClientManager.cs index 9d0b92a5..808d73f1 100644 --- a/csharp/rocketmq-client-csharp/ClientManager.cs +++ b/csharp/rocketmq-client-csharp/ClientManager.cs @@ -27,13 +27,13 @@ namespace Org.Apache.Rocketmq public class ClientManager : IClientManager { private readonly Client _client; - private readonly Dictionary<Endpoints, RpcClient> _rpcClients; + private readonly Dictionary<Endpoints, IRpcClient> _rpcClients; private readonly ReaderWriterLockSlim _clientLock; public ClientManager(Client client) { _client = client; - _rpcClients = new Dictionary<Endpoints, RpcClient>(); + _rpcClients = new Dictionary<Endpoints, IRpcClient>(); _clientLock = new ReaderWriterLockSlim(); } diff --git a/csharp/rocketmq-client-csharp/ClientMeter.cs b/csharp/rocketmq-client-csharp/ClientMeter.cs index 53fc2cdf..e4360cd1 100644 --- a/csharp/rocketmq-client-csharp/ClientMeter.cs +++ b/csharp/rocketmq-client-csharp/ClientMeter.cs @@ -38,11 +38,11 @@ namespace Org.Apache.Rocketmq ClientId = clientId; } - public Endpoints Endpoints { get; } + private Endpoints Endpoints { get; } - public MeterProvider MeterProvider { get; } + private MeterProvider MeterProvider { get; } - public string ClientId { get; } + private string ClientId { get; } public bool Enabled { get; } diff --git a/csharp/rocketmq-client-csharp/ConfigFileCredentialsProvider.cs b/csharp/rocketmq-client-csharp/ConfigFileCredentialsProvider.cs index b30d85d5..93b9e9ef 100644 --- a/csharp/rocketmq-client-csharp/ConfigFileCredentialsProvider.cs +++ b/csharp/rocketmq-client-csharp/ConfigFileCredentialsProvider.cs @@ -23,13 +23,12 @@ using NLog; namespace Org.Apache.Rocketmq { - /** * File-based credentials provider that reads JSON configurations from ${HOME}/.rocketmq/config * A sample config content is as follows: * {"AccessKey": "key", "AccessSecret": "secret"} */ - public class ConfigFileCredentialsProvider + public class ConfigFileCredentialsProvider { private static readonly Logger Logger = MqLogManager.Instance.GetCurrentClassLogger(); @@ -53,7 +52,7 @@ namespace Org.Apache.Rocketmq Logger.Error($"Failed to parse JSON configuration: {json}"); return; } - + _accessKey = kv["AccessKey"]; _accessSecret = kv["AccessSecret"]; _valid = true; @@ -66,19 +65,14 @@ namespace Org.Apache.Rocketmq public SessionCredentials GetCredentials() { - if (!_valid) - { - return null; - } - - return new SessionCredentials(_accessKey, _accessSecret); + return !_valid ? null : new SessionCredentials(_accessKey, _accessSecret); } - public static String DefaultConfigFilePath() + public static string DefaultConfigFilePath() { var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); - string[] pathSegments = {home, ".rocketmq", "config"}; - return String.Join(Path.DirectorySeparatorChar, pathSegments); + string[] pathSegments = { home, ".rocketmq", "config" }; + return string.Join(Path.DirectorySeparatorChar, pathSegments); } private readonly string _accessKey; diff --git a/csharp/rocketmq-client-csharp/Consumer.cs b/csharp/rocketmq-client-csharp/Consumer.cs index 3444fbc0..998a3766 100644 --- a/csharp/rocketmq-client-csharp/Consumer.cs +++ b/csharp/rocketmq-client-csharp/Consumer.cs @@ -42,7 +42,7 @@ namespace Org.Apache.Rocketmq var tolerance = ClientConfig.RequestTimeout; var timeout = tolerance.Add(awaitDuration); var invocation = await ClientManager.ReceiveMessage(mq.Broker.Endpoints, request, timeout); - var status = new Proto.Status() + var status = new Proto.Status { Code = Proto.Code.InternalServerError, Message = "Status was not set by server" diff --git a/csharp/rocketmq-client-csharp/ExponentialBackoffRetryPolicy.cs b/csharp/rocketmq-client-csharp/ExponentialBackoffRetryPolicy.cs index ddc4d281..d4826d85 100644 --- a/csharp/rocketmq-client-csharp/ExponentialBackoffRetryPolicy.cs +++ b/csharp/rocketmq-client-csharp/ExponentialBackoffRetryPolicy.cs @@ -39,11 +39,11 @@ namespace Org.Apache.Rocketmq return _maxAttempts; } - public TimeSpan InitialBackoff { get; } + private TimeSpan InitialBackoff { get; } - public TimeSpan MaxBackoff { get; } + private TimeSpan MaxBackoff { get; } - public double BackoffMultiplier { get; } + private double BackoffMultiplier { get; } public IRetryPolicy InheritBackoff(Proto.RetryPolicy retryPolicy) { diff --git a/csharp/rocketmq-client-csharp/IClientManager.cs b/csharp/rocketmq-client-csharp/IClientManager.cs index 47af0280..d69b0506 100644 --- a/csharp/rocketmq-client-csharp/IClientManager.cs +++ b/csharp/rocketmq-client-csharp/IClientManager.cs @@ -65,27 +65,61 @@ namespace Org.Apache.Rocketmq /// <summary> /// Send message to remote endpoints. /// </summary> - /// <param name="endpoints"></param> - /// <param name="request"></param> - /// <param name="timeout"></param> + /// <param name="endpoints">The target endpoints.</param> + /// <param name="request">gRPC request for message publishing.</param> + /// <param name="timeout">Request max duration.</param> /// <returns></returns> Task<RpcInvocation<SendMessageRequest, SendMessageResponse>> SendMessage(Endpoints endpoints, SendMessageRequest request, TimeSpan timeout); + /// <summary> + /// Query assignment to receive message for push consumer. + /// </summary> + /// <param name="endpoints">The target endpoints.</param> + /// <param name="request">gRPC request for querying assignment.</param> + /// <param name="timeout">Request max duration.</param> + /// <returns></returns> Task<RpcInvocation<QueryAssignmentRequest, QueryAssignmentResponse>> QueryAssignment(Endpoints endpoints, QueryAssignmentRequest request, TimeSpan timeout); + /// <summary> + /// Receive message from remote endpoints. + /// </summary> + /// <param name="endpoints">The target endpoints.</param> + /// <param name="request">gRPC request for message receiving.</param> + /// <param name="timeout">Request max duration.</param> + /// <returns></returns> Task<RpcInvocation<ReceiveMessageRequest, List<ReceiveMessageResponse>>> ReceiveMessage(Endpoints endpoints, ReceiveMessageRequest request, TimeSpan timeout); + /// <summary> + /// Message acknowledgement towards remote endpoints. + /// </summary> + /// <param name="endpoints">The target endpoints.</param> + /// <param name="request">gRPC request for message acknowledgement.</param> + /// <param name="timeout">Request max duration.</param> + /// <returns></returns> Task<RpcInvocation<AckMessageRequest, AckMessageResponse>> AckMessage(Endpoints endpoints, AckMessageRequest request, TimeSpan timeout); + /// <summary> + /// Change message invisible duration. + /// </summary> + /// <param name="endpoints">The target endpoints.</param> + /// <param name="request">gRPC request of changing message invisible duration.</param> + /// <param name="timeout">Request max duration.</param> + /// <returns></returns> Task<RpcInvocation<ChangeInvisibleDurationRequest, ChangeInvisibleDurationResponse>> ChangeInvisibleDuration( - Endpoints endpoints, - ChangeInvisibleDurationRequest request, TimeSpan timeout); + Endpoints endpoints, ChangeInvisibleDurationRequest request, TimeSpan timeout); + /// <summary> + /// Transaction ending request. + /// </summary> + /// <param name="endpoints">The target endpoints.</param> + /// <param name="request">gRPC request of ending transaction.</param> + /// <param name="timeout">Request max duration.</param> + /// <returns></returns> Task<RpcInvocation<EndTransactionRequest, EndTransactionResponse>> EndTransaction(Endpoints endpoints, EndTransactionRequest request, TimeSpan timeout); diff --git a/csharp/rocketmq-client-csharp/IConsumer.cs b/csharp/rocketmq-client-csharp/IConsumer.cs deleted file mode 100644 index 2ad0daba..00000000 --- a/csharp/rocketmq-client-csharp/IConsumer.cs +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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.Threading.Tasks; -namespace Org.Apache.Rocketmq -{ - public interface IConsumer - { - Task Start(); - - Task Shutdown(); - } -} \ No newline at end of file diff --git a/csharp/rocketmq-client-csharp/IRetryPolicy.cs b/csharp/rocketmq-client-csharp/IRetryPolicy.cs index 86d280eb..fe7e7116 100644 --- a/csharp/rocketmq-client-csharp/IRetryPolicy.cs +++ b/csharp/rocketmq-client-csharp/IRetryPolicy.cs @@ -45,6 +45,11 @@ namespace Org.Apache.Rocketmq /// <returns></returns> RetryPolicy ToProtobuf(); - IRetryPolicy InheritBackoff(Proto.RetryPolicy retryPolicy); + /// <summary> + /// Inherit backoff of retry policy. + /// </summary> + /// <param name="retryPolicy"></param> + /// <returns></returns> + IRetryPolicy InheritBackoff(RetryPolicy retryPolicy); } } \ No newline at end of file diff --git a/csharp/rocketmq-client-csharp/Message.cs b/csharp/rocketmq-client-csharp/Message.cs index 32c4352c..42c271a5 100644 --- a/csharp/rocketmq-client-csharp/Message.cs +++ b/csharp/rocketmq-client-csharp/Message.cs @@ -129,6 +129,8 @@ namespace Org.Apache.Rocketmq public Builder SetDeliveryTimestamp(DateTime deliveryTimestamp) { + Preconditions.CheckArgument(null == _messageGroup, + "deliveryTimestamp and messageGroup should not be set at same time"); _deliveryTimestamp = deliveryTimestamp; return this; } @@ -137,6 +139,8 @@ namespace Org.Apache.Rocketmq { Preconditions.CheckArgument(!string.IsNullOrWhiteSpace(messageGroup), "messageGroup should not be null or white space"); + Preconditions.CheckArgument(null == _deliveryTimestamp, + "messageGroup and deliveryTimestamp should not be set at same time"); _messageGroup = messageGroup; return this; } diff --git a/csharp/rocketmq-client-csharp/MessageQueue.cs b/csharp/rocketmq-client-csharp/MessageQueue.cs index b4504f12..e5146d52 100644 --- a/csharp/rocketmq-client-csharp/MessageQueue.cs +++ b/csharp/rocketmq-client-csharp/MessageQueue.cs @@ -37,7 +37,7 @@ namespace Org.Apache.Rocketmq public Broker Broker { get; } - public Resource TopicResource { get; } + private Resource TopicResource { get; } public Permission Permission { get; } diff --git a/csharp/rocketmq-client-csharp/Producer.cs b/csharp/rocketmq-client-csharp/Producer.cs index 6510909b..95ddf98b 100644 --- a/csharp/rocketmq-client-csharp/Producer.cs +++ b/csharp/rocketmq-client-csharp/Producer.cs @@ -293,12 +293,12 @@ namespace Org.Apache.Rocketmq var transactionResolution = _checker.Check(message); switch (transactionResolution) { - case TransactionResolution.COMMIT: - case TransactionResolution.ROLLBACK: + case TransactionResolution.Commit: + case TransactionResolution.Rollback: await EndTransaction(endpoints, message.Topic, message.MessageId, command.TransactionId, transactionResolution); break; - case TransactionResolution.UNKNOWN: + case TransactionResolution.Unknown: default: break; } @@ -321,7 +321,7 @@ namespace Org.Apache.Rocketmq TransactionId = transactionId, MessageId = messageId, Topic = topicResource, - Resolution = TransactionResolution.COMMIT == resolution + Resolution = TransactionResolution.Commit == resolution ? Proto.TransactionResolution.Commit : Proto.TransactionResolution.Rollback }; diff --git a/csharp/rocketmq-client-csharp/PublishingMessage.cs b/csharp/rocketmq-client-csharp/PublishingMessage.cs index b5c92f51..b65f4660 100644 --- a/csharp/rocketmq-client-csharp/PublishingMessage.cs +++ b/csharp/rocketmq-client-csharp/PublishingMessage.cs @@ -29,7 +29,7 @@ namespace Org.Apache.Rocketmq /// </summary> public class PublishingMessage : Message { - public MessageType MessageType { set; get; } + public MessageType MessageType { get; } internal string MessageId { get; } diff --git a/csharp/rocketmq-client-csharp/PublishingSettings.cs b/csharp/rocketmq-client-csharp/PublishingSettings.cs index fd442bbe..22423b56 100644 --- a/csharp/rocketmq-client-csharp/PublishingSettings.cs +++ b/csharp/rocketmq-client-csharp/PublishingSettings.cs @@ -31,7 +31,7 @@ namespace Org.Apache.Rocketmq private volatile int _maxBodySizeBytes = 4 * 1024 * 1024; private volatile bool _validateMessageType = true; - public PublishingSettings(string clientId, Endpoints endpoints, ExponentialBackoffRetryPolicy retryPolicy, + public PublishingSettings(string clientId, Endpoints endpoints, IRetryPolicy retryPolicy, TimeSpan requestTimeout, ConcurrentDictionary<string, bool> topics) : base(clientId, ClientType.Producer, endpoints, retryPolicy, requestTimeout) { diff --git a/csharp/rocketmq-client-csharp/Resource.cs b/csharp/rocketmq-client-csharp/Resource.cs index 3395a16f..5d339475 100644 --- a/csharp/rocketmq-client-csharp/Resource.cs +++ b/csharp/rocketmq-client-csharp/Resource.cs @@ -34,7 +34,7 @@ namespace Org.Apache.Rocketmq Name = name; } - public string Namespace { get; } + private string Namespace { get; } public string Name { get; } public Proto.Resource ToProtobuf() @@ -48,7 +48,7 @@ namespace Org.Apache.Rocketmq public override string ToString() { - return String.IsNullOrEmpty(Namespace) ? Name : $"{Namespace}.{Name}"; + return string.IsNullOrEmpty(Namespace) ? Name : $"{Namespace}.{Name}"; } } } \ No newline at end of file diff --git a/csharp/rocketmq-client-csharp/Settings.cs b/csharp/rocketmq-client-csharp/Settings.cs index 491aa564..0ee95fb0 100644 --- a/csharp/rocketmq-client-csharp/Settings.cs +++ b/csharp/rocketmq-client-csharp/Settings.cs @@ -28,7 +28,7 @@ namespace Org.Apache.Rocketmq protected volatile IRetryPolicy RetryPolicy; protected readonly TimeSpan RequestTimeout; - public Settings(string clientId, ClientType clientType, Endpoints endpoints, IRetryPolicy retryPolicy, + protected Settings(string clientId, ClientType clientType, Endpoints endpoints, IRetryPolicy retryPolicy, TimeSpan requestTimeout) { ClientId = clientId; @@ -38,7 +38,7 @@ namespace Org.Apache.Rocketmq RequestTimeout = requestTimeout; } - public Settings(string clientId, ClientType clientType, Endpoints endpoints, TimeSpan requestTimeout) + protected Settings(string clientId, ClientType clientType, Endpoints endpoints, TimeSpan requestTimeout) { ClientId = clientId; ClientType = clientType; diff --git a/csharp/rocketmq-client-csharp/Topic.cs b/csharp/rocketmq-client-csharp/Topic.cs index f1ae453c..ff66b719 100644 --- a/csharp/rocketmq-client-csharp/Topic.cs +++ b/csharp/rocketmq-client-csharp/Topic.cs @@ -27,8 +27,8 @@ namespace Org.Apache.Rocketmq Name = name; } - public string ResourceNamespace { get; } - public string Name { get; } + private string ResourceNamespace { get; } + private string Name { get; } public bool Equals(Topic other) { diff --git a/csharp/rocketmq-client-csharp/TopicRouteException.cs b/csharp/rocketmq-client-csharp/TopicRouteException.cs deleted file mode 100644 index c80e8699..00000000 --- a/csharp/rocketmq-client-csharp/TopicRouteException.cs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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; -namespace Org.Apache.Rocketmq -{ - public class TopicRouteException : Exception - { - public TopicRouteException(string message) : base(message) - { - - } - - } -} \ No newline at end of file diff --git a/csharp/rocketmq-client-csharp/Transaction.cs b/csharp/rocketmq-client-csharp/Transaction.cs index 5084ae4e..5a0e81a6 100644 --- a/csharp/rocketmq-client-csharp/Transaction.cs +++ b/csharp/rocketmq-client-csharp/Transaction.cs @@ -105,7 +105,7 @@ namespace Org.Apache.Rocketmq foreach (var (publishingMessage, sendReceipt) in _messageSendReceiptDict) { await _producer.EndTransaction(sendReceipt.Endpoints, publishingMessage.Topic, sendReceipt.MessageId, - sendReceipt.TransactionId, TransactionResolution.COMMIT); + sendReceipt.TransactionId, TransactionResolution.Commit); } } @@ -124,7 +124,7 @@ namespace Org.Apache.Rocketmq foreach (var (publishingMessage, sendReceipt) in _messageSendReceiptDict) { await _producer.EndTransaction(sendReceipt.Endpoints, publishingMessage.Topic, sendReceipt.MessageId, - sendReceipt.TransactionId, TransactionResolution.ROLLBACK); + sendReceipt.TransactionId, TransactionResolution.Rollback); } } } diff --git a/csharp/rocketmq-client-csharp/TransactionResolution.cs b/csharp/rocketmq-client-csharp/TransactionResolution.cs index 5bb4d5e1..89595570 100644 --- a/csharp/rocketmq-client-csharp/TransactionResolution.cs +++ b/csharp/rocketmq-client-csharp/TransactionResolution.cs @@ -19,8 +19,8 @@ namespace Org.Apache.Rocketmq { public enum TransactionResolution { - COMMIT, - ROLLBACK, - UNKNOWN + Commit, + Rollback, + Unknown } } \ No newline at end of file diff --git a/csharp/rocketmq-client-csharp/rocketmq-client-csharp.csproj b/csharp/rocketmq-client-csharp/rocketmq-client-csharp.csproj index 94c2d718..ebbb8487 100644 --- a/csharp/rocketmq-client-csharp/rocketmq-client-csharp.csproj +++ b/csharp/rocketmq-client-csharp/rocketmq-client-csharp.csproj @@ -14,7 +14,7 @@ <Description>.NET Client for Apache RocketMQ</Description> <PackageProjectUrl>https://github.com/apache/rocketmq-clients</PackageProjectUrl> <RepositoryUrl>https://github.com/apache/rocketmq-clients</RepositoryUrl> - <PackageVersion>0.0.6-SNAPSHOT</PackageVersion> + <PackageVersion>0.0.8-SNAPSHOT</PackageVersion> <PackageIcon>logo.png</PackageIcon> </PropertyGroup> diff --git a/csharp/tests/ConfigFileCredentialsProviderTest.cs b/csharp/tests/ConfigFileCredentialsProviderTest.cs index 0ebea9e3..7874795e 100644 --- a/csharp/tests/ConfigFileCredentialsProviderTest.cs +++ b/csharp/tests/ConfigFileCredentialsProviderTest.cs @@ -15,10 +15,11 @@ * limitations under the License. */ -using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.Rocketmq; -namespace Org.Apache.Rocketmq +namespace tests { [TestClass] public class ConfigFileCredentialsProviderTest @@ -27,14 +28,14 @@ namespace Org.Apache.Rocketmq public void Setup() { var configFilePath = ConfigFileCredentialsProvider.DefaultConfigFilePath(); - FileInfo fileInfo = new FileInfo(configFilePath); + var fileInfo = new FileInfo(configFilePath); var dir = fileInfo.Directory; - if (!dir.Exists) + if (dir != null && !dir.Exists) { dir.Create(); } - string json = "{\"AccessKey\": \"key\", \"AccessSecret\": \"secret\"}"; + var json = "{\"AccessKey\": \"key\", \"AccessSecret\": \"secret\"}"; File.WriteAllText(configFilePath, json); } diff --git a/csharp/tests/DateTimeTest.cs b/csharp/tests/DateTimeTest.cs index 17bbd889..265e09e7 100644 --- a/csharp/tests/DateTimeTest.cs +++ b/csharp/tests/DateTimeTest.cs @@ -14,10 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -using Microsoft.VisualStudio.TestTools.UnitTesting; + using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.Rocketmq; -namespace Org.Apache.Rocketmq +namespace tests { [TestClass] @@ -25,11 +27,11 @@ namespace Org.Apache.Rocketmq { [TestMethod] - public void testFormat() + public void TestFormat() { - DateTime instant = new DateTime(2022, 02, 15, 08, 31, 56); - string time = instant.ToString(MetadataConstants.DateTimeFormat); - string expected = "20220215T083156Z"; + var instant = new DateTime(2022, 02, 15, 08, 31, 56); + var time = instant.ToString(MetadataConstants.DateTimeFormat); + const string expected = "20220215T083156Z"; Assert.AreEqual(time, expected); } diff --git a/csharp/tests/EndpointsTest.cs b/csharp/tests/EndpointsTest.cs index 6c4a6c71..4c85209e 100644 --- a/csharp/tests/EndpointsTest.cs +++ b/csharp/tests/EndpointsTest.cs @@ -15,7 +15,6 @@ * limitations under the License. */ -using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Org.Apache.Rocketmq; @@ -25,11 +24,19 @@ namespace tests public class EndpointsTest { [TestMethod] - public void testConstructor() + public void TestGrpcTargetWithoutSsl() { - Console.WriteLine(Uri.CheckHostName("127.0.0.1")); - Console.WriteLine(Uri.CheckHostName("1050:0000:0000:0000:0005:0600:300c:326b")); - Console.WriteLine(Uri.CheckHostName("baidu.com")); + var endpoints = new Endpoints("127.0.0.1"); + var targetWithoutSsl = endpoints.GrpcTarget(false); + Assert.AreEqual("http://127.0.0.1:80", targetWithoutSsl); + } + + [TestMethod] + public void TestGrpcTargetWithSsl() + { + var endpoints = new Endpoints("127.0.0.1"); + var targetWithoutSsl = endpoints.GrpcTarget(true); + Assert.AreEqual("https://127.0.0.1:80", targetWithoutSsl); } } } \ No newline at end of file diff --git a/csharp/tests/MessageTest.cs b/csharp/tests/MessageTest.cs index 7b28a6da..d8191d28 100644 --- a/csharp/tests/MessageTest.cs +++ b/csharp/tests/MessageTest.cs @@ -17,10 +17,11 @@ using System; using System.Collections.Generic; -using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Text; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.Rocketmq; -namespace Org.Apache.Rocketmq +namespace tests { [TestClass] public class MessageTest @@ -146,5 +147,22 @@ namespace Org.Apache.Rocketmq { new Message.Builder().SetKeys("a", "b"); } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void TestSetDeliveryTimestampAndMessageGroup() + { + new Message.Builder().SetDeliveryTimestamp(DateTime.UtcNow + TimeSpan.FromSeconds(30)) + .SetMessageGroup("messageGroup").Build(); + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void TestSetMessageGroupAndDeliveryTimestamp() + { + new Message.Builder().SetMessageGroup("messageGroup") + .SetDeliveryTimestamp(DateTime.UtcNow + TimeSpan.FromSeconds(30)) + .Build(); + } } } \ No newline at end of file diff --git a/csharp/tests/MqLogManagerTest.cs b/csharp/tests/MqLogManagerTest.cs index 8a0e2c2a..076c9331 100644 --- a/csharp/tests/MqLogManagerTest.cs +++ b/csharp/tests/MqLogManagerTest.cs @@ -14,6 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using NLog; diff --git a/csharp/tests/PublishingMessageTest.cs b/csharp/tests/PublishingMessageTest.cs new file mode 100644 index 00000000..9f4938c0 --- /dev/null +++ b/csharp/tests/PublishingMessageTest.cs @@ -0,0 +1,103 @@ +/* + * 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 System.Collections.Concurrent; +using System.Text; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.Rocketmq; + +namespace tests +{ + [TestClass] + public class PublishingMessageTest + { + private const string ClientId = "fakeClientId"; + private static readonly Endpoints Endpoints = new("127.0.0.1:8081"); + + + [TestMethod] + public void TestNormalMessage() + { + const string topic = "yourNormalTopic"; + var message = new Message.Builder().SetTopic(topic).SetBody(Encoding.UTF8.GetBytes("foobar")).Build(); + var topics = new ConcurrentDictionary<string, bool> + { + [topic] = true + }; + var settings = new PublishingSettings(ClientId, Endpoints, + ExponentialBackoffRetryPolicy.ImmediatelyRetryPolicy(3), TimeSpan.FromSeconds(3), topics); + var publishingMessage = new PublishingMessage(message, settings, false); + Assert.AreEqual(publishingMessage.MessageType, MessageType.Normal); + } + + [TestMethod] + public void TestFifoMessage() + { + const string topic = "yourFifoTopic"; + const string messageGroup = "yourMessageGroup"; + var message = new Message.Builder().SetTopic(topic) + .SetMessageGroup(messageGroup).SetBody(Encoding.UTF8.GetBytes("foobar")) + .Build(); + var topics = new ConcurrentDictionary<string, bool> + { + [topic] = true + }; + var settings = new PublishingSettings(ClientId, Endpoints, + ExponentialBackoffRetryPolicy.ImmediatelyRetryPolicy(3), TimeSpan.FromSeconds(3), topics); + var publishingMessage = new PublishingMessage(message, settings, false); + Assert.AreEqual(publishingMessage.MessageType, MessageType.Fifo); + } + + [TestMethod] + public void TestDelayMessage() + { + const string topic = "yourDelayTopic"; + var message = new Message.Builder() + .SetTopic(topic) + .SetDeliveryTimestamp(DateTime.UtcNow + TimeSpan.FromSeconds(30)) + .SetBody(Encoding.UTF8.GetBytes("foobar")).Build(); + var topics = new ConcurrentDictionary<string, bool> + { + [topic] = true + }; + var settings = new PublishingSettings(ClientId, Endpoints, + ExponentialBackoffRetryPolicy.ImmediatelyRetryPolicy(3), + TimeSpan.FromSeconds(3), topics); + var publishingMessage = new PublishingMessage(message, settings, false); + Assert.AreEqual(publishingMessage.MessageType, MessageType.Delay); + } + + [TestMethod] + public void TestTransactionMessage() + { + const string topic = "yourTransactionMessage"; + var message = new Message.Builder() + .SetTopic(topic) + .SetBody(Encoding.UTF8.GetBytes("foobar")).Build(); + var topics = new ConcurrentDictionary<string, bool> + { + [topic] = true + }; + var settings = new PublishingSettings(ClientId, Endpoints, + ExponentialBackoffRetryPolicy.ImmediatelyRetryPolicy(3), + TimeSpan.FromSeconds(3), topics); + var publishingMessage = new PublishingMessage(message, settings, true); + Assert.AreEqual(publishingMessage.MessageType, MessageType.Transaction); + } + } +} \ No newline at end of file diff --git a/csharp/tests/SendResultTest.cs b/csharp/tests/SendResultTest.cs deleted file mode 100644 index 262410da..00000000 --- a/csharp/tests/SendResultTest.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace Org.Apache.Rocketmq -{ - [TestClass] - public class SendResultTest - { - [TestMethod] - public void testCtor() - { - // string messageId = new string("abc"); - // var sendResult = new SendReceipt(messageId); - // Assert.AreEqual(messageId, sendResult.MessageId); - } - } -} \ No newline at end of file diff --git a/csharp/tests/SignatureTest.cs b/csharp/tests/SignatureTest.cs deleted file mode 100644 index 63b7cdf8..00000000 --- a/csharp/tests/SignatureTest.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 Microsoft.VisualStudio.TestTools.UnitTesting; -using grpc = Grpc.Core; -using Moq; -using Org.Apache.Rocketmq; - -namespace tests -{ - - [TestClass] - public class SignatureTest - { - - [TestMethod] - public void TestSign() - { - // var mock = new Mock<IClientConfig>(); - // - // string accessKey = "key"; - // string accessSecret = "secret"; - // var credentialsProvider = new StaticCredentialsProvider(accessKey, accessSecret); - // - // var metadata = new grpc::Metadata(); - // Signature.Sign(mock.Object, metadata); - // Assert.IsNotNull(metadata.Get(MetadataConstants.Authorization)); - } - } - -} \ No newline at end of file diff --git a/csharp/tests/TopicTest.cs b/csharp/tests/TopicTest.cs deleted file mode 100644 index 9f386dea..00000000 --- a/csharp/tests/TopicTest.cs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 Microsoft.VisualStudio.TestTools.UnitTesting; -using System.Collections.Generic; - -namespace Org.Apache.Rocketmq -{ - - [TestClass] - public class TopicTest - { - - [TestMethod] - public void testCompareTo() - { - List<Topic> topics = new List<Topic>(); - topics.Add(new Topic("ns1", "t1")); - topics.Add(new Topic("ns0", "t1")); - topics.Add(new Topic("ns0", "t0")); - - topics.Sort(); - - Assert.AreEqual(topics[0].ResourceNamespace, "ns0"); - Assert.AreEqual(topics[0].Name, "t0"); - - Assert.AreEqual(topics[1].ResourceNamespace, "ns0"); - Assert.AreEqual(topics[1].Name, "t1"); - - - Assert.AreEqual(topics[2].ResourceNamespace, "ns1"); - Assert.AreEqual(topics[2].Name, "t1"); - - } - - - } -} \ No newline at end of file diff --git a/csharp/tests/UnitTest1.cs b/csharp/tests/UnitTest1.cs deleted file mode 100644 index 2f6b468a..00000000 --- a/csharp/tests/UnitTest1.cs +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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 Microsoft.VisualStudio.TestTools.UnitTesting; -using Proto = Apache.Rocketmq.V2; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; - -namespace tests -{ - [TestClass] - public class UnitTest1 - { - [TestMethod] - public void TestMethod1() - { - Proto::Permission perm = Proto::Permission.None; - switch (perm) - { - case Proto::Permission.None: - { - Console.WriteLine("None"); - break; - } - - case Proto::Permission.Read: - { - Console.WriteLine("Read"); - break; - } - - case Proto::Permission.Write: - { - Console.WriteLine("Write"); - break; - } - - case Proto::Permission.ReadWrite: - { - Console.WriteLine("ReadWrite"); - break; - } - } - } - - [TestMethod] - public void TestConcurrentDictionary() - { - var dict = new ConcurrentDictionary<string, List<String>>(); - string s = "abc"; - List<String> result; - var exists = dict.TryGetValue(s, out result); - Assert.IsFalse(exists); - Assert.IsNull(result); - - result = new List<string>(); - result.Add("abc"); - Assert.IsTrue(dict.TryAdd(s, result)); - - List<String> list; - exists = dict.TryGetValue(s, out list); - Assert.IsTrue(exists); - Assert.IsNotNull(list); - Assert.AreEqual(1, list.Count); - } - } -} \ No newline at end of file diff --git a/csharp/tests/tests.csproj b/csharp/tests/tests.csproj index 578fe4e2..358b4a12 100644 --- a/csharp/tests/tests.csproj +++ b/csharp/tests/tests.csproj @@ -14,8 +14,8 @@ <PackageReference Include="coverlet.collector" Version="3.0.2" /> </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\rocketmq-client-csharp\rocketmq-client-csharp.csproj" /> + <ItemGroup> + <ProjectReference Include="..\rocketmq-client-csharp\rocketmq-client-csharp.csproj" /> </ItemGroup> </Project>