Skip to content

Commit b4425cd

Browse files
committed
Testing updates/fixes
1 parent ca2ebde commit b4425cd

6 files changed

Lines changed: 147 additions & 71 deletions

File tree

tests/CacheTower.Tests/ComplexTypeCachingObjects.cs

Lines changed: 76 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,85 +3,103 @@
33
using System.Linq;
44
using ProtoBuf;
55

6-
namespace CacheTower.Tests
6+
namespace CacheTower.Tests;
7+
8+
internal static class SequenceComparison
79
{
8-
[ProtoContract]
9-
public class ComplexTypeCaching_TypeOne : IEquatable<ComplexTypeCaching_TypeOne>
10+
public static bool Compare<T>(IEnumerable<T> x, IEnumerable<T> y)
1011
{
11-
[ProtoMember(1)]
12-
public int ExampleNumber { get; set; }
13-
[ProtoMember(2)]
14-
public string ExampleString { get; set; }
15-
[ProtoMember(3)]
16-
public List<int> ListOfNumbers { get; set; }
17-
18-
public bool Equals(ComplexTypeCaching_TypeOne other)
12+
if (x is not null && y is not null)
1913
{
20-
if (other == null)
21-
{
22-
return false;
23-
}
24-
25-
return ExampleNumber == other.ExampleNumber &&
26-
ExampleString == other.ExampleString &&
27-
ListOfNumbers.SequenceEqual(other.ListOfNumbers);
14+
return x.SequenceEqual(y);
2815
}
16+
return x is null && y is null;
17+
}
18+
}
2919

