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

Reply via email to