public void then_writing_more_events_should_flush_only_the_batch_size()
        {
            for (int i = 0; i < BufferingCount + 2; i++)
            {
                var entry = new EventRecord
                                {
                                    ProviderId = Guid.NewGuid(),
                                    ProviderName = "TestName",
                                    EventId = 50,
                                    Level = (int)EventLevel.Verbose,
                                    Opcode = 5,
                                    Task = 6,
                                    Timestamp = DateTimeOffset.UtcNow,
                                    Version = 2,
                                    InstanceName = "Custom instance name",
                                    FormattedMessage = "Test" + i,
                                    Payload = "{arg0:Test}"
                                };

                this.sink.OnNext(entry);
                Thread.Sleep(10);
            }

            int count = PollingHelper.WaitUntil(() =>
                {
                    using (var cmd = new SqlCommand("SELECT COUNT(*) FROM Traces", this.LocalDbConnection))
                    {
                        return (int)cmd.ExecuteScalar();
                    }
                },
                c => c > 0,
                TimeSpan.FromSeconds(30));

            this.sink.Dispose();

            Assert.AreEqual(BufferingCount, count);
        }
        public void then_all_events_should_be_flushed()
        {
            for (int i = 0; i < NumberOfEntries; i++)
            {
                var entry = new EventRecord
                {
                    ProviderId = Guid.NewGuid(),
                    ProviderName = "TestName",
                    EventId = 50,
                    Level = (int)EventLevel.Verbose,
                    Opcode = 5,
                    Task = 6,
                    Timestamp = DateTimeOffset.UtcNow,
                    Version = 2,
                    InstanceName = "Custom instance name",
                    FormattedMessage = "Test" + i,
                    Payload = "{arg0:Test}"
                };

                this.sink.OnNext(entry);
            }

            Thread.Sleep(50);

            this.sink.FlushAsync().Wait();

            int count;

            using (var cmd = new SqlCommand("SELECT COUNT(*) FROM Traces", this.LocalDbConnection))
            {
                count = (int)cmd.ExecuteScalar();
            }

            Assert.AreEqual<int>(NumberOfEntries, count);
        }
 private static EventRecord CreateValidEntry()
 {
     var entry = new EventRecord
     {
         ProviderId = Guid.NewGuid(),
         ProviderName = "TestName",
         EventId = 50,
         Level = (int)EventLevel.Verbose,
         Opcode = 5,
         Task = 6,
         Timestamp = DateTimeOffset.UtcNow,
         Version = 2,
         InstanceName = "Custom instance name",
         FormattedMessage = "Formatted message",
         Payload = "{arg0:Test}"
     };
     return entry;
 }
        /// <summary>
        /// Converts an <see cref="EventEntry"/> to a <see cref="EventRecord"/>.
        /// </summary>
        /// <param name="entry">The entry to convert.</param>
        /// <returns>A converted entry, or <see langword="null"/> if the payload is invalid.</returns>
        public static EventRecord TryConvertToEventRecord(this EventEntry entry)
        {
            var entity = new EventRecord()
            {
                ProviderId = entry.ProviderId,
                ProviderName = entry.Schema.ProviderName,
                EventId = entry.EventId,
                EventKeywords = (long)entry.Schema.Keywords,
                Level = (int)entry.Schema.Level,
                Opcode = (int)entry.Schema.Opcode,
                Task = (int)entry.Schema.Task,
                Timestamp = entry.Timestamp,
                Version = entry.Schema.Version,
                FormattedMessage = entry.FormattedMessage,
                Payload = EventEntryUtil.JsonSerializePayload(entry)
            };

            return entity;
        }