浏览代码

Add configuration tests

Nick Babcock 6 年之前
父节点
当前提交
2c8db303e8

+ 58 - 0
OhmGraphite.Test/ConfigTest.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Configuration;
+using Xunit;
+
+namespace OhmGraphite.Test
+{
+    public class ConfigTest
+    {
+        [Fact]
+        public void CanParseGraphiteConfig()
+        {
+            var configMap = new ExeConfigurationFileMap {ExeConfigFilename = "test.config"};
+            var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
+            var customConfig = new CustomConfig(config);
+            var results = MetricConfig.ParseAppSettings(customConfig);
+
+            Assert.NotNull(results.Graphite);
+            Assert.Null(results.Influx);
+            Assert.Equal("myhost", results.Graphite.Host);
+            Assert.Equal(2004, results.Graphite.Port);
+            Assert.Equal(TimeSpan.FromSeconds(6), results.Interval);
+            Assert.True(results.Graphite.Tags);
+        }
+
+        [Fact]
+        public void CanParseNullConfig()
+        {
+            var configMap = new ExeConfigurationFileMap { ExeConfigFilename = "testdefault.config" };
+            var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
+            var customConfig = new CustomConfig(config);
+            var results = MetricConfig.ParseAppSettings(customConfig);
+
+            Assert.NotNull(results.Graphite);
+            Assert.Null(results.Influx);
+            Assert.Equal("localhost", results.Graphite.Host);
+            Assert.Equal(2003, results.Graphite.Port);
+            Assert.Equal(TimeSpan.FromSeconds(5), results.Interval);
+            Assert.False(results.Graphite.Tags);
+        }
+
+        [Fact]
+        public void CanParseInfluxDbConfig()
+        {
+            var configMap = new ExeConfigurationFileMap { ExeConfigFilename = "influxtest.config" };
+            var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
+            var customConfig = new CustomConfig(config);
+            var results = MetricConfig.ParseAppSettings(customConfig);
+
+            Assert.Null(results.Graphite);
+            Assert.NotNull(results.Influx);
+            Assert.Equal(TimeSpan.FromSeconds(6), results.Interval);
+            Assert.Equal("http://192.168.1.15:8086/", results.Influx.Address.ToString());
+            Assert.Equal("mydb", results.Influx.Db);
+            Assert.Equal("my_user", results.Influx.User);
+            Assert.Equal("my_pass", results.Influx.Password);
+        }
+    }
+}

+ 16 - 0
OhmGraphite.Test/CustomConfig.cs

@@ -0,0 +1,16 @@
+using System.Configuration;
+
+namespace OhmGraphite.Test
+{
+    class CustomConfig : IAppConfig
+    {
+        private readonly Configuration _config;
+
+        public CustomConfig(Configuration config)
+        {
+            _config = config;
+        }
+
+        public string this[string name] => _config.AppSettings.Settings[name]?.Value;
+    }
+}

+ 16 - 0
OhmGraphite.Test/OhmGraphite.Test.csproj

@@ -15,4 +15,20 @@
     <ProjectReference Include="..\OhmGraphite\OhmGraphite.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Reference Include="System.Configuration" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Update="influxtest.config">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="testdefault.config">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="test.config">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
 </Project>

+ 11 - 0
OhmGraphite.Test/influxtest.config

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <appSettings>
+    <add key="type" value="influx" />
+    <add key="influx_address" value="http://192.168.1.15:8086" />
+    <add key="influx_db" value="mydb" />
+    <add key="influx_user" value="my_user" />
+    <add key="influx_password" value="my_pass" />
+    <add key="interval" value="6" />
+  </appSettings>
+</configuration>

+ 9 - 0
OhmGraphite.Test/test.config

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <appSettings>
+    <add key="host" value="myhost" />
+    <add key="port" value="2004" />
+    <add key="interval" value="6" />
+    <add key="tags" value="true" />
+  </appSettings>
+</configuration>

+ 5 - 0
OhmGraphite.Test/testdefault.config

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <appSettings>
+  </appSettings>
+</configuration>