30-
public override bool Equals(object obj)
31-
{
32-
if (obj is ComplexTypeCaching_TypeOne complexType)
33-
{
34-
return Equals(complexType);
35-
}
20+
[ProtoContract]
21+
public record BasicTypeCaching_TypeOne
22+
{
23+
[ProtoMember(1)]
24+
public string ExampleString { get; set; }
25+
}
3626

27+
[ProtoContract]
28+
public class ComplexTypeCaching_TypeOne : IEquatable<ComplexTypeCaching_TypeOne>
29+
{
30+
[ProtoMember(1)]
31+
public int ExampleNumber { get; set; }
32+
[ProtoMember(2)]
33+
public string ExampleString { get; set; }
34+
[ProtoMember(3)]
35+
public List<int> ListOfNumbers { get; set; }
36+
37+
public bool Equals(ComplexTypeCaching_TypeOne other)
38+
{
39+
if (other == null)
40+
{
3741
return false;
3842
}
3943

40-
public override int GetHashCode()
44+
return ExampleNumber == other.ExampleNumber &&
45+
ExampleString == other.ExampleString &&
46+
SequenceComparison.Compare(ListOfNumbers, other.ListOfNumbers);
47+
}
48+
49+
public override bool Equals(object obj)
50+
{
51+
if (obj is ComplexTypeCaching_TypeOne complexType)
4152
{
42-
return ExampleNumber.GetHashCode() ^
43-
ExampleString.GetHashCode() ^
44-
ListOfNumbers.GetHashCode();
53+
return Equals(complexType);
4554
}
55+
56+
return false;
4657
}
4758

48-
[ProtoContract]
49-
public class ComplexTypeCaching_TypeTwo : IEquatable<ComplexTypeCaching_TypeTwo>
59+
public override int GetHashCode()
5060
{
51-
[ProtoMember(1)]
52-
public string ExampleString { get; set; }
53-
[ProtoMember(2)]
54-
public ComplexTypeCaching_TypeOne[] ArrayOfObjects { get; set; }
55-
[ProtoMember(3)]
56-
public Dictionary<string, int> DictionaryOfNumbers { get; set; }
57-
58-
public bool Equals(ComplexTypeCaching_TypeTwo other)
59-
{
60-
if (other == null)
61-
{
62-
return false;
63-
}
61+
return ExampleNumber.GetHashCode() ^
62+
ExampleString.GetHashCode() ^
63+
ListOfNumbers.GetHashCode();
64+
}
65+
}
6466

65-
return ExampleString == other.ExampleString &&
66-
ArrayOfObjects.SequenceEqual(other.ArrayOfObjects) &&
67-
DictionaryOfNumbers.SequenceEqual(other.DictionaryOfNumbers);
68-
}
67+
[ProtoContract]
68+
public class ComplexTypeCaching_TypeTwo : IEquatable<ComplexTypeCaching_TypeTwo>
69+
{
70+
[ProtoMember(1)]
71+
public string ExampleString { get; set; }
72+
[ProtoMember(2)]
73+
public ComplexTypeCaching_TypeOne[] ArrayOfObjects { get; set; }
74+
[ProtoMember(3)]
75+
public Dictionary<string, int> DictionaryOfNumbers { get; set; }
6976

70-
public override bool Equals(object obj)
77+
public bool Equals(ComplexTypeCaching_TypeTwo other)
78+
{
79+
if (other == null)
7180
{
72-
if (obj is ComplexTypeCaching_TypeTwo complexType)
73-
{
74-
return Equals(complexType);
75-
}
76-
7781
return false;
7882
}
7983

80-
public override int GetHashCode()
84+
return ExampleString == other.ExampleString &&
85+
SequenceComparison.Compare(ArrayOfObjects, other.ArrayOfObjects) &&
86+
SequenceComparison.Compare(DictionaryOfNumbers, other.DictionaryOfNumbers);
87+
}
88+
89+
public override bool Equals(object obj)
90+
{
91+
if (obj is ComplexTypeCaching_TypeTwo complexType)
8192
{
82-
return ExampleString.GetHashCode() ^
83-
ArrayOfObjects.GetHashCode() ^
84-
DictionaryOfNumbers.GetHashCode();
93+
return Equals(complexType);
8594
}
95+
96+
return false;
97+
}
98+
99+
public override int GetHashCode()
100+
{
101+
return ExampleString.GetHashCode() ^
102+
ArrayOfObjects.GetHashCode() ^
103+
DictionaryOfNumbers.GetHashCode();
86104
}
87105
}

tests/CacheTower.Tests/Providers/FileSystem/FileCacheLayerTests.cs

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
using System.IO;
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Reflection;
25
using System.Threading.Tasks;
36
using CacheTower.Providers.FileSystem;
47
using CacheTower.Serializers.NewtonsoftJson;
8+
using CacheTower.Serializers.Protobuf;
9+
using CacheTower.Serializers.SystemTextJson;
510
using Microsoft.VisualStudio.TestTools.UnitTesting;
611

712
namespace CacheTower.Tests.Providers.FileSystem
@@ -67,13 +72,42 @@ public async Task PersistentGetSetCache()
6772
await AssertPersistentGetSetCacheAsync(() => new FileCacheLayer(new(DirectoryPath, NewtonsoftJsonCacheSerializer.Instance)));
6873
}
6974

70-
[TestMethod]
71-
public async Task GetSetCache()
75+
public static IEnumerable<object[]> GetTestSerializers()
7276
{
73-
await using var cacheLayer = new FileCacheLayer(new(DirectoryPath, NewtonsoftJsonCacheSerializer.Instance));
77+
yield return new object[] { NewtonsoftJsonCacheSerializer.Instance };
78+
yield return new object[] { SystemTextJsonCacheSerializer.Instance };
79+
yield return new object[] { ProtobufCacheSerializer.Instance };
80+
}
81+
82+
public static string GetSerializerName(MethodInfo _, object[] values)
83+
{
84+
return values[0].GetType().Name;
85+
}
86+
87+
[DataTestMethod]
88+
[DynamicData(nameof(GetTestSerializers), DynamicDataSourceType.Method, DynamicDataDisplayName = nameof(GetSerializerName))]
89+
public async Task GetSetCache(ICacheSerializer cacheSerializer)
90+
{
91+
await using var cacheLayer = new FileCacheLayer(new(DirectoryPath, cacheSerializer));
7492
await AssertGetSetCacheAsync(cacheLayer);
7593
}
7694

