func()

in pkg/client/apifactory_mock.go [232:292]


func (m *MockedAPIProvider) RunEventHandler() {
	m.Lock()
	defer m.Unlock()
	if m.running {
		return
	}
	m.running = true
	log.Log(log.Test).Info("mock shared informers: starting background event handler")
	go func() {
		eventHandlers := make(map[Type][]cache.ResourceEventHandler)

		for {
			select {
			case <-m.stop:
				return
			case handlers := <-m.eventHandler:
				var h cache.ResourceEventHandler
				fns := cache.ResourceEventHandlerFuncs{
					AddFunc:    handlers.AddFn,
					UpdateFunc: handlers.UpdateFn,
					DeleteFunc: handlers.DeleteFn,
				}

				if handlers.FilterFn != nil {
					h = cache.FilteringResourceEventHandler{
						FilterFunc: handlers.FilterFn,
						Handler:    fns,
					}
				} else {
					h = fns
				}
				handlerType := handlers.Type

				forType := eventHandlers[handlerType]
				forType = append(forType, h)
				eventHandlers[handlerType] = forType
			case event := <-m.events:
				handlerType := event.handlerType
				obj := event.obj
				old := event.oldObj

				switch event.op {
				case Add:
					for _, e := range eventHandlers[handlerType] {
						e.OnAdd(obj, false)
					}
				case Delete:
					for _, e := range eventHandlers[handlerType] {
						e.OnDelete(obj)
					}
				case Update:
					for _, e := range eventHandlers[handlerType] {
						e.OnUpdate(old, obj)
					}
				default:
					log.Log(log.Test).Fatal("Unknown operation", zap.Int("type", int(event.op)))
				}
			}
		}
	}()
}