public CachingProviderTests() { _fakeFrameworkContext = new FakeFrameworkContext(); var inMemory = new NHibernateInMemoryRepository(_fakeFrameworkContext); var dataContextFactory = new DataContextFactory(); var readWriteUnitOfWorkFactory = new ReadWriteUnitOfWorkFactory(); var directReaderProvider = new HiveReadWriteProvider(new HiveProviderSetup(_fakeFrameworkContext, "r-unit-tester", new FakeHiveProviderBootstrapper(), readWriteUnitOfWorkFactory, readWriteUnitOfWorkFactory, dataContextFactory)); var directReadWriteProvider = directReaderProvider; // Create hive wrappers for the readers and writers var governorRUowFactory = new ReadOnlyUnitOfWorkFactoryWrapper(new[] { directReaderProvider, inMemory.HiveReadProvider }); var governorRWUowFactory = new ReadWriteUnitOfWorkFactoryWrapper(new[] { directReadWriteProvider, inMemory.ReadWriteProvider }); _readerProviderViaHiveGovernor = _directReaderProvider = new Framework.Hive.PersistenceGovernor.HiveReadProvider(new HiveProviderSetup(_fakeFrameworkContext, "r-unit-wrapper", new FakeHiveProviderBootstrapper(), governorRUowFactory, null, null), new[] { _directReaderProvider }); _readWriteProviderViaHiveGovernor = _directReadWriteProvider = new Framework.Hive.PersistenceGovernor.HiveReadWriteProvider(new HiveProviderSetup(_fakeFrameworkContext, "rw-unit-wrapper", new FakeHiveProviderBootstrapper(), governorRUowFactory, governorRWUowFactory, null), new[] { _directReadWriteProvider }); }
private object[] GetCheckValuesAfterCommitting(IHiveReadWriteProvider writeProvider, out HiveId generatedId, T mockedEntity) { var checkValuesAfterCommitting = new object[_valuesAndAssertions.Count]; using (DisposableTimer.TraceDuration <NHibernateHiveTests>("Start write", "End write")) { using (var unit = writeProvider.CreateReadWriteUnitOfWork()) { unit.ReadWriteRepository.AddOrUpdate(mockedEntity); unit.Commit(); generatedId = mockedEntity.Id; for (int i = 0; i < _valuesAndAssertions.Count; i++) { checkValuesAfterCommitting[i] = _valuesAndAssertions[i].Item1.Invoke(mockedEntity); } } _postWriteCallback.Invoke(); } Assert.IsNotNull(generatedId, "Id was not obtained from adding the entity to the db"); return(checkValuesAfterCommitting); }
private void DoSameResultsCheck(IHiveReadWriteProvider hiveReadWriteProvider, IHiveReadProvider hiveReadProvider) { TypedEntity entity1 = HiveModelCreationHelper.MockTypedEntity(); TypedEntity entity2 = HiveModelCreationHelper.MockTypedEntity(); using (IReadWriteUnitOfWork writer = hiveReadWriteProvider.CreateReadWriteUnitOfWork()) { writer.ReadWriteRepository.AddOrUpdate(entity1); writer.ReadWriteRepository.AddOrUpdate(entity2); writer.Commit(); } PostWriteCallback.Invoke(); using (IReadWriteUnitOfWork writer = hiveReadWriteProvider.CreateReadWriteUnitOfWork()) { var check1 = writer.ReadWriteRepository.GetEntity<TypedEntity>(entity1.Id); Assert.IsNotNull(check1, "Same writer could not retrieve item 1"); var check2 = writer.ReadWriteRepository.GetEntity<TypedEntity>(entity2.Id); Assert.IsNotNull(check2, "Same writer could not retrieve item 2"); } PostWriteCallback.Invoke(); using (IReadOnlyUnitOfWork writer = hiveReadProvider.CreateReadOnlyUnitOfWork()) { var check1 = writer.ReadRepository.GetEntity<TypedEntity>(entity1.Id); Assert.IsNotNull(check1, "Direct reader could not retrieve item 1 when writer could"); var check2 = writer.ReadRepository.GetEntity<TypedEntity>(entity2.Id); Assert.IsNotNull(check2, "Direct reader could not retrieve item 2 when writer could"); } }
private static void DoNestedTest(IHiveReadWriteProvider hiveReadWriteProvider, IHiveReadProvider hiveReadProvider, Action postWriteCallback) { TypedEntity entity = HiveModelCreationHelper.MockTypedEntity(); TypedEntity entity2 = HiveModelCreationHelper.MockTypedEntity(); using (IReadWriteUnitOfWork outerUnit = hiveReadWriteProvider.CreateReadWriteUnitOfWork()) { outerUnit.ReadWriteRepository.AddOrUpdate(entity); // Do some nested writing using (IReadWriteUnitOfWork innerUnit = hiveReadWriteProvider.CreateReadWriteUnitOfWork()) { innerUnit.ReadWriteRepository.AddOrUpdate(entity2); innerUnit.Commit(); } // Do some nested reading using (IReadOnlyUnitOfWork innerUnit = hiveReadProvider.CreateReadOnlyUnitOfWork()) { innerUnit.ReadRepository.Exists<TypedEntity>(new HiveId(Guid.NewGuid())); } // Do some nested reading with the writer using (IReadWriteUnitOfWork innerUnit = hiveReadWriteProvider.CreateReadWriteUnitOfWork()) { innerUnit.ReadWriteRepository.Exists<TypedEntity>(new HiveId(Guid.NewGuid())); } // Do some nested writing using (IReadWriteUnitOfWork innerUnit = hiveReadWriteProvider.CreateReadWriteUnitOfWork()) { innerUnit.ReadWriteRepository.AddOrUpdate(entity2); innerUnit.Commit(); } outerUnit.Commit(); } HiveId id1 = entity.Id; HiveId id2 = entity2.Id; using (IReadWriteUnitOfWork outerUnit = hiveReadWriteProvider.CreateReadWriteUnitOfWork()) { // Do some nested reading using (IReadOnlyUnitOfWork innerUnit = hiveReadProvider.CreateReadOnlyUnitOfWork()) { innerUnit.ReadRepository.Exists<TypedEntity>(new HiveId(Guid.NewGuid())); //innerUnit.Commit(); } outerUnit.ReadWriteRepository.AddOrUpdate(entity); outerUnit.Commit(); } postWriteCallback.Invoke(); using (IReadOnlyUnitOfWork unit = hiveReadProvider.CreateReadOnlyUnitOfWork()) { var compare = unit.ReadRepository.GetEntity<TypedEntity>(id1); var compare2 = unit.ReadRepository.GetEntity<TypedEntity>(id2); Assert.IsNotNull(compare); Assert.IsNotNull(compare2); } }
public PersistenceAssertionBuilder <T> RunAssertionsWithQuery(IHiveReadProvider readerProvider, IHiveReadWriteProvider writeProvider, T mockedEntity, Func <HiveId, Expression <Func <T, bool> > > expression) { HiveId generatedId; object[] checkValuesAfterCommitting = GetCheckValuesAfterCommitting(writeProvider, out generatedId, mockedEntity); using (DisposableTimer.TraceDuration <NHibernateHiveTests>("Start read", "End read")) { using (var unit = readerProvider.CreateReadOnlyUnitOfWork()) { var result = unit.ReadRepository.QueryContext.Query <T>().Where(expression(generatedId)).FirstOrDefault(); Assert.IsNotNull(result, "No entity was retrieved back from the datastore for query {0} (id was {1})", expression, generatedId); Assert.IsTrue(generatedId == result.Id); LogHelper.TraceIfEnabled <PersistenceAssertionBuilder <T> >("Item owned by {0}, retrieved from {1}", () => result.PersistenceMetadata.OwnerProviderAlias, () => result.PersistenceMetadata.ReturnedByProviderAlias); for (int i = 0; i < _valuesAndAssertions.Count; i++) { _valuesAndAssertions[i].Item2.Invoke(result, checkValuesAfterCommitting[i]); } } } return(this); }
public PersistenceAssertionBuilder <T> RunAssertionsWithQuery(IHiveReadProvider readerProvider, IHiveReadWriteProvider writeProvider, Func <T> mockedEntityGenerator, Func <HiveId, Expression <Func <T, bool> > > expression) { return(RunAssertionsWithQuery(readerProvider, writeProvider, mockedEntityGenerator.Invoke(), expression)); }
public PersistenceAssertionBuilder <T> RunAssertions(IHiveReadProvider readerProvider, IHiveReadWriteProvider writeProvider, T mockedEntity) { HiveId generatedId; object[] checkValuesAfterCommitting = GetCheckValuesAfterCommitting(writeProvider, out generatedId, mockedEntity); using (DisposableTimer.TraceDuration <NHibernateHiveTests>("Start read", "End read")) { using (var unit = readerProvider.CreateReadOnlyUnitOfWork()) { var result = unit.ReadRepository.GetEntity <T>(generatedId); Assert.IsNotNull(result, "No entity was retrieved back from the datastore with id {0}", generatedId); Assert.AreEqual(generatedId, result.Id, "Got a different value back from the database for the Id"); LogHelper.TraceIfEnabled <PersistenceAssertionBuilder <T> >("Item owned by {0}, retrieved from {1}", () => result.PersistenceMetadata.OwnerProviderAlias, () => result.PersistenceMetadata.ReturnedByProviderAlias); for (int i = 0; i < _valuesAndAssertions.Count; i++) { _valuesAndAssertions[i].Item2.Invoke(result, checkValuesAfterCommitting[i]); } } _postWriteCallback.Invoke(); } return(this); }
public PersistenceAssertionBuilder <T> RunAssertions(IHiveReadProvider readerProvider, IHiveReadWriteProvider writeProvider, Func <T> mockedEntityGenerator) { return(RunAssertions(readerProvider, writeProvider, mockedEntityGenerator.Invoke())); }