tgstation-server
The /tg/station 13 server suite
ConfigurationTest.cs
Go to the documentation of this file.
1 using Microsoft.VisualStudio.TestTools.UnitTesting;
2 using System;
3 using System.IO;
4 using System.Text;
5 using System.Threading;
6 using System.Threading.Tasks;
10 
12 {
13  sealed class ConfigurationTest
14  {
16  readonly Api.Models.Instance instance;
17 
19  {
20  this.configurationClient = configurationClient ?? throw new ArgumentNullException(nameof(configurationClient));
21  this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
22  }
23 
25  {
26  var tmp = (file.Path?.StartsWith('/') ?? false) ? '.' + file.Path : file.Path;
27  var path = Path.Combine(instance.Path, "Configuration", tmp);
28  return File.Exists(path);
29  }
30 
31  async Task TestDeleteDirectory(CancellationToken cancellationToken)
32  {
33  //try to delete non-existent
34  var TestDir = new ConfigurationFile
35  {
36  Path = "/TestDeleteDir"
37  };
38 
39  await configurationClient.DeleteEmptyDirectory(TestDir, cancellationToken).ConfigureAwait(false);
40 
41  //try to delete non-empty
42  var file = await configurationClient.Write(new ConfigurationFile
43  {
44  Content = Encoding.UTF8.GetBytes("Hello world!"),
45  Path = TestDir.Path + "/test.txt"
46  }, cancellationToken).ConfigureAwait(false);
47 
48  Assert.IsTrue(FileExists(file));
49 
50  await Assert.ThrowsExceptionAsync<ConflictException>(() => configurationClient.DeleteEmptyDirectory(TestDir, cancellationToken)).ConfigureAwait(false);
51 
52  file.Content = null;
53  await configurationClient.Write(file, cancellationToken).ConfigureAwait(false);
54 
55  await configurationClient.DeleteEmptyDirectory(TestDir, cancellationToken).ConfigureAwait(false);
56  }
57 
58  public async Task Run(CancellationToken cancellationToken)
59  {
60  await TestDeleteDirectory(cancellationToken).ConfigureAwait(false);
61  }
62  }
63 }
Task< ConfigurationFile > Write(ConfigurationFile file, CancellationToken cancellationToken)
Overwrite a ConfigurationFile file
string Path
The path to where the Instance is located. Can only be changed while the Instance is offline....
Definition: Instance.cs:26
string Path
The path to the ConfigurationFile file
async Task TestDeleteDirectory(CancellationToken cancellationToken)
Task DeleteEmptyDirectory(ConfigurationFile directory, CancellationToken cancellationToken)
Delete an empty directory
Represents a game configuration file. Create and delete actions uncerimonuously overwrite/delete file...
Occurs when the client performs an action that would result in data conflict
ConfigurationTest(IConfigurationClient configurationClient, Api.Models.Instance instance)
async Task Run(CancellationToken cancellationToken)