public void Multiple_entities_in_exception_from_update_pipeline_can_be_handled() { ExtendedSqlAzureExecutionStrategy.ExecuteNew( () => { using (new TransactionScope()) { using (var context = new AdvancedPatternsMasterContext()) { // Create two entities which both have dependencies on each other // to force a dependency ordering exception from the update pipeline. var building = new Building { BuildingId = new Guid("14C62AB6-A49C-40BD-BD5C-D374E070D3D7"), Name = "Building 18", Value = 1m, PrincipalMailRoomId = -1, Address = new Address { Street = "100 Work St", City = "Redmond", State = "WA", ZipCode = "98052", SiteInfo = new SiteInfo { Zone = 1, Environment = "Clean" } }, }; var mailRoom = new MailRoom { id = (int)building.PrincipalMailRoomId, BuildingId = building.BuildingId }; context.Buildings.Add(building); context.Set <MailRoom>().Add(mailRoom); try { context.SaveChanges(); Assert.True(false); } catch (DbUpdateException ex) { Assert.IsType <UpdateException>(ex.InnerException); var entries = ex.Entries.ToList(); Assert.Equal(2, entries.Count()); Assert.True(entries.Any(e => ReferenceEquals(e.Entity, building))); Assert.True(entries.Any(e => ReferenceEquals(e.Entity, mailRoom))); } } } }); }
public void announce_should_return_after_all_recipients_have_been_notified_but_before_they_finish() { var test_subject = new MailRoom(); test_subject.subscribe<SillyMessage>(message_handler_that_never_finishes); test_subject.announce(new SillyMessage("hi")); _log.Should() .ContainInOrder(new object[] {"Notified: hi"}); }
public void mail_sent_to_a_mail_room_should_also_be_announced_to_all_more_central_mail_rooms() { var home_office = new MailRoom(); var log = store_silly_values(); var mail_target = home_office.create_satellite_office(); home_office.subscribe<SillyMessage>(log.accept); mail_target.announce_and_wait(new SillyMessage("hi"), TimeSpan.FromMilliseconds(50)); log.received.Should() .ContainInOrder(new object[] {"hi"}); }
public void announce_and_wait_should_time_out_but_not_cancel_tasks_if_tasks_never_finish() { var test_subject = new MailRoom(); test_subject.subscribe<SillyMessage>(message_handler_that_never_finishes); test_subject.announce_and_wait(new SillyMessage("hi"), TimeSpan.FromMilliseconds(10)) .Should() .BeFalse(); _log.Should() .ContainInOrder(new object[] {"Notified: hi"}); }
public void announce_and_wait_should_only_return_after_all_recipients_have_completed() { var test_subject = new MailRoom(); test_subject.subscribe<SillyMessage>(message_handler_that_finishes); test_subject.announce_and_wait(new SillyMessage("hi"), TimeSpan.FromMilliseconds(50)) .Should() .BeTrue(); _log.Should() .ContainInOrder(new object[] {"Notified: hi", "Finished: hi"}); }
public void announced_messages_should_be_delivered_to_all_who_have_expressed_interest_in_that_message_type() { var test_subject = new MailRoom(); var log = store_silly_values(); test_subject.subscribe<SillyMessage>(log.accept); test_subject.announce_and_wait(new SillyMessage("1"), TimeSpan.FromMilliseconds(50)); test_subject.announce_and_wait(new SillyMessage("2"), TimeSpan.FromMilliseconds(50)); log.received.Should() .ContainInOrder(new object[] {"1", "2"}); }
public RecursiveSubscriber(int counter, [NotNull] MailRoom mail_room_for_recursive_subscriptions, [NotNull] List<string> log) { _counter = counter; _mail_room_for_recursive_subscriptions = mail_room_for_recursive_subscriptions; _log = log; }
public void universal_subscribers_should_receive_all_messages() { var test_subject = new MailRoom(); var log = store_all_values(); test_subject.subscribe_to_all(log.accept); test_subject.announce(new SillyMessage("silly")); test_subject.announce_and_wait(new SeriousMessage("serious"), TimeSpan.Zero); log.received.Should() .ContainInOrder(new object[] {"silly", "serious"}); }
public void subscribing_for_a_message_while_processing_that_message_should_result_in_new_subscriber_not_receiving_message() { var test_subject = new MailRoom(); test_subject.subscribe<SillyMessage>(new RecursiveSubscriber(3, test_subject, _log).subscribe_recursively_until_counter_expires); test_subject.subscribe<SillyMessage>(new RecursiveSubscriber(3, test_subject, _log).subscribe_recursively_until_counter_expires); test_subject.announce_and_wait(new SillyMessage("hi"), TimeSpan.FromMilliseconds(100)) .Should() .BeTrue(); _log.Should() .ContainInOrder(new object[] {"Counted 3: hi", "Counted 3: hi"}); }
public void subscribers_should_only_get_messages_they_asked_for() { var test_subject = new MailRoom(); var log = store_silly_values(); test_subject.subscribe<SillyMessage>(log.accept); test_subject.announce_and_wait(new SillyMessage("silly"), TimeSpan.FromMilliseconds(50)); test_subject.announce_and_wait(new SeriousMessage("serious"), TimeSpan.FromMilliseconds(50)); log.received.Should() .ContainInOrder(new object[] {"silly"}); }