95+
[TestMethod]
96+
public async Task JsonUpgradeTest()
97+
{
98+
{
99+
await using var cacheLayer = new FileCacheLayer(new(DirectoryPath, NewtonsoftJsonCacheSerializer.Instance));
100+
await cacheLayer.SetAsync("Test", new CacheEntry<BasicTypeCaching_TypeOne>(new BasicTypeCaching_TypeOne { ExampleString = "JsonUpgradeTest" }, TimeSpan.FromDays(1)));
101+
}
102+
103+
File.WriteAllText(Path.Combine(DirectoryPath, "0CBC6611F5540BD0809A388DC95A615B"), @"{""Value"":{""ExampleString"":""JsonUpgradeTest""}}");
104+
105+
{
106+
await using var cacheLayer = new FileCacheLayer(new(DirectoryPath, NewtonsoftJsonCacheSerializer.Instance));
107+
var result = await cacheLayer.GetAsync<BasicTypeCaching_TypeOne>("Test");
108+
}
109+
}
110+
77111
[TestMethod]
78112
public async Task IsCacheAvailable()
79113
{
@@ -102,10 +136,11 @@ public async Task CacheCleanup()
102136
await AssertCacheCleanupAsync(cacheLayer);
103137
}
104138

105-
[TestMethod]
106-
public async Task CachingComplexTypes()
139+
[DataTestMethod]
140+
[DynamicData(nameof(GetTestSerializers), DynamicDataSourceType.Method, DynamicDataDisplayName = nameof(GetSerializerName))]
141+
public async Task CachingComplexTypes(ICacheSerializer cacheSerializer)
107142
{
108-
await using var cacheLayer = new FileCacheLayer(new(DirectoryPath, NewtonsoftJsonCacheSerializer.Instance));
143+
await using var cacheLayer = new FileCacheLayer(new(DirectoryPath, cacheSerializer));
109144
await AssertComplexTypeCachingAsync(cacheLayer);
110145
}
111146
}

tests/CacheTower.Tests/Serializers/BaseSerializerTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,10 @@ protected static void AssertManifestSerialization(TSerializer serializer)
3939
};
4040
AssertRoundtripSerialization(serializer, manifest);
4141
}
42+
43+
protected static void AssertCustomTypeSerialization(TSerializer serializer)
44+
{
45+
AssertRoundtripSerialization(serializer, new ComplexTypeCaching_TypeOne());
46+
}
4247
}
4348
}

tests/CacheTower.Tests/Serializers/NewtonsoftJsonCacheSerializerTests.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ public void CacheEntrySerialization()
1313
}
1414

1515
[TestMethod]
16-
public void AssertManifestSerialization()
16+
public void ManifestSerialization()
1717
{
18-
AssertCacheEntrySerialization(NewtonsoftJsonCacheSerializer.Instance);
18+
AssertManifestSerialization(NewtonsoftJsonCacheSerializer.Instance);
19+
}
20+
21+
[TestMethod]
22+
public void CustomTypeSerialization()
23+
{
24+
AssertCustomTypeSerialization(NewtonsoftJsonCacheSerializer.Instance);
1925
}
2026
}
2127
}

tests/CacheTower.Tests/Serializers/ProtobufCacheSerializerTests.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ public void CacheEntrySerialization()
1313
}
1414

1515
[TestMethod]
16-
public void AssertManifestSerialization()
16+
public void ManifestSerialization()
1717
{
18-
AssertCacheEntrySerialization(ProtobufCacheSerializer.Instance);
18+
AssertManifestSerialization(ProtobufCacheSerializer.Instance);
19+
}
20+
21+
[TestMethod]
22+
public void CustomTypeSerialization()
23+
{
24+
AssertCustomTypeSerialization(ProtobufCacheSerializer.Instance);
1925
}
2026
}
2127
}

tests/CacheTower.Tests/Serializers/SystemTextJsonCacheSerializerTests.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ public void CacheEntrySerialization()
1313
}
1414

1515
[TestMethod]
16-
public void AssertManifestSerialization()
16+
public void ManifestSerialization()
1717
{
18-
AssertCacheEntrySerialization(SystemTextJsonCacheSerializer.Instance);
18+
AssertManifestSerialization(SystemTextJsonCacheSerializer.Instance);
19+
}
20+
21+
[TestMethod]
22+
public void CustomTypeSerialization()
23+
{
24+
AssertCustomTypeSerialization(SystemTextJsonCacheSerializer.Instance);
1925
}
2026
}
2127
}

0 commit comments

Comments
 (0)