about summary refs log tree commit diff
path: root/Tests/TestDataGenerator
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/TestDataGenerator')
-rw-r--r--Tests/TestDataGenerator/Bot/DataFetcher.cs69
-rw-r--r--Tests/TestDataGenerator/Bot/DataFetcherConfiguration.cs9
-rw-r--r--Tests/TestDataGenerator/Program.cs31
-rw-r--r--Tests/TestDataGenerator/Properties/launchSettings.json26
-rw-r--r--Tests/TestDataGenerator/TestDataGenerator.csproj32
-rw-r--r--Tests/TestDataGenerator/appsettings.Development.json18
-rw-r--r--Tests/TestDataGenerator/appsettings.json9
7 files changed, 194 insertions, 0 deletions
diff --git a/Tests/TestDataGenerator/Bot/DataFetcher.cs b/Tests/TestDataGenerator/Bot/DataFetcher.cs
new file mode 100644
index 0000000..b1f8402
--- /dev/null
+++ b/Tests/TestDataGenerator/Bot/DataFetcher.cs
@@ -0,0 +1,69 @@
+using System.Text;
+using System.Threading.Channels;
+using ArcaneLibs.Extensions;
+using LibMatrix.EventTypes.Spec;
+using LibMatrix.EventTypes.Spec.State;
+using LibMatrix.Helpers;
+using LibMatrix.Homeservers;
+using LibMatrix.Interfaces;
+using LibMatrix.RoomTypes;
+using LibMatrix.Services;
+using LibMatrix.Tests;
+using LibMatrix.Utilities.Bot;
+using LibMatrix.Utilities.Bot.Interfaces;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+
+namespace PluralContactBotPoC.Bot;
+
+public class DataFetcher(AuthenticatedHomeserverGeneric hs, ILogger<DataFetcher> logger, LibMatrixBotConfiguration botConfiguration,
+    // DataFetcherConfiguration configuration,
+    HomeserverResolverService hsResolver) : IHostedService {
+    private Task _listenerTask;
+
+    private GenericRoom? _logRoom;
+
+    /// <summary>Triggered when the application host is ready to start the service.</summary>
+    /// <param name="cancellationToken">Indicates that the start process has been aborted.</param>
+    public async Task StartAsync(CancellationToken cancellationToken) {
+        _listenerTask = Run(cancellationToken);
+        logger.LogInformation("Bot started!");
+    }
+
+    private async Task Run(CancellationToken cancellationToken) {
+        Directory.GetFiles("bot_data/cache").ToList().ForEach(File.Delete);
+        _logRoom = hs.GetRoom(botConfiguration.LogRoom);
+
+        await _logRoom.SendMessageEventAsync(new RoomMessageEventContent(body: "Test data collector started!"));
+        await _logRoom.SendMessageEventAsync(new RoomMessageEventContent(body: "Fetching rooms..."));
+
+        var rooms = await hs.GetJoinedRooms();
+        await _logRoom.SendMessageEventAsync(new RoomMessageEventContent(body: $"Fetched {rooms.Count} rooms!"));
+
+        await _logRoom.SendMessageEventAsync(new RoomMessageEventContent(body: "Fetching room data..."));
+
+        Config cfg = new Config();
+
+        var roomAliasTasks = rooms.Select(room => room.GetCanonicalAliasAsync()).ToAsyncEnumerable();
+        List<Task<(string, string)>> aliasResolutionTasks = new();
+        await foreach (var @event in roomAliasTasks) {
+            if (@event?.Alias != null) {
+                await _logRoom.SendMessageEventAsync(new RoomMessageEventContent(body: $"Fetched room alias {(@event).Alias}!"));
+                aliasResolutionTasks.Add(Task<(string, string)>.Run(async () => {
+                    var alias = await hs.ResolveRoomAliasAsync(@event.Alias);
+                    return (@event.Alias, @alias.RoomId);
+                }, cancellationToken));
+            }
+        }
+        var aliasResolutionTaskEnumerator = aliasResolutionTasks.ToAsyncEnumerable();
+        await foreach (var result in aliasResolutionTaskEnumerator) {
+            await _logRoom.SendMessageEventAsync(new RoomMessageEventContent(body: $"Resolved room alias {result.Item1} to {result.Item2}!"));
+        }
+    }
+
+    /// <summary>Triggered when the application host is performing a graceful shutdown.</summary>
+    /// <param name="cancellationToken">Indicates that the shutdown process should no longer be graceful.</param>
+    public async Task StopAsync(CancellationToken cancellationToken) {
+        logger.LogInformation("Shutting down bot!");
+    }
+}
diff --git a/Tests/TestDataGenerator/Bot/DataFetcherConfiguration.cs b/Tests/TestDataGenerator/Bot/DataFetcherConfiguration.cs
new file mode 100644
index 0000000..06df0eb
--- /dev/null
+++ b/Tests/TestDataGenerator/Bot/DataFetcherConfiguration.cs
@@ -0,0 +1,9 @@
+using Microsoft.Extensions.Configuration;
+
+namespace PluralContactBotPoC.Bot;
+
+public class DataFetcherConfiguration {
+    public DataFetcherConfiguration(IConfiguration config) => config.GetRequiredSection("DataFetcher").Bind(this);
+
+    // public string
+}
diff --git a/Tests/TestDataGenerator/Program.cs b/Tests/TestDataGenerator/Program.cs
new file mode 100644
index 0000000..9bd091b
--- /dev/null
+++ b/Tests/TestDataGenerator/Program.cs
@@ -0,0 +1,31 @@
+// See https://aka.ms/new-console-template for more information

