|
1 | 1 | using System;
|
| 2 | +using System.Threading; |
2 | 3 | using Elasticsearch.Net;
|
3 | 4 | using FluentAssertions;
|
4 | 5 | using Nest;
|
@@ -79,4 +80,97 @@ protected override void IntegrationSetup(IElasticClient client, CallUniqueValues
|
79 | 80 | _taskId = response.Task;
|
80 | 81 | }
|
81 | 82 | }
|
| 83 | + |
| 84 | + /// <summary> |
| 85 | + /// Similar to GetTaskApiTests, except the test is not performed until after the task is completed, |
| 86 | + /// so that the response to which the task relates is available on GetTaskResponse |
| 87 | + /// </summary> |
| 88 | + public class GetTaskApiCompletedTaskTests : GetTaskApiTests |
| 89 | + { |
| 90 | + private static TaskId _taskId = new TaskId("fakeid:1"); |
| 91 | + |
| 92 | + public GetTaskApiCompletedTaskTests(WritableCluster cluster, EndpointUsage usage) : base(cluster, usage) { } |
| 93 | + |
| 94 | + protected override bool ExpectIsValid => true; |
| 95 | + protected override int ExpectStatusCode => 200; |
| 96 | + |
| 97 | + protected override Func<GetTaskDescriptor, IGetTaskRequest> Fluent => s => s; |
| 98 | + protected override HttpMethod HttpMethod => HttpMethod.GET; |
| 99 | + |
| 100 | + protected override GetTaskRequest Initializer => new GetTaskRequest(_taskId); |
| 101 | + protected override string UrlPath => $"/_tasks/fakeid%3A1"; |
| 102 | + |
| 103 | + protected override LazyResponses ClientUsage() => Calls( |
| 104 | + (client, f) => client.Tasks.GetTask(_taskId, f), |
| 105 | + (client, f) => client.Tasks.GetTaskAsync(_taskId, f), |
| 106 | + (client, r) => client.Tasks.GetTask(r), |
| 107 | + (client, r) => client.Tasks.GetTaskAsync(r) |
| 108 | + ); |
| 109 | + |
| 110 | + protected override GetTaskDescriptor NewDescriptor() => new GetTaskDescriptor(_taskId); |
| 111 | + |
| 112 | + protected override void ExpectResponse(GetTaskResponse response) |
| 113 | + { |
| 114 | + response.ShouldBeValid(); |
| 115 | + response.Task.Should().NotBeNull(); |
| 116 | + response.Completed.Should().BeTrue(); |
| 117 | + |
| 118 | + var task = response.Task; |
| 119 | + task.Node.Should().NotBeNullOrEmpty(); |
| 120 | + task.Id.Should().BeGreaterThan(0); |
| 121 | + task.Type.Should().Be("transport"); |
| 122 | + task.Action.Should().Be("indices:data/write/reindex"); |
| 123 | + task.Status.Should().NotBeNull(); |
| 124 | + task.StartTimeInMilliseconds.Should().BeGreaterThan(0); |
| 125 | + task.RunningTimeInNanoseconds.Should().BeGreaterThan(0); |
| 126 | + task.Cancellable.Should().BeTrue(); |
| 127 | + |
| 128 | + var reindexResponse = response.GetResponse<ReindexOnServerResponse>(); |
| 129 | + reindexResponse.Should().NotBeNull(); |
| 130 | + reindexResponse.Took.Should().BeGreaterThan(0); |
| 131 | + reindexResponse.Failures.Should().BeEmpty(); |
| 132 | + } |
| 133 | + |
| 134 | + protected override void IntegrationSetup(IElasticClient client, CallUniqueValues values) |
| 135 | + { |
| 136 | + // get a suitable load of projects in order to get a decent task status out |
| 137 | + var sourceIndex = "project-get-completed-task"; |
| 138 | + var targetIndex = "tasks-lists-completed-get"; |
| 139 | + var bulkResponse = client.IndexMany(Project.Generator.Generate(500), sourceIndex); |
| 140 | + if (!bulkResponse.IsValid) |
| 141 | + throw new Exception("failure in setting up integration"); |
| 142 | + |
| 143 | + var createIndex = client.Indices.Create(targetIndex, i => i |
| 144 | + .Settings(settings => settings.Analysis(DefaultSeeder.ProjectAnalysisSettings)) |
| 145 | + .Map<Project>(DefaultSeeder.ProjectTypeMappings) |
| 146 | + ); |
| 147 | + createIndex.ShouldBeValid(); |
| 148 | + |
| 149 | + var response = client.ReindexOnServer(r => r |
| 150 | + .Source(s => s.Index(sourceIndex)) |
| 151 | + .Destination(d => d |
| 152 | + .Index(targetIndex) |
| 153 | + .OpType(OpType.Create) |
| 154 | + ) |
| 155 | + .Conflicts(Conflicts.Proceed) |
| 156 | + .WaitForCompletion(false) |
| 157 | + .Refresh() |
| 158 | + ); |
| 159 | + |
| 160 | + _taskId = response.Task; |
| 161 | + |
| 162 | + // poll until task is complete |
| 163 | + var getTaskResponse = client.Tasks.GetTask(_taskId); |
| 164 | + var completed = getTaskResponse.Completed; |
| 165 | + while (!completed) |
| 166 | + { |
| 167 | + Thread.Sleep(2000); |
| 168 | + getTaskResponse = client.Tasks.GetTask(_taskId); |
| 169 | + if (getTaskResponse.IsValid) |
| 170 | + completed = getTaskResponse.Completed; |
| 171 | + else |
| 172 | + throw new Exception($"problem setting up completed task: {getTaskResponse.DebugInformation}"); |
| 173 | + } |
| 174 | + } |
| 175 | + } |
82 | 176 | }
|
0 commit comments