public void Should_be_able_to_remove_a_message() { var messagId = Guid.NewGuid(); inboxQueue.Enqueue(messagId, new MemoryStream()); inboxQueue.Remove(messagId); Assert.IsNull(inboxQueue.Dequeue()); }
static void Main(string[] args) { string connectionString = null; string serviceOrigin = null; string serviceDestination = null; string contract = null; string messageType = null; string queueOrigin = null; string queueDestination = null; string baggageTable = null; var parser = new Fclp.FluentCommandLineParser(); parser.Setup <string>("connectionString").Callback(x => connectionString = x); parser.Setup <string>("serviceOrigin").Callback(x => serviceOrigin = x); parser.Setup <string>("serviceDestination").Callback(x => serviceDestination = x); parser.Setup <string>("contract").Callback(x => contract = x); parser.Setup <string>("messageType").Callback(x => messageType = x); parser.Setup <string>("queueOrigin").Callback(x => queueOrigin = x); parser.Setup <string>("queueDestination").Callback(x => queueDestination = x); parser.Setup <string>("baggageTable").Callback(x => baggageTable = x); parser.Parse(args); Console.WriteLine("Connecting..."); var parameters = new SqlQueueParameters(connectionString, serviceOrigin, serviceDestination, contract, messageType, queueOrigin, queueDestination, baggageTable); var queue = new SqlQueue(parameters); queue.CreateObjects(); queue.EnableQueue(); queue.Clear(); var item1 = new ItemDto(1) { InnerDto = new BaseDto.InnerBaseDto(18, "InnerDtoText") }; var item2 = new ItemDto(2); var item3 = new ItemDto(3); var ea = new SomeDomainEvent("a", "b", "c", new[] { "d" }) { User = new DomainEventArgs.UserInfo(143, "name") }; queue.Enqueue(ea); ea = queue.Dequeue <SomeDomainEvent>(); Debug.Assert(ea.User.Id == 143); Debug.Assert(ea.User.Name == "name"); var event2 = new SomeDomainEvent2(SomeDomainEvent2.InnerEnum1.EnumValue1, SomeDomainEvent2.InnerEnum2.Enum2Value2, 1, "message"); queue.Enqueue(event2); event2 = queue.Dequeue <SomeDomainEvent2>(); Debug.Assert(event2.Inner1 == SomeDomainEvent2.InnerEnum1.EnumValue1); Debug.Assert(event2.Inner2 == SomeDomainEvent2.InnerEnum2.Enum2Value2); queue.Enqueue(item1); queue.Enqueue(item2); queue.Enqueue(item3); item1 = queue.Dequeue <ItemDto>(); item2 = queue.Dequeue <ItemDto>(); item3 = queue.Dequeue <ItemDto>(); Console.WriteLine("item1.Id == 1"); Debug.Assert(item1.Int == 1); Debug.Assert(item1.Long == 5); Debug.Assert(item1.Options.Count() == 2); Debug.Assert(item1.Options[0] == ENUM.A); Debug.Assert(item1.Options[1] == ENUM.B); Debug.Assert(item1.Strings.Count() == 2); Debug.Assert(item1.Strings[0] == "abc"); Debug.Assert(item1.Strings[1] == "def"); Debug.Assert(item1.UniqueID == Guid.Parse("c060ee98-2527-4a47-88cb-e65263ed4277")); Debug.Assert(System.Text.Encoding.UTF8.GetString(item1.VeryBigBuffer) == "VERYBIGTEXT"); Debug.Assert(System.Text.Encoding.UTF8.GetString(item1.DictionaryBuffers["buffer1"]) == "BUFFER1"); Debug.Assert(System.Text.Encoding.UTF8.GetString(item1.DictionaryBuffers["buffer2"]) == "BUFFER2"); Debug.Assert(item1.BaseInt == 98); Debug.Assert(item1.BaseChild.Int == 99); Debug.Assert(item1.InnerDto.InnerDtoInt == 18); Debug.Assert(item1.InnerDto.InnerDtoText == "InnerDtoText"); Console.WriteLine("item1.Id == 2"); Debug.Assert(item2.Int == 2); Console.WriteLine("item1.Id == 3"); Debug.Assert(item3.Int == 3); queue.Enqueue(item1); var items = queue.DequeueGroup(); Debug.Assert(items.Count() == 1); Debug.Assert((items.Single() as ItemDto).Int == 1); queue.Enqueue(new NullDto()); var nullDto = queue.Dequeue <NullDto>(); Debug.Assert(nullDto.Child == null); Debug.Assert(nullDto.DateTime == null); Debug.Assert(nullDto.DictionaryBuffers == null); Debug.Assert(nullDto.Double == null); Debug.Assert(nullDto.Float == null); Debug.Assert(nullDto.Int == null); Debug.Assert(nullDto.Float == null); Debug.Assert(nullDto.Long == null); Debug.Assert(nullDto.Options == null); Debug.Assert(nullDto.Strings == null); Debug.Assert(nullDto.Text == null); Debug.Assert(nullDto.UniqueID == null); Debug.Assert(nullDto.VeryBigBuffer == null); queue.Enqueue(new NullDto() { Int = 1 }); nullDto = queue.Dequeue <NullDto>(); Debug.Assert(nullDto.Child == null); Debug.Assert(nullDto.DateTime == null); Debug.Assert(nullDto.DictionaryBuffers == null); Debug.Assert(nullDto.Double == null); Debug.Assert(nullDto.Float == null); Debug.Assert(nullDto.Int.HasValue); Debug.Assert(nullDto.Int == 1); Debug.Assert(nullDto.Float == null); Debug.Assert(nullDto.Long == null); Debug.Assert(nullDto.Options == null); Debug.Assert(nullDto.Strings == null); Debug.Assert(nullDto.Text == null); Debug.Assert(nullDto.UniqueID == null); Debug.Assert(nullDto.VeryBigBuffer == null); queue.Enqueue(new NullDto() { Text = "SOMESTRING" }); nullDto = queue.Dequeue <NullDto>(); Debug.Assert(nullDto.Child == null); Debug.Assert(nullDto.DateTime == null); Debug.Assert(nullDto.DictionaryBuffers == null); Debug.Assert(nullDto.Double == null); Debug.Assert(nullDto.Float == null); Debug.Assert(nullDto.Int == null); Debug.Assert(nullDto.Float == null); Debug.Assert(nullDto.Long == null); Debug.Assert(nullDto.Options == null); Debug.Assert(nullDto.Strings == null); Debug.Assert(nullDto.Text == "SOMESTRING"); Debug.Assert(nullDto.UniqueID == null); Debug.Assert(nullDto.VeryBigBuffer == null); var item5 = new ItemDto(5); var item6 = new ItemDto(6); queue.Enqueue(new[] { item5, item6 }); var itemdtos = queue.DequeueGroup().Cast <ItemDto>(); Debug.Assert(itemdtos.Skip(0).First().Int == 5); Debug.Assert(itemdtos.Skip(1).First().Int == 6); try { queue.Enqueue(new NonSerializableDto()); var nonserializable = queue.Dequeue <NonSerializableDto>(); Debug.Assert(false); } catch { } // Transactional processing must work var itemT1 = new ItemDto(6); queue.Enqueue(itemT1); queue.DequeueGroup(messages => { Debug.Assert(messages.Count() == 1); Debug.Assert((messages.First() as ItemDto).Int == 6); }); // Transactional retry must work var dic = new SqlNoMemoryDictionary <Guid, QueuItemEnvelope>(); dic.Prepare(connectionString, "QUEUESTATUS", "Oid", "Status"); dic.Clear(); queue.Clear(); queue.Enqueue(new[] { new ItemDto(5, Guid.NewGuid()), new ItemDto(6, Guid.NewGuid()) }); queue.DequeueGroup(messages => { foreach (ItemDto mesage in messages) { dic.Add(mesage.UniqueID, new QueuItemEnvelope(mesage)); throw new Exception(); } }); queue.DequeueGroup <Guid>(dic, x => (x as ItemDto).UniqueID, message => { Console.Write(message); }); Guid g1 = Guid.Parse("855a88f3-e2f8-4cbb-8ef5-130d86f27913"); Guid g2 = Guid.Parse("6abaeacc-f47b-4c77-b0fc-ecd873dea12a"); queue.Enqueue(new[] { new ItemDto(5, g1), new ItemDto(6, g2) }); queue.DequeueGroup(dic, x => (x as ItemDto).UniqueID, message => { throw new Exception(); }); queue.DequeueGroup(dic, x => (x as ItemDto).UniqueID, message => { Console.Write(message); }); queue.Enqueue(new[] { new ItemDto(5, g1), new ItemDto(6, g2) }); queue.DequeueGroup(dic, x => (x as ItemDto).UniqueID, message => { Debug.Assert(false); }); //VERY BIG mESSAGE var bigdto = new ItemDto(1) { Text = new string('a', 2000 * 1000 ) }; queue.Enqueue(bigdto); bigdto = queue.Dequeue <ItemDto>(); Debug.Assert(bigdto.Text.Length == 2000 * 1000); var emptyDicMsg = new EmptyDicDomainEventArgs(); queue.Enqueue(emptyDicMsg); emptyDicMsg = queue.Dequeue <EmptyDicDomainEventArgs>(); Console.WriteLine(""); Console.WriteLine("OK!"); //Console.ReadLine(); }