func TestSystemWithAllMock(t *testing.T) { l := listener.NewMockListener() l.StartListen() e := emitter.NewEmitter(l) as := actions.NewActions(nil) // Setup actions addr := &actions.ActionAddress{ NewFunc: actions.NewMockAction, } actions.RegisterAction(addr) actions.ActivateActions() // Load actions to Emitter e.LoadActions(as.EnabledActions) // BroadCast message e.BroadCast() <-e.Stopped() <-actions.Actions()["mock"].(*actions.MockAction).Stopped assert.Len(t, actions.Actions()["mock"].(*actions.MockAction).Memory, 10, "produced message size") actions.ClearActions() }
func TestSystemWithDockerEvents(t *testing.T) { l := listener.NewMockListener() l.StartProduceDockerEvents() e := emitter.NewEmitter(l) as := actions.NewActions(nil).EnabledActions // Setup actions addr := &actions.ActionAddress{ NewFunc: actions.NewMockAction, } actions.RegisterAction(addr) actions.ActivateActions() // Load actions to Emitter e.LoadActions(as) // BroadCast message e.BroadCast() <-e.Stopped() <-actions.Actions()["mock"].(*actions.MockAction).Stopped assert.Len(t, actions.Actions()["mock"].(*actions.MockAction).Memory, 10, "produced message size") event := actions.Actions()["mock"].(*actions.MockAction).Memory[0].(*docker.APIEvents) assert.Equal(t, event.From, "base:latest") actions.ClearActions() }
func TestBroadCast(t *testing.T) { l := listener.NewMockListener() e := NewEmitter(l) e.actions = make(map[string]actions.Action) msg := "message" actionNum := 10 var count uint64 var wg sync.WaitGroup // Prepare mock actions for i := 1; i <= actionNum; i++ { actionName := fmt.Sprintf("receiver_%d", i) a := actions.NewMockAction().(*actions.MockAction) a.SetName(actionName) e.actions[fmt.Sprintf("mock_%d", i)] = a } for i := 1; i <= actionNum; i++ { wg.Add(1) go func(j int) { defer wg.Done() select { case ev, ok := <-e.actions[fmt.Sprintf("mock_%d", j)].Ch(): if ok { assert.Equal(t, ev, msg, "received broadcasted message") atomic.AddUint64(&count, 1) } } }(i) } e.BroadCast() e.l.(*listener.MockListener).Ch <- msg close(e.l.Stopped()) wg.Wait() expected := strconv.Itoa(actionNum) actual := strconv.FormatUint(atomic.LoadUint64(&count), 10) assert.Equal(t, expected, actual, "All Actions received message") }
func TestStart(t *testing.T) { cfg := &AgentConfig{} agent, _ := NewAgent(cfg) cfg.EnabledActions = []string{"mock"} agent.listener = listener.NewMockListener() agent.emitter = emitter.NewEmitter(agent.listener) agent.Start() <-agent.emitter.Stopped() <-actions.Actions()["mock"].(*actions.MockAction).Stopped assert.Len(t, actions.Actions()["mock"].(*actions.MockAction).Memory, 10, "produced message size") actions.ClearActions() }