Skip to content

Commit 164ec24

Browse files
author
Christoph Bühler
committedJan 23, 2023
fix: linting errors in testing package
1 parent fe499b5 commit 164ec24

File tree

3 files changed

+319
-316
lines changed

3 files changed

+319
-316
lines changed
 

‎src/KubeOps.Testing/KubernetesOperatorFactory.cs

+82-83
Original file line numberDiff line numberDiff line change
@@ -12,104 +12,103 @@
1212
using Microsoft.Extensions.Hosting;
1313
using Microsoft.Extensions.Logging;
1414

15-
namespace KubeOps.Testing
15+
namespace KubeOps.Testing;
16+
17+
/// <summary>
18+
/// Operator factory for testing an operator created with the asp web server.
19+
/// </summary>
20+
/// <typeparam name="TTestStartup">Type of the Startup type (see asp.net).</typeparam>
21+
public class KubernetesOperatorFactory<TTestStartup> : WebApplicationFactory<TTestStartup>
22+
where TTestStartup : class
1623
{
24+
private string? _solutionRelativeContentRoot;
25+
1726
/// <summary>
18-
/// Operator factory for testing an operator created with the asp web server.
27+
/// Return a mocked kubernetes client. This client defines
28+
/// no-op for all related methods.
1929
/// </summary>
20-
/// <typeparam name="TTestStartup">Type of the Startup type (see asp.net).</typeparam>
21-
public class KubernetesOperatorFactory<TTestStartup> : WebApplicationFactory<TTestStartup>
22-
where TTestStartup : class
23-
{
24-
private string? _solutionRelativeContentRoot;
30+
public MockKubernetesClient MockedKubernetesClient =>
31+
Services.GetRequiredService<IKubernetesClient>() as MockKubernetesClient ??
32+
throw new ArgumentException("Wrong kubernetes client registered.");
2533

26-
/// <summary>
27-
/// Return a mocked kubernetes client. This client defines
28-
/// no-op for all related methods.
29-
/// </summary>
30-
public MockKubernetesClient MockedKubernetesClient =>
31-
Services.GetRequiredService<IKubernetesClient>() as MockKubernetesClient ??
32-
throw new ArgumentException("Wrong kubernetes client registered.");
33-
34-
/// <summary>
35-
/// Set a specific content root path to the given factory.
36-
/// </summary>
37-
/// <param name="root">The solution relative content root path to configure.</param>
38-
/// <returns>The <see cref="KubernetesOperatorFactory{TTestStartup}"/> for chaining.</returns>
39-
public KubernetesOperatorFactory<TTestStartup> WithSolutionRelativeContentRoot(string root)
40-
{
41-
_solutionRelativeContentRoot = root;
42-
return this;
43-
}
44-
45-
/// <summary>
46-
/// Start the server.
47-
/// </summary>
48-
public void Run()
49-
{
50-
// This triggers "EnsureServer()" in the base class.
51-
var server = Server;
52-
}
34+
/// <summary>
35+
/// Set a specific content root path to the given factory.
36+
/// </summary>
37+
/// <param name="root">The solution relative content root path to configure.</param>
38+
/// <returns>The <see cref="KubernetesOperatorFactory{TTestStartup}"/> for chaining.</returns>
39+
public KubernetesOperatorFactory<TTestStartup> WithSolutionRelativeContentRoot(string root)
40+
{
41+
_solutionRelativeContentRoot = root;
42+
return this;
43+
}
5344

54-
public Task EnqueueEvent<TEntity>(
55-
ResourceEventType type,
56-
TEntity resource,
57-
int attempt = 0,
58-
TimeSpan? delay = null)
59-
where TEntity : class, IKubernetesObject<V1ObjectMeta>
60-
{
61-
var queue = Services.GetService<IEventQueue<TEntity>>();
45+
/// <summary>
46+
/// Start the server.
47+
/// </summary>
48+
public void Run()
49+
{
50+
// This triggers "EnsureServer()" in the base class.
51+
var server = Server;
52+
}
6253

63-
queue?.EnqueueLocal(new ResourceEvent<TEntity>(type, resource, attempt, delay));
54+
public Task EnqueueEvent<TEntity>(
55+
ResourceEventType type,
56+
TEntity resource,
57+
int attempt = 0,
58+
TimeSpan? delay = null)
59+
where TEntity : class, IKubernetesObject<V1ObjectMeta>
60+
{
61+
var queue = Services.GetService<IEventQueue<TEntity>>();
6462

65-
return Task.CompletedTask;
66-
}
63+
queue?.EnqueueLocal(new ResourceEvent<TEntity>(type, resource, attempt, delay));
6764

68-
public Task EnqueueFinalization<TEntity>(TEntity resource)
69-
where TEntity : class, IKubernetesObject<V1ObjectMeta>
70-
{
71-
var queue = Services.GetService<IEventQueue<TEntity>>();
65+
return Task.CompletedTask;
66+
}
7267

73-
queue?.EnqueueLocal(new ResourceEvent<TEntity>(ResourceEventType.Finalizing, resource));
68+
public Task EnqueueFinalization<TEntity>(TEntity resource)
69+
where TEntity : class, IKubernetesObject<V1ObjectMeta>
70+
{
71+
var queue = Services.GetService<IEventQueue<TEntity>>();
7472

75-
return Task.CompletedTask;
76-
}
73+
queue?.EnqueueLocal(new ResourceEvent<TEntity>(ResourceEventType.Finalizing, resource));
7774

78-
/// <summary>
79-
/// Create the host builder. Needed for the factory.
80-
/// </summary>
81-
/// <returns>The created <see cref="IHostBuilder"/>.</returns>
82-
protected override IHostBuilder CreateHostBuilder() =>
83-
Host.CreateDefaultBuilder()
84-
.ConfigureWebHostDefaults(
85-
webBuilder => webBuilder
86-
.UseStartup<TTestStartup>());
75+
return Task.CompletedTask;
76+
}
8777

88-
/// <summary>
89-
/// Configure the web-host.
90-
/// This registers the mocked client as well as mocked
91-
/// event queues.
92-
/// </summary>
93-
/// <param name="builder">The web host builder.</param>
94-
protected override void ConfigureWebHost(IWebHostBuilder builder)
95-
{
96-
base.ConfigureWebHost(builder);
97-
builder.ConfigureTestServices(
98-
services =>
99-
{
100-
var elector = services.First(
101-
d => d.ServiceType == typeof(IHostedService) && d.ImplementationType == typeof(LeaderElector));
102-
services.Remove(elector);
78+
/// <summary>
79+
/// Create the host builder. Needed for the factory.
80+
/// </summary>
81+
/// <returns>The created <see cref="IHostBuilder"/>.</returns>
82+
protected override IHostBuilder CreateHostBuilder() =>
83+
Host.CreateDefaultBuilder()
84+
.ConfigureWebHostDefaults(
85+
webBuilder => webBuilder
86+
.UseStartup<TTestStartup>());
10387

104-
services.RemoveAll(typeof(IEventQueue<>));
105-
services.AddSingleton(typeof(IEventQueue<>), typeof(MockEventQueue<>));
106-
});
107-
if (_solutionRelativeContentRoot != null)
88+
/// <summary>
89+
/// Configure the web-host.
90+
/// This registers the mocked client as well as mocked
91+
/// event queues.
92+
/// </summary>
93+
/// <param name="builder">The web host builder.</param>
94+
protected override void ConfigureWebHost(IWebHostBuilder builder)
95+
{
96+
base.ConfigureWebHost(builder);
97+
builder.ConfigureTestServices(
98+
services =>
10899
{
109-
builder.UseSolutionRelativeContentRoot(_solutionRelativeContentRoot);
110-
}
100+
var elector = services.First(
101+
d => d.ServiceType == typeof(IHostedService) && d.ImplementationType == typeof(LeaderElector));
102+
services.Remove(elector);
111103

112-
builder.ConfigureLogging(logging => logging.ClearProviders());
104+
services.RemoveAll(typeof(IEventQueue<>));
105+
services.AddSingleton(typeof(IEventQueue<>), typeof(MockEventQueue<>));
106+
});
107+
if (_solutionRelativeContentRoot != null)
108+
{
109+
builder.UseSolutionRelativeContentRoot(_solutionRelativeContentRoot);
113110
}
111+
112+
builder.ConfigureLogging(logging => logging.ClearProviders());
114113
}
115114
}
+230-225
Original file line numberDiff line numberDiff line change
@@ -1,232 +1,237 @@
1-
using k8s;
1+
using System.Diagnostics.CodeAnalysis;
2+
using k8s;
23
using k8s.Models;
34
using KubeOps.KubernetesClient;
45
using KubeOps.KubernetesClient.LabelSelectors;
56

6-
namespace KubeOps.Testing
7+
namespace KubeOps.Testing;
8+
9+
/// <summary>
10+
/// Mocked implementation for the kubernetes client.
11+
/// Returns the "result" objects if given.
12+
/// </summary>
13+
[SuppressMessage(
14+
"StyleCop.CSharp.MaintainabilityRules",
15+
"SA1625:Element documentation should not be copied and pasted",
16+
Justification = "This is the mock implementation which basically does nothing.")]
17+
public class MockKubernetesClient : IKubernetesClient
718
{
819
/// <summary>
9-
/// Mocked implementation for the kubernetes client.
10-
/// Returns the "result" objects if given.
11-
/// </summary>
12-
public class MockKubernetesClient : IKubernetesClient
13-
{
14-
/// <summary>
15-
/// Mocked result for the <see cref="Get{TEntity}"/> call.
16-
/// If null, then null is returned.
17-
/// This field must be manually reset.
18-
/// </summary>
19-
public object? GetResult { get; set; }
20-
21-
/// <summary>
22-
/// Mocked result for the <see cref="List{TEntity}(string?,string?)"/> call.
23-
/// If null, an empty list is returned.
24-
/// This field must be manually reset.
25-
/// </summary>
26-
public IList<object>? ListResult { get; set; }
27-
28-
/// <summary>
29-
/// Mocked result for the <see cref="Save{TEntity}"/> call.
30-
/// If null, then null is returned.
31-
/// This field must be manually reset.
32-
/// </summary>
33-
public object? SaveResult { get; set; }
34-
35-
/// <summary>
36-
/// Mocked result for the <see cref="Create{TEntity}"/> call.
37-
/// If null, then null is returned.
38-
/// This field must be manually reset.
39-
/// </summary>
40-
public object? CreateResult { get; set; }
41-
42-
/// <summary>
43-
/// Mocked result for the <see cref="Update{TEntity}"/> call.
44-
/// If null, then null is returned.
45-
/// This field must be manually reset.
46-
/// </summary>
47-
public object? UpdateResult { get; set; }
48-
49-
public Uri BaseUri => new("https://localhost:8080");
50-
51-
/// <summary>
52-
/// Returns "default".
53-
/// </summary>
54-
/// <param name="downwardApiEnvName">Not used env name.</param>
55-
/// <returns>"default".</returns>
56-
public Task<string> GetCurrentNamespace(string downwardApiEnvName = "POD_NAMESPACE") =>
57-
Task.FromResult("default");
58-
59-
/// <summary>
60-
/// Create mocked server version.
61-
/// </summary>
62-
/// <returns>Empty "new" <see cref="VersionInfo"/> instance.</returns>
63-
public Task<VersionInfo> GetServerVersion() => Task.FromResult(new VersionInfo());
64-
65-
/// <summary>
66-
/// Mocked Get method.
67-
/// </summary>
68-
/// <param name="name">Not used.</param>
69-
/// <param name="namespace">Not used.</param>
70-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
71-
/// <returns>The value of <see cref="GetResult"/>.</returns>
72-
public Task<TEntity?> Get<TEntity>(string name, string? @namespace = null)
73-
where TEntity : class, IKubernetesObject<V1ObjectMeta>
74-
=> Task.FromResult(GetResult as TEntity);
75-
76-
/// <summary>
77-
/// Mocked list method.
78-
/// </summary>
79-
/// <param name="namespace">Not used.</param>
80-
/// <param name="labelSelector">Not used.</param>
81-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
82-
/// <returns>The value of <see cref="ListResult"/> or empty list if the result is null.</returns>
83-
public Task<IList<TEntity>> List<TEntity>(string? @namespace = null, string? labelSelector = null)
84-
where TEntity : IKubernetesObject<V1ObjectMeta>
85-
=> Task.FromResult(ListResult as IList<TEntity> ?? new List<TEntity>());
86-
87-
/// <summary>
88-
/// Mocked list method.
89-
/// </summary>
90-
/// <param name="namespace">Not used.</param>
91-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
92-
/// <returns>The value of <see cref="ListResult"/> or empty list if the result is null.</returns>
93-
public Task<IList<TEntity>> List<TEntity>(string? @namespace = null, params ILabelSelector[] labelSelectors)
94-
where TEntity : IKubernetesObject<V1ObjectMeta>
95-
=> Task.FromResult(ListResult as IList<TEntity> ?? new List<TEntity>());
96-
97-
/// <summary>
98-
/// Mocked Save method.
99-
/// </summary>
100-
/// <param name="resource">Not used.</param>
101-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
102-
/// <returns>The value of <see cref="SaveResult"/>.</returns>
103-
public Task<TEntity> Save<TEntity>(TEntity resource)
104-
where TEntity : class, IKubernetesObject<V1ObjectMeta>
105-
=> Task.FromResult(SaveResult as TEntity)!;
106-
107-
/// <summary>
108-
/// Mocked Create method.
109-
/// </summary>
110-
/// <param name="resource">Not used.</param>
111-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
112-
/// <returns>The value of <see cref="CreateResult"/>.</returns>
113-
public Task<TEntity> Create<TEntity>(TEntity resource)
114-
where TEntity : IKubernetesObject<V1ObjectMeta>
115-
=> Task.FromResult((TEntity)CreateResult!)!;
116-
117-
/// <summary>
118-
/// Mocked Update method.
119-
/// </summary>
120-
/// <param name="resource">Not used.</param>
121-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
122-
/// <returns>The value of <see cref="UpdateResult"/>.</returns>
123-
public Task<TEntity> Update<TEntity>(TEntity resource)
124-
where TEntity : IKubernetesObject<V1ObjectMeta>
125-
=> Task.FromResult((TEntity)UpdateResult!)!;
126-
127-
/// <summary>
128-
/// Mocked UpdateStatus method.
129-
/// </summary>
130-
/// <param name="resource">Not used.</param>
131-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
132-
/// <returns>Empty completed task.</returns>
133-
public Task UpdateStatus<TEntity>(TEntity resource)
134-
where TEntity : IKubernetesObject<V1ObjectMeta>
135-
=> Task.CompletedTask;
136-
137-
/// <summary>
138-
/// Mocked Delete method.
139-
/// </summary>
140-
/// <param name="resource">Not used.</param>
141-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
142-
/// <returns>Empty completed task.</returns>
143-
public Task Delete<TEntity>(TEntity resource)
144-
where TEntity : IKubernetesObject<V1ObjectMeta>
145-
=> Task.CompletedTask;
146-
147-
/// <summary>
148-
/// Mocked Delete method.
149-
/// </summary>
150-
/// <param name="resources">Not used.</param>
151-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
152-
/// <returns>Empty completed task.</returns>
153-
public Task Delete<TEntity>(IEnumerable<TEntity> resources)
154-
where TEntity : IKubernetesObject<V1ObjectMeta>
155-
=> Task.CompletedTask;
156-
157-
/// <summary>
158-
/// Mocked Delete method.
159-
/// </summary>
160-
/// <param name="resources">Not used.</param>
161-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
162-
/// <returns>Empty completed task.</returns>
163-
public Task Delete<TEntity>(params TEntity[] resources)
164-
where TEntity : IKubernetesObject<V1ObjectMeta>
165-
=> Task.CompletedTask;
166-
167-
/// <summary>
168-
/// Mocked Delete method.
169-
/// </summary>
170-
/// <param name="name">Not used.</param>
171-
/// <param name="namespace">Not used.</param>
172-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
173-
/// <returns>Empty completed task.</returns>
174-
public Task Delete<TEntity>(string name, string? @namespace = null)
175-
where TEntity : IKubernetesObject<V1ObjectMeta>
176-
=> Task.CompletedTask;
177-
178-
/// <summary>
179-
/// Mocked Watch method.
180-
/// </summary>
181-
/// <param name="timeout">Not used.</param>
182-
/// <param name="onEvent">Not used.</param>
183-
/// <param name="onError">Not used.</param>
184-
/// <param name="onClose">Not used.</param>
185-
/// <param name="namespace">Not used.</param>
186-
/// <param name="cancellationToken">Not used.</param>
187-
/// <param name="selectors">Not used.</param>
188-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
189-
/// <returns>Empty new watcher from a memory stream.</returns>
190-
public Task<Watcher<TEntity>> Watch<TEntity>(
191-
TimeSpan timeout,
192-
Action<WatchEventType, TEntity> onEvent,
193-
Action<Exception>? onError = null,
194-
Action? onClose = null,
195-
string? @namespace = null,
196-
CancellationToken cancellationToken = default,
197-
params ILabelSelector[] selectors)
198-
where TEntity : IKubernetesObject<V1ObjectMeta>
199-
=> Task.FromResult(
200-
new Watcher<TEntity>(
201-
() => Task.FromResult(new StreamReader(new MemoryStream())),
202-
(_, __) => { },
203-
_ => { }));
204-
205-
/// <summary>
206-
/// Mocked Watch method.
207-
/// </summary>
208-
/// <param name="timeout">Not used.</param>
209-
/// <param name="onEvent">Not used.</param>
210-
/// <param name="onError">Not used.</param>
211-
/// <param name="onClose">Not used.</param>
212-
/// <param name="namespace">Not used.</param>
213-
/// <param name="cancellationToken">Not used.</param>
214-
/// <param name="labelSelector">Not used.</param>
215-
/// <typeparam name="TEntity">Type of the resource.</typeparam>
216-
/// <returns>Empty new watcher from a memory stream.</returns>
217-
public Task<Watcher<TEntity>> Watch<TEntity>(
218-
TimeSpan timeout,
219-
Action<WatchEventType, TEntity> onEvent,
220-
Action<Exception>? onError = null,
221-
Action? onClose = null,
222-
string? @namespace = null,
223-
CancellationToken cancellationToken = default,
224-
string? labelSelector = default)
225-
where TEntity : IKubernetesObject<V1ObjectMeta>
226-
=> Task.FromResult(
227-
new Watcher<TEntity>(
228-
() => Task.FromResult(new StreamReader(new MemoryStream())),
229-
(_, __) => { },
230-
_ => { }));
231-
}
20+
/// Mocked result for the <see cref="Get{TEntity}"/> call.
21+
/// If null, then null is returned.
22+
/// This field must be manually reset.
23+
/// </summary>
24+
public object? GetResult { get; set; }
25+
26+
/// <summary>
27+
/// Mocked result for the <see cref="List{TEntity}(string?,string?)"/> call.
28+
/// If null, an empty list is returned.
29+
/// This field must be manually reset.
30+
/// </summary>
31+
public IList<object>? ListResult { get; set; }
32+
33+
/// <summary>
34+
/// Mocked result for the <see cref="Save{TEntity}"/> call.
35+
/// If null, then null is returned.
36+
/// This field must be manually reset.
37+
/// </summary>
38+
public object? SaveResult { get; set; }
39+
40+
/// <summary>
41+
/// Mocked result for the <see cref="Create{TEntity}"/> call.
42+
/// If null, then null is returned.
43+
/// This field must be manually reset.
44+
/// </summary>
45+
public object? CreateResult { get; set; }
46+
47+
/// <summary>
48+
/// Mocked result for the <see cref="Update{TEntity}"/> call.
49+
/// If null, then null is returned.
50+
/// This field must be manually reset.
51+
/// </summary>
52+
public object? UpdateResult { get; set; }
53+
54+
public Uri BaseUri => new("https://localhost:8080");
55+
56+
/// <summary>
57+
/// Returns "default".
58+
/// </summary>
59+
/// <param name="downwardApiEnvName">Not used env name.</param>
60+
/// <returns>"default".</returns>
61+
public Task<string> GetCurrentNamespace(string downwardApiEnvName = "POD_NAMESPACE") =>
62+
Task.FromResult("default");
63+
64+
/// <summary>
65+
/// Create mocked server version.
66+
/// </summary>
67+
/// <returns>Empty "new" <see cref="VersionInfo"/> instance.</returns>
68+
public Task<VersionInfo> GetServerVersion() => Task.FromResult(new VersionInfo());
69+
70+
/// <summary>
71+
/// Mocked Get method.
72+
/// </summary>
73+
/// <param name="name">Not used.</param>
74+
/// <param name="namespace">Not used.</param>
75+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
76+
/// <returns>The value of <see cref="GetResult"/>.</returns>
77+
public Task<TEntity?> Get<TEntity>(string name, string? @namespace = null)
78+
where TEntity : class, IKubernetesObject<V1ObjectMeta>
79+
=> Task.FromResult(GetResult as TEntity);
80+
81+
/// <summary>
82+
/// Mocked list method.
83+
/// </summary>
84+
/// <param name="namespace">Not used.</param>
85+
/// <param name="labelSelector">Not used.</param>
86+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
87+
/// <returns>The value of <see cref="ListResult"/> or empty list if the result is null.</returns>
88+
public Task<IList<TEntity>> List<TEntity>(string? @namespace = null, string? labelSelector = null)
89+
where TEntity : IKubernetesObject<V1ObjectMeta>
90+
=> Task.FromResult(ListResult as IList<TEntity> ?? new List<TEntity>());
91+
92+
/// <summary>
93+
/// Mocked list method.
94+
/// </summary>
95+
/// <param name="namespace">Not used.</param>
96+
/// <param name="labelSelectors">Not used.</param>
97+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
98+
/// <returns>The value of <see cref="ListResult"/> or empty list if the result is null.</returns>
99+
public Task<IList<TEntity>> List<TEntity>(string? @namespace = null, params ILabelSelector[] labelSelectors)
100+
where TEntity : IKubernetesObject<V1ObjectMeta>
101+
=> Task.FromResult(ListResult as IList<TEntity> ?? new List<TEntity>());
102+
103+
/// <summary>
104+
/// Mocked Save method.
105+
/// </summary>
106+
/// <param name="resource">Not used.</param>
107+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
108+
/// <returns>The value of <see cref="SaveResult"/>.</returns>
109+
public Task<TEntity> Save<TEntity>(TEntity resource)
110+
where TEntity : class, IKubernetesObject<V1ObjectMeta>
111+
=> Task.FromResult(SaveResult as TEntity)!;
112+
113+
/// <summary>
114+
/// Mocked Create method.
115+
/// </summary>
116+
/// <param name="resource">Not used.</param>
117+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
118+
/// <returns>The value of <see cref="CreateResult"/>.</returns>
119+
public Task<TEntity> Create<TEntity>(TEntity resource)
120+
where TEntity : IKubernetesObject<V1ObjectMeta>
121+
=> Task.FromResult((TEntity)CreateResult!)!;
122+
123+
/// <summary>
124+
/// Mocked Update method.
125+
/// </summary>
126+
/// <param name="resource">Not used.</param>
127+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
128+
/// <returns>The value of <see cref="UpdateResult"/>.</returns>
129+
public Task<TEntity> Update<TEntity>(TEntity resource)
130+
where TEntity : IKubernetesObject<V1ObjectMeta>
131+
=> Task.FromResult((TEntity)UpdateResult!)!;
132+
133+
/// <summary>
134+
/// Mocked UpdateStatus method.
135+
/// </summary>
136+
/// <param name="resource">Not used.</param>
137+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
138+
/// <returns>Empty completed task.</returns>
139+
public Task UpdateStatus<TEntity>(TEntity resource)
140+
where TEntity : IKubernetesObject<V1ObjectMeta>
141+
=> Task.CompletedTask;
142+
143+
/// <summary>
144+
/// Mocked Delete method.
145+
/// </summary>
146+
/// <param name="resource">Not used.</param>
147+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
148+
/// <returns>Empty completed task.</returns>
149+
public Task Delete<TEntity>(TEntity resource)
150+
where TEntity : IKubernetesObject<V1ObjectMeta>
151+
=> Task.CompletedTask;
152+
153+
/// <summary>
154+
/// Mocked Delete method.
155+
/// </summary>
156+
/// <param name="resources">Not used.</param>
157+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
158+
/// <returns>Empty completed task.</returns>
159+
public Task Delete<TEntity>(IEnumerable<TEntity> resources)
160+
where TEntity : IKubernetesObject<V1ObjectMeta>
161+
=> Task.CompletedTask;
162+
163+
/// <summary>
164+
/// Mocked Delete method.
165+
/// </summary>
166+
/// <param name="resources">Not used.</param>
167+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
168+
/// <returns>Empty completed task.</returns>
169+
public Task Delete<TEntity>(params TEntity[] resources)
170+
where TEntity : IKubernetesObject<V1ObjectMeta>
171+
=> Task.CompletedTask;
172+
173+
/// <summary>
174+
/// Mocked Delete method.
175+
/// </summary>
176+
/// <param name="name">Not used.</param>
177+
/// <param name="namespace">Not used.</param>
178+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
179+
/// <returns>Empty completed task.</returns>
180+
public Task Delete<TEntity>(string name, string? @namespace = null)
181+
where TEntity : IKubernetesObject<V1ObjectMeta>
182+
=> Task.CompletedTask;
183+
184+
/// <summary>
185+
/// Mocked Watch method.
186+
/// </summary>
187+
/// <param name="timeout">Not used.</param>
188+
/// <param name="onEvent">Not used.</param>
189+
/// <param name="onError">Not used.</param>
190+
/// <param name="onClose">Not used.</param>
191+
/// <param name="namespace">Not used.</param>
192+
/// <param name="cancellationToken">Not used.</param>
193+
/// <param name="selectors">Not used.</param>
194+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
195+
/// <returns>Empty new watcher from a memory stream.</returns>
196+
public Task<Watcher<TEntity>> Watch<TEntity>(
197+
TimeSpan timeout,
198+
Action<WatchEventType, TEntity> onEvent,
199+
Action<Exception>? onError = null,
200+
Action? onClose = null,
201+
string? @namespace = null,
202+
CancellationToken cancellationToken = default,
203+
params ILabelSelector[] selectors)
204+
where TEntity : IKubernetesObject<V1ObjectMeta>
205+
=> Task.FromResult(
206+
new Watcher<TEntity>(
207+
() => Task.FromResult(new StreamReader(new MemoryStream())),
208+
(_, __) => { },
209+
_ => { }));
210+
211+
/// <summary>
212+
/// Mocked Watch method.
213+
/// </summary>
214+
/// <param name="timeout">Not used.</param>
215+
/// <param name="onEvent">Not used.</param>
216+
/// <param name="onError">Not used.</param>
217+
/// <param name="onClose">Not used.</param>
218+
/// <param name="namespace">Not used.</param>
219+
/// <param name="cancellationToken">Not used.</param>
220+
/// <param name="labelSelector">Not used.</param>
221+
/// <typeparam name="TEntity">Type of the resource.</typeparam>
222+
/// <returns>Empty new watcher from a memory stream.</returns>
223+
public Task<Watcher<TEntity>> Watch<TEntity>(
224+
TimeSpan timeout,
225+
Action<WatchEventType, TEntity> onEvent,
226+
Action<Exception>? onError = null,
227+
Action? onClose = null,
228+
string? @namespace = null,
229+
CancellationToken cancellationToken = default,
230+
string? labelSelector = default)
231+
where TEntity : IKubernetesObject<V1ObjectMeta>
232+
=> Task.FromResult(
233+
new Watcher<TEntity>(
234+
() => Task.FromResult(new StreamReader(new MemoryStream())),
235+
(_, __) => { },
236+
_ => { }));
232237
}
+7-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
using System.Reactive.Subjects;
22
using KubeOps.Operator.Leadership;
33

4-
namespace KubeOps.Testing
4+
namespace KubeOps.Testing;
5+
6+
internal class MockedLeaderElection : ILeaderElection
57
{
6-
internal class MockedLeaderElection : ILeaderElection
7-
{
8-
public IObservable<LeaderState> LeadershipChange { get; } =
9-
new BehaviorSubject<LeaderState>(LeaderState.Leader);
8+
public IObservable<LeaderState> LeadershipChange { get; } =
9+
new BehaviorSubject<LeaderState>(LeaderState.Leader);
1010

11-
void ILeaderElection.LeadershipChanged(LeaderState state)
12-
{
13-
}
11+
void ILeaderElection.LeadershipChanged(LeaderState state)
12+
{
1413
}
1514
}

0 commit comments

Comments
 (0)
Please sign in to comment.