github.com/kubeshop/testkube@v1.17.23/pkg/event/bus/mock_bus.go (about)

     1  package bus
     2  
     3  import (
     4  	"sync"
     5  
     6  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
     7  )
     8  
     9  var _ Bus = (*EventBusMock)(nil)
    10  
    11  type EventBusMock struct {
    12  	events sync.Map
    13  }
    14  
    15  func NewEventBusMock() *EventBusMock {
    16  	return &EventBusMock{}
    17  }
    18  
    19  func (b *EventBusMock) ListQueues() []string {
    20  	var keys []string
    21  	b.events.Range(func(key, value any) bool {
    22  		keys = append(keys, key.(string))
    23  		return true
    24  	})
    25  	return keys
    26  }
    27  
    28  func (b *EventBusMock) Publish(event testkube.Event) error {
    29  	b.events.Range(func(key, e interface{}) bool {
    30  		e.(chan testkube.Event) <- event
    31  		return true
    32  	})
    33  	return nil
    34  }
    35  func (b *EventBusMock) Subscribe(queue string, handler Handler) error {
    36  
    37  	ch := make(chan testkube.Event)
    38  	b.events.Store(queue, ch)
    39  
    40  	go func() {
    41  		for e := range ch {
    42  			handler(e)
    43  		}
    44  	}()
    45  	return nil
    46  }
    47  
    48  func (b *EventBusMock) PublishTopic(topic string, event testkube.Event) error {
    49  	b.events.Range(func(key, e interface{}) bool {
    50  		e.(chan testkube.Event) <- event
    51  		return true
    52  	})
    53  	return nil
    54  }
    55  func (b *EventBusMock) SubscribeTopic(topic, queue string, handler Handler) error {
    56  
    57  	ch := make(chan testkube.Event)
    58  	b.events.Store(queue, ch)
    59  
    60  	go func() {
    61  		for e := range ch {
    62  			handler(e)
    63  		}
    64  	}()
    65  	return nil
    66  }
    67  
    68  func (b *EventBusMock) Unsubscribe(queue string) error {
    69  	b.events.Delete(queue)
    70  	return nil
    71  }
    72  
    73  func (b *EventBusMock) Close() error {
    74  	b.events.Range(func(key, e interface{}) bool {
    75  		b.events.Delete(key)
    76  		return true
    77  	})
    78  	return nil
    79  }