Skip to content

Commit 84bdf81

Browse files
committed
fix: replace EndPoint with IPEndPoint
Stats result uses EndPoint as key
1 parent 6f37d61 commit 84bdf81

File tree

11 files changed

+109
-97
lines changed

11 files changed

+109
-97
lines changed

sample/SampleWebApp/appsettings.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
{
22
"enyimMemcached": {
33
"Servers": [
4+
{
5+
"Address": "memcached",
6+
"Port": 11211
7+
},
48
{
59
"Address": "memcached",
610
"Port": 11211

src/Enyim.Caching/Configuration/EndPointExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Net.Sockets;
55

66
namespace Enyim.Caching.Configuration;
7+
78
public static class EndPointExtensions
89
{
910
public static IPEndPoint GetIPEndPoint(this EndPoint endpoint, bool useIPv6)

src/Enyim.Caching/Memcached/DefaultServerPool.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,9 @@ void IServerPool.Start()
219219
{
220220
_allNodes = _configuration.Servers.Select(ep =>
221221
{
222-
var node = CreateNode(ep);
222+
var ipEndPoint = ep.GetIPEndPoint(_configuration.UseIPv6);
223+
var node = CreateNode(ipEndPoint);
223224
node.Failed += NodeFail;
224-
225225
return node;
226226
}).ToArray();
227227

src/Enyim.Caching/Memcached/PooledSocket.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,9 +479,9 @@ public void Read(byte[] buffer, int offset, int count)
479479
{
480480
try
481481
{
482-
int currentRead = (_useSslStream
482+
int currentRead = _useSslStream
483483
? _sslStream.Read(buffer, offset, shouldRead)
484-
: _inputStream.Read(buffer, offset, shouldRead));
484+
: _inputStream.Read(buffer, offset, shouldRead);
485485
if (currentRead == count)
486486
break;
487487
if (currentRead < 1)

src/Enyim.Caching/Memcached/Protocol/Binary/BinaryResponse.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Text;
3-
using System.Diagnostics;
43
using System.Threading.Tasks;
54

65
namespace Enyim.Caching.Memcached.Protocol.Binary
@@ -43,8 +42,7 @@ public string GetStatusMessage()
4342
{
4443
return Data.Array == null
4544
? null
46-
: (responseMessage
47-
?? (responseMessage = Encoding.ASCII.GetString(Data.Array, Data.Offset, Data.Count)));
45+
: (responseMessage ??= Encoding.ASCII.GetString(Data.Array, Data.Offset, Data.Count));
4846
}
4947

5048
public unsafe bool Read(PooledSocket socket)
@@ -57,9 +55,7 @@ public unsafe bool Read(PooledSocket socket)
5755
var header = new byte[HeaderLength];
5856
socket.Read(header, 0, header.Length);
5957

60-
int dataLength, extraLength;
61-
62-
DeserializeHeader(header, out dataLength, out extraLength);
58+
DeserializeHeader(header, out int dataLength, out int extraLength);
6359

6460
if (dataLength > 0)
6561
{

src/Enyim.Caching/Memcached/Protocol/Binary/StatsOperation.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Net;
4-
using System.Text;
5-
using System.Threading.Tasks;
61
using Enyim.Caching.Memcached.Results;
72
using Enyim.Caching.Memcached.Results.Extensions;
3+
using System.Collections.Generic;
4+
using System.Threading.Tasks;
85

96
namespace Enyim.Caching.Memcached.Protocol.Binary
107
{
118
public class StatsOperation : BinaryOperation, IStatsOperation
129
{
13-
private static readonly ILog _log = LogManager.GetLogger(typeof(StatsOperation));
14-
1510
private readonly string _type;
1611
private Dictionary<string, string> _result;
1712

@@ -42,7 +37,6 @@ protected internal override IOperationResult ReadResponse(PooledSocket socket)
4237
var data = response.Data;
4338
var key = BinaryConverter.DecodeKey(data.Array, data.Offset, response.KeyLength);
4439
var value = BinaryConverter.DecodeKey(data.Array, data.Offset + response.KeyLength, data.Count - response.KeyLength);
45-
4640
serverData[key] = value;
4741
}
4842

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using Enyim.Caching.Configuration;
2+
using System;
3+
using System.Net;
4+
using Xunit;
5+
6+
namespace Enyim.Caching.Tests
7+
{
8+
public class MemcachedClientStatsTests : MemcachedClientTestsBase
9+
{
10+
[Fact]
11+
public void When_Getting_Uptime_Is_Successful()
12+
{
13+
var uptime = _client.Stats().GetUptime(new DnsEndPoint(_memcachedHost, _memcachedPort));
14+
Assert.True(uptime > TimeSpan.Zero);
15+
16+
var ipEndPoint = new DnsEndPoint(_memcachedHost, _memcachedPort).GetIPEndPoint(false);
17+
uptime = _client.Stats().GetUptime(ipEndPoint);
18+
Assert.True(uptime > TimeSpan.Zero);
19+
}
20+
}
21+
}
Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,31 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
5-
using Xunit;
1+
using Xunit;
62

73
namespace Enyim.Caching.Tests
84
{
9-
public class MemcachedClientRemoveTests : MemcachedClientTestsBase
10-
{
11-
[Fact]
12-
public void When_Removing_A_Valid_Key_Result_Is_Successful()
13-
{
14-
var key = GetUniqueKey("remove");
15-
var storeResult = Store(key: key);
16-
StoreAssertPass(storeResult);
5+
public class MemcachedClientRemoveTests : MemcachedClientTestsBase
6+
{
7+
[Fact]
8+
public void When_Removing_A_Valid_Key_Result_Is_Successful()
9+
{
10+
var key = GetUniqueKey("remove");
11+
var storeResult = Store(key: key);
12+
StoreAssertPass(storeResult);
1713

18-
var removeResult = _client.ExecuteRemove(key);
19-
Assert.True(removeResult.Success, "Success was false");
20-
Assert.True((removeResult.StatusCode ?? 0) == 0, "StatusCode was neither null nor 0");
14+
var removeResult = _client.ExecuteRemove(key);
15+
Assert.True(removeResult.Success, "Success was false");
16+
Assert.True((removeResult.StatusCode ?? 0) == 0, "StatusCode was neither null nor 0");
2117

22-
var getResult = _client.ExecuteGet(key);
23-
GetAssertFail(getResult);
24-
}
18+
var getResult = _client.ExecuteGet(key);
19+
GetAssertFail(getResult);
20+
}
2521

26-
[Fact]
27-
public void When_Removing_An_Invalid_Key_Result_Is_Not_Successful()
28-
{
29-
var key = GetUniqueKey("remove");
22+
[Fact]
23+
public void When_Removing_An_Invalid_Key_Result_Is_Not_Successful()
24+
{
25+
var key = GetUniqueKey("remove");
3026

31-
var removeResult = _client.ExecuteRemove(key);
32-
Assert.False(removeResult.Success, "Success was true");
33-
}
34-
}
27+
var removeResult = _client.ExecuteRemove(key);
28+
Assert.False(removeResult.Success, "Success was true");
29+
}
30+
}
3531
}

test/Enyim.Caching.Tests/MemcachedClientStoreTests.cs

Lines changed: 49 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -9,67 +9,66 @@
99

1010
namespace Enyim.Caching.Tests
1111
{
12-
public class MemcachedClientStoreTests : MemcachedClientTestsBase
13-
{
12+
public class MemcachedClientStoreTests : MemcachedClientTestsBase
13+
{
14+
[Fact]
15+
public void When_Storing_Item_With_New_Key_And_StoreMode_Add_Result_Is_Successful()
16+
{
17+
var result = Store(StoreMode.Add);
18+
StoreAssertPass(result);
1419

15-
[Fact]
16-
public void When_Storing_Item_With_New_Key_And_StoreMode_Add_Result_Is_Successful()
17-
{
18-
var result = Store(StoreMode.Add);
19-
StoreAssertPass(result);
20+
}
2021

21-
}
22+
[Fact]
23+
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Add_Result_Is_Not_Successful()
24+
{
25+
var key = GetUniqueKey("store");
26+
var result = Store(StoreMode.Add, key);
27+
StoreAssertPass(result);
2228

23-
[Fact]
24-
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Add_Result_Is_Not_Successful()
25-
{
26-
var key = GetUniqueKey("store");
27-
var result = Store(StoreMode.Add, key);
28-
StoreAssertPass(result);
29+
result = Store(StoreMode.Add, key);
30+
StoreAssertFail(result);
31+
}
2932

30-
result = Store(StoreMode.Add, key);
31-
StoreAssertFail(result);
32-
}
33+
[Fact]
34+
public void When_Storing_Item_With_New_Key_And_StoreMode_Replace_Result_Is_Not_Successful()
35+
{
36+
var result = Store(StoreMode.Replace);
37+
Assert.Equal((int)StatusCodeEnums.NotFound, result.StatusCode);
38+
StoreAssertFail(result);
3339

34-
[Fact]
35-
public void When_Storing_Item_With_New_Key_And_StoreMode_Replace_Result_Is_Not_Successful()
36-
{
37-
var result = Store(StoreMode.Replace);
38-
Assert.Equal((int)StatusCodeEnums.NotFound, result.StatusCode);
39-
StoreAssertFail(result);
40+
}
4041

41-
}
42+
[Fact]
43+
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Replace_Result_Is_Successful()
44+
{
45+
var key = GetUniqueKey("store");
46+
var result = Store(StoreMode.Add, key);
47+
StoreAssertPass(result);
4248

43-
[Fact]
44-
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Replace_Result_Is_Successful()
45-
{
46-
var key = GetUniqueKey("store");
47-
var result = Store(StoreMode.Add, key);
48-
StoreAssertPass(result);
49+
result = Store(StoreMode.Replace, key);
50+
StoreAssertPass(result);
51+
}
4952

50-
result = Store(StoreMode.Replace, key);
51-
StoreAssertPass(result);
52-
}
53+
[Fact]
54+
public void When_Storing_Item_With_New_Key_And_StoreMode_Set_Result_Is_Successful()
55+
{
56+
var result = Store(StoreMode.Set);
57+
StoreAssertPass(result);
5358

54-
[Fact]
55-
public void When_Storing_Item_With_New_Key_And_StoreMode_Set_Result_Is_Successful()
56-
{
57-
var result = Store(StoreMode.Set);
58-
StoreAssertPass(result);
59+
}
5960

60-
}
61+
[Fact]
62+
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Set_Result_Is_Successful()
63+
{
64+
var key = GetUniqueKey("store");
65+
var result = Store(StoreMode.Add, key);
66+
StoreAssertPass(result);
6167

62-
[Fact]
63-
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Set_Result_Is_Successful()
64-
{
65-
var key = GetUniqueKey("store");
66-
var result = Store(StoreMode.Add, key);
67-
StoreAssertPass(result);
68-
69-
result = Store(StoreMode.Set, key);
70-
StoreAssertPass(result);
71-
}
72-
}
68+
result = Store(StoreMode.Set, key);
69+
StoreAssertPass(result);
70+
}
71+
}
7372
}
7473

7574
#region [ License information ]

test/Enyim.Caching.Tests/MemcachedClientTestsBase.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ namespace Enyim.Caching.Tests
1616
{
1717
public abstract class MemcachedClientTestsBase
1818
{
19+
protected static readonly string _memcachedHost = "memcached";
20+
protected static readonly int _memcachedPort = 11211;
1921
protected MemcachedClient _client;
2022

2123
public MemcachedClientTestsBase(Action<MemcachedClientOptions> onAddEnyimMemcached = null)
2224
{
2325
IServiceCollection services = new ServiceCollection();
2426
services.AddEnyimMemcached(options =>
2527
{
26-
options.AddServer("memcached", 11211);
28+
options.AddServer(_memcachedHost, _memcachedPort);
2729
onAddEnyimMemcached?.Invoke(options);
2830
options.Transcoder = nameof(MessagePackTranscoder);
2931
});

0 commit comments

Comments
 (0)