package middleware

import (
	"testing"

	"github.com/pingcap/schrodinger/notifiermgr/event"
)

func PlusDriver(num int) Middleware {
	input := make(chan event.Event)
	output := make(chan event.Event)

	go func() {
		for ev := range input {
			base := ev.(int)
			output <- base + num
		}
	}()

	return &RealMiddleware{
		input,
		output,
	}
}

func TestPipe(t *testing.T) {
	middleware := Pipe([]Middleware{PlusDriver(10), PlusDriver(20), PlusDriver(7)})

	for i := 0; i < 100; i++ {
		middleware.Input <- i

		result := <-middleware.Output
		if result != i+37 {
			t.Errorf("%d != %d", result, i+37)
		}
	}
}
