Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(stack-scheduler): SDK add update Job #616

Merged
merged 11 commits into from
May 15, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace Masa.BuildingBlocks.StackSdks.Scheduler.Request;

public class AddSchedulerJobRequest
public class UpsertSchedulerJobRequest
{
public string ProjectIdentity { get; set; } = string.Empty;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ namespace Masa.BuildingBlocks.StackSdks.Scheduler.Service;

public interface ISchedulerJobService
{
Task<Guid> AddAsync(AddSchedulerJobRequest job);
Task<Guid> AddAsync(UpsertSchedulerJobRequest job);

Task UpdateAsync(Guid id, UpsertSchedulerJobRequest job);

Task<bool> StartAsync(SchedulerJobRequestBase request);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,20 @@ public SchedulerJobService(ICaller caller)
_caller = caller;
}

public async Task<Guid> AddAsync(AddSchedulerJobRequest request)
public async Task<Guid> AddAsync(UpsertSchedulerJobRequest job)
{
if (string.IsNullOrWhiteSpace(request.ProjectIdentity))
{
throw new ArgumentNullException(nameof(request.ProjectIdentity));
}
ValidateUpsertSchedulerJobRequest(job);

switch (request.JobType)
{
case JobTypes.JobApp:
ArgumentNullException.ThrowIfNull(request.JobAppConfig, nameof(request.JobAppConfig));
break;
case JobTypes.Http:
ArgumentNullException.ThrowIfNull(request.HttpConfig, nameof(request.HttpConfig));
break;
case JobTypes.DaprServiceInvocation:
ArgumentNullException.ThrowIfNull(request.DaprServiceInvocationConfig, nameof(request.DaprServiceInvocationConfig));
break;
}

var requestUri = $"{API}/addSchedulerJobBySdk";
return await _caller.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, request);
return await _caller.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, job);
}

public async Task UpdateAsync(Guid id, UpsertSchedulerJobRequest job)
{
ValidateUpsertSchedulerJobRequest(job);

var requestUri = $"{API}/{id}/updateSchedulerJobBySdk";
await _caller.PutAsync<UpsertSchedulerJobRequest>(requestUri, job);
}

public async Task<bool> DisableAsync(SchedulerJobRequestBase request)
Expand Down Expand Up @@ -83,4 +75,22 @@ public async Task<bool> StartAsync(SchedulerJobRequestBase request)
await _caller.PutAsync(requestUri, request);
return true;
}

