Files
qfixpt/quickfix/session_settings_test.go
2026-03-12 12:14:13 -03:00

235 lines
5.5 KiB
Go

// Copyright (c) quickfixengine.org All rights reserved.
//
// This file may be distributed under the terms of the quickfixengine.org
// license as defined by quickfixengine.org and appearing in the file
// LICENSE included in the packaging of this file.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
// THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
// PARTICULAR PURPOSE.
//
// See http://www.quickfixengine.org/LICENSE for licensing information.
//
// Contact ask@quickfixengine.org if any conditions of this licensing
// are not clear to you.
package quickfix
import (
"bytes"
"testing"
"time"
"quantex.com/qfixpt/quickfix/config"
)
func TestSessionSettings_StringSettings(t *testing.T) {
s := NewSessionSettings()
if s == nil {
t.Error("NewSessionSettings returned nil")
}
s.Set(config.BeginString, "foo")
s.Set(config.BeginString, "blah")
s.Set(config.SenderCompID, "bar")
if ok := s.HasSetting("DoesNotExist"); ok {
t.Error("HasSetting returned true for setting that doesn't exist")
}
if ok := s.HasSetting(config.BeginString); !ok {
t.Error("HasSetting returned false for setting that does exist")
}
if val, err := s.Setting(config.BeginString); err != nil {
t.Error("Got error requesing setting", err)
} else {
if val != "blah" {
t.Errorf("Expected %v got %v", "blah", val)
}
}
}
func TestSessionSettings_IntSettings(t *testing.T) {
s := NewSessionSettings()
if _, err := s.IntSetting(config.SocketAcceptPort); err == nil {
t.Error("Expected error for unknown setting")
}
s.Set(config.SocketAcceptPort, "notanint")
_, err := s.IntSetting(config.SocketAcceptPort)
if err == nil {
t.Error("Expected error for unparsable value")
}
if err.Error() != `"notanint" is invalid for SocketAcceptPort` {
t.Errorf("Expected %s, got %s", `"notanint" is invalid for SocketAcceptPort`, err)
}
s.Set(config.SocketAcceptPort, "1005")
val, err := s.IntSetting(config.SocketAcceptPort)
if err != nil {
t.Error("Unexpected err", err)
}
if val != 1005 {
t.Errorf("Expected %v, got %v", 1005, val)
}
}
func TestSessionSettings_BoolSettings(t *testing.T) {
s := NewSessionSettings()
if _, err := s.BoolSetting(config.ResetOnLogon); err == nil {
t.Error("Expected error for unknown setting")
}
s.Set(config.ResetOnLogon, "notabool")
_, err := s.BoolSetting(config.ResetOnLogon)
if err == nil {
t.Error("Expected error for unparsable value")
}
if err.Error() != `"notabool" is invalid for ResetOnLogon` {
t.Errorf("Expected %s, got %s", `"notabool" is invalid for ResetOnLogon`, err)
}
var boolTests = []struct {
input string
expected bool
}{
{"Y", true},
{"y", true},
{"N", false},
{"n", false},
}
for _, bt := range boolTests {
s.Set(config.ResetOnLogon, bt.input)
actual, err := s.BoolSetting(config.ResetOnLogon)
if err != nil {
t.Error("Unexpected err", err)
}
if actual != bt.expected {
t.Errorf("Expected %v, got %v", bt.expected, actual)
}
}
}
func TestSessionSettings_DurationSettings(t *testing.T) {
s := NewSessionSettings()
if _, err := s.BoolSetting(config.ReconnectInterval); err == nil {
t.Error("Expected error for unknown setting")
}
s.Set(config.ReconnectInterval, "not duration")
_, err := s.DurationSetting(config.ReconnectInterval)
if err == nil {
t.Error("Expected error for unparsable value")
}
if err.Error() != `"not duration" is invalid for ReconnectInterval` {
t.Errorf("Expected %s, got %s", `"not duration" is invalid for ReconnectInterval`, err)
}
s.Set(config.ReconnectInterval, "10s")
got, err := s.DurationSetting(config.ReconnectInterval)
if err != nil {
t.Error("Unexpected err", err)
}
expected, _ := time.ParseDuration("10s")
if got != expected {
t.Errorf("Expected %v, got %v", expected, got)
}
}
func TestSessionSettings_ByteSettings(t *testing.T) {
s := NewSessionSettings()
if _, err := s.RawSetting(config.SocketPrivateKeyBytes); err == nil {
t.Error("Expected error for unknown setting")
}
s.SetRaw(config.SocketPrivateKeyBytes, []byte("pembytes"))
got, err := s.RawSetting(config.SocketPrivateKeyBytes)
if err != nil {
t.Error("Unexpected err", err)
}
if !bytes.Equal([]byte("pembytes"), got) {
t.Errorf("Expected %v, got %v", []byte("pembytes"), got)
}
}
func TestSessionSettings_Clone(t *testing.T) {
s := NewSessionSettings()
var cloneTests = []struct {
input string
expected string
}{
{config.SocketAcceptPort, "101"},
{config.BeginString, "foo"},
{config.ResetOnLogon, "N"},
}
for _, ct := range cloneTests {
s.Set(ct.input, ct.expected)
}
cloned := s.clone()
if cloned == nil {
t.Error("clone returned nil")
}
for _, ct := range cloneTests {
actual, err := cloned.Setting(ct.input)
if err != nil {
t.Error("Unexpected Error", err)
}
if ct.expected != actual {
t.Errorf("Expected %v got %v", ct.expected, actual)
}
}
}
func TestSessionSettings_Overlay(t *testing.T) {
s := NewSessionSettings()
overlay := NewSessionSettings()
s.Set(config.SocketAcceptPort, "101")
s.Set(config.BeginString, "foo")
overlay.Set(config.SocketAcceptPort, "102")
overlay.Set(config.SenderCompID, "blah")
var overlayTests = []struct {
input string
expected string
}{
{config.SocketAcceptPort, "102"},
{config.BeginString, "foo"},
{config.SenderCompID, "blah"},
}
s.overlay(overlay)
for _, ot := range overlayTests {
actual, err := s.Setting(ot.input)
if err != nil {
t.Error("Unexpected error", err)
}
if actual != ot.expected {
t.Errorf("expected %v got %v", ot.expected, actual)
}
}
}