package middleware

import (
	"testing"
)

func TestCombineDriver(t *testing.T) {
	testMiddleware1 := passDriver(nil)
	testMiddleware2 := passDriver(nil)
	testMiddleware3 := passDriver(nil)

	Middlewares["test-combine-driver-branch-1"] = testMiddleware1
	Middlewares["test-combine-driver-branch-2"] = testMiddleware2
	Middlewares["test-combine-driver-branch-3"] = testMiddleware3

	var config interface{} = []interface{}{"test-combine-driver-branch-1", "test-combine-driver-branch-2", "test-combine-driver-branch-3"}
	combineMiddleware := combineDriver(&config)

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

		value1 := <-combineMiddleware.Output
		value2 := <-combineMiddleware.Output
		value3 := <-combineMiddleware.Output

		if value1 != i {
			t.Errorf("%d != %d", value1, i)
		}

		if value2 != i {
			t.Errorf("%d != %d", value2, i)
		}

		if value3 != i {
			t.Errorf("%d != %d", value3, i)
		}
	}
}
