private static void Init(out CappedLog.CappedLogScope scrape, out CappedLog.CappedLogConf conf2, out CappedLog.CappedLogConf conf3, out CappedLog.CappedLogConf conf1, out CappedLog.CappedLogMetric metric11, out CappedLog.CappedLogMetric metric12, out CappedLog.CappedLogMetric metric2, out CappedLog.CappedLogMetric metric3) { var log = new CappedLog.CappedLog(); scrape = new CappedLog.CappedLogScope(log); var builder1 = new CappedLog.CappedLogConfBuilder() .AddConstLabel("one", "1") .AddConstLabels(new[] { "two", "2", "three", "3" }) .SetDefaultCapacity(10); conf2 = builder1.Clone() .SetDefaultCapacity(20) .AddLabelNames(new[] { "four", "five" }) .Build(); conf3 = builder1 .AddLabelName("four") .Build(); conf1 = builder1 .AddLabelName("six") .AddConstLabel("seven", "7") .Build(); var conf0 = builder1 .AddLabelName("nine") .Build(); var container0 = log.GetOrCreate(conf0); var container1 = scrape.GetOrCreate(conf1); var container2 = scrape.GetOrCreate(conf2); var container3 = scrape.GetOrCreate(conf3); try { scrape.GetOrCreate(conf0); Assert.Fail(); } catch { } Assert.AreNotEqual(container1, container2); Assert.AreNotEqual(container1, container3); Assert.AreNotEqual(container2, container3); Assert.AreNotEqual(container1, container0); Assert.AreNotEqual(container2, container0); Assert.AreNotEqual(container3, container0); metric11 = container1.GetMetric(new[] { "41", "61" }); metric12 = container1.GetMetric(new[] { "42", "62" }); metric2 = container2.GetMetric(new[] { "4", "5" }); metric3 = container3.GetMetric(new[] { "4" }); }
public void TestAddMessages() { var log = new CappedLog.CappedLog(); var builder1 = new CappedLog.CappedLogConfBuilder() .AddConstLabel("one", "1") .AddConstLabels(new[] { "two", "2", "three", "3" }) .SetDefaultCapacity(10); var conf2 = builder1.Clone() .SetDefaultCapacity(20) .AddLabelNames(new[] { "four", "five" }) .Build(); var conf3 = builder1 .AddLabelName("four") .Build(); var conf1 = builder1 .AddLabelName("six") .AddConstLabel("seven", "7") .Build(); var container1 = log.GetOrCreate(conf1); var container2 = log.GetOrCreate(conf2); var container3 = log.GetOrCreate(conf3); var metric11 = container1.GetMetric(new[] { "41", "61" }); var metric12 = container1.GetMetric(new[] { "42", "62" }); var metric2 = container2.GetMetric(new[] { "4", "5" }); var metric3 = container3.GetMetric(new[] { "4" }); var i11 = 0; var i12 = 0; var i2 = 0; var i3 = 0; Action insert = () => { var id = Thread.CurrentThread.ManagedThreadId; for (var i = 0; i < 10; ++i) { if (metric11.TryEnqueue(() => $"message11 {id}-{i}")) { Interlocked.Increment(ref i11); } if (metric12.TryEnqueue(() => $"message12 {id}-{i}")) { Interlocked.Increment(ref i12); } if (metric2.TryEnqueue(() => $"message2 {id}-{i}")) { Interlocked.Increment(ref i2); } if (metric3.TryEnqueue(() => $"message2 {id}-{i}")) { Interlocked.Increment(ref i3); } Task.Delay(1).Wait(); } }; var tasks = new List <Task>(); for (var i = 0; i < 8; ++i) { tasks.Add(Task.Factory.StartNew(insert)); } Task.WaitAll(tasks.ToArray()); Assert.AreEqual(i11, 10); Assert.AreEqual(i12, 10); Assert.AreEqual(i2, 20); Assert.AreEqual(i3, 10); }