Skip to content

fix: replace EndPoint with IPEndPoint #261

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions sample/SampleWebApp/appsettings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
{
"enyimMemcached": {
"Servers": [
{
"Address": "memcached",
"Port": 11211
},
{
"Address": "memcached",
"Port": 11211
Expand Down
1 change: 1 addition & 0 deletions src/Enyim.Caching/Configuration/EndPointExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Net.Sockets;

namespace Enyim.Caching.Configuration;

public static class EndPointExtensions
{
public static IPEndPoint GetIPEndPoint(this EndPoint endpoint, bool useIPv6)
Expand Down
4 changes: 2 additions & 2 deletions src/Enyim.Caching/Memcached/DefaultServerPool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -219,9 +219,9 @@ void IServerPool.Start()
{
_allNodes = _configuration.Servers.Select(ep =>
{
var node = CreateNode(ep);
var ipEndPoint = ep.GetIPEndPoint(_configuration.UseIPv6);
var node = CreateNode(ipEndPoint);
node.Failed += NodeFail;

return node;
}).ToArray();

Expand Down
4 changes: 2 additions & 2 deletions src/Enyim.Caching/Memcached/PooledSocket.cs
Original file line number Diff line number Diff line change
Expand Up @@ -479,9 +479,9 @@ public void Read(byte[] buffer, int offset, int count)
{
try
{
int currentRead = (_useSslStream
int currentRead = _useSslStream
? _sslStream.Read(buffer, offset, shouldRead)
: _inputStream.Read(buffer, offset, shouldRead));
: _inputStream.Read(buffer, offset, shouldRead);
if (currentRead == count)
break;
if (currentRead < 1)
Expand Down
8 changes: 2 additions & 6 deletions src/Enyim.Caching/Memcached/Protocol/Binary/BinaryResponse.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using System.Text;
using System.Diagnostics;
using System.Threading.Tasks;

namespace Enyim.Caching.Memcached.Protocol.Binary
Expand Down Expand Up @@ -43,8 +42,7 @@ public string GetStatusMessage()
{
return Data.Array == null
? null
: (responseMessage
?? (responseMessage = Encoding.ASCII.GetString(Data.Array, Data.Offset, Data.Count)));
: (responseMessage ??= Encoding.ASCII.GetString(Data.Array, Data.Offset, Data.Count));
}

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

int dataLength, extraLength;

DeserializeHeader(header, out dataLength, out extraLength);
DeserializeHeader(header, out int dataLength, out int extraLength);

if (dataLength > 0)
{
Expand Down
10 changes: 2 additions & 8 deletions src/Enyim.Caching/Memcached/Protocol/Binary/StatsOperation.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Enyim.Caching.Memcached.Results;
using Enyim.Caching.Memcached.Results.Extensions;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Enyim.Caching.Memcached.Protocol.Binary
{
public class StatsOperation : BinaryOperation, IStatsOperation
{
private static readonly ILog _log = LogManager.GetLogger(typeof(StatsOperation));

private readonly string _type;
private Dictionary<string, string> _result;

Expand Down Expand Up @@ -42,7 +37,6 @@ protected internal override IOperationResult ReadResponse(PooledSocket socket)
var data = response.Data;
var key = BinaryConverter.DecodeKey(data.Array, data.Offset, response.KeyLength);
var value = BinaryConverter.DecodeKey(data.Array, data.Offset + response.KeyLength, data.Count - response.KeyLength);

serverData[key] = value;
}

Expand Down
21 changes: 21 additions & 0 deletions test/Enyim.Caching.Tests/MemcachedClienStatsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Enyim.Caching.Configuration;
using System;
using System.Net;
using Xunit;

namespace Enyim.Caching.Tests
{
public class MemcachedClientStatsTests : MemcachedClientTestsBase
{
[Fact]
public void When_Getting_Uptime_Is_Successful()
{
var uptime = _client.Stats().GetUptime(new DnsEndPoint(_memcachedHost, _memcachedPort));
Assert.True(uptime > TimeSpan.Zero);

var ipEndPoint = new DnsEndPoint(_memcachedHost, _memcachedPort).GetIPEndPoint(false);
uptime = _client.Stats().GetUptime(ipEndPoint);
Assert.True(uptime > TimeSpan.Zero);
}
}
}
50 changes: 23 additions & 27 deletions test/Enyim.Caching.Tests/MemcachedClientRemoveTests.cs
Original file line number Diff line number Diff line change
@@ -1,35 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xunit;
using Xunit;

namespace Enyim.Caching.Tests
{
public class MemcachedClientRemoveTests : MemcachedClientTestsBase
{
[Fact]
public void When_Removing_A_Valid_Key_Result_Is_Successful()
{
var key = GetUniqueKey("remove");
var storeResult = Store(key: key);
StoreAssertPass(storeResult);
public class MemcachedClientRemoveTests : MemcachedClientTestsBase
{
[Fact]
public void When_Removing_A_Valid_Key_Result_Is_Successful()
{
var key = GetUniqueKey("remove");
var storeResult = Store(key: key);
StoreAssertPass(storeResult);

var removeResult = _client.ExecuteRemove(key);
Assert.True(removeResult.Success, "Success was false");
Assert.True((removeResult.StatusCode ?? 0) == 0, "StatusCode was neither null nor 0");
var removeResult = _client.ExecuteRemove(key);
Assert.True(removeResult.Success, "Success was false");
Assert.True((removeResult.StatusCode ?? 0) == 0, "StatusCode was neither null nor 0");

var getResult = _client.ExecuteGet(key);
GetAssertFail(getResult);
}
var getResult = _client.ExecuteGet(key);
GetAssertFail(getResult);
}

[Fact]
public void When_Removing_An_Invalid_Key_Result_Is_Not_Successful()
{
var key = GetUniqueKey("remove");
[Fact]
public void When_Removing_An_Invalid_Key_Result_Is_Not_Successful()
{
var key = GetUniqueKey("remove");

var removeResult = _client.ExecuteRemove(key);
Assert.False(removeResult.Success, "Success was true");
}
}
var removeResult = _client.ExecuteRemove(key);
Assert.False(removeResult.Success, "Success was true");
}
}
}
99 changes: 49 additions & 50 deletions test/Enyim.Caching.Tests/MemcachedClientStoreTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,67 +9,66 @@

namespace Enyim.Caching.Tests
{
public class MemcachedClientStoreTests : MemcachedClientTestsBase
{
public class MemcachedClientStoreTests : MemcachedClientTestsBase
{
[Fact]
public void When_Storing_Item_With_New_Key_And_StoreMode_Add_Result_Is_Successful()
{
var result = Store(StoreMode.Add);
StoreAssertPass(result);

[Fact]
public void When_Storing_Item_With_New_Key_And_StoreMode_Add_Result_Is_Successful()
{
var result = Store(StoreMode.Add);
StoreAssertPass(result);
}

}
[Fact]
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Add_Result_Is_Not_Successful()
{
var key = GetUniqueKey("store");
var result = Store(StoreMode.Add, key);
StoreAssertPass(result);

[Fact]
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Add_Result_Is_Not_Successful()
{
var key = GetUniqueKey("store");
var result = Store(StoreMode.Add, key);
StoreAssertPass(result);
result = Store(StoreMode.Add, key);
StoreAssertFail(result);
}

result = Store(StoreMode.Add, key);
StoreAssertFail(result);
}
[Fact]
public void When_Storing_Item_With_New_Key_And_StoreMode_Replace_Result_Is_Not_Successful()
{
var result = Store(StoreMode.Replace);
Assert.Equal((int)StatusCodeEnums.NotFound, result.StatusCode);
StoreAssertFail(result);

[Fact]
public void When_Storing_Item_With_New_Key_And_StoreMode_Replace_Result_Is_Not_Successful()
{
var result = Store(StoreMode.Replace);
Assert.Equal((int)StatusCodeEnums.NotFound, result.StatusCode);
StoreAssertFail(result);
}

}
[Fact]
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Replace_Result_Is_Successful()
{
var key = GetUniqueKey("store");
var result = Store(StoreMode.Add, key);
StoreAssertPass(result);

[Fact]
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Replace_Result_Is_Successful()
{
var key = GetUniqueKey("store");
var result = Store(StoreMode.Add, key);
StoreAssertPass(result);
result = Store(StoreMode.Replace, key);
StoreAssertPass(result);
}

result = Store(StoreMode.Replace, key);
StoreAssertPass(result);
}
[Fact]
public void When_Storing_Item_With_New_Key_And_StoreMode_Set_Result_Is_Successful()
{
var result = Store(StoreMode.Set);
StoreAssertPass(result);

[Fact]
public void When_Storing_Item_With_New_Key_And_StoreMode_Set_Result_Is_Successful()
{
var result = Store(StoreMode.Set);
StoreAssertPass(result);
}

}
[Fact]
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Set_Result_Is_Successful()
{
var key = GetUniqueKey("store");
var result = Store(StoreMode.Add, key);
StoreAssertPass(result);

[Fact]
public void When_Storing_Item_With_Existing_Key_And_StoreMode_Set_Result_Is_Successful()
{
var key = GetUniqueKey("store");
var result = Store(StoreMode.Add, key);
StoreAssertPass(result);

result = Store(StoreMode.Set, key);
StoreAssertPass(result);
}
}
result = Store(StoreMode.Set, key);
StoreAssertPass(result);
}
}
}

#region [ License information ]
Expand Down
4 changes: 3 additions & 1 deletion test/Enyim.Caching.Tests/MemcachedClientTestsBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@ namespace Enyim.Caching.Tests
{
public abstract class MemcachedClientTestsBase
{
protected static readonly string _memcachedHost = "memcached";
protected static readonly int _memcachedPort = 11211;
protected MemcachedClient _client;

public MemcachedClientTestsBase(Action<MemcachedClientOptions> onAddEnyimMemcached = null)
{
IServiceCollection services = new ServiceCollection();
services.AddEnyimMemcached(options =>
{
options.AddServer("memcached", 11211);
options.AddServer(_memcachedHost, _memcachedPort);
onAddEnyimMemcached?.Invoke(options);
options.Transcoder = nameof(MessagePackTranscoder);
});
Expand Down
1 change: 0 additions & 1 deletion test/SampleWebApp.IntegrationTests/HomeControllerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ public async Task Get_uptime_test()
var response = await httpClient.GetAsync("/home/uptime");
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var uptime = await response.Content.ReadFromJsonAsync<TimeSpan>();
Console.WriteLine("uptime: " + uptime);
Assert.True(uptime > TimeSpan.Zero);
}
}
Expand Down