Skip to content

Commit becd81e

Browse files
authored
Added error handling and empty array check (#255)
1 parent 812d633 commit becd81e

File tree

4 files changed

+211
-179
lines changed

4 files changed

+211
-179
lines changed

src/Redis.OM/RedisConnection.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,29 @@ internal RedisConnection(IDatabase db)
2626
/// <inheritdoc/>
2727
public RedisReply Execute(string command, params string[] args)
2828
{
29-
var result = _db.Execute(command, args);
30-
return new RedisReply(result);
29+
try
30+
{
31+
var result = _db.Execute(command, args);
32+
return new RedisReply(result);
33+
}
34+
catch (Exception ex)
35+
{
36+
throw new Exception($"{ex.Message}{Environment.NewLine}Failed on {command} {string.Join(" ", args)}", ex);
37+
}
3138
}
3239

3340
/// <inheritdoc/>
3441
public async Task<RedisReply> ExecuteAsync(string command, params string[] args)
3542
{
36-
var result = await _db.ExecuteAsync(command, args);
37-
return new RedisReply(result);
43+
try
44+
{
45+
var result = await _db.ExecuteAsync(command, args);
46+
return new RedisReply(result);
47+
}
48+
catch (Exception ex)
49+
{
50+
throw new Exception($"{ex.Message}{Environment.NewLine}Failed on {command} {string.Join(" ", args)}", ex);
51+
}
3852
}
3953

4054
/// <inheritdoc/>
@@ -72,4 +86,4 @@ public void Dispose()
7286
{
7387
}
7488
}
75-
}
89+
}

src/Redis.OM/Searching/SearchResponse.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public IDictionary<string, T> DocumentsAs<T>()
6767
/// </summary>
6868
/// <typeparam name="T">The type.</typeparam>
6969
#pragma warning disable SA1402
70+
7071
public class SearchResponse<T>
7172
#pragma warning restore SA1402
7273
where T : notnull
@@ -101,13 +102,16 @@ public SearchResponse(RedisReply val)
101102
var docId = (string)vals[i];
102103
var documentHash = new Dictionary<string, string>();
103104
var docArray = vals[i + 1].ToArray();
104-
for (var j = 0; j < docArray.Length; j += 2)
105+
if (docArray.Length > 1)
105106
{
106-
documentHash.Add(docArray[j], docArray[j + 1]);
107-
}
107+
for (var j = 0; j < docArray.Length; j += 2)
108+
{
109+
documentHash.Add(docArray[j], docArray[j + 1]);
110+
}
108111

109-
var obj = RedisObjectHandler.FromHashSet<T>(documentHash);
110-
Documents.Add(docId, obj);
112+
var obj = RedisObjectHandler.FromHashSet<T>(documentHash);
113+
Documents.Add(docId, obj);
114+
}
111115
}
112116
}
113117
}
@@ -155,4 +159,4 @@ private static SearchResponse<T> PrimitiveSearchResponse(RedisReply redisReply)
155159
return response;
156160
}
157161
}
158-
}
162+
}

test/Redis.OM.Unit.Tests/CoreTests.cs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -327,17 +327,15 @@ public async Task SimpleJsonInsertWhenAsync()
327327
var host = Environment.GetEnvironmentVariable("STANDALONE_HOST_PORT") ?? "localhost";
328328
var provider = new RedisConnectionProvider($"redis://{host}");
329329
var connection = provider.Connection;
330-
var collection = new RedisCollection<Person>(provider.Connection);
330+
var collection = new RedisCollection<BasicJsonObject>(provider.Connection);
331331

332-
var obj = new Person { Name = "Steve", Age = 33 };
332+
var obj = new BasicJsonObject { Name = "Steve" };
333333
var key = await collection.InsertAsync(obj, WhenKey.NotExists);
334334
Assert.NotNull(key);
335335
var reconstituted = await collection.FindByIdAsync(key);
336336
Assert.NotNull(reconstituted);
337337
Assert.Equal("Steve", reconstituted.Name);
338-
Assert.Equal(33, reconstituted.Age);
339338
obj.Name = "Shachar";
340-
obj.Age = null;
341339

342340
var res = await collection.InsertAsync(obj, WhenKey.NotExists); // this should fail
343341
Assert.Null(res);
@@ -346,14 +344,17 @@ public async Task SimpleJsonInsertWhenAsync()
346344
Assert.Equal(key,res);
347345
reconstituted = await collection.FindByIdAsync(key);
348346
Assert.NotNull(reconstituted);
349-
Assert.Null(reconstituted.Age);
350347
Assert.Equal("Shachar" , reconstituted.Name);
351348

352349
await connection.UnlinkAsync(key);
353-
await collection.InsertAsync(obj, WhenKey.NotExists, TimeSpan.FromMilliseconds(5000));
350+
var k2 = await collection.InsertAsync(obj, WhenKey.NotExists, TimeSpan.FromMilliseconds(5000));
351+
Assert.NotNull(k2);
352+
Assert.Equal(key, k2);
354353
var expiration = (long)await connection.ExecuteAsync("PTTL", key);
354+
Assert.Equal(key.Split(":")[1], obj.Id);
355355
Assert.True(expiration>4000);
356356
await Task.Delay(1000);
357+
Assert.True(connection.Execute("EXISTS", key) == 1, $"Expected: {key} to exist, it did not.");
357358
res = await collection.InsertAsync(obj, WhenKey.NotExists, TimeSpan.FromMilliseconds(5000));
358359
Assert.Null(res);
359360
expiration = (long)await connection.ExecuteAsync("PTTL", key);
@@ -380,17 +381,15 @@ public void SimpleJsonInsertWhen()
380381
var host = Environment.GetEnvironmentVariable("STANDALONE_HOST_PORT") ?? "localhost";
381382
var provider = new RedisConnectionProvider($"redis://{host}");
382383
var connection = provider.Connection;
383-
var collection = new RedisCollection<Person>(provider.Connection);
384+
var collection = new RedisCollection<BasicJsonObject>(provider.Connection);
384385

385-
var obj = new Person { Name = "Steve", Age = 33 };
386+
var obj = new BasicJsonObject { Name = "Steve" };
386387
var key = collection.Insert(obj, WhenKey.NotExists);
387388
Assert.NotNull(key);
388389
var reconstituted = collection.FindById(key);
389390
Assert.NotNull(reconstituted);
390391
Assert.Equal("Steve", reconstituted.Name);
391-
Assert.Equal(33, reconstituted.Age);
392392
obj.Name = "Shachar";
393-
obj.Age = null;
394393

395394
var res = collection.Insert(obj, WhenKey.NotExists); // this should fail
396395
Assert.Null(res);
@@ -399,7 +398,6 @@ public void SimpleJsonInsertWhen()
399398
Assert.Equal(key,res);
400399
reconstituted = collection.FindById(key);
401400
Assert.NotNull(reconstituted);
402-
Assert.Null(reconstituted.Age);
403401
Assert.Equal("Shachar" , reconstituted.Name);
404402

405403
connection.Unlink(key);

0 commit comments

Comments
 (0)