github.com/banmanh482/nomad@v0.11.8/helper/pluginutils/loader/testing.go (about) 1 package loader 2 3 import ( 4 "net" 5 "sync" 6 7 log "github.com/hashicorp/go-hclog" 8 plugin "github.com/hashicorp/go-plugin" 9 "github.com/hashicorp/nomad/helper" 10 "github.com/hashicorp/nomad/plugins/base" 11 ) 12 13 // MockCatalog provides a mock PluginCatalog to be used for testing 14 type MockCatalog struct { 15 DispenseF func(name, pluginType string, cfg *base.AgentConfig, logger log.Logger) (PluginInstance, error) 16 ReattachF func(name, pluginType string, config *plugin.ReattachConfig) (PluginInstance, error) 17 CatalogF func() map[string][]*base.PluginInfoResponse 18 } 19 20 func (m *MockCatalog) Dispense(name, pluginType string, cfg *base.AgentConfig, logger log.Logger) (PluginInstance, error) { 21 return m.DispenseF(name, pluginType, cfg, logger) 22 } 23 24 func (m *MockCatalog) Reattach(name, pluginType string, config *plugin.ReattachConfig) (PluginInstance, error) { 25 return m.ReattachF(name, pluginType, config) 26 } 27 28 func (m *MockCatalog) Catalog() map[string][]*base.PluginInfoResponse { 29 return m.CatalogF() 30 } 31 32 // MockInstance provides a mock PluginInstance to be used for testing 33 type MockInstance struct { 34 InternalPlugin bool 35 KillF func() 36 ReattachConfigF func() (*plugin.ReattachConfig, bool) 37 PluginF func() interface{} 38 ExitedF func() bool 39 ApiVersionF func() string 40 } 41 42 func (m *MockInstance) Internal() bool { return m.InternalPlugin } 43 func (m *MockInstance) Kill() { m.KillF() } 44 func (m *MockInstance) ReattachConfig() (*plugin.ReattachConfig, bool) { return m.ReattachConfigF() } 45 func (m *MockInstance) Plugin() interface{} { return m.PluginF() } 46 func (m *MockInstance) Exited() bool { return m.ExitedF() } 47 func (m *MockInstance) ApiVersion() string { return m.ApiVersionF() } 48 49 // MockBasicExternalPlugin returns a MockInstance that simulates an external 50 // plugin returning it has been exited after kill is called. It returns the 51 // passed inst as the plugin 52 func MockBasicExternalPlugin(inst interface{}, apiVersion string) *MockInstance { 53 var killedLock sync.Mutex 54 killed := helper.BoolToPtr(false) 55 return &MockInstance{ 56 InternalPlugin: false, 57 KillF: func() { 58 killedLock.Lock() 59 defer killedLock.Unlock() 60 *killed = true 61 }, 62 63 ReattachConfigF: func() (*plugin.ReattachConfig, bool) { 64 return &plugin.ReattachConfig{ 65 Protocol: "tcp", 66 Addr: &net.TCPAddr{ 67 IP: net.IPv4(127, 0, 0, 1), 68 Port: 3200, 69 Zone: "", 70 }, 71 Pid: 1000, 72 }, true 73 }, 74 75 PluginF: func() interface{} { 76 return inst 77 }, 78 79 ExitedF: func() bool { 80 killedLock.Lock() 81 defer killedLock.Unlock() 82 return *killed 83 }, 84 85 ApiVersionF: func() string { return apiVersion }, 86 } 87 }