Loading go-packages/meep-model/model.go +31 −15 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package model import ( "encoding/json" "errors" "fmt" "reflect" "strings" Loading @@ -27,8 +28,13 @@ import ( redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis" ) const activeScenarioEvents = "activeScenarioEvents" const activeScenarioKey = "activeScenarioKey" // const activeScenarioEvents = "activeScenarioEvents" const activeScenarioEvents = "ctrl-engine-active" // const activeScenarioKey = "activeScenarioKey" const activeScenarioKey = "ctrl-engine:active" const DbAddress = "meep-redis-master:6379" var redisTable = 0 Loading @@ -38,7 +44,8 @@ type Model struct { module string active bool subscribed bool activeChannel string ActiveChannel string activeKey string listener func(string, string) rc *redis.Connector scenario *ceModel.Scenario Loading @@ -64,7 +71,8 @@ func NewModel(dbAddr string, module string, name string) (m *Model, err error) { m.module = module m.active = false m.subscribed = false m.activeChannel = activeScenarioEvents m.ActiveChannel = activeScenarioEvents m.activeKey = activeScenarioKey m.scenario = new(ceModel.Scenario) m.nodeMap = NewNodeMap() m.parseNodes() Loading @@ -77,7 +85,7 @@ func NewModel(dbAddr string, module string, name string) (m *Model, err error) { log.Error(err) return nil, err } log.Debug("Model created ", m.name) log.Debug("[", m.module, "] Model created ", m.name) return m, nil } Loading Loading @@ -112,12 +120,12 @@ func (m *Model) Activate() (err error) { log.Error(err.Error()) return err } err = m.rc.JSONSetEntry(activeScenarioKey, ".", string(jsonScenario)) err = m.rc.JSONSetEntry(m.activeKey, ".", string(jsonScenario)) if err != nil { log.Error(err.Error()) return err } err = m.rc.Publish(m.activeChannel, "") err = m.rc.Publish(m.ActiveChannel, "") if err != nil { log.Error(err.Error()) return err Loading @@ -130,12 +138,12 @@ func (m *Model) Activate() (err error) { func (m *Model) Deactivate() (err error) { if m.active == true { m.active = false err = m.rc.JSONDelEntry(activeScenarioKey, ".") err = m.rc.JSONDelEntry(m.activeKey, ".") if err != nil { log.Error(err.Error()) return err } err = m.rc.Publish(m.activeChannel, "") err = m.rc.Publish(m.ActiveChannel, "") if err != nil { log.Error(err.Error()) return err Loading @@ -151,7 +159,7 @@ func (m *Model) Listen(handler func(string, string)) (err error) { } if !m.subscribed { // Subscribe to Pub-Sub events for MEEP Controller err = m.rc.Subscribe(m.activeChannel) err = m.rc.Subscribe(m.ActiveChannel) if err != nil { log.Error("Failed to subscribe to Pub/Sub events. Error: ", err) return err Loading @@ -165,6 +173,9 @@ func (m *Model) Listen(handler func(string, string)) (err error) { go func() { _ = m.rc.Listen(m.internalListener) }() // Generate first event to initialize m.internalListener(m.ActiveChannel, "") } return nil } Loading Loading @@ -284,8 +295,12 @@ func (m *Model) UpdateNetChar(nc *ceModel.EventNetworkCharacteristicsUpdate) (er //GetScenarioName - Get the scenario name func (m *Model) GetScenarioName() string { fmt.Printf("%+v", m) if m.scenario != nil { return m.scenario.Name } return "" } //GetNodeNames - Get the list of nodes of a certain type; "" or "ANY" returns all func (m *Model) GetNodeNames(typ string) []string { Loading Loading @@ -395,7 +410,7 @@ func (m *Model) updateSvcMap() (err error) { func (m *Model) refresh() (err error) { if m.active == true { err = m.rc.JSONDelEntry(activeScenarioKey, ".") err = m.rc.JSONDelEntry(m.activeKey, ".") if err != nil { log.Error(err.Error()) return err Loading @@ -405,12 +420,12 @@ func (m *Model) refresh() (err error) { log.Error(err.Error()) return err } err = m.rc.JSONSetEntry(activeScenarioKey, ".", string(jsonScenario)) err = m.rc.JSONSetEntry(m.activeKey, ".", string(jsonScenario)) if err != nil { log.Error(err.Error()) return err } err = m.rc.Publish(m.activeChannel, "") err = m.rc.Publish(m.ActiveChannel, "") if err != nil { log.Error(err.Error()) return err Loading Loading @@ -524,9 +539,10 @@ func (m *Model) moveProc(node *Node, destName string) (oldLocName string, newLoc func (m *Model) internalListener(channel string, payload string) { // An update was received - Update the object state and call the external Handler // Retrieve active scenario from DB j, err := m.rc.JSONGetEntry(activeScenarioKey, ".") j, err := m.rc.JSONGetEntry(m.activeKey, ".") log.Debug("Scenario Event:", j) if err != nil { log.Debug("Scenario was deleted, create a new one") // Scenario was deleted m.scenario = new(ceModel.Scenario) m.nodeMap = NewNodeMap() Loading go-packages/meep-model/model_test.go +18 −20 Original line number Diff line number Diff line Loading @@ -609,6 +609,21 @@ func TestListenModel(t *testing.T) { t.Errorf("Scenario name should be empty") } fmt.Println("Activate") mPub.Activate() time.Sleep(50 * time.Millisecond) fmt.Println("Set Model") err = mPub.SetScenario([]byte(testScenario)) time.Sleep(50 * time.Millisecond) if err != nil { t.Errorf("Error setting model") } if mPub.GetScenarioName() != "demo1" { t.Errorf("Scenario name should be demo1") } // create listener after model has been published to test initialization fmt.Println("Create Listener") mLis, err := NewModel(modelRedisAddr, moduleName+"-Lis", "Active") if err != nil { Loading @@ -624,28 +639,14 @@ func TestListenModel(t *testing.T) { t.Errorf("Should not allow registering without a handler") } fmt.Println("Register listener") err = mLis.Listen(eventHandler) if err != nil { t.Errorf("Unable to listen for events") } var testCount = 0 eventCount = 0 fmt.Println("Activate") testCount++ mPub.Activate() time.Sleep(50 * time.Millisecond) if eventCount != testCount { t.Errorf("No event received for Activate") } fmt.Println("Set Model") fmt.Println("Register listener") testCount++ err = mPub.SetScenario([]byte(testScenario)) time.Sleep(50 * time.Millisecond) err = mLis.Listen(eventHandler) if err != nil { t.Errorf("Error setting model") t.Errorf("Unable to listen for events") } if eventCount != testCount { t.Errorf("No event received for SetScenario") Loading @@ -655,9 +656,6 @@ func TestListenModel(t *testing.T) { if string(lis) != string(pub) { t.Errorf("Published model different than received one") } if mPub.GetScenarioName() != "demo1" { t.Errorf("Scenario name should be demo1") } if mLis.GetScenarioName() != "demo1" { t.Errorf("Scenario name should be demo1") } Loading Loading
go-packages/meep-model/model.go +31 −15 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package model import ( "encoding/json" "errors" "fmt" "reflect" "strings" Loading @@ -27,8 +28,13 @@ import ( redis "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-redis" ) const activeScenarioEvents = "activeScenarioEvents" const activeScenarioKey = "activeScenarioKey" // const activeScenarioEvents = "activeScenarioEvents" const activeScenarioEvents = "ctrl-engine-active" // const activeScenarioKey = "activeScenarioKey" const activeScenarioKey = "ctrl-engine:active" const DbAddress = "meep-redis-master:6379" var redisTable = 0 Loading @@ -38,7 +44,8 @@ type Model struct { module string active bool subscribed bool activeChannel string ActiveChannel string activeKey string listener func(string, string) rc *redis.Connector scenario *ceModel.Scenario Loading @@ -64,7 +71,8 @@ func NewModel(dbAddr string, module string, name string) (m *Model, err error) { m.module = module m.active = false m.subscribed = false m.activeChannel = activeScenarioEvents m.ActiveChannel = activeScenarioEvents m.activeKey = activeScenarioKey m.scenario = new(ceModel.Scenario) m.nodeMap = NewNodeMap() m.parseNodes() Loading @@ -77,7 +85,7 @@ func NewModel(dbAddr string, module string, name string) (m *Model, err error) { log.Error(err) return nil, err } log.Debug("Model created ", m.name) log.Debug("[", m.module, "] Model created ", m.name) return m, nil } Loading Loading @@ -112,12 +120,12 @@ func (m *Model) Activate() (err error) { log.Error(err.Error()) return err } err = m.rc.JSONSetEntry(activeScenarioKey, ".", string(jsonScenario)) err = m.rc.JSONSetEntry(m.activeKey, ".", string(jsonScenario)) if err != nil { log.Error(err.Error()) return err } err = m.rc.Publish(m.activeChannel, "") err = m.rc.Publish(m.ActiveChannel, "") if err != nil { log.Error(err.Error()) return err Loading @@ -130,12 +138,12 @@ func (m *Model) Activate() (err error) { func (m *Model) Deactivate() (err error) { if m.active == true { m.active = false err = m.rc.JSONDelEntry(activeScenarioKey, ".") err = m.rc.JSONDelEntry(m.activeKey, ".") if err != nil { log.Error(err.Error()) return err } err = m.rc.Publish(m.activeChannel, "") err = m.rc.Publish(m.ActiveChannel, "") if err != nil { log.Error(err.Error()) return err Loading @@ -151,7 +159,7 @@ func (m *Model) Listen(handler func(string, string)) (err error) { } if !m.subscribed { // Subscribe to Pub-Sub events for MEEP Controller err = m.rc.Subscribe(m.activeChannel) err = m.rc.Subscribe(m.ActiveChannel) if err != nil { log.Error("Failed to subscribe to Pub/Sub events. Error: ", err) return err Loading @@ -165,6 +173,9 @@ func (m *Model) Listen(handler func(string, string)) (err error) { go func() { _ = m.rc.Listen(m.internalListener) }() // Generate first event to initialize m.internalListener(m.ActiveChannel, "") } return nil } Loading Loading @@ -284,8 +295,12 @@ func (m *Model) UpdateNetChar(nc *ceModel.EventNetworkCharacteristicsUpdate) (er //GetScenarioName - Get the scenario name func (m *Model) GetScenarioName() string { fmt.Printf("%+v", m) if m.scenario != nil { return m.scenario.Name } return "" } //GetNodeNames - Get the list of nodes of a certain type; "" or "ANY" returns all func (m *Model) GetNodeNames(typ string) []string { Loading Loading @@ -395,7 +410,7 @@ func (m *Model) updateSvcMap() (err error) { func (m *Model) refresh() (err error) { if m.active == true { err = m.rc.JSONDelEntry(activeScenarioKey, ".") err = m.rc.JSONDelEntry(m.activeKey, ".") if err != nil { log.Error(err.Error()) return err Loading @@ -405,12 +420,12 @@ func (m *Model) refresh() (err error) { log.Error(err.Error()) return err } err = m.rc.JSONSetEntry(activeScenarioKey, ".", string(jsonScenario)) err = m.rc.JSONSetEntry(m.activeKey, ".", string(jsonScenario)) if err != nil { log.Error(err.Error()) return err } err = m.rc.Publish(m.activeChannel, "") err = m.rc.Publish(m.ActiveChannel, "") if err != nil { log.Error(err.Error()) return err Loading Loading @@ -524,9 +539,10 @@ func (m *Model) moveProc(node *Node, destName string) (oldLocName string, newLoc func (m *Model) internalListener(channel string, payload string) { // An update was received - Update the object state and call the external Handler // Retrieve active scenario from DB j, err := m.rc.JSONGetEntry(activeScenarioKey, ".") j, err := m.rc.JSONGetEntry(m.activeKey, ".") log.Debug("Scenario Event:", j) if err != nil { log.Debug("Scenario was deleted, create a new one") // Scenario was deleted m.scenario = new(ceModel.Scenario) m.nodeMap = NewNodeMap() Loading
go-packages/meep-model/model_test.go +18 −20 Original line number Diff line number Diff line Loading @@ -609,6 +609,21 @@ func TestListenModel(t *testing.T) { t.Errorf("Scenario name should be empty") } fmt.Println("Activate") mPub.Activate() time.Sleep(50 * time.Millisecond) fmt.Println("Set Model") err = mPub.SetScenario([]byte(testScenario)) time.Sleep(50 * time.Millisecond) if err != nil { t.Errorf("Error setting model") } if mPub.GetScenarioName() != "demo1" { t.Errorf("Scenario name should be demo1") } // create listener after model has been published to test initialization fmt.Println("Create Listener") mLis, err := NewModel(modelRedisAddr, moduleName+"-Lis", "Active") if err != nil { Loading @@ -624,28 +639,14 @@ func TestListenModel(t *testing.T) { t.Errorf("Should not allow registering without a handler") } fmt.Println("Register listener") err = mLis.Listen(eventHandler) if err != nil { t.Errorf("Unable to listen for events") } var testCount = 0 eventCount = 0 fmt.Println("Activate") testCount++ mPub.Activate() time.Sleep(50 * time.Millisecond) if eventCount != testCount { t.Errorf("No event received for Activate") } fmt.Println("Set Model") fmt.Println("Register listener") testCount++ err = mPub.SetScenario([]byte(testScenario)) time.Sleep(50 * time.Millisecond) err = mLis.Listen(eventHandler) if err != nil { t.Errorf("Error setting model") t.Errorf("Unable to listen for events") } if eventCount != testCount { t.Errorf("No event received for SetScenario") Loading @@ -655,9 +656,6 @@ func TestListenModel(t *testing.T) { if string(lis) != string(pub) { t.Errorf("Published model different than received one") } if mPub.GetScenarioName() != "demo1" { t.Errorf("Scenario name should be demo1") } if mLis.GetScenarioName() != "demo1" { t.Errorf("Scenario name should be demo1") } Loading