-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
Copy pathCacheServiceExtensionsTests.cs
193 lines (157 loc) · 6.1 KB
/
CacheServiceExtensionsTests.cs
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using Xunit;
namespace Microsoft.Extensions.Caching.Distributed
{
public class CacheServiceExtensionsTests
{
[Fact]
public void AddMemoryCache_RegistersMemoryCacheAsSingleton()
{
// Arrange
var services = new ServiceCollection();
// Act
services.AddMemoryCache();
// Assert
var memoryCache = services.FirstOrDefault(desc => desc.ServiceType == typeof(IMemoryCache));
Assert.NotNull(memoryCache);
Assert.Equal(ServiceLifetime.Singleton, memoryCache.Lifetime);
}
[Fact]
public void AddDistributedMemoryCache_DoesntConflictWithMemoryCache()
{
// Arrange
var services = new ServiceCollection();
services.AddDistributedMemoryCache();
services.AddMemoryCache();
var key = "key";
var memoryValue = "123";
var distributedValue = new byte[] { 1, 2, 3 };
// Act
var serviceProvider = services.BuildServiceProvider();
var distributedCache = serviceProvider.GetService<IDistributedCache>();
var memoryCache = serviceProvider.GetService<IMemoryCache>();
memoryCache.Set(key, memoryValue);
distributedCache.Set(key, distributedValue);
// Assert
Assert.Equal(memoryValue, memoryCache.Get(key));
Assert.Equal(distributedValue, distributedCache.Get(key));
}
[Fact]
public void AddCaching_DoesNotReplaceUserRegisteredServices()
{
// Arrange
var services = new ServiceCollection();
services.AddScoped<IMemoryCache, TestMemoryCache>();
services.AddScoped<IDistributedCache, TestDistributedCache>();
// Act
services.AddMemoryCache();
services.AddDistributedMemoryCache();
// Assert
var serviceProvider = services.BuildServiceProvider();
var memoryCache = services.FirstOrDefault(desc => desc.ServiceType == typeof(IMemoryCache));
Assert.NotNull(memoryCache);
Assert.Equal(ServiceLifetime.Scoped, memoryCache.Lifetime);
Assert.IsType<TestMemoryCache>(serviceProvider.GetRequiredService<IMemoryCache>());
var distributedCache = services.FirstOrDefault(desc => desc.ServiceType == typeof(IDistributedCache));
Assert.NotNull(distributedCache);
Assert.Equal(ServiceLifetime.Scoped, memoryCache.Lifetime);
Assert.IsType<TestDistributedCache>(serviceProvider.GetRequiredService<IDistributedCache>());
}
[Fact]
public void AddMemoryCache_allows_chaining()
{
var services = new ServiceCollection();
Assert.Same(services, services.AddMemoryCache());
}
[Fact]
public void AddMemoryCache_with_action_allows_chaining()
{
var services = new ServiceCollection();
Assert.Same(services, services.AddMemoryCache(_ => { }));
}
[Fact]
public void AddDistributedMemoryCache_allows_chaining()
{
var services = new ServiceCollection();
Assert.Same(services, services.AddDistributedMemoryCache());
}
private class TestMemoryCache : IMemoryCache
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Remove(object key)
{
throw new NotImplementedException();
}
public bool TryGetValue(object key, out object value)
{
throw new NotImplementedException();
}
public ICacheEntry CreateEntry(object key)
{
throw new NotImplementedException();
}
}
private class TestDistributedCache : IDistributedCache
{
public void Connect()
{
throw new NotImplementedException();
}
public Task ConnectAsync()
{
throw new NotImplementedException();
}
public byte[] Get(string key)
{
throw new NotImplementedException();
}
public Task<byte[]> GetAsync(string key, CancellationToken token = default(CancellationToken))
{
throw new NotImplementedException();
}
public void Refresh(string key)
{
throw new NotImplementedException();
}
public Task RefreshAsync(string key, CancellationToken token = default(CancellationToken))
{
throw new NotImplementedException();
}
public void Remove(string key)
{
throw new NotImplementedException();
}
public Task RemoveAsync(string key, CancellationToken token = default(CancellationToken))
{
throw new NotImplementedException();
}
public void Set(string key, byte[] value, DistributedCacheEntryOptions options)
{
throw new NotImplementedException();
}
public Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken))
{
throw new NotImplementedException();
}
public bool TryGetValue(string key, out byte[] value)
{
throw new NotImplementedException();
}
public Task<bool> TryGetValueAsync(string key, out byte[] value)
{
throw new NotImplementedException();
}
}
}
}