forked from ZiggyCreatures/FusionCache
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
114 lines (97 loc) · 3.2 KB
/
Copy pathProgram.cs
File metadata and controls
114 lines (97 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System.Text.RegularExpressions;
using ZiggyCreatures.Caching.Fusion;
using ZiggyCreatures.Caching.Fusion.Internals;
using ZiggyCreatures.Caching.Fusion.Internals.Distributed;
using ZiggyCreatures.Caching.Fusion.Serialization;
using ZiggyCreatures.Caching.Fusion.Serialization.CysharpMemoryPack;
using ZiggyCreatures.Caching.Fusion.Serialization.NeueccMessagePack;
using ZiggyCreatures.Caching.Fusion.Serialization.NewtonsoftJson;
using ZiggyCreatures.Caching.Fusion.Serialization.ProtoBufNet;
using ZiggyCreatures.Caching.Fusion.Serialization.ServiceStackJson;
using ZiggyCreatures.Caching.Fusion.Serialization.SystemTextJson;
var serializers = new IFusionCacheSerializer[] {
new FusionCacheProtoBufNetSerializer(),
new FusionCacheCysharpMemoryPackSerializer(),
new FusionCacheNeueccMessagePackSerializer(),
new FusionCacheNewtonsoftJsonSerializer(),
new FusionCacheSystemTextJsonSerializer(),
new FusionCacheServiceStackJsonSerializer()
};
var generateSnapshots = false;
if (generateSnapshots)
{
GenerateSnapshots(serializers, CreateEntry());
}
else
{
TestSnapshots<FusionCacheDistributedEntry<string>>(serializers);
}
static void TestSnapshots<T>(IFusionCacheSerializer[] serializers)
{
foreach (var serializer in serializers)
{
var assembly = typeof(FusionCache).Assembly;
var fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
string? version = fvi.FileVersion;
var filePrefix = $"{serializer.GetType().Name}__";
var files = Directory.GetFiles("Snapshots", filePrefix + "*.bin");
Console.WriteLine($"SERIALIZER: {serializer.GetType().Name} v{version ?? "?"}");
Console.WriteLine("SNAPSHOTS:");
foreach (var file in files)
{
var payloadVersion = Regex.Match(file, @"\w+__v(\d+_\d+_\d+)_\d+\.bin").Groups[1].Value.Replace('_', '.');
var payload = File.ReadAllBytes(file);
Console.Write($"- FROM v{payloadVersion}: ");
try
{
var deserialized = serializer.Deserialize<T>(payload);
Console.WriteLine(deserialized is null ? "FAIL" : "OK");
}
catch (Exception exc)
{
Console.WriteLine($"FAIL {exc.Message}");
}
}
Console.WriteLine();
}
}
static FusionCacheDistributedEntry<string> CreateEntry()
{
var timestamp = 641400439934520833;
return new FusionCacheDistributedEntry<string>(
"Sloths are cool!",
timestamp,
timestamp,
["x", "y", "z"],
new FusionCacheEntryMetadata(
true,
timestamp,
"abc123",
timestamp,
1,
0
)
);
}
static void GenerateSnapshots<T>(IFusionCacheSerializer[] serializers, T value)
{
var assembly = typeof(FusionCache).Assembly;
var fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
string? version = fvi.FileVersion;
if (string.IsNullOrWhiteSpace(version))
{
Console.WriteLine("Cannot establish the serializer version");
return;
}
foreach (var serializer in serializers)
{
var filePrefix = $"{serializer.GetType().Name}__";
var filename = $"{filePrefix}v{version!.Replace('.', '_')}.bin".ToLowerInvariant();
var payload = serializer.Serialize(value);
File.WriteAllBytes(filename, payload);
Console.WriteLine("FusionCache");
Console.WriteLine($"- VERSION : v{version ?? "?"}");
Console.WriteLine($"- FILENAME: {filename}");
Console.WriteLine();
}
}