mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-31 23:16:54 +00:00
Engine/GCTScript: Refactor script manager (#580)
* refactor script manager
* remove singleton GCTScriptConfig
* create constant for ".gct" extension
* move GctScriptManager into vm package
* reduce script manager global dependencies
* use manager struct to store runtime override values
* enable/disable scripting subsystem now doesn't store the setting in
config (aligned with other subsystems)
* setting max VMs via start option doesn't change config
* instantiate scriptmanager as part of creating a new Engine
* script manager config is now set during instantiation
* run script manager when enabled in conf or explicitly enabled
* use the Started() method to check if script manager is running
* in tests set script manager as running
* script manager adjustments
* create manager before attempting overrides
* check for nil config when creating script manager
* fix script manager waitgroup counter increased too late
* move autoload() function to autoload.go
* add tests to script manager
This commit is contained in:
@@ -35,12 +35,19 @@ func TestMain(m *testing.M) {
|
||||
log.RWM.Lock()
|
||||
log.GlobalLogConfig = &c
|
||||
log.RWM.Unlock()
|
||||
GCTScriptConfig = configHelper(true, true, maxTestVirtualMachines)
|
||||
os.Exit(m.Run())
|
||||
}
|
||||
|
||||
func TestNewVM(t *testing.T) {
|
||||
x := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
}
|
||||
x := manager.New()
|
||||
if x != nil {
|
||||
t.Error("Should not create a VM when manager not started")
|
||||
}
|
||||
manager.started = 1
|
||||
x = manager.New()
|
||||
xType := reflect.TypeOf(x).String()
|
||||
if xType != "*vm.VM" {
|
||||
t.Fatalf("vm.New should return pointer to VM instead received: %v", x)
|
||||
@@ -48,32 +55,38 @@ func TestNewVM(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMLoad(t *testing.T) {
|
||||
GCTScriptConfig = configHelper(true, true, maxTestVirtualMachines)
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
testScript = testScript[0 : len(testScript)-4]
|
||||
testVM = New()
|
||||
testVM = manager.New()
|
||||
err = testVM.Load(testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
GCTScriptConfig = configHelper(false, false, maxTestVirtualMachines)
|
||||
manager.config = configHelper(false, false, maxTestVirtualMachines)
|
||||
err = testVM.Load(testScript)
|
||||
if err != nil {
|
||||
if !errors.Is(err, ErrScriptingDisabled) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
GCTScriptConfig = configHelper(true, true, maxTestVirtualMachines)
|
||||
}
|
||||
|
||||
func TestVMLoad1s(t *testing.T) {
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testScriptRunner1s)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -90,7 +103,11 @@ func TestVMLoad1s(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMLoadNegativeTimer(t *testing.T) {
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testScriptRunnerNegative)
|
||||
if err != nil {
|
||||
if !errors.Is(err, ErrNoVMLoaded) {
|
||||
@@ -105,7 +122,11 @@ func TestVMLoadNegativeTimer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMLoadNilVM(t *testing.T) {
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testScript)
|
||||
if err != nil {
|
||||
if !errors.Is(err, ErrNoVMLoaded) {
|
||||
@@ -122,8 +143,12 @@ func TestVMLoadNilVM(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCompileAndRunNilVM(t *testing.T) {
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
vmcount := VMSCount.Len()
|
||||
testVM := New()
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testScript)
|
||||
if err != nil {
|
||||
if !errors.Is(err, ErrNoVMLoaded) {
|
||||
@@ -149,7 +174,11 @@ func TestCompileAndRunNilVM(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMLoadNoFile(t *testing.T) {
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load("missing file")
|
||||
if err != nil {
|
||||
if !errors.Is(err, os.ErrNotExist) {
|
||||
@@ -159,7 +188,11 @@ func TestVMLoadNoFile(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMCompile(t *testing.T) {
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -172,7 +205,11 @@ func TestVMCompile(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMRun(t *testing.T) {
|
||||
testVM := NewVM()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.NewVM()
|
||||
err := testVM.Load(testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -190,7 +227,11 @@ func TestVMRun(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMRunTX(t *testing.T) {
|
||||
testVM := NewVM()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.NewVM()
|
||||
err := testVM.Load(testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -208,8 +249,12 @@ func TestVMRunTX(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMWithRunner(t *testing.T) {
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
vmCount := VMSCount.Len()
|
||||
VM := New()
|
||||
VM := manager.New()
|
||||
if VM == nil {
|
||||
t.Fatal("Failed to allocate new VM exiting")
|
||||
}
|
||||
@@ -231,8 +276,12 @@ func TestVMWithRunner(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMWithRunnerOnce(t *testing.T) {
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
vmCount := VMSCount.Len()
|
||||
VM := New()
|
||||
VM := manager.New()
|
||||
if VM == nil {
|
||||
t.Fatal("Failed to allocate new VM exiting")
|
||||
}
|
||||
@@ -251,8 +300,12 @@ func TestVMWithRunnerOnce(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVMWithRunnerNegativeTimer(t *testing.T) {
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
vmCount := VMSCount.Len()
|
||||
VM := New()
|
||||
VM := manager.New()
|
||||
if VM == nil {
|
||||
t.Fatal("Failed to allocate new VM exiting")
|
||||
}
|
||||
@@ -274,8 +327,12 @@ func TestVMWithRunnerNegativeTimer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestShutdownAll(t *testing.T) {
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
vmCount := VMSCount.Len()
|
||||
VM := New()
|
||||
VM := manager.New()
|
||||
err := VM.Load(testScriptRunner)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -286,7 +343,7 @@ func TestShutdownAll(t *testing.T) {
|
||||
if VMSCount.Len() == vmCount {
|
||||
t.Fatal("expected VM count to increase")
|
||||
}
|
||||
err = ShutdownAll()
|
||||
err = manager.ShutdownAll()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -297,7 +354,11 @@ func TestShutdownAll(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRead(t *testing.T) {
|
||||
VM := NewVM()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
VM := manager.NewVM()
|
||||
err := VM.Load(testScriptRunner)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -315,8 +376,12 @@ func TestRead(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRemoveVM(t *testing.T) {
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
id, _ := uuid.FromString("6f20c907-64a0-48f2-848a-7837dee61672")
|
||||
err := RemoveVM(id)
|
||||
err := manager.RemoveVM(id)
|
||||
|
||||
if err != nil {
|
||||
if err.Error() != "VM 6f20c907-64a0-48f2-848a-7837dee61672 not found" {
|
||||
@@ -338,7 +403,11 @@ func TestError_Error(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVM_CompileInvalid(t *testing.T) {
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testInvalidScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -353,7 +422,7 @@ func TestVM_CompileInvalid(t *testing.T) {
|
||||
t.Fatal("unexpected result broken script compiled successfully ")
|
||||
}
|
||||
|
||||
testVM = New()
|
||||
testVM = manager.New()
|
||||
err = testVM.Load(testInvalidScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -369,7 +438,7 @@ func TestVM_CompileInvalid(t *testing.T) {
|
||||
t.Fatal("unexpected result broken script compiled successfully ")
|
||||
}
|
||||
|
||||
testVM = New()
|
||||
testVM = manager.New()
|
||||
err = testVM.Load(testInvalidScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -383,7 +452,11 @@ func TestVM_CompileInvalid(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVM_CompileBroken(t *testing.T) {
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testBrokenScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -396,7 +469,11 @@ func TestVM_CompileBroken(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVM_CompileAndRunBroken(t *testing.T) {
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
err := testVM.Load(testBrokenScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -410,48 +487,56 @@ func TestVM_CompileAndRunBroken(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestValidate(t *testing.T) {
|
||||
err := Validate(testBrokenScript)
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, true, maxTestVirtualMachines),
|
||||
started: 1,
|
||||
}
|
||||
err := manager.Validate(testBrokenScript)
|
||||
if err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = Validate(testScript)
|
||||
err = manager.Validate(testScript)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVMLimit(t *testing.T) {
|
||||
GCTScriptConfig = configHelper(true, false, 0)
|
||||
testVM := New()
|
||||
manager := GctScriptManager{
|
||||
config: configHelper(true, false, 0),
|
||||
started: 1,
|
||||
}
|
||||
testVM := manager.New()
|
||||
if testVM != nil {
|
||||
t.Fatal("expected nil but received pointer to VM")
|
||||
}
|
||||
GCTScriptConfig = configHelper(true, true, maxTestVirtualMachines)
|
||||
}
|
||||
|
||||
func TestAutoload(t *testing.T) {
|
||||
GCTScriptConfig = &Config{
|
||||
Enabled: true,
|
||||
AutoLoad: []string{
|
||||
scriptName,
|
||||
manager := GctScriptManager{
|
||||
config: &Config{
|
||||
Enabled: true,
|
||||
AutoLoad: []string{
|
||||
scriptName,
|
||||
},
|
||||
Verbose: true,
|
||||
},
|
||||
Verbose: true,
|
||||
}
|
||||
|
||||
ScriptPath = filepath.Join("..", "..", "testdata", "gctscript")
|
||||
err := Autoload(scriptName, true)
|
||||
err := manager.Autoload(scriptName, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = Autoload(scriptName, true)
|
||||
err = manager.Autoload(scriptName, true)
|
||||
if err == nil {
|
||||
t.Fatal("expected err to be script not found received nil")
|
||||
}
|
||||
err = Autoload("once", false)
|
||||
err = manager.Autoload("once", false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = Autoload(scriptName, false)
|
||||
err = manager.Autoload(scriptName, false)
|
||||
if err == nil {
|
||||
t.Fatal("expected err to be script not found received nil")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user