From 94b94c3b14b6895f6b5bfacf7eb5d2f215e7da84 Mon Sep 17 00:00:00 2001 From: Gavin Date: Tue, 28 Jun 2022 14:59:21 +0800 Subject: [PATCH 1/6] feat: Scheduler SDK & SDK UnitTest --- Masa.Contrib.sln | 33 ++ .../Constants.cs | 10 + ...Masa.Contrib.BasicAbility.Scheduler.csproj | 18 ++ .../SchedulerClient.cs | 17 + .../ServiceCollectionExtensions.cs | 43 +++ .../Services/SchedulerJobService.cs | 126 ++++++++ .../Services/SchedulerTaskService.cs | 57 ++++ .../_Imports.cs | 15 + ...ontrib.BasicAbility.Scheduler.Tests.csproj | 23 ++ .../SchedulerClientTest.cs | 52 +++ .../SchedulerJobServiceTest.cs | 302 ++++++++++++++++++ .../SchedulerTaskServiceTest.cs | 48 +++ .../_Imports.cs | 17 + 13 files changed, 761 insertions(+) create mode 100644 src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Constants.cs create mode 100644 src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Masa.Contrib.BasicAbility.Scheduler.csproj create mode 100644 src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/SchedulerClient.cs create mode 100644 src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/ServiceCollectionExtensions.cs create mode 100644 src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs create mode 100644 src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs create mode 100644 src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/_Imports.cs create mode 100644 test/Masa.Contrib.BasicAbility.Scheduler.Tests/Masa.Contrib.BasicAbility.Scheduler.Tests.csproj create mode 100644 test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerClientTest.cs create mode 100644 test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerJobServiceTest.cs create mode 100644 test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerTaskServiceTest.cs create mode 100644 test/Masa.Contrib.BasicAbility.Scheduler.Tests/_Imports.cs diff --git a/Masa.Contrib.sln b/Masa.Contrib.sln index 3309428da..615a9ad4b 100644 --- a/Masa.Contrib.sln +++ b/Masa.Contrib.sln @@ -296,6 +296,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Contrib.BasicAbility.D EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Contrib.BasicAbility.Dcc.Tests", "test\Masa.Contrib.BasicAbility.Dcc.Tests\Masa.Contrib.BasicAbility.Dcc.Tests\Masa.Contrib.BasicAbility.Dcc.Tests.csproj", "{789ABED5-7C94-4F6F-ADCA-E97F3DFC9479}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.BuildingBlocks.BasicAbility.Scheduler", "src\BuildingBlocks\MASA.BuildingBlocks\src\BasicAbility\Masa.BuildingBlocks.BasicAbility.Scheduler\Masa.BuildingBlocks.BasicAbility.Scheduler.csproj", "{BB404E49-0773-4AF2-97EA-108B3CCD8E64}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.BasicAbility.Scheduler.Tests", "test\Masa.Contrib.BasicAbility.Scheduler.Tests\Masa.Contrib.BasicAbility.Scheduler.Tests.csproj", "{5980D054-E2F3-4143-93D1-01993A955AE7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.BasicAbility.Scheduler", "src\BasicAbility\Masa.Contrib.BasicAbility.Scheduler\Masa.Contrib.BasicAbility.Scheduler.csproj", "{8D84666E-C79E-4D49-B73D-360E62D312EF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1224,6 +1230,30 @@ Global {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|Any CPU.Build.0 = Release|Any CPU {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|x64.ActiveCfg = Release|Any CPU {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|x64.Build.0 = Release|Any CPU + {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Debug|x64.ActiveCfg = Debug|Any CPU + {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Debug|x64.Build.0 = Debug|Any CPU + {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Release|Any CPU.Build.0 = Release|Any CPU + {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Release|x64.ActiveCfg = Release|Any CPU + {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Release|x64.Build.0 = Release|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|x64.ActiveCfg = Debug|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|x64.Build.0 = Debug|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|Any CPU.Build.0 = Release|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|x64.ActiveCfg = Release|Any CPU + {5980D054-E2F3-4143-93D1-01993A955AE7}.Release|x64.Build.0 = Release|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|x64.ActiveCfg = Debug|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Debug|x64.Build.0 = Debug|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|Any CPU.Build.0 = Release|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|x64.ActiveCfg = Release|Any CPU + {8D84666E-C79E-4D49-B73D-360E62D312EF}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1371,6 +1401,9 @@ Global {FF3FD53D-D23E-48AC-98B6-3B028B4DE8AF} = {DC578D74-98F0-4F19-A230-CFA8DAEE0AF1} {83FA668F-C838-4883-996D-AF2ECF00FDF8} = {5DFAF4A2-ECB5-46E4-904D-1EA5F48B2D48} {789ABED5-7C94-4F6F-ADCA-E97F3DFC9479} = {38E6C400-90C0-493E-9266-C1602E229F1B} + {BB404E49-0773-4AF2-97EA-108B3CCD8E64} = {DC578D74-98F0-4F19-A230-CFA8DAEE0AF1} + {5980D054-E2F3-4143-93D1-01993A955AE7} = {38E6C400-90C0-493E-9266-C1602E229F1B} + {8D84666E-C79E-4D49-B73D-360E62D312EF} = {5DFAF4A2-ECB5-46E4-904D-1EA5F48B2D48} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {40383055-CC50-4600-AD9A-53C14F620D03} diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Constants.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Constants.cs new file mode 100644 index 000000000..de50d9580 --- /dev/null +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Constants.cs @@ -0,0 +1,10 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Contrib.BasicAbility.Scheduler; + +internal class Constants +{ + internal const string DEFAULT_CLIENT_NAME = "masa.contrib.basicability.scheduler"; + internal const string ENVIRONMENT_KEY = "env_key"; +} diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Masa.Contrib.BasicAbility.Scheduler.csproj b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Masa.Contrib.BasicAbility.Scheduler.csproj new file mode 100644 index 000000000..47a1425ef --- /dev/null +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Masa.Contrib.BasicAbility.Scheduler.csproj @@ -0,0 +1,18 @@ + + + + net6.0 + enable + enable + + + + + + + + + + + + diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/SchedulerClient.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/SchedulerClient.cs new file mode 100644 index 000000000..514e2fa17 --- /dev/null +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/SchedulerClient.cs @@ -0,0 +1,17 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Contrib.BasicAbility.Scheduler; + +public class SchedulerClient : ISchedulerClient +{ + public ISchedulerJobService SchedulerJobService { get; } + + public ISchedulerTaskService SchedulerTaskService { get; } + + public SchedulerClient(ICallerProvider callerProvider, ILoggerFactory loggerFactory) + { + SchedulerJobService = new SchedulerJobService(callerProvider, loggerFactory); + SchedulerTaskService = new SchedulerTaskService(callerProvider, loggerFactory); + } +} diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/ServiceCollectionExtensions.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/ServiceCollectionExtensions.cs new file mode 100644 index 000000000..e55889206 --- /dev/null +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/ServiceCollectionExtensions.cs @@ -0,0 +1,43 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Microsoft.Extensions.DependencyInjection; + +public static class ServiceCollectionExtensions +{ + public static IServiceCollection AddSchedulerClient(this IServiceCollection services, string schedulerServiceBaseAddress) + { + if (string.IsNullOrWhiteSpace(schedulerServiceBaseAddress)) + { + throw new ArgumentNullException(nameof(schedulerServiceBaseAddress)); + } + + services.AddSingleton(); + return services.AddSchedulerClient(callerOptions => + { + callerOptions.UseHttpClient(builder => + { + builder.Name = DEFAULT_CLIENT_NAME; + builder.Configure = opt => opt.BaseAddress = new Uri(schedulerServiceBaseAddress); + }); + }); + } + + public static IServiceCollection AddSchedulerClient(this IServiceCollection services, Action callerOptions) + { + ArgumentNullException.ThrowIfNull(callerOptions, nameof(callerOptions)); + + services.AddHttpContextAccessor(); + services.AddCaller(callerOptions); + + services.AddScoped(serviceProvider => + { + var callProvider = serviceProvider.GetRequiredService().CreateClient(DEFAULT_CLIENT_NAME); + var loggerFactory = serviceProvider.GetRequiredService(); + var schedulerClient = new SchedulerClient(callProvider, loggerFactory); + return schedulerClient; + }); + + return services; + } +} diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs new file mode 100644 index 000000000..e8ddbcfc3 --- /dev/null +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs @@ -0,0 +1,126 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Contrib.BasicAbility.Scheduler.Services; + +public class SchedulerJobService : ISchedulerJobService +{ + const string API = "/api/scheduler-job"; + + readonly ICallerProvider _callerProvider; + readonly IMultiEnvironmentUserContext _multiEnvironmentUserContext; + readonly ILogger _logger; + readonly ILoggerFactory _loggerFactory; + + public SchedulerJobService(ICallerProvider callerProvider, ILoggerFactory loggerFactory) + { + _callerProvider = callerProvider; + _loggerFactory = loggerFactory; + _logger = _loggerFactory.CreateLogger(); + } + + public async Task AddSchedulerJobAsync(AddSchedulerJobRequest request) + { + if (string.IsNullOrWhiteSpace(request.ProjectIdentity)) + { + throw new ArgumentNullException(nameof(request.ProjectIdentity)); + } + + switch (request.JobType) + { + case BuildingBlocks.BasicAbility.Scheduler.Enum.JobTypes.JobApp: + ArgumentNullException.ThrowIfNull(request.JobAppConfig, nameof(request.JobAppConfig)); + break; + case BuildingBlocks.BasicAbility.Scheduler.Enum.JobTypes.Http: + ArgumentNullException.ThrowIfNull(request.HttpConfig, nameof(request.HttpConfig)); + break; + case BuildingBlocks.BasicAbility.Scheduler.Enum.JobTypes.DaprServiceInvocation: + ArgumentNullException.ThrowIfNull(request.DaprServiceInvocationConfig, nameof(request.DaprServiceInvocationConfig)); + break; + } + + try + { + var requestUri = $"{API}/addSchedulerJobBySdk"; + return await _callerProvider.PostAsync(requestUri, request); + } + catch (Exception ex) + { + _logger.LogError(ex, "AddSchedulerJobAsync Error"); + return Guid.Empty; + } + + } + + public async Task DisableSchedulerJob(BaseSchedulerJobRequest request) + { + try + { + var requestData = new ChangeEnabledStatusRequest() + { + JobId = request.JobId, + OperatorId = request.OperatorId, + Enabled = false + }; + var requestUri = $"{API}/changeEnableStatus"; + await _callerProvider.PutAsync(requestUri, requestData); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "DisableSchedulerJob Error"); + return false; + } + } + + public async Task EnableSchedulerJob(BaseSchedulerJobRequest request) + { + try + { + var requestData = new ChangeEnabledStatusRequest() + { + JobId = request.JobId, + OperatorId = request.OperatorId, + Enabled = true + }; + var requestUri = $"{API}/changeEnableStatus"; + await _callerProvider.PutAsync(requestUri, requestData); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "EnableSchedulerJob Error"); + return false; + } + } + + public async Task RemoveSchedulerJobAsync(BaseSchedulerJobRequest request) + { + try + { + var requestUri = $"{API}"; + await _callerProvider.DeleteAsync(requestUri, request); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "RemoveSchedulerJobAsync Error"); + return false; + } + } + + public async Task StartSchedulerJobAsync(BaseSchedulerJobRequest request) + { + try + { + var requestUri = $"{API}/startJob"; + await _callerProvider.PutAsync(requestUri, request); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "StartSchedulerJobAsync Error"); + return false; + } + } +} diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs new file mode 100644 index 000000000..c7ae12aaa --- /dev/null +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs @@ -0,0 +1,57 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Contrib.BasicAbility.Scheduler.Services; + +public class SchedulerTaskService : ISchedulerTaskService +{ + const string API = "/api/scheduler-task"; + + readonly ICallerProvider _callerProvider; + readonly ILogger _logger; + readonly ILoggerFactory _loggerFactory; + + public SchedulerTaskService(ICallerProvider callerProvider, ILoggerFactory loggerFactory) + { + _callerProvider = callerProvider; + _loggerFactory = loggerFactory; + _logger = _loggerFactory.CreateLogger(); + } + + public async Task StopSchedulerTaskAsync(BaseSchedulerTaskRequest request) + { + try + { + var requestUri = $"{API}/stop"; + await _callerProvider.PutAsync(requestUri, request); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "StopSchedulerTaskAsync Error"); + return false; + } + } + + public async Task StartSchedulerTaskAsync(BaseSchedulerTaskRequest request) + { + try + { + var requestData = new StartSchedulerTaskRequest() + { + TaskId = request.TaskId, + OperatorId = request.OperatorId, + IsManual = true + }; + + var requestUri = $"{API}/start"; + await _callerProvider.PutAsync(requestUri, requestData); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "StopSchedulerTaskAsync Error"); + return false; + } + } +} diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/_Imports.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/_Imports.cs new file mode 100644 index 000000000..912690694 --- /dev/null +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/_Imports.cs @@ -0,0 +1,15 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +global using Masa.BuildingBlocks.BasicAbility.Scheduler; +global using Masa.Utils.Caller.Core; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Service; +global using Masa.BuildingBlocks.Identity.IdentityModel; +global using Masa.Contrib.BasicAbility.Scheduler.Services; +global using Microsoft.Extensions.DependencyInjection; +global using Masa.Utils.Caller.HttpClient; +global using static Masa.Contrib.BasicAbility.Scheduler.Constants; +global using Masa.Contrib.BasicAbility.Scheduler; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Model; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Request; +global using Microsoft.Extensions.Logging; diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/Masa.Contrib.BasicAbility.Scheduler.Tests.csproj b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/Masa.Contrib.BasicAbility.Scheduler.Tests.csproj new file mode 100644 index 000000000..1666ba764 --- /dev/null +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/Masa.Contrib.BasicAbility.Scheduler.Tests.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + + false + + + + + + + + + + + + + + + + diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerClientTest.cs b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerClientTest.cs new file mode 100644 index 000000000..d92f298ba --- /dev/null +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerClientTest.cs @@ -0,0 +1,52 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Contrib.BasicAbility.Scheduler.Tests; + +[TestClass] +public class SchedulerClientTest +{ + [TestMethod] + public void TestAddSchedulerClientByOptions() + { + var services = new ServiceCollection(); + + services.AddSchedulerClient(option => + { + option.UseHttpClient(builder => + { + builder.Name = "masa.contrib.basicability.scheduler"; + builder.Configure = opt => opt.BaseAddress = new Uri("https://github.com"); + }); + }); + + var schedulerClient = services.BuildServiceProvider().GetRequiredService(); + Assert.IsNotNull(schedulerClient); + } + + [TestMethod] + public void TestAddSchedulerClient() + { + var services = new ServiceCollection(); + services.AddSchedulerClient("https://github.com"); + var schedulerClient = services.BuildServiceProvider().GetRequiredService(); + Assert.IsNotNull(schedulerClient); + } + + [TestMethod] + public void TestAddSchedulerClientShouldThrowArgumentNullException() + { + var services = new ServiceCollection(); + + Assert.ThrowsException(() => services.AddSchedulerClient("")); + } + + [TestMethod] + public void TestAddSchedulerClientShouldThrowArgumentNullException2() + { + var services = new ServiceCollection(); + + Assert.ThrowsException(() => services.AddSchedulerClient(callerOptions: null!)); + } + +} diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerJobServiceTest.cs b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerJobServiceTest.cs new file mode 100644 index 000000000..07531bb8d --- /dev/null +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerJobServiceTest.cs @@ -0,0 +1,302 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Contrib.BasicAbility.Scheduler.Tests; + +[TestClass] +public class SchedulerJobServiceTest +{ + const string API = "/api/scheduler-job"; + + [TestMethod] + public async Task TestAddSchedulerHttpJobAsync() + { + var requestData = new AddSchedulerJobRequest() + { + Name = "TestJob", + JobType = JobTypes.Http, + ProjectIdentity = "MASA_MC", + CronExpression = "", + HttpConfig = new SchedulerJobHttpConfig() + { + RequestUrl = "www.baidu.com", + HttpVerifyType = HttpVerifyTypes.CustomStatusCode, + HttpBody = "", + HttpHeaders = new List>() + { + new KeyValuePair("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36") + }, + HttpMethod = HttpMethods.GET, + VerifyContent = "200", + HttpParameters = new List>() + { + new KeyValuePair("ie", "utf-8"), + } + }, + OperatorId = Guid.NewGuid(), + Description = "Test", + FailedRetryCount = 0, + FailedRetryInterval = 0, + IsAlertException = false, + RunTimeoutSecond = 30, + RunTimeoutStrategy = RunTimeoutStrategyTypes.IgnoreTimeout, + ScheduleBlockStrategy = ScheduleBlockStrategyTypes.Parallel, + ScheduleExpiredStrategy = ScheduleExpiredStrategyTypes.Ignore + }; + + var requestUri = $"{API}/addSchedulerJobBySdk"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData); + callerProvider.Verify(provider => provider.PostAsync(requestUri, requestData, default), Times.Once); + + Assert.AreNotEqual(Guid.Empty, result); + } + + [TestMethod] + public async Task TestAddSchedulerJobApp() + { + var requestData = new AddSchedulerJobRequest() + { + Name = "TestJob", + JobType = JobTypes.JobApp, + ProjectIdentity = "MASA_MC", + CronExpression = "", + JobAppConfig = new SchedulerJobAppConfig() + { + JobAppIdentity = "MASA_MC_SERVICE", + JobEntryAssembly = "Masa.Test.Job", + JobEntryMethod = "TestRunJob", + JobParams = "1;2;3", + Version = "" + }, + OperatorId = Guid.NewGuid(), + Description = "Test", + FailedRetryCount = 0, + FailedRetryInterval = 0, + IsAlertException = false, + RunTimeoutSecond = 30, + RunTimeoutStrategy = RunTimeoutStrategyTypes.IgnoreTimeout, + ScheduleBlockStrategy = ScheduleBlockStrategyTypes.Parallel, + ScheduleExpiredStrategy = ScheduleExpiredStrategyTypes.Ignore + }; + + var requestUri = $"{API}/addSchedulerJobBySdk"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData); + callerProvider.Verify(provider => provider.PostAsync(requestUri, requestData, default), Times.Once); + + Assert.AreNotEqual(Guid.Empty, result); + } + + [TestMethod] + public async Task TestAddSchedulerDaprServiceInvocationJob() + { + var requestData = new AddSchedulerJobRequest() + { + Name = "TestJob", + JobType = JobTypes.DaprServiceInvocation, + ProjectIdentity = "MASA_MC", + CronExpression = "", + DaprServiceInvocationConfig = new SchedulerJobDaprServiceInvocationConfig() + { + DaprServiceIdentity = "MASA_MC_DAPR_SERVICE", + Data = "Test", + HttpMethod = HttpMethods.POST, + MethodName = "TestMethod" + }, + OperatorId = Guid.NewGuid(), + Description = "Test", + FailedRetryCount = 0, + FailedRetryInterval = 0, + IsAlertException = false, + RunTimeoutSecond = 30, + RunTimeoutStrategy = RunTimeoutStrategyTypes.IgnoreTimeout, + ScheduleBlockStrategy = ScheduleBlockStrategyTypes.Parallel, + ScheduleExpiredStrategy = ScheduleExpiredStrategyTypes.Ignore + }; + + var requestUri = $"{API}/addSchedulerJobBySdk"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData); + callerProvider.Verify(provider => provider.PostAsync(requestUri, requestData, default), Times.Once); + + Assert.AreNotEqual(Guid.Empty, result); + } + + [TestMethod] + public async Task TestAddSchedulerJobArgumentNullException() + { + var requestData = new AddSchedulerJobRequest() + { + Name = "TestJob", + JobType = JobTypes.Http, + CronExpression = "", + HttpConfig = new SchedulerJobHttpConfig() + { + RequestUrl = "www.baidu.com", + HttpVerifyType = HttpVerifyTypes.CustomStatusCode, + HttpBody = "", + HttpHeaders = new List>() + { + new KeyValuePair("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36") + }, + HttpMethod = HttpMethods.GET, + VerifyContent = "200", + HttpParameters = new List>() + { + new KeyValuePair("ie", "utf-8"), + } + }, + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/addSchedulerJobBySdk"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData)); + } + + [TestMethod] + public async Task TestAddSchedulerHttpJobArgumentNullException() + { + var requestData = new AddSchedulerJobRequest() + { + Name = "TestJob", + JobType = JobTypes.Http, + CronExpression = "", + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/addSchedulerJobBySdk"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData)); + } + + [TestMethod] + public async Task TestAddSchedulerJobAppArgumentNullException() + { + var requestData = new AddSchedulerJobRequest() + { + Name = "TestJob", + JobType = JobTypes.JobApp, + CronExpression = "", + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/addSchedulerJobBySdk"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData)); + } + + [TestMethod] + public async Task TestAddSchedulerDaprInvocationJobArgumentNullException() + { + var requestData = new AddSchedulerJobRequest() + { + Name = "TestJob", + JobType = JobTypes.DaprServiceInvocation, + CronExpression = "", + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/addSchedulerJobBySdk"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData)); + } + + [TestMethod] + public async Task TestRemoveSchedulerJobAsync() + { + var requestData = new BaseSchedulerJobRequest() + { + JobId = Guid.NewGuid(), + OperatorId = Guid.NewGuid() + }; + + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.DeleteAsync(API, requestData, true, default)).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerJobService.RemoveSchedulerJobAsync(requestData); + callerProvider.Verify(provider => provider.DeleteAsync(API, requestData, true, default), Times.Once); + + Assert.IsTrue(result); + } + + [TestMethod] + public async Task TestStartSchedulerJobAsync() + { + var requestData = new BaseSchedulerJobRequest() + { + JobId = Guid.NewGuid(), + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/startJob"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PutAsync(requestUri, requestData, true, default)).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerJobService.StartSchedulerJobAsync(requestData); + callerProvider.Verify(provider => provider.PutAsync(requestUri, requestData, true, default), Times.Once); + Assert.IsTrue(result); + } + + [TestMethod] + public async Task TestEnableSchedulerJob() + { + var requestData = new BaseSchedulerJobRequest() + { + JobId = Guid.NewGuid(), + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/changeEnableStatus"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PutAsync(requestUri, It.IsAny(), true, default)).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerJobService.EnableSchedulerJob(requestData); + callerProvider.Verify(provider => provider.PutAsync(requestUri, It.IsAny(), true, default), Times.Once); + Assert.IsTrue(result); + } + + [TestMethod] + public async Task TestDisableSchedulerJob() + { + var requestData = new BaseSchedulerJobRequest() + { + JobId = Guid.NewGuid(), + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/changeEnableStatus"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PutAsync(requestUri, It.IsAny(), true, default)).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerJobService.DisableSchedulerJob(requestData); + callerProvider.Verify(provider => provider.PutAsync(requestUri, It.IsAny(), true, default), Times.Once); + Assert.IsTrue(result); + } +} diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerTaskServiceTest.cs b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerTaskServiceTest.cs new file mode 100644 index 000000000..224cd5657 --- /dev/null +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerTaskServiceTest.cs @@ -0,0 +1,48 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +namespace Masa.Contrib.BasicAbility.Scheduler.Tests; + +[TestClass] +public class SchedulerTaskServiceTest +{ + const string API = "/api/scheduler-task"; + + [TestMethod] + public async Task TestStopSchedulerTaskAsync() + { + var requestData = new BaseSchedulerTaskRequest() + { + TaskId = Guid.NewGuid(), + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/stop"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PutAsync(requestUri, requestData, true, default)).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerTaskService.StopSchedulerTaskAsync(requestData); + callerProvider.Verify(provider => provider.PutAsync(requestUri, requestData, true, default), Times.Once); + Assert.IsTrue(result); + } + + [TestMethod] + public async Task TestStartSchedulerTaskAsync() + { + var request = new BaseSchedulerTaskRequest() + { + TaskId = Guid.NewGuid(), + OperatorId = Guid.NewGuid() + }; + + var requestUri = $"{API}/start"; + var callerProvider = new Mock(); + var loggerFactory = new Mock(); + callerProvider.Setup(provider => provider.PutAsync(requestUri, It.IsAny(), true, default)).Verifiable(); + var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); + var result = await schedulerClient.SchedulerTaskService.StartSchedulerTaskAsync(request); + callerProvider.Verify(provider => provider.PutAsync(requestUri, It.IsAny(), true, default), Times.Once); + Assert.IsTrue(result); + } +} diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/_Imports.cs b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/_Imports.cs new file mode 100644 index 000000000..a45d1af6e --- /dev/null +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/_Imports.cs @@ -0,0 +1,17 @@ +// Copyright (c) MASA Stack All rights reserved. +// Licensed under the MIT License. See LICENSE.txt in the project root for license information. + +global using Masa.Utils.Caller.Core; +global using Microsoft.VisualStudio.TestTools.UnitTesting; +global using Moq; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Request; +global using System; +global using Masa.BuildingBlocks.Identity.IdentityModel; +global using Microsoft.Extensions.Logging; +global using System.Threading.Tasks; +global using Microsoft.Extensions.DependencyInjection; +global using Masa.Utils.Caller.HttpClient; +global using Masa.BuildingBlocks.BasicAbility.Scheduler; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Model; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Enum; +global using System.Collections.Generic; From aaa114774243b626f3b0814b8ac086c40f8b102f Mon Sep 17 00:00:00 2001 From: Gavin Date: Tue, 28 Jun 2022 16:33:40 +0800 Subject: [PATCH 2/6] chore: sort global using --- .../_Imports.cs | 10 ++++------ .../_Imports.cs | 17 ++++++++--------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/_Imports.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/_Imports.cs index 912690694..cb3f0e0ed 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/_Imports.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/_Imports.cs @@ -2,14 +2,12 @@ // Licensed under the MIT License. See LICENSE.txt in the project root for license information. global using Masa.BuildingBlocks.BasicAbility.Scheduler; -global using Masa.Utils.Caller.Core; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Request; global using Masa.BuildingBlocks.BasicAbility.Scheduler.Service; global using Masa.BuildingBlocks.Identity.IdentityModel; +global using Masa.Contrib.BasicAbility.Scheduler; global using Masa.Contrib.BasicAbility.Scheduler.Services; -global using Microsoft.Extensions.DependencyInjection; +global using Masa.Utils.Caller.Core; global using Masa.Utils.Caller.HttpClient; -global using static Masa.Contrib.BasicAbility.Scheduler.Constants; -global using Masa.Contrib.BasicAbility.Scheduler; -global using Masa.BuildingBlocks.BasicAbility.Scheduler.Model; -global using Masa.BuildingBlocks.BasicAbility.Scheduler.Request; global using Microsoft.Extensions.Logging; +global using static Masa.Contrib.BasicAbility.Scheduler.Constants; diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/_Imports.cs b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/_Imports.cs index a45d1af6e..a2ca75efd 100644 --- a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/_Imports.cs +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/_Imports.cs @@ -1,17 +1,16 @@ // Copyright (c) MASA Stack All rights reserved. // Licensed under the MIT License. See LICENSE.txt in the project root for license information. +global using Masa.BuildingBlocks.BasicAbility.Scheduler; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Enum; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Model; +global using Masa.BuildingBlocks.BasicAbility.Scheduler.Request; global using Masa.Utils.Caller.Core; +global using Masa.Utils.Caller.HttpClient; +global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.Logging; global using Microsoft.VisualStudio.TestTools.UnitTesting; global using Moq; -global using Masa.BuildingBlocks.BasicAbility.Scheduler.Request; global using System; -global using Masa.BuildingBlocks.Identity.IdentityModel; -global using Microsoft.Extensions.Logging; -global using System.Threading.Tasks; -global using Microsoft.Extensions.DependencyInjection; -global using Masa.Utils.Caller.HttpClient; -global using Masa.BuildingBlocks.BasicAbility.Scheduler; -global using Masa.BuildingBlocks.BasicAbility.Scheduler.Model; -global using Masa.BuildingBlocks.BasicAbility.Scheduler.Enum; global using System.Collections.Generic; +global using System.Threading.Tasks; From 461603f9d332f0836b636d99644c08194a83dbde Mon Sep 17 00:00:00 2001 From: Gavin Date: Tue, 28 Jun 2022 17:20:35 +0800 Subject: [PATCH 3/6] rename: remove meaningless repeat function name --- .../Services/SchedulerJobService.cs | 10 ++++----- .../Services/SchedulerTaskService.cs | 4 ++-- src/BuildingBlocks/MASA.BuildingBlocks | 2 +- .../SchedulerJobServiceTest.cs | 22 +++++++++---------- .../SchedulerTaskServiceTest.cs | 4 ++-- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs index e8ddbcfc3..491922929 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs @@ -19,7 +19,7 @@ public SchedulerJobService(ICallerProvider callerProvider, ILoggerFactory logger _logger = _loggerFactory.CreateLogger(); } - public async Task AddSchedulerJobAsync(AddSchedulerJobRequest request) + public async Task AddbAsync(AddSchedulerJobRequest request) { if (string.IsNullOrWhiteSpace(request.ProjectIdentity)) { @@ -52,7 +52,7 @@ public async Task AddSchedulerJobAsync(AddSchedulerJobRequest request) } - public async Task DisableSchedulerJob(BaseSchedulerJobRequest request) + public async Task DisableAsync(BaseSchedulerJobRequest request) { try { @@ -73,7 +73,7 @@ public async Task DisableSchedulerJob(BaseSchedulerJobRequest request) } } - public async Task EnableSchedulerJob(BaseSchedulerJobRequest request) + public async Task EnableAsync(BaseSchedulerJobRequest request) { try { @@ -94,7 +94,7 @@ public async Task EnableSchedulerJob(BaseSchedulerJobRequest request) } } - public async Task RemoveSchedulerJobAsync(BaseSchedulerJobRequest request) + public async Task RemoveAsync(BaseSchedulerJobRequest request) { try { @@ -109,7 +109,7 @@ public async Task RemoveSchedulerJobAsync(BaseSchedulerJobRequest request) } } - public async Task StartSchedulerJobAsync(BaseSchedulerJobRequest request) + public async Task StartAsync(BaseSchedulerJobRequest request) { try { diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs index c7ae12aaa..eac27d299 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs @@ -18,7 +18,7 @@ public SchedulerTaskService(ICallerProvider callerProvider, ILoggerFactory logge _logger = _loggerFactory.CreateLogger(); } - public async Task StopSchedulerTaskAsync(BaseSchedulerTaskRequest request) + public async Task StopAsync(BaseSchedulerTaskRequest request) { try { @@ -33,7 +33,7 @@ public async Task StopSchedulerTaskAsync(BaseSchedulerTaskRequest request) } } - public async Task StartSchedulerTaskAsync(BaseSchedulerTaskRequest request) + public async Task StartAsync(BaseSchedulerTaskRequest request) { try { diff --git a/src/BuildingBlocks/MASA.BuildingBlocks b/src/BuildingBlocks/MASA.BuildingBlocks index 75a5c0506..6d70e43fd 160000 --- a/src/BuildingBlocks/MASA.BuildingBlocks +++ b/src/BuildingBlocks/MASA.BuildingBlocks @@ -1 +1 @@ -Subproject commit 75a5c050601d8a37d2f10bac59b600af2780f34d +Subproject commit 6d70e43fd7eff6451cecada89b901ec2f4044b93 diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerJobServiceTest.cs b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerJobServiceTest.cs index 07531bb8d..26720937a 100644 --- a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerJobServiceTest.cs +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerJobServiceTest.cs @@ -49,7 +49,7 @@ public async Task TestAddSchedulerHttpJobAsync() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData); + var result = await schedulerClient.SchedulerJobService.AddbAsync(requestData); callerProvider.Verify(provider => provider.PostAsync(requestUri, requestData, default), Times.Once); Assert.AreNotEqual(Guid.Empty, result); @@ -88,7 +88,7 @@ public async Task TestAddSchedulerJobApp() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData); + var result = await schedulerClient.SchedulerJobService.AddbAsync(requestData); callerProvider.Verify(provider => provider.PostAsync(requestUri, requestData, default), Times.Once); Assert.AreNotEqual(Guid.Empty, result); @@ -126,7 +126,7 @@ public async Task TestAddSchedulerDaprServiceInvocationJob() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData); + var result = await schedulerClient.SchedulerJobService.AddbAsync(requestData); callerProvider.Verify(provider => provider.PostAsync(requestUri, requestData, default), Times.Once); Assert.AreNotEqual(Guid.Empty, result); @@ -164,7 +164,7 @@ public async Task TestAddSchedulerJobArgumentNullException() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData)); + await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddbAsync(requestData)); } [TestMethod] @@ -183,7 +183,7 @@ public async Task TestAddSchedulerHttpJobArgumentNullException() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData)); + await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddbAsync(requestData)); } [TestMethod] @@ -202,7 +202,7 @@ public async Task TestAddSchedulerJobAppArgumentNullException() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData)); + await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddbAsync(requestData)); } [TestMethod] @@ -221,7 +221,7 @@ public async Task TestAddSchedulerDaprInvocationJobArgumentNullException() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PostAsync(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddSchedulerJobAsync(requestData)); + await Assert.ThrowsExceptionAsync(async () => await schedulerClient.SchedulerJobService.AddbAsync(requestData)); } [TestMethod] @@ -237,7 +237,7 @@ public async Task TestRemoveSchedulerJobAsync() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.DeleteAsync(API, requestData, true, default)).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerJobService.RemoveSchedulerJobAsync(requestData); + var result = await schedulerClient.SchedulerJobService.RemoveAsync(requestData); callerProvider.Verify(provider => provider.DeleteAsync(API, requestData, true, default), Times.Once); Assert.IsTrue(result); @@ -257,7 +257,7 @@ public async Task TestStartSchedulerJobAsync() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PutAsync(requestUri, requestData, true, default)).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerJobService.StartSchedulerJobAsync(requestData); + var result = await schedulerClient.SchedulerJobService.StartAsync(requestData); callerProvider.Verify(provider => provider.PutAsync(requestUri, requestData, true, default), Times.Once); Assert.IsTrue(result); } @@ -276,7 +276,7 @@ public async Task TestEnableSchedulerJob() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PutAsync(requestUri, It.IsAny(), true, default)).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerJobService.EnableSchedulerJob(requestData); + var result = await schedulerClient.SchedulerJobService.EnableAsync(requestData); callerProvider.Verify(provider => provider.PutAsync(requestUri, It.IsAny(), true, default), Times.Once); Assert.IsTrue(result); } @@ -295,7 +295,7 @@ public async Task TestDisableSchedulerJob() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PutAsync(requestUri, It.IsAny(), true, default)).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerJobService.DisableSchedulerJob(requestData); + var result = await schedulerClient.SchedulerJobService.DisableAsync(requestData); callerProvider.Verify(provider => provider.PutAsync(requestUri, It.IsAny(), true, default), Times.Once); Assert.IsTrue(result); } diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerTaskServiceTest.cs b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerTaskServiceTest.cs index 224cd5657..a18086153 100644 --- a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerTaskServiceTest.cs +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerTaskServiceTest.cs @@ -22,7 +22,7 @@ public async Task TestStopSchedulerTaskAsync() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PutAsync(requestUri, requestData, true, default)).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerTaskService.StopSchedulerTaskAsync(requestData); + var result = await schedulerClient.SchedulerTaskService.StopAsync(requestData); callerProvider.Verify(provider => provider.PutAsync(requestUri, requestData, true, default), Times.Once); Assert.IsTrue(result); } @@ -41,7 +41,7 @@ public async Task TestStartSchedulerTaskAsync() var loggerFactory = new Mock(); callerProvider.Setup(provider => provider.PutAsync(requestUri, It.IsAny(), true, default)).Verifiable(); var schedulerClient = new SchedulerClient(callerProvider.Object, loggerFactory.Object); - var result = await schedulerClient.SchedulerTaskService.StartSchedulerTaskAsync(request); + var result = await schedulerClient.SchedulerTaskService.StartAsync(request); callerProvider.Verify(provider => provider.PutAsync(requestUri, It.IsAny(), true, default), Times.Once); Assert.IsTrue(result); } From 9ded79dc2cdf47c46a667406014fa9b38a508790 Mon Sep 17 00:00:00 2001 From: Gavin Date: Tue, 28 Jun 2022 18:02:06 +0800 Subject: [PATCH 4/6] resolve conversation --- .../SchedulerClient.cs | 2 +- .../ServiceCollectionExtensions.cs | 10 +++++++++- .../Services/SchedulerJobService.cs | 19 ++++++++----------- .../Services/SchedulerTaskService.cs | 12 +++++------- ...ontrib.BasicAbility.Scheduler.Tests.csproj | 13 ++++++++----- .../SchedulerClientTest.cs | 4 ++-- 6 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/SchedulerClient.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/SchedulerClient.cs index 514e2fa17..658cc2755 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/SchedulerClient.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/SchedulerClient.cs @@ -9,7 +9,7 @@ public class SchedulerClient : ISchedulerClient public ISchedulerTaskService SchedulerTaskService { get; } - public SchedulerClient(ICallerProvider callerProvider, ILoggerFactory loggerFactory) + public SchedulerClient(ICallerProvider callerProvider, ILoggerFactory? loggerFactory = null) { SchedulerJobService = new SchedulerJobService(callerProvider, loggerFactory); SchedulerTaskService = new SchedulerTaskService(callerProvider, loggerFactory); diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/ServiceCollectionExtensions.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/ServiceCollectionExtensions.cs index e55889206..813475a11 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/ServiceCollectionExtensions.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/ServiceCollectionExtensions.cs @@ -27,17 +27,25 @@ public static IServiceCollection AddSchedulerClient(this IServiceCollection serv { ArgumentNullException.ThrowIfNull(callerOptions, nameof(callerOptions)); + if (services.Any(service => service.ImplementationType == typeof(SchedulerProvider))) + return services; + + services.AddSingleton(); services.AddHttpContextAccessor(); services.AddCaller(callerOptions); services.AddScoped(serviceProvider => { var callProvider = serviceProvider.GetRequiredService().CreateClient(DEFAULT_CLIENT_NAME); - var loggerFactory = serviceProvider.GetRequiredService(); + var loggerFactory = serviceProvider.GetService(); var schedulerClient = new SchedulerClient(callProvider, loggerFactory); return schedulerClient; }); return services; } + + private class SchedulerProvider + { + } } diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs index 491922929..2c194bc34 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerJobService.cs @@ -8,15 +8,12 @@ public class SchedulerJobService : ISchedulerJobService const string API = "/api/scheduler-job"; readonly ICallerProvider _callerProvider; - readonly IMultiEnvironmentUserContext _multiEnvironmentUserContext; - readonly ILogger _logger; - readonly ILoggerFactory _loggerFactory; + readonly ILogger? _logger; - public SchedulerJobService(ICallerProvider callerProvider, ILoggerFactory loggerFactory) + public SchedulerJobService(ICallerProvider callerProvider, ILoggerFactory? loggerFactory = null) { _callerProvider = callerProvider; - _loggerFactory = loggerFactory; - _logger = _loggerFactory.CreateLogger(); + _logger = loggerFactory?.CreateLogger(); } public async Task AddbAsync(AddSchedulerJobRequest request) @@ -46,7 +43,7 @@ public async Task AddbAsync(AddSchedulerJobRequest request) } catch (Exception ex) { - _logger.LogError(ex, "AddSchedulerJobAsync Error"); + _logger?.LogError(ex, "AddSchedulerJobAsync Error"); return Guid.Empty; } @@ -68,7 +65,7 @@ public async Task DisableAsync(BaseSchedulerJobRequest request) } catch (Exception ex) { - _logger.LogError(ex, "DisableSchedulerJob Error"); + _logger?.LogError(ex, "DisableSchedulerJob Error"); return false; } } @@ -89,7 +86,7 @@ public async Task EnableAsync(BaseSchedulerJobRequest request) } catch (Exception ex) { - _logger.LogError(ex, "EnableSchedulerJob Error"); + _logger?.LogError(ex, "EnableSchedulerJob Error"); return false; } } @@ -104,7 +101,7 @@ public async Task RemoveAsync(BaseSchedulerJobRequest request) } catch (Exception ex) { - _logger.LogError(ex, "RemoveSchedulerJobAsync Error"); + _logger?.LogError(ex, "RemoveSchedulerJobAsync Error"); return false; } } @@ -119,7 +116,7 @@ public async Task StartAsync(BaseSchedulerJobRequest request) } catch (Exception ex) { - _logger.LogError(ex, "StartSchedulerJobAsync Error"); + _logger?.LogError(ex, "StartSchedulerJobAsync Error"); return false; } } diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs index eac27d299..29806b4d5 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Services/SchedulerTaskService.cs @@ -8,14 +8,12 @@ public class SchedulerTaskService : ISchedulerTaskService const string API = "/api/scheduler-task"; readonly ICallerProvider _callerProvider; - readonly ILogger _logger; - readonly ILoggerFactory _loggerFactory; + readonly ILogger? _logger; - public SchedulerTaskService(ICallerProvider callerProvider, ILoggerFactory loggerFactory) + public SchedulerTaskService(ICallerProvider callerProvider, ILoggerFactory? loggerFactory) { _callerProvider = callerProvider; - _loggerFactory = loggerFactory; - _logger = _loggerFactory.CreateLogger(); + _logger = loggerFactory?.CreateLogger(); } public async Task StopAsync(BaseSchedulerTaskRequest request) @@ -28,7 +26,7 @@ public async Task StopAsync(BaseSchedulerTaskRequest request) } catch (Exception ex) { - _logger.LogError(ex, "StopSchedulerTaskAsync Error"); + _logger?.LogError(ex, "StopSchedulerTaskAsync Error"); return false; } } @@ -50,7 +48,7 @@ public async Task StartAsync(BaseSchedulerTaskRequest request) } catch (Exception ex) { - _logger.LogError(ex, "StopSchedulerTaskAsync Error"); + _logger?.LogError(ex, "StopSchedulerTaskAsync Error"); return false; } } diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/Masa.Contrib.BasicAbility.Scheduler.Tests.csproj b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/Masa.Contrib.BasicAbility.Scheduler.Tests.csproj index 1666ba764..01624c4f7 100644 --- a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/Masa.Contrib.BasicAbility.Scheduler.Tests.csproj +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/Masa.Contrib.BasicAbility.Scheduler.Tests.csproj @@ -8,11 +8,14 @@ - - - - - + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerClientTest.cs b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerClientTest.cs index d92f298ba..46959a645 100644 --- a/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerClientTest.cs +++ b/test/Masa.Contrib.BasicAbility.Scheduler.Tests/SchedulerClientTest.cs @@ -20,7 +20,7 @@ public void TestAddSchedulerClientByOptions() }); }); - var schedulerClient = services.BuildServiceProvider().GetRequiredService(); + var schedulerClient = services.BuildServiceProvider().GetService(); Assert.IsNotNull(schedulerClient); } @@ -29,7 +29,7 @@ public void TestAddSchedulerClient() { var services = new ServiceCollection(); services.AddSchedulerClient("https://github.com"); - var schedulerClient = services.BuildServiceProvider().GetRequiredService(); + var schedulerClient = services.BuildServiceProvider().GetService(); Assert.IsNotNull(schedulerClient); } From ce7ab42b0200222c372c5dc8911ff40c3e821dd5 Mon Sep 17 00:00:00 2001 From: Gavin Date: Tue, 28 Jun 2022 18:06:19 +0800 Subject: [PATCH 5/6] resolve conversation --- .../Masa.Contrib.BasicAbility.Scheduler.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Masa.Contrib.BasicAbility.Scheduler.csproj b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Masa.Contrib.BasicAbility.Scheduler.csproj index 47a1425ef..013e83a80 100644 --- a/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Masa.Contrib.BasicAbility.Scheduler.csproj +++ b/src/BasicAbility/Masa.Contrib.BasicAbility.Scheduler/Masa.Contrib.BasicAbility.Scheduler.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -7,7 +7,7 @@ - + From a6d5da0d7d5b830c169773d37957e92bc6a064e1 Mon Sep 17 00:00:00 2001 From: Gavin Date: Tue, 28 Jun 2022 18:10:45 +0800 Subject: [PATCH 6/6] chore: resolve merge error --- Masa.Contrib.sln | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Masa.Contrib.sln b/Masa.Contrib.sln index ab054f742..8854ccb52 100644 --- a/Masa.Contrib.sln +++ b/Masa.Contrib.sln @@ -1251,14 +1251,6 @@ Global {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|Any CPU.Build.0 = Release|Any CPU {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|x64.ActiveCfg = Release|Any CPU {FD35BEFA-512C-4483-B5C0-ADCA35680315}.Release|x64.Build.0 = Release|Any CPU - {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Debug|x64.ActiveCfg = Debug|Any CPU - {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Debug|x64.Build.0 = Debug|Any CPU - {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Release|Any CPU.Build.0 = Release|Any CPU - {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Release|x64.ActiveCfg = Release|Any CPU - {BB404E49-0773-4AF2-97EA-108B3CCD8E64}.Release|x64.Build.0 = Release|Any CPU {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU {5980D054-E2F3-4143-93D1-01993A955AE7}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1438,7 +1430,6 @@ Global {FF3FD53D-D23E-48AC-98B6-3B028B4DE8AF} = {0D34A7F0-DC77-4789-A136-93089CBD15C3} {83FA668F-C838-4883-996D-AF2ECF00FDF8} = {5DFAF4A2-ECB5-46E4-904D-1EA5F48B2D48} {789ABED5-7C94-4F6F-ADCA-E97F3DFC9479} = {38E6C400-90C0-493E-9266-C1602E229F1B} - {BB404E49-0773-4AF2-97EA-108B3CCD8E64} = {DC578D74-98F0-4F19-A230-CFA8DAEE0AF1} {5980D054-E2F3-4143-93D1-01993A955AE7} = {38E6C400-90C0-493E-9266-C1602E229F1B} {8D84666E-C79E-4D49-B73D-360E62D312EF} = {5DFAF4A2-ECB5-46E4-904D-1EA5F48B2D48} {981E883E-CCDC-400B-8FB1-76E1E65C32AF} = {0D34A7F0-DC77-4789-A136-93089CBD15C3}