Dreamine.FullKit.Tests 1.0.0.0
Dreamine.FullKit.Tests 기능을 검증하는 자동화 테스트 프로젝트입니다.
로딩중...
검색중...
일치하는것 없음
LoggingServiceTests.cs
이 파일의 문서화 페이지로 가기
1using Dreamine.Logging.Formatters;
2using Dreamine.Logging.Interfaces;
3using Dreamine.Logging.Models;
4using Dreamine.Logging.Options;
5using Dreamine.Logging.Registration;
6using Dreamine.Logging.Services;
7using Dreamine.Logging.Sinks;
8using Dreamine.MVVM.Core;
10
12
21[Collection(DMContainerCollection.Name)]
22public sealed class LoggingServiceTests
23{
32 [Fact]
34 {
35 var store = new InMemoryLogStore(capacity: 2);
36 var added = new List<string>();
37 store.LogAdded += (_, entry) => added.Add(entry.Message);
38
39 store.Add(Entry("one"));
40 store.Add(Entry("two"));
41 store.Add(Entry("three"));
42
43 Assert.Equal(new[] { "one", "two", "three" }, added);
44 Assert.Equal(new[] { "two", "three" }, store.GetEntries().Select(entry => entry.Message));
45 }
46
55 [Fact]
57 {
58 var sink = new RecordingSink();
59 var throwing = new ThrowingSink();
60 var logger = new DreamineLogger(new IDreamineLogSink[] { sink, throwing }, DreamineLogLevel.Warning, "Test");
61
62 logger.Info("ignored");
63 logger.Warning("kept");
64
65 var entry = Assert.Single(sink.Entries);
66 Assert.Equal(DreamineLogLevel.Warning, entry.Level);
67 Assert.Equal("Test", entry.Category);
68 Assert.Equal("kept", entry.Message);
69 }
70
79 [Fact]
81 {
82 var first = new RecordingSink();
83 var second = new RecordingSink();
84 using var composite = new CompositeLogSink(new IDreamineLogSink[]
85 {
86 first,
87 new ThrowingSink(),
88 second
89 });
90
91 composite.Write(Entry("message"));
92
93 Assert.Single(first.Entries);
94 Assert.Single(second.Entries);
95 }
96
105 [Fact]
107 {
108 var directory = Path.Combine(Path.GetTempPath(), "DreamineFullKitTests", Guid.NewGuid().ToString("N"));
109 Directory.CreateDirectory(directory);
110
111 try
112 {
113 using (var sink = new TextFileLogSink(directory, new DreamineTextLogFormatter(), flushEveryWriteCount: 1))
114 {
115 sink.Write(Entry("file message"));
116 }
117
118 var file = Assert.Single(Directory.GetFiles(directory, "*.log"));
119 Assert.Contains("file message", File.ReadAllText(file));
120 }
121 finally
122 {
123 if (Directory.Exists(directory))
124 {
125 Directory.Delete(directory, recursive: true);
126 }
127 }
128 }
129
146 [Fact]
148 {
149 var directory = Path.Combine(Path.GetTempPath(), "DreamineFullKitTests", Guid.NewGuid().ToString("N"));
150 Directory.CreateDirectory(directory);
151 DMContainer.Reset();
152
153 try
154 {
155 await using IAsyncDisposable shutdownHandle =
156 DreamineLoggingRegistration.Register(new DreamineLoggingOptions
157 {
158 Category = "RegistrationTest",
159 LogDirectory = directory,
160 ShutdownTimeout = TimeSpan.FromMilliseconds(500)
161 });
162
163 Assert.NotNull(shutdownHandle);
164 Assert.IsNotType<AsyncQueueSink>(shutdownHandle);
165 Assert.NotNull(DMContainer.Resolve<IDreamineLogger>());
166 Assert.NotNull(DMContainer.Resolve<IDreamineLogSink>());
167 Assert.NotNull(DMContainer.Resolve<AsyncQueueSink>());
168 }
169 finally
170 {
171 DMContainer.Reset();
172 if (Directory.Exists(directory))
173 {
174 Directory.Delete(directory, recursive: true);
175 }
176 }
177 }
178
203 private static DreamineLogEntry Entry(string message)
204 {
205 return new DreamineLogEntry(
206 DateTimeOffset.UnixEpoch,
207 DreamineLogLevel.Info,
208 "Test",
209 message,
210 exception: null,
211 threadId: 1);
212 }
213
222 private sealed class RecordingSink : IDreamineLogSink
223 {
232 public List<DreamineLogEntry> Entries { get; } = new();
233
250 public void Write(DreamineLogEntry entry)
251 {
252 Entries.Add(entry);
253 }
254 }
255
264 private sealed class ThrowingSink : IDreamineLogSink
265 {
290 public void Write(DreamineLogEntry entry)
291 {
292 throw new InvalidOperationException("sink failed");
293 }
294 }
295}
static DreamineLogEntry Entry(string message)