Skip to content

Commit 1f446c2

Browse files
authored
chore: Refactor usages of File. and Directory. to use wrappers (#3058)
1 parent e340238 commit 1f446c2

17 files changed

Lines changed: 141 additions & 113 deletions

File tree

src/Agent/NewRelic/Agent/Core/AgentInstallConfiguration.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ private static bool GetIsNetCore30OrAbove()
163163
private static string GetNewRelicHome()
164164
{
165165
var newRelicHome = EnvironmentVariableProxy.GetEnvironmentVariableFromList(NewRelicHomeEnvironmentVariables);
166-
if (newRelicHome != null && Directory.Exists(newRelicHome)) return Path.GetFullPath(newRelicHome);
166+
if (newRelicHome != null && DirectoryWrapper.Instance.Exists(newRelicHome)) return Path.GetFullPath(newRelicHome);
167167
#if NETFRAMEWORK
168168
var key = Registry.LocalMachine.OpenSubKey(@"Software\New Relic\.NET Agent");
169169
if (key != null) newRelicHome = (string)key.GetValue("NewRelicHome");
@@ -177,7 +177,7 @@ private static string GetNewRelicInstallPath()
177177
if (newRelicInstallPath != null)
178178
{
179179
newRelicInstallPath = Path.Combine(newRelicInstallPath, RuntimeDirectoryName);
180-
if (Directory.Exists(newRelicInstallPath)) return newRelicInstallPath;
180+
if (DirectoryWrapper.Instance.Exists(newRelicInstallPath)) return newRelicInstallPath;
181181
}
182182

183183
newRelicInstallPath = EnvironmentVariableProxy.GetEnvironmentVariableFromList(NewRelicHomeEnvironmentVariables);
@@ -194,11 +194,11 @@ public static AgentInfo GetAgentInfo()
194194

195195
var agentInfoPath = Path.Combine(NewRelicHome, "agentinfo.json");
196196

197-
if (File.Exists(agentInfoPath))
197+
if (FileWrapper.Instance.Exists(agentInfoPath))
198198
{
199199
try
200200
{
201-
return JsonConvert.DeserializeObject<AgentInfo>(File.ReadAllText(agentInfoPath));
201+
return JsonConvert.DeserializeObject<AgentInfo>(FileWrapper.Instance.ReadAllText(agentInfoPath));
202202
}
203203
catch (Exception e)
204204
{

src/Agent/NewRelic/Agent/Core/Config/BootstrapConfiguration.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class BootstrapConfiguration : IBootstrapConfiguration
5151
private BootstrapConfiguration()
5252
{
5353
_agentEnabledWithProvenance = new ValueWithProvenance<bool>(true, "Default value");
54-
LogConfig = new BootstrapLogConfig(new configurationLog(), new ProcessStatic(), Directory.Exists, Path.GetFullPath);
54+
LogConfig = new BootstrapLogConfig(new configurationLog(), new ProcessStatic(), DirectoryWrapper.Instance.Exists, Path.GetFullPath);
5555
}
5656

5757
/// <summary>
@@ -60,7 +60,7 @@ private BootstrapConfiguration()
6060
/// <param name="localConfiguration">The local configuration object to use.</param>
6161
/// <param name="configurationFileName">The name and path of the local configuration file.</param>
6262
public BootstrapConfiguration(configuration localConfiguration, string configurationFileName)
63-
: this(localConfiguration, configurationFileName, ConfigurationLoader.GetWebConfigAppSetting, new ConfigurationManagerStatic(), new ProcessStatic(), Directory.Exists, Path.GetFullPath)
63+
: this(localConfiguration, configurationFileName, ConfigurationLoader.GetWebConfigAppSetting, new ConfigurationManagerStatic(), new ProcessStatic(), DirectoryWrapper.Instance.Exists, Path.GetFullPath)
6464
{ }
6565

6666
/// <summary>

src/Agent/NewRelic/Agent/Core/Config/ConfigurationLoader.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ private static string InternalGetAppDomainName()
6464
public static Func<string> GetAppDomainName = InternalGetAppDomainName;
6565
#endif
6666

67-
public static Func<string, bool> FileExists = File.Exists;
67+
public static Func<string, bool> FileExists = FileWrapper.Instance.Exists;
68+
public static Func<string, string> FileReadAllText = FileWrapper.Instance.ReadAllText;
69+
6870
public static Func<string, string> PathGetDirectoryName = Path.GetDirectoryName;
6971
public static Func<string, string> GetEnvironmentVar = System.Environment.GetEnvironmentVariable;
7072

@@ -164,7 +166,7 @@ private static string TryGetAgentConfigFileFromAppConfig()
164166
try
165167
{
166168
var fileName = AppSettingsConfigResolveWhenUsed.GetAppSetting(Constants.AppSettingsConfigFile);
167-
if (!File.Exists(fileName))
169+
if (!FileExists(fileName))
168170
{
169171
return null;
170172
}
@@ -208,16 +210,16 @@ private static string TryGetAgentConfigFileFromAppRoot()
208210
{
209211
var directory = Path.GetDirectoryName(entryAssembly.Location);
210212
filename = Path.Combine(directory, NewRelicConfigFileName);
211-
if (File.Exists(filename))
213+
if (FileExists(filename))
212214
{
213215
Log.Info("Configuration file found in app/web root directory: {0}", filename);
214216
return filename;
215217
}
216218
}
217219

218-
var currentDirectory = Directory.GetCurrentDirectory();
220+
var currentDirectory = DirectoryWrapper.Instance.GetCurrentDirectory();
219221
filename = Path.Combine(currentDirectory, NewRelicConfigFileName);
220-
if (File.Exists(filename))
222+
if (FileExists(filename))
221223
{
222224
Log.Info("Configuration file found in app/web root directory: {0}", filename);
223225
return filename;
@@ -482,7 +484,7 @@ private static string GetConfigSchemaContents()
482484
{
483485
var home = AgentInstallConfiguration.NewRelicHome;
484486
var xsdFile = Path.Combine(home, "newrelic.xsd");
485-
configSchemaContents = File.ReadAllText(xsdFile);
487+
configSchemaContents = FileReadAllText(xsdFile);
486488
}
487489
catch (Exception ex)
488490
{

src/Agent/NewRelic/Agent/Core/Config/ConfigurationTracker.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System;
88
using System.IO;
99
using System.Threading;
10+
using NewRelic.Agent.Core.Utilities;
1011

1112
namespace NewRelic.Agent.Core.Config
1213
{
@@ -22,8 +23,9 @@ public class ConfigurationTracker : IDisposable
2223
private DateTime _lastWriteTime;
2324

2425
private readonly INativeMethods _nativeMethods;
26+
private readonly IFileWrapper _fileWrapper;
2527

26-
public ConfigurationTracker(IConfigurationService configurationService, INativeMethods nativeMethods)
28+
public ConfigurationTracker(IConfigurationService configurationService, INativeMethods nativeMethods, IFileWrapper fileWrapper)
2729
{
2830
if (configurationService.Configuration.DisableFileSystemWatcher)
2931
{
@@ -32,17 +34,18 @@ public ConfigurationTracker(IConfigurationService configurationService, INativeM
3234
}
3335

3436
_nativeMethods = nativeMethods;
37+
_fileWrapper = fileWrapper;
3538
var fileName = configurationService.Configuration.NewRelicConfigFilePath;
3639
if (fileName == null)
3740
return;
3841

3942
Log.Info("Reading configuration from \"{0}\"", fileName);
4043

41-
_lastWriteTime = File.GetLastWriteTimeUtc(fileName);
44+
_lastWriteTime = _fileWrapper.GetLastWriteTimeUtc(fileName);
4245

4346
_timer = Scheduler.CreateExecuteEveryTimer(() =>
4447
{
45-
var lastWriteTime = File.GetLastWriteTimeUtc(fileName);
48+
var lastWriteTime = _fileWrapper.GetLastWriteTimeUtc(fileName);
4649
if (lastWriteTime > _lastWriteTime)
4750
{
4851
Log.Debug("newrelic.config file changed, reloading.");

src/Agent/NewRelic/Agent/Core/Configuration/AppSettingsConfigResolveWhenUsed.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private static IConfigurationRoot InitializeConfiguration()
3737
catch (AppDomainUnloadedException)
3838
{
3939
// Fall back to previous behavior of agents <=8.35.0
40-
applicationDirectory = Directory.GetCurrentDirectory();
40+
applicationDirectory = DirectoryWrapper.Instance.GetCurrentDirectory();
4141
}
4242

4343
// add default appsettings.json files to config builder

src/Agent/NewRelic/Agent/Core/Instrumentation/InstrumentationWatcher.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,17 @@ public class InstrumentationWatcher : IDisposable
1818
private readonly IInstrumentationService _instrumentationService;
1919
private readonly IWrapperService _wrapperService;
2020
private readonly IConfigurationService _configurationService;
21+
private readonly IDirectoryWrapper _directoryWrapper;
2122

2223
private List<FileSystemWatcher> _fileWatchers;
2324
private SignalableAction _action;
2425

25-
public InstrumentationWatcher(IWrapperService wrapperService, IInstrumentationService instrumentationService, IConfigurationService configurationService)
26+
public InstrumentationWatcher(IWrapperService wrapperService, IInstrumentationService instrumentationService, IConfigurationService configurationService, IDirectoryWrapper directoryWrapper)
2627
{
2728
_wrapperService = wrapperService;
2829
_instrumentationService = instrumentationService;
2930
_configurationService = configurationService;
31+
_directoryWrapper = directoryWrapper;
3032
}
3133

3234
public void Start()
@@ -52,7 +54,7 @@ public void Start()
5254

5355
private void SetupFileWatcherForDirectory(string path)
5456
{
55-
if (!Directory.Exists(path)) return;
57+
if (!_directoryWrapper.Exists(path)) return;
5658
var watcher = new FileSystemWatcher(path, "*.xml");
5759
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
5860
watcher.Changed += OnChanged;

src/Agent/NewRelic/Agent/Core/Logging/LoggerBootstrapper.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
using Serilog.Core;
1010
using Logger = NewRelic.Agent.Core.Logging.Logger;
1111
using NewRelic.Agent.Core.Logging;
12-
12+
using NewRelic.Agent.Core.Utilities;
1313
using Serilog.Events;
1414
#if NETSTANDARD2_0
1515
using System.Runtime.InteropServices;
@@ -260,9 +260,9 @@ private static LoggerConfiguration ConfigureRollingLogSink(this LoggerConfigurat
260260
{
261261
// Create the directory if necessary
262262
var directory = Path.GetDirectoryName(fileName);
263-
if (!Directory.Exists(directory))
264-
Directory.CreateDirectory(directory);
265-
using (File.Open(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write)) { }
263+
if (!DirectoryWrapper.Instance.Exists(directory))
264+
DirectoryWrapper.Instance.CreateDirectory(directory);
265+
using (FileWrapper.Instance.Open(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write)) { }
266266
}
267267
catch (Exception exception)
268268
{

src/Agent/NewRelic/Agent/Core/RuntimeEnvironmentInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ private static DistroInfo LoadDistroInfo()
127127

128128
try
129129
{
130-
if (File.Exists("/etc/os-release"))
130+
if (FileWrapper.Instance.Exists("/etc/os-release"))
131131
{
132-
var lines = File.ReadAllLines("/etc/os-release");
132+
var lines = FileWrapper.Instance.ReadAllLines("/etc/os-release");
133133
result = new DistroInfo();
134134
foreach (var line in lines)
135135
{

src/Agent/NewRelic/Agent/Core/Utilities/DirectoryWrapper.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,21 @@ namespace NewRelic.Agent.Core.Utilities
1111
public interface IDirectoryWrapper
1212
{
1313
bool Exists(string path);
14-
string[] GetFiles(string readOnlyPath, string yml);
14+
string[] GetFiles(string readOnlyPath, string pattern, SearchOption searchOption = SearchOption.TopDirectoryOnly);
15+
string GetCurrentDirectory();
16+
DirectoryInfo CreateDirectory(string path);
1517
}
1618

1719
[NrExcludeFromCodeCoverage]
1820
public class DirectoryWrapper : IDirectoryWrapper
1921
{
20-
public bool Exists(string path)
21-
{
22-
return Directory.Exists(path);
23-
}
22+
public static IDirectoryWrapper Instance { get; } = new DirectoryWrapper();
2423

25-
public string[] GetFiles(string path, string searchPattern)
26-
{
27-
return Directory.GetFiles(path, searchPattern);
28-
}
24+
public bool Exists(string path) => Directory.Exists(path);
25+
26+
public string[] GetFiles(string path, string searchPattern, SearchOption searchOption = SearchOption.TopDirectoryOnly) => Directory.GetFiles(path, searchPattern, searchOption);
27+
28+
public string GetCurrentDirectory() => Directory.GetCurrentDirectory();
29+
public DirectoryInfo CreateDirectory(string path) => Directory.CreateDirectory(path);
2930
}
3031
}

src/Agent/NewRelic/Agent/Core/Utilities/ExtensionsLoader.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,12 @@ public static IEnumerable<IWrapper> LoadWrappers()
158158

159159
private static List<string> GetAssemblyFilesFromFolder(string folder)
160160
{
161-
if (folder == null || !Directory.Exists(folder))
161+
if (folder == null || !DirectoryWrapper.Instance.Exists(folder))
162162
{
163163
return new List<string>();
164164
}
165165

166-
var assemblyPaths = Directory.GetFiles(folder, "*.dll", SearchOption.TopDirectoryOnly);
166+
var assemblyPaths = DirectoryWrapper.Instance.GetFiles(folder, "*.dll", SearchOption.TopDirectoryOnly);
167167

168168
return assemblyPaths.ToList();
169169
}

0 commit comments

Comments
 (0)