Skip to content

Commit ca0ac8c

Browse files
committed
Test for header writing
1 parent 9f7352d commit ca0ac8c

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

test/Serilog.Sinks.File.Tests/FileSinkTests.cs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,16 @@ public void WhenLimitIsNotSpecifiedAndEncodingHasNoPreambleDataIsCorrectlyAppend
144144
}
145145

146146
[Fact]
147-
public void WhenStreamWrapperIsSpecifiedOutputStreamIsWrapped()
147+
public void OnOpenedLifecycleHookCanWrapUnderlyingStream()
148148
{
149149
var gzipWrapper = new GZipHooks();
150150

151151
using (var tmp = TempFolder.ForCaller())
152152
{
153-
var nonexistent = tmp.AllocateFilename("txt");
153+
var path = tmp.AllocateFilename("txt");
154154
var evt = Some.LogEvent("Hello, world!");
155155

156-
using (var sink = new FileSink(nonexistent, new JsonFormatter(), null, null, false, gzipWrapper))
156+
using (var sink = new FileSink(path, new JsonFormatter(), null, null, false, gzipWrapper))
157157
{
158158
sink.Emit(evt);
159159
sink.Emit(evt);
@@ -164,7 +164,7 @@ public void WhenStreamWrapperIsSpecifiedOutputStreamIsWrapped()
164164
List<string> lines;
165165
using (var textStream = new MemoryStream())
166166
{
167-
using (var fs = System.IO.File.OpenRead(nonexistent))
167+
using (var fs = System.IO.File.OpenRead(path))
168168
using (var decompressStream = new GZipStream(fs, CompressionMode.Decompress))
169169
{
170170
decompressStream.CopyTo(textStream);
@@ -179,6 +179,33 @@ public void WhenStreamWrapperIsSpecifiedOutputStreamIsWrapped()
179179
}
180180
}
181181

182+
[Fact]
183+
public static void OnOpenedLifecycleHookCanWriteFileHeader()
184+
{
185+
using (var tmp = TempFolder.ForCaller())
186+
{
187+
var headerWriter = new FileHeaderWriter("This is the file header");
188+
189+
var path = tmp.AllocateFilename("txt");
190+
using (new FileSink(path, new JsonFormatter(), null, new UTF8Encoding(false), false, headerWriter))
191+
{
192+
// Open and write header
193+
}
194+
195+
using (var sink = new FileSink(path, new JsonFormatter(), null, new UTF8Encoding(false), false, headerWriter))
196+
{
197+
// Length check should prevent duplicate header here
198+
sink.Emit(Some.LogEvent());
199+
}
200+
201+
var lines = System.IO.File.ReadAllLines(path);
202+
203+
Assert.Equal(2, lines.Length);
204+
Assert.Equal(headerWriter.Header, lines[0]);
205+
Assert.Equal('{', lines[1][0]);
206+
}
207+
}
208+
182209
static void WriteTwoEventsAndCheckOutputFileLength(long? maxBytes, Encoding encoding)
183210
{
184211
using (var tmp = TempFolder.ForCaller())
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System.IO;
2+
using System.Text;
3+
4+
namespace Serilog.Sinks.File.Tests.Support
5+
{
6+
class FileHeaderWriter : FileLifecycleHooks
7+
{
8+
public string Header { get; }
9+
10+
public FileHeaderWriter(string header)
11+
{
12+
Header = header;
13+
}
14+
15+
public override Stream OnOpened(Stream underlyingStream, Encoding encoding)
16+
{
17+
if (underlyingStream.Length == 0)
18+
{
19+
var writer = new StreamWriter(underlyingStream, encoding);
20+
writer.WriteLine(Header);
21+
writer.Flush();
22+
underlyingStream.Flush();
23+
}
24+
25+
return base.OnOpened(underlyingStream, encoding);
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)