+

+using System.Text.Json;

+using System.Text.Json.Serialization;

+using ArcaneLibs.Extensions;

+using LibMatrix.Services;

+using LibMatrix.Utilities.Bot;

+using Microsoft.Extensions.DependencyInjection;

+using Microsoft.Extensions.Hosting;

+using PluralContactBotPoC;

+using PluralContactBotPoC.Bot;

+

+Console.WriteLine("Hello, World!");

+

+var host = Host.CreateDefaultBuilder(args).ConfigureServices((_, services) => {

+    services.AddScoped<TieredStorageService>(x =>

+        new TieredStorageService(

+            cacheStorageProvider: new FileStorageProvider("bot_data/cache/"),

+            dataStorageProvider: new FileStorageProvider("bot_data/data/")

+        )

+    );

+    // services.AddSingleton<DataFetcherConfiguration>();

+    services.AddSingleton<AppServiceConfiguration>();

+

+    services.AddRoryLibMatrixServices();

+    services.AddBot(withCommands: false);

+

+    services.AddHostedService<DataFetcher>();

+}).UseConsoleLifetime().Build();

+

+await host.RunAsync();

diff --git a/Tests/TestDataGenerator/Properties/launchSettings.json b/Tests/TestDataGenerator/Properties/launchSettings.json
new file mode 100644
index 0000000..997e294
--- /dev/null
+++ b/Tests/TestDataGenerator/Properties/launchSettings.json
@@ -0,0 +1,26 @@
+{
+  "$schema": "http://json.schemastore.org/launchsettings.json",
+  "profiles": {
+    "Default": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "environmentVariables": {
+
+      }
+    },
+    "Development": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "environmentVariables": {
+        "DOTNET_ENVIRONMENT": "Development"
+      }
+    },
+    "Local config": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "environmentVariables": {
+        "DOTNET_ENVIRONMENT": "Local"
+      }
+    }
+  }
+}
diff --git a/Tests/TestDataGenerator/TestDataGenerator.csproj b/Tests/TestDataGenerator/TestDataGenerator.csproj
new file mode 100644
index 0000000..1b5a4a9
--- /dev/null
+++ b/Tests/TestDataGenerator/TestDataGenerator.csproj
@@ -0,0 +1,32 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net7.0</TargetFramework>
+        <LangVersion>preview</LangVersion>
+        <ImplicitUsings>enable</ImplicitUsings>
+        <Nullable>enable</Nullable>
+        <PublishAot>false</PublishAot>
+        <InvariantGlobalization>true</InvariantGlobalization>
+        <!--    <PublishTrimmed>true</PublishTrimmed>-->
+        <!--    <PublishReadyToRun>true</PublishReadyToRun>-->
+        <!--    <PublishSingleFile>true</PublishSingleFile>-->
+        <!--    <PublishReadyToRunShowWarnings>true</PublishReadyToRunShowWarnings>-->
+        <!--    <PublishTrimmedShowLinkerSizeComparison>true</PublishTrimmedShowLinkerSizeComparison>-->
+        <!--    <PublishTrimmedShowLinkerSizeComparisonWarnings>true</PublishTrimmedShowLinkerSizeComparisonWarnings>-->
+    </PropertyGroup>
+
+    <ItemGroup>
+        <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
+    </ItemGroup>
+    <ItemGroup>
+        <Content Include="appsettings*.json">
+            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </Content>
+    </ItemGroup>
+    <ItemGroup>
+      <ProjectReference Include="..\..\LibMatrix\LibMatrix.csproj" />
+      <ProjectReference Include="..\..\Utilities\LibMatrix.Utilities.Bot\LibMatrix.Utilities.Bot.csproj" />
+      <ProjectReference Include="..\LibMatrix.Tests\LibMatrix.Tests.csproj" />
+    </ItemGroup>
+</Project>
diff --git a/Tests/TestDataGenerator/appsettings.Development.json b/Tests/TestDataGenerator/appsettings.Development.json
new file mode 100644
index 0000000..38c45c4
--- /dev/null
+++ b/Tests/TestDataGenerator/appsettings.Development.json
@@ -0,0 +1,18 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Debug",
+      "System": "Information",
+      "Microsoft": "Information"
+    }
+  },
+  "LibMatrixBot": {
+    // The homeserver to connect to
+    "Homeserver": "rory.gay",
+    // The access token to use
+    "AccessToken": "syt_xxxxxxxxxxxxxxxxx",
+    // The command prefix
+    "Prefix": "?",
+    "LogRoom": "!xxxxxxxxxxxxxxxxxxxxxx:example.com"
+  }
+}
diff --git a/Tests/TestDataGenerator/appsettings.json b/Tests/TestDataGenerator/appsettings.json
new file mode 100644
index 0000000..6ba02f3
--- /dev/null
+++ b/Tests/TestDataGenerator/appsettings.json
@@ -0,0 +1,9 @@
+{
+    "Logging": {
+        "LogLevel": {
+            "Default": "Debug",
+            "System": "Information",
+            "Microsoft": "Information"
+        }
+    }
+}