/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package event_test import ( "testing" "github.com/stretchr/testify/suite" "github.com/talos-systems/talos/internal/pkg/event" ) type EventSuite struct { suite.Suite } func (suite *EventSuite) TestBus() { // publish event without subscribers event.Bus().Notify(event.Event{Type: event.Shutdown}) subscriber1 := struct { *event.Embeddable }{ &event.Embeddable{}, } subscriber2 := struct { *event.Embeddable }{ &event.Embeddable{}, } event.Bus().Register(subscriber1) defer event.Bus().Unregister(subscriber1) event.Bus().Register(subscriber2) defer event.Bus().Unregister(subscriber2) select { case <-subscriber1.Channel(): suite.Require().Fail("no previous messages should be delivered") default: } // test fan-out event.Bus().Notify(event.Event{Type: event.Reboot}) suite.Assert().Equal(event.Event{Type: event.Reboot, Data: nil}, <-subscriber1.Channel()) suite.Assert().Equal(event.Event{Type: event.Reboot, Data: nil}, <-subscriber2.Channel()) event.Bus().Unregister(subscriber2) event.Bus().Notify(event.Event{Type: event.Upgrade}) select { case <-subscriber2.Channel(): suite.Require().Fail("message to subscriber2 should not be delivered") default: } suite.Assert().Equal(event.Event{Type: event.Upgrade, Data: nil}, <-subscriber1.Channel()) } func TestEventSuite(t *testing.T) { suite.Run(t, new(EventSuite)) }