private static void ValidateUpsertSchedulerJobRequest(UpsertSchedulerJobRequest job)
{
MasaArgumentException.ThrowIfNull(job.ProjectIdentity, nameof(job.ProjectIdentity));

switch (job.JobType)
{
case JobTypes.JobApp:
MasaArgumentException.ThrowIfNull(job.JobAppConfig, nameof(job.JobAppConfig));
break;
case JobTypes.Http:
MasaArgumentException.ThrowIfNull(job.HttpConfig, nameof(job.HttpConfig));
break;
case JobTypes.DaprServiceInvocation:
MasaArgumentException.ThrowIfNull(job.DaprServiceInvocationConfig, nameof(job.DaprServiceInvocationConfig));
break;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class SchedulerJobServiceTest
[TestMethod]
public async Task TestAddSchedulerHttpJobAsync()
{
var requestData = new AddSchedulerJobRequest()
var requestData = new UpsertSchedulerJobRequest()
{
Name = "TestJob",
JobType = JobTypes.Http,
Expand Down Expand Up @@ -51,18 +51,18 @@ public async Task TestAddSchedulerHttpJobAsync()

var requestUri = $"{API}/addSchedulerJobBySdk";
var caller = new Mock<ICaller>();
caller.Setup(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
caller.Setup(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
var schedulerClient = new SchedulerClient(caller.Object);
var result = await schedulerClient.SchedulerJobService.AddAsync(requestData);
caller.Verify(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default), Times.Once);
caller.Verify(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default), Times.Once);

Assert.AreNotEqual<Guid>(Guid.Empty, result);
}

[TestMethod]
public async Task TestAddSchedulerJobApp()
{
var requestData = new AddSchedulerJobRequest()
var requestData = new UpsertSchedulerJobRequest()
{
Name = "TestJob",
JobType = JobTypes.JobApp,
Expand Down Expand Up @@ -90,18 +90,18 @@ public async Task TestAddSchedulerJobApp()

var requestUri = $"{API}/addSchedulerJobBySdk";
var caller = new Mock<ICaller>();
caller.Setup(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
caller.Setup(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
var schedulerClient = new SchedulerClient(caller.Object);
var result = await schedulerClient.SchedulerJobService.AddAsync(requestData);
caller.Verify(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default), Times.Once);
caller.Verify(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default), Times.Once);

Assert.AreNotEqual<Guid>(Guid.Empty, result);
}

[TestMethod]
public async Task TestAddSchedulerDaprServiceInvocationJob()
{
var requestData = new AddSchedulerJobRequest()
var requestData = new UpsertSchedulerJobRequest()
{
Name = "TestJob",
JobType = JobTypes.DaprServiceInvocation,
Expand All @@ -128,53 +128,37 @@ public async Task TestAddSchedulerDaprServiceInvocationJob()

var requestUri = $"{API}/addSchedulerJobBySdk";
var caller = new Mock<ICaller>();
caller.Setup(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
caller.Setup(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
var schedulerClient = new SchedulerClient(caller.Object);
var result = await schedulerClient.SchedulerJobService.AddAsync(requestData);
caller.Verify(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default), Times.Once);
caller.Verify(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default), Times.Once);

Assert.AreNotEqual<Guid>(Guid.Empty, result);
}

[TestMethod]
public async Task TestAddSchedulerJobArgumentNullException()
{
var requestData = new AddSchedulerJobRequest()
var requestData = new UpsertSchedulerJobRequest()
{
Name = "TestJob",
JobType = JobTypes.Http,
CronExpression = "",
JobIdentity = "masa-mc-sync-job",
HttpConfig = new SchedulerJobHttpConfig()
{
RequestUrl = "www.baidu.com",
HttpVerifyType = HttpVerifyTypes.CustomStatusCode,
HttpBody = "",
HttpHeaders = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("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<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("ie", "utf-8"),
}
},
OperatorId = Guid.NewGuid()
};

var requestUri = $"{API}/addSchedulerJobBySdk";
var caller = new Mock<ICaller>();
caller.Setup(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
caller.Setup(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
var schedulerClient = new SchedulerClient(caller.Object);
await Assert.ThrowsExceptionAsync<ArgumentNullException>(async () => await schedulerClient.SchedulerJobService.AddAsync(requestData));
await Assert.ThrowsExceptionAsync<MasaArgumentException>(async () => await schedulerClient.SchedulerJobService.AddAsync(requestData));
}

[TestMethod]
public async Task TestAddSchedulerHttpJobArgumentNullException()
{
var requestData = new AddSchedulerJobRequest()
var requestData = new UpsertSchedulerJobRequest()
{
Name = "TestJob",
JobType = JobTypes.Http,
Expand All @@ -184,15 +168,15 @@ public async Task TestAddSchedulerHttpJobArgumentNullException()

var requestUri = $"{API}/addSchedulerJobBySdk";
var caller = new Mock<ICaller>();
caller.Setup(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
caller.Setup(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
var schedulerClient = new SchedulerClient(caller.Object);
await Assert.ThrowsExceptionAsync<ArgumentNullException>(async () => await schedulerClient.SchedulerJobService.AddAsync(requestData));
await Assert.ThrowsExceptionAsync<MasaArgumentException>(async () => await schedulerClient.SchedulerJobService.AddAsync(requestData));
}

[TestMethod]
public async Task TestAddSchedulerJobAppArgumentNullException()
{
var requestData = new AddSchedulerJobRequest()
var requestData = new UpsertSchedulerJobRequest()
{
Name = "TestJob",
JobType = JobTypes.JobApp,
Expand All @@ -202,15 +186,15 @@ public async Task TestAddSchedulerJobAppArgumentNullException()

var requestUri = $"{API}/addSchedulerJobBySdk";
var caller = new Mock<ICaller>();
caller.Setup(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
caller.Setup(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
var schedulerClient = new SchedulerClient(caller.Object);
await Assert.ThrowsExceptionAsync<ArgumentNullException>(async () => await schedulerClient.SchedulerJobService.AddAsync(requestData));
await Assert.ThrowsExceptionAsync<MasaArgumentException>(async () => await schedulerClient.SchedulerJobService.AddAsync(requestData));
}

[TestMethod]
public async Task TestAddSchedulerDaprInvocationJobArgumentNullException()
{
var requestData = new AddSchedulerJobRequest()
var requestData = new UpsertSchedulerJobRequest()
{
Name = "TestJob",
JobType = JobTypes.DaprServiceInvocation,
Expand All @@ -220,9 +204,9 @@ public async Task TestAddSchedulerDaprInvocationJobArgumentNullException()

var requestUri = $"{API}/addSchedulerJobBySdk";
var caller = new Mock<ICaller>();
caller.Setup(provider => provider.PostAsync<AddSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
caller.Setup(provider => provider.PostAsync<UpsertSchedulerJobRequest, Guid>(requestUri, requestData, default)).ReturnsAsync(Guid.NewGuid()).Verifiable();
var schedulerClient = new SchedulerClient(caller.Object);
await Assert.ThrowsExceptionAsync<ArgumentNullException>(async () => await schedulerClient.SchedulerJobService.AddAsync(requestData));
await Assert.ThrowsExceptionAsync<MasaArgumentException>(async () => await schedulerClient.SchedulerJobService.AddAsync(requestData));
}

[TestMethod]
Expand Down