LoadPLugins tests

This commit is contained in:
Michał Zieliński
2025-06-08 14:48:33 +02:00
parent 36994bd187
commit 201aec78e3
7 changed files with 62 additions and 68 deletions

View File

@@ -60,7 +60,8 @@ jobs:
--configuration Release \ --configuration Release \
--no-restore \ --no-restore \
--logger "trx;LogFileName=test-results.trx" \ --logger "trx;LogFileName=test-results.trx" \
--collect:"XPlat Code Coverage" --collect:"XPlat Code Coverage" \
--filter "Category!=LocalOnly"
- name: Publish Test Results - name: Publish Test Results
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4

View File

@@ -46,21 +46,21 @@ public class PluginManager
} }
} }
_logger.LogInformation("Loaded {ProcessorCount} processors and {ImporterCount} importers from {AssemblyCount} assemblies", _logger.LogInformation("Loaded {ProcessorCount} processors and {ImporterCount} importers from {AssemblyCount} assemblies",
_processorTypes.Count, _processorTypes.Count,
_importerTypes.Count, _importerTypes.Count,
dllFiles.Length); // Zmień z _plugins.Count na assemblyFiles.Length dllFiles.Length); // Zmień z _plugins.Count na assemblyFiles.Length
} }
private void LoadPluginFromAssembly(string assemblyPath) private void LoadPluginFromAssembly(string assemblyPath)
{ {
_logger.LogDebug("Loading assembly from: {Path}", assemblyPath); // Information -> Debug _logger.LogDebug("Loading assembly from: {Path}", assemblyPath); // Information -> Debug
try try
{ {
var assembly = Assembly.LoadFrom(assemblyPath); var assembly = Assembly.LoadFrom(assemblyPath);
_logger.LogDebug("Assembly loaded successfully: {Name}", assembly.FullName); // Information -> Debug _logger.LogDebug("Assembly loaded successfully: {Name}", assembly.FullName); // Information -> Debug
foreach (var type in assembly.GetTypes()) foreach (var type in assembly.GetTypes())
{ {
if (typeof(IDataProcessor).IsAssignableFrom(type) && !type.IsInterface && !type.IsAbstract) if (typeof(IDataProcessor).IsAssignableFrom(type) && !type.IsInterface && !type.IsAbstract)
@@ -68,7 +68,7 @@ public class PluginManager
_processorTypes.Add(type); _processorTypes.Add(type);
_logger.LogDebug("Registered processor: {Type}", type.Name); // Information -> Debug _logger.LogDebug("Registered processor: {Type}", type.Name); // Information -> Debug
} }
if (typeof(IDataImporter).IsAssignableFrom(type) && !type.IsInterface && !type.IsAbstract) if (typeof(IDataImporter).IsAssignableFrom(type) && !type.IsInterface && !type.IsAbstract)
{ {
_importerTypes.Add(type); _importerTypes.Add(type);
@@ -90,7 +90,7 @@ public class PluginManager
{ {
using var scope = _serviceProvider.CreateScope(); using var scope = _serviceProvider.CreateScope();
var instance = (IDataProcessor)ActivatorUtilities.CreateInstance(scope.ServiceProvider, type); var instance = (IDataProcessor)ActivatorUtilities.CreateInstance(scope.ServiceProvider, type);
if (instance.CanProcess(processorType)) if (instance.CanProcess(processorType))
{ {
var scopedProvider = _serviceProvider.CreateScope().ServiceProvider; var scopedProvider = _serviceProvider.CreateScope().ServiceProvider;
@@ -113,7 +113,7 @@ public class PluginManager
{ {
using var scope = _serviceProvider.CreateScope(); using var scope = _serviceProvider.CreateScope();
var instance = (IDataImporter)ActivatorUtilities.CreateInstance(scope.ServiceProvider, type); var instance = (IDataImporter)ActivatorUtilities.CreateInstance(scope.ServiceProvider, type);
if (instance.CanImport(importerType)) if (instance.CanImport(importerType))
{ {
var scopedProvider = _serviceProvider.CreateScope().ServiceProvider; var scopedProvider = _serviceProvider.CreateScope().ServiceProvider;
@@ -132,7 +132,5 @@ public class PluginManager
{ {
return _exporters.FirstOrDefault(e => e.CanExport(exporterType)); return _exporters.FirstOrDefault(e => e.CanExport(exporterType));
} }
public int GetPluginsCount() => _processorTypes.Count + _importerTypes.Count + _exporters.Count;
public IEnumerable<IDataExporter> GetAllExporters() => _exporters.AsReadOnly();
public IEnumerable<IPlugin> GetAllPlugins() => _plugins.AsReadOnly();
} }

View File

@@ -18,15 +18,16 @@ public class ApiConnectionTests : IClassFixture<WebApplicationFactory<Program>>
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
var response = await client.GetAsync("/api/Ping/Ping"); var response = await client.GetAsync("/api/Tests/Ping");
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
var statusCode = (int)response.StatusCode; var statusCode = (int)response.StatusCode;
Assert.Equal(200, statusCode); Assert.Equal(200, statusCode);
Assert.Equal("Pong", content); Assert.Equal("Pong", content);
} }
[Fact] [Fact]
[Trait("Category", "LocalOnly")]
public async Task DatabaseConnectionTest() public async Task DatabaseConnectionTest()
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
@@ -39,4 +40,17 @@ public class ApiConnectionTests : IClassFixture<WebApplicationFactory<Program>>
var layers = JsonSerializer.Deserialize<dynamic>(content); var layers = JsonSerializer.Deserialize<dynamic>(content);
Assert.NotNull(layers); Assert.NotNull(layers);
} }
[Fact]
public async Task LoadPLuginsTest()
{
var client = _factory.CreateClient();
var response = await client.GetAsync("/api/Tests/Plugins");
var content = await response.Content.ReadAsStringAsync();
var statusCode = (int)response.StatusCode;
Assert.Equal(200, statusCode);
var pluginsCount = JsonSerializer.Deserialize<int>(content);
Assert.True(pluginsCount > 0, "Expected plugins count to be greater than 0");
}
} }

View File

@@ -1,28 +0,0 @@
using System.Data;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;
using DiunaBI.Core.Models;
namespace DiunaBI.Core.Controllers;
[ApiController]
[Route("api/[controller]")]
public class AdminController : Controller
{
private readonly IConfiguration _configuration;
public AdminController(
IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
[Route("Version")]
public IActionResult GetVersion()
{
return Ok(new { version = _configuration["app-version"] });
}
}

View File

@@ -1,25 +0,0 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace DiunaBI.WebAPI.Controllers;
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class PingController : Controller
{
private readonly IConfiguration _configuration;
public PingController(
IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
[Route("Ping")]
[AllowAnonymous]
public IActionResult Ping()
{
return Ok("Pong");
}
}

View File

@@ -0,0 +1,34 @@
using DiunaBI.Core.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace DiunaBI.WebAPI.Controllers;
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class TestsController : Controller
{
private readonly PluginManager _pluginManager;
public TestsController(
PluginManager pluginManager)
{
_pluginManager = pluginManager;
}
[HttpGet]
[Route("Ping")]
[AllowAnonymous]
public IActionResult Ping()
{
return Ok("Pong");
}
[HttpGet]
[Route("Plugins")]
[AllowAnonymous]
public IActionResult GetPlugins()
{
var plugins = _pluginManager.GetPluginsCount();
return Ok(plugins);
}
}

View File

@@ -1,3 +1,3 @@
### ###
GET http://localhost:5400/api/Layers/RunQueueJobs/10763478CB738D4ecb2h76g803478CB738D4e GET http://localhost:5400/api/Tests/Plugins