Skip to content

Commit 483a925

Browse files
committed
fix #900: NonSessionLog error with CompositeLog
#900 CompositeLog was using IFactory.Create instead of IFactory.CreateNonSessionLog
1 parent c055302 commit 483a925

File tree

5 files changed

+75
-3
lines changed

5 files changed

+75
-3
lines changed

QuickFIXn/Logger/CompositeLogFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ public ILog Create(SessionID sessionID)
2626
}
2727

2828
public ILog CreateNonSessionLog() {
29-
return new CompositeLog(_factories.Select(f => f.Create(new SessionID("Non", "Session", "Log"))).ToArray());
29+
return new CompositeLog(_factories.Select(f => f.CreateNonSessionLog()).ToArray());
3030
}
3131
}

QuickFIXn/Logger/NonSessionLog.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ namespace QuickFix.Logger;
22

33
/// <summary>
44
/// A logger that can be used when the calling logic cannot identify a session (which is rare).
5-
/// Does not create a file until first write.
5+
/// Does not create a log artifact until first write.
66
/// </summary>
77
public class NonSessionLog {
88

QuickFIXn/SettingsDictionary.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ public SettingsDictionary()
2525
: this("unnamed")
2626
{ }
2727

28+
/// <summary>
29+
/// Create a new SettingsDictionary withy specified name
30+
/// </summary>
31+
/// <param name="name">Section name (usually "DEFAULT" or "SESSION")</param>
2832
public SettingsDictionary(string name)
2933
: this(name, new Dictionary<string,string>())
3034
{ }
@@ -33,7 +37,7 @@ public SettingsDictionary(string name)
3337
/// Create a new SettingsDictionary with specified name but data copied from
3438
/// the dataSource SettingsDictionary
3539
/// </summary>
36-
/// <param name="name"></param>
40+
/// <param name="name">Section name (usually "DEFAULT" or "SESSION")</param>
3741
/// <param name="dataSource"></param>
3842
public SettingsDictionary(string name, SettingsDictionary dataSource)
3943
: this(name, dataSource._data)

UnitTests/Logger/FileLogTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public void TestGeneratedFileName()
6666

6767
Assert.That(File.Exists(Path.Combine(logDirectory, "FIX.4.2-SENDERCOMP-TARGETCOMP.event.current.log")));
6868
Assert.That(File.Exists(Path.Combine(logDirectory, "FIX.4.2-SENDERCOMP-TARGETCOMP.messages.current.log")));
69+
70+
// cleanup
71+
Directory.Delete(logDirectory, true);
6972
}
7073

7174
[Test]
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using System.IO;
2+
using NUnit.Framework;
3+
using QuickFix.Logger;
4+
5+
namespace UnitTests.Logger;
6+
7+
[TestFixture]
8+
public class NonSessionLogTests {
9+
private readonly string _logDirectory = Path.Combine(TestContext.CurrentContext.TestDirectory, "log");
10+
11+
private FileLogFactory CreateFileLogFactory() {
12+
if (Directory.Exists(_logDirectory))
13+
Directory.Delete(_logDirectory, true);
14+
15+
string configString = $"""
16+
[DEFAULT]
17+
ConnectionType=initiator
18+
FileLogPath={_logDirectory}
19+
20+
[SESSION]
21+
BeginString=FIX.4.2
22+
SenderCompID=SENDERCOMP
23+
TargetCompID=TARGETCOMP
24+
""";
25+
26+
QuickFix.SessionSettings settings = new QuickFix.SessionSettings(
27+
new StringReader(configString));
28+
29+
return new FileLogFactory(settings);
30+
}
31+
32+
[Test]
33+
public void TestWithFileLogFactory() {
34+
FileLogFactory flf = CreateFileLogFactory();
35+
NonSessionLog nslog = new NonSessionLog(flf);
36+
37+
// Log artifact not created before first log-write
38+
Assert.False(Directory.Exists(_logDirectory));
39+
40+
// Log artifact exists after first log-write
41+
nslog.OnEvent("some text");
42+
Assert.True(Directory.Exists(_logDirectory));
43+
Assert.True(File.Exists(Path.Combine(_logDirectory, "Non-Session-Log.event.current.log")));
44+
45+
// cleanup
46+
Directory.Delete(_logDirectory, true);
47+
}
48+
49+
[Test]
50+
public void TestWithCompositeLogFactory() {
51+
CompositeLogFactory clf = new CompositeLogFactory([CreateFileLogFactory(), new NullLogFactory()]);
52+
NonSessionLog nslog = new NonSessionLog(clf);
53+
54+
// Log artifact not created before first log-write
55+
Assert.False(Directory.Exists(_logDirectory));
56+
57+
// Log artifact exists after first log-write
58+
nslog.OnEvent("some text");
59+
Assert.True(Directory.Exists(_logDirectory));
60+
Assert.True(File.Exists(Path.Combine(_logDirectory, "Non-Session-Log.event.current.log")));
61+
62+
// cleanup
63+
Directory.Delete(_logDirectory, true);
64+
}
65+
}

0 commit comments

Comments
 (0)