72 lines
2.0 KiB
C#
Executable File
72 lines
2.0 KiB
C#
Executable File
using ZB.MOM.WW.CBDD.Core;
|
|
using ZB.MOM.WW.CBDD.Core.Collections;
|
|
using ZB.MOM.WW.CBDD.Core.Storage;
|
|
using ZB.MOM.WW.CBDD.Core.Transactions;
|
|
using ZB.MOM.WW.CBDD.Shared;
|
|
using ZB.MOM.WW.CBDD.Shared.TestDbContext_TestDbContext_Mappers;
|
|
using Xunit;
|
|
|
|
namespace ZB.MOM.WW.CBDD.Tests;
|
|
|
|
public class InsertBulkTests : IDisposable
|
|
{
|
|
private readonly string _testFile;
|
|
private readonly Shared.TestDbContext _db;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="InsertBulkTests"/> class.
|
|
/// </summary>
|
|
public InsertBulkTests()
|
|
{
|
|
_testFile = Path.GetTempFileName();
|
|
_db = new Shared.TestDbContext(_testFile);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Disposes test resources.
|
|
/// </summary>
|
|
public void Dispose()
|
|
{
|
|
_db.Dispose();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifies bulk inserts are immediately persisted and visible.
|
|
/// </summary>
|
|
[Fact]
|
|
public void InsertBulk_PersistsData_ImmediatelyVisible()
|
|
{
|
|
var users = new List<User>();
|
|
for (int i = 0; i < 50; i++)
|
|
{
|
|
users.Add(new User { Id = ZB.MOM.WW.CBDD.Bson.ObjectId.NewObjectId(), Name = $"User {i}", Age = 20 });
|
|
}
|
|
|
|
_db.Users.InsertBulk(users);
|
|
_db.SaveChanges();
|
|
|
|
var insertedUsers = _db.Users.FindAll().ToList();
|
|
|
|
insertedUsers.Count.ShouldBe(50);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifies bulk inserts spanning multiple pages persist correctly.
|
|
/// </summary>
|
|
[Fact]
|
|
public void InsertBulk_SpanningMultiplePages_PersistsCorrectly()
|
|
{
|
|
// 16KB page. User ~50 bytes. 400 users -> ~20KB -> 2 pages.
|
|
var users = new List<User>();
|
|
for (int i = 0; i < 400; i++)
|
|
{
|
|
users.Add(new User { Id = ZB.MOM.WW.CBDD.Bson.ObjectId.NewObjectId(), Name = $"User {i} with some long padding text to ensure we fill space {new string('x', 50)}", Age = 20 });
|
|
}
|
|
|
|
_db.Users.InsertBulk(users);
|
|
_db.SaveChanges();
|
|
|
|
_db.Users.Count().ShouldBe(400);
|
|
}
|
|
}
|