Skip to content

Commit e6dedaa

Browse files
author
Christoph Bühler
committed
test: add tests for resource cache
1 parent 387900b commit e6dedaa

File tree

6 files changed

+170
-5
lines changed

6 files changed

+170
-5
lines changed
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
using System.Collections.Generic;
2+
using FluentAssertions;
3+
using k8s.Models;
4+
using KubeOps.Operator;
5+
using KubeOps.Operator.Caching;
6+
using KubeOps.Test.TestEntities;
7+
using Xunit;
8+
9+
namespace KubeOps.Test.Operator.Caching
10+
{
11+
public class ResourceCacheTest
12+
{
13+
private readonly IResourceCache<TestStatusEntity> _cache =
14+
new ResourceCache<TestStatusEntity>(new OperatorSettings());
15+
16+
[Fact]
17+
public void Throws_When_Not_Found()
18+
=> Assert.Throws<KeyNotFoundException>(() => _cache.Get("foobar"));
19+
20+
[Theory]
21+
[MemberData(nameof(Data))]
22+
public void Should_Correctly_Compare_Objects(
23+
TestStatusEntity? firstInsert,
24+
TestStatusEntity secondInsert,
25+
CacheComparisonResult expectedResult)
26+
{
27+
_cache.Clear();
28+
29+
if (firstInsert != null)
30+
{
31+
_cache.Upsert(firstInsert, out _);
32+
}
33+
34+
_cache.Upsert(secondInsert, out var result);
35+
36+
result.Should().Be(expectedResult);
37+
}
38+
39+
[Fact]
40+
public void Should_Remove_Object()
41+
{
42+
_cache.Clear();
43+
44+
var entity = new TestStatusEntity { Metadata = new V1ObjectMeta { Uid = "test" } };
45+
_cache.Upsert(entity, out _);
46+
_cache.Get("test");
47+
_cache.Remove(entity);
48+
49+
Assert.Throws<KeyNotFoundException>(() => _cache.Get("test"));
50+
}
51+
52+
public static IEnumerable<object?[]> Data =>
53+
new List<object?[]>
54+
{
55+
new object?[]
56+
{
57+
null,
58+
new TestStatusEntity { Metadata = new V1ObjectMeta { Uid = "test" } },
59+
CacheComparisonResult.New,
60+
},
61+
new object?[]
62+
{
63+
new TestStatusEntity
64+
{
65+
Metadata = new V1ObjectMeta { Uid = "test" },
66+
Spec = new TestStatusEntitySpec { SpecString = "test" },
67+
},
68+
new TestStatusEntity
69+
{
70+
Metadata = new V1ObjectMeta { Uid = "test2" },
71+
Spec = new TestStatusEntitySpec { SpecString = "test" },
72+
},
73+
CacheComparisonResult.New,
74+
},
75+
new object?[]
76+
{
77+
new TestStatusEntity { Metadata = new V1ObjectMeta { Uid = "test" } },
78+
new TestStatusEntity { Metadata = new V1ObjectMeta { Uid = "test" } },
79+
CacheComparisonResult.NotModified,
80+
},
81+
new object?[]
82+
{
83+
new TestStatusEntity
84+
{
85+
Metadata = new V1ObjectMeta { Uid = "test" },
86+
Spec = new TestStatusEntitySpec { SpecString = "test" },
87+
},
88+
new TestStatusEntity
89+
{
90+
Metadata = new V1ObjectMeta { Uid = "test" },
91+
Spec = new TestStatusEntitySpec { SpecString = "test" },
92+
},
93+
CacheComparisonResult.NotModified,
94+
},
95+
new object?[]
96+
{
97+
new TestStatusEntity
98+
{
99+
Metadata = new V1ObjectMeta { Uid = "test" },
100+
Spec = new TestStatusEntitySpec { SpecString = "test" },
101+
},
102+
new TestStatusEntity
103+
{
104+
Metadata = new V1ObjectMeta { Uid = "test" },
105+
Spec = new TestStatusEntitySpec { SpecString = "test2" },
106+
},
107+
CacheComparisonResult.Modified,
108+
},
109+
new object?[]
110+
{
111+
new TestStatusEntity
112+
{
113+
Metadata = new V1ObjectMeta { Uid = "test" },
114+
Status = new TestStatusEntityStatus { StatusString = "status" },
115+
},
116+
new TestStatusEntity
117+
{
118+
Metadata = new V1ObjectMeta { Uid = "test" },
119+
Status = new TestStatusEntityStatus { StatusString = "status" },
120+
},
121+
CacheComparisonResult.NotModified,
122+
},
123+
new object?[]
124+
{
125+
new TestStatusEntity
126+
{
127+
Metadata = new V1ObjectMeta { Uid = "test" },
128+
Status = new TestStatusEntityStatus { StatusString = "status" },
129+
},
130+
new TestStatusEntity
131+
{
132+
Metadata = new V1ObjectMeta { Uid = "test" },
133+
Status = new TestStatusEntityStatus { StatusString = "status2" },
134+
},
135+
CacheComparisonResult.StatusModified,
136+
},
137+
new object?[]
138+
{
139+
new TestStatusEntity
140+
{
141+
Metadata = new V1ObjectMeta { Uid = "test", Finalizers = new List<string> { "f1" } },
142+
},
143+
new TestStatusEntity
144+
{
145+
Metadata = new V1ObjectMeta { Uid = "test", Finalizers = new List<string> { "f2" } },
146+
},
147+
CacheComparisonResult.FinalizersModified,
148+
},
149+
new object?[]
150+
{
151+
new TestStatusEntity
152+
{
153+
Metadata = new V1ObjectMeta { Uid = "test", Finalizers = new List<string> { "f1" } },
154+
},
155+
new TestStatusEntity
156+
{
157+
Metadata = new V1ObjectMeta { Uid = "test" },
158+
},
159+
CacheComparisonResult.FinalizersModified,
160+
},
161+
};
162+
}
163+
}

tests/KubeOps.Test/Operator/Entities/CrdGeneration.Test.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using k8s.Models;
66
using KubeOps.Operator.Commands.Generators;
77
using KubeOps.Operator.Entities.Extensions;
8-
using KubeOps.Test.Operator.Entities.TestEntities;
8+
using KubeOps.Test.TestEntities;
99
using Xunit;
1010

1111
namespace KubeOps.Test.Operator.Entities

tests/KubeOps.Test/Operator/Entities/V1CustomResourceDefinitionConvert.Test.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using FluentAssertions;
33
using k8s.Models;
44
using KubeOps.Operator.Entities.Extensions;
5-
using KubeOps.Test.Operator.Entities.TestEntities;
5+
using KubeOps.Test.TestEntities;
66
using Xunit;
77

88
namespace KubeOps.Test.Operator.Entities
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using KubeOps.Operator.Entities;
33
using KubeOps.Operator.Entities.Annotations;
44

5-
namespace KubeOps.Test.Operator.Entities.TestEntities
5+
namespace KubeOps.Test.TestEntities
66
{
77
[IgnoreEntity]
88
[KubernetesEntity(Group = "kubeops.test.dev", ApiVersion = "V1")]

tests/KubeOps.Test/Operator/Entities/TestEntities/TestSpecEntity.cs renamed to tests/KubeOps.Test/TestEntities/TestSpecEntity.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using KubeOps.Operator.Entities;
44
using KubeOps.Operator.Entities.Annotations;
55

6-
namespace KubeOps.Test.Operator.Entities.TestEntities
6+
namespace KubeOps.Test.TestEntities
77
{
88
[Description("This is the Spec Class Description")]
99
public class TestSpecEntitySpec

tests/KubeOps.Test/Operator/Entities/TestEntities/TestStatusEntity.cs renamed to tests/KubeOps.Test/TestEntities/TestStatusEntity.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
using k8s.Models;
22
using KubeOps.Operator.Entities;
33

4-
namespace KubeOps.Test.Operator.Entities.TestEntities
4+
namespace KubeOps.Test.TestEntities
55
{
66
public class TestStatusEntitySpec
77
{
8+
public string SpecString { get; set; } = string.Empty;
89
}
910

1011
public class TestStatusEntityStatus
1112
{
13+
public string StatusString { get; set; } = string.Empty;
1214
}
1315

1416
[KubernetesEntity(Group = "kubeops.test.dev", ApiVersion = "V1")]

0 commit comments

Comments
 (0)