This is an automated email from the ASF dual-hosted git repository.
lizhanhui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
The following commit(s) were added to refs/heads/master by this push:
new 02f17f6 Add unit test for ConfigFileCredentialsProvider (#205)
02f17f6 is described below
commit 02f17f6121a918c0ed3326ac24d26af1a5d217d6
Author: Zhanhui Li <[email protected]>
AuthorDate: Tue Aug 30 17:27:57 2022 +0800
Add unit test for ConfigFileCredentialsProvider (#205)
* Add unit tests for ConfigFileCredentialsProvider
* Clean up code
---
.gitignore | 1 +
csharp/examples/Program.cs | 5 +--
.../ConfigFileCredentialsProvider.cs | 45 ++++++++++++++--------
csharp/rocketmq-client-csharp/Producer.cs | 26 +++++++------
csharp/tests/ConfigFileCredentialsProviderTest.cs | 28 +++++++++++++-
5 files changed, 73 insertions(+), 32 deletions(-)
diff --git a/.gitignore b/.gitignore
index 1351081..84ec790 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,6 +30,7 @@ obj/
csharp/examples/bin/
csharp/rocketmq-client-csharp/bin/
csharp/tests/bin/
+csharp/rocketmq-client.sln.DotSettings.user
# Rust
rust/target
diff --git a/csharp/examples/Program.cs b/csharp/examples/Program.cs
index ad7e979..28ad6f3 100644
--- a/csharp/examples/Program.cs
+++ b/csharp/examples/Program.cs
@@ -26,11 +26,8 @@ namespace examples
{
static async Task Main(string[] args)
{
- Console.WriteLine("Hello World!");
string accessUrl =
"rmq-cn-7mz2uk4nn0p.cn-hangzhou.rmq.aliyuncs.com:8080";
- string accessKey = "949WI12QS2OJv39o";
- string accessSecret = "870Rz9tptlt9oNEJ";
- var credentialsProvider = new StaticCredentialsProvider(accessKey,
accessSecret);
+ var credentialsProvider = new ConfigFileCredentialsProvider();
var accessPoint = new AccessPoint(accessUrl);
var producer = new Producer(accessPoint, "");
producer.CredentialsProvider = credentialsProvider;
diff --git a/csharp/rocketmq-client-csharp/ConfigFileCredentialsProvider.cs
b/csharp/rocketmq-client-csharp/ConfigFileCredentialsProvider.cs
index 39dfd7e..0b80fce 100644
--- a/csharp/rocketmq-client-csharp/ConfigFileCredentialsProvider.cs
+++ b/csharp/rocketmq-client-csharp/ConfigFileCredentialsProvider.cs
@@ -18,6 +18,7 @@ using System.IO;
using System;
using System.Text.Json;
using System.Collections.Generic;
+using NLog;
namespace Org.Apache.Rocketmq
{
@@ -29,45 +30,59 @@ namespace Org.Apache.Rocketmq
*/
public class ConfigFileCredentialsProvider : ICredentialsProvider
{
+ private static readonly Logger Logger =
MqLogManager.Instance.GetCurrentClassLogger();
public ConfigFileCredentialsProvider()
{
- var home =
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
- string configFileRelativePath = "/.rocketmq/config";
- if (!File.Exists(home + configFileRelativePath))
+ var configFilePath = DefaultConfigFilePath();
+
+ if (!File.Exists(configFilePath))
{
+ Logger.Warn("Config file[{}] does not exist", configFilePath);
return;
}
try
{
- using (var reader = new StreamReader(home +
configFileRelativePath))
+ using var reader = new StreamReader(configFilePath);
+ string json = reader.ReadToEnd();
+ var kv = JsonSerializer.Deserialize<Dictionary<string,
string>>(json);
+ if (null == kv)
{
- string json = reader.ReadToEnd();
- var kv = JsonSerializer.Deserialize<Dictionary<string,
string>>(json);
- accessKey = kv["AccessKey"];
- accessSecret = kv["AccessSecret"];
- valid = true;
+ Logger.Error($"Failed to parse JSON configuration:
{json}");
+ return;
}
+
+ _accessKey = kv["AccessKey"];
+ _accessSecret = kv["AccessSecret"];
+ _valid = true;
}
- catch (IOException)
+ catch (IOException e)
{
+ Logger.Error($"Failed to read cofig file. Cause: {e.Message}");
}
}
public Credentials getCredentials()
{
- if (!valid)
+ if (!_valid)
{
return null;
}
- return new Credentials(accessKey, accessSecret);
+ return new Credentials(_accessKey, _accessSecret);
+ }
+
+ public static String DefaultConfigFilePath()
+ {
+ var home =
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
+ string[] pathSegments = {home, ".rocketmq", "config"};
+ return String.Join(Path.DirectorySeparatorChar, pathSegments);
}
- private string accessKey;
- private string accessSecret;
+ private readonly string _accessKey;
+ private readonly string _accessSecret;
- private bool valid = false;
+ private readonly bool _valid;
}
}
\ No newline at end of file
diff --git a/csharp/rocketmq-client-csharp/Producer.cs
b/csharp/rocketmq-client-csharp/Producer.cs
index 5c51cdc..37aebb9 100644
--- a/csharp/rocketmq-client-csharp/Producer.cs
+++ b/csharp/rocketmq-client-csharp/Producer.cs
@@ -25,7 +25,6 @@ using System.Diagnostics.Metrics;
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using Grpc.Core;
-using NLog;
using OpenTelemetry;
using OpenTelemetry.Exporter;
using OpenTelemetry.Metrics;
@@ -46,8 +45,6 @@ namespace Org.Apache.Rocketmq
public override async Task Start()
{
await base.Start();
- // More initialization
- // TODO: Add authentication header
_meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter("Apache.RocketMQ.Client")
@@ -104,11 +101,15 @@ namespace Org.Apache.Rocketmq
var publishLb = _loadBalancer[message.Topic];
var request = new rmq::SendMessageRequest();
- var entry = new rmq::Message();
- entry.Body = ByteString.CopyFrom(message.Body);
- entry.Topic = new rmq::Resource();
- entry.Topic.ResourceNamespace = resourceNamespace();
- entry.Topic.Name = message.Topic;
+ var entry = new rmq::Message
+ {
+ Body = ByteString.CopyFrom(message.Body),
+ Topic = new rmq::Resource
+ {
+ ResourceNamespace = resourceNamespace(),
+ Name = message.Topic
+ }
+ };
request.Messages.Add(entry);
// User properties
@@ -117,9 +118,12 @@ namespace Org.Apache.Rocketmq
entry.UserProperties.Add(item.Key, item.Value);
}
- entry.SystemProperties = new rmq::SystemProperties();
- entry.SystemProperties.MessageId = message.MessageId;
- entry.SystemProperties.MessageType = rmq::MessageType.Normal;
+ entry.SystemProperties = new rmq::SystemProperties
+ {
+ MessageId = message.MessageId,
+ MessageType = rmq::MessageType.Normal
+ };
+
if (DateTime.MinValue != message.DeliveryTimestamp)
{
entry.SystemProperties.MessageType = rmq::MessageType.Delay;
diff --git a/csharp/tests/ConfigFileCredentialsProviderTest.cs
b/csharp/tests/ConfigFileCredentialsProviderTest.cs
index 7741295..d533359 100644
--- a/csharp/tests/ConfigFileCredentialsProviderTest.cs
+++ b/csharp/tests/ConfigFileCredentialsProviderTest.cs
@@ -16,19 +16,43 @@
*/
using Microsoft.VisualStudio.TestTools.UnitTesting;
-using System;
+using System.IO;
namespace Org.Apache.Rocketmq
{
[TestClass]
public class ConfigFileCredentialsProviderTest
{
+ [TestInitialize]
+ public void Setup()
+ {
+ var configFilePath =
ConfigFileCredentialsProvider.DefaultConfigFilePath();
+ FileInfo fileInfo = new FileInfo(configFilePath);
+ var dir = fileInfo.Directory;
+ if (!dir.Exists)
+ {
+ dir.Create();
+ }
+
+ string json = "{\"AccessKey\": \"key\", \"AccessSecret\":
\"secret\"}";
+ File.WriteAllText(configFilePath, json);
+ }
+
[TestMethod]
- public void testGetCredentials()
+ public void TestGetCredentials()
{
var provider = new ConfigFileCredentialsProvider();
var credentials = provider.getCredentials();
Assert.IsNotNull(credentials);
+ Assert.AreEqual(credentials.AccessKey, "key");
+ Assert.AreEqual(credentials.AccessSecret, "secret");
+ }
+
+ [TestCleanup]
+ public void TearDown()
+ {
+ var configFilePath =
ConfigFileCredentialsProvider.DefaultConfigFilePath();
+ File.Delete(configFilePath);
}
}
}
\ No newline at end of file