func main() {
	runner.Run(os.Args[1:], func() {
		plugin.RegisterMultiBackendAdapterFactory("handle-things", adapter.HandleThingsFactory)
		plugin.RegisterWrapperFactory("SessionId", session.NewSessionWrapper)
		plugin.RegisterWrapperFactory("Timing", timing.NewTimingWrapper)
		plugin.RegisterWrapperFactory("Recovery", recovery.NewRecoveryWrapper)
	})
}
func TestMRConfigListener(t *testing.T) {
	log.SetLevel(log.InfoLevel)

	var bHandler plugin.MultiBackendHandlerFunc = func(m plugin.BackendHandlerMap, w http.ResponseWriter, r *http.Request) {
		w.Write([]byte(bHandlerStuff))

		ah := m[backendA]
		ar := httptest.NewRecorder()
		ah.ServeHTTP(ar, r)
		assert.Equal(t, aBackendResponse, ar.Body.String())

		bh := m[backendB]
		br := httptest.NewRecorder()
		bh.ServeHTTP(br, r)
		assert.Equal(t, bBackendResponse, br.Body.String())
	}

	var BMBAFactory = func(bhMap plugin.BackendHandlerMap) *plugin.MultiBackendAdapter {
		return &plugin.MultiBackendAdapter{
			BackendHandlerCtx: bhMap,
			Handler:           bHandler,
		}
	}

	plugin.RegisterMultiBackendAdapterFactory(multiBackendAdapterFactory, BMBAFactory)

	AServer := httptest.NewServer(http.HandlerFunc(handleAStuff))
	BServer := httptest.NewServer(http.HandlerFunc(handleBStuff))

	defer AServer.Close()
	defer BServer.Close()

	ms := mrtBuildListener(AServer.URL, BServer.URL)

	uriToRoutesMap := ms.organizeRoutesByUri()
	uriToGuardAndHandlerMap := mapRoutesToGuardAndHandler(uriToRoutesMap)
	uriHandlerMap := makeURIHandlerMap(uriToGuardAndHandlerMap)

	assert.Equal(t, 1, len(uriHandlerMap))

	ls := httptest.NewServer(timing.NewTimingWrapper().Wrap(uriHandlerMap[fooURI]))
	defer ls.Close()

	resp, err := http.Get(ls.URL + fooURI)
	assert.Nil(t, err)
	body, _ := ioutil.ReadAll(resp.Body)
	defer resp.Body.Close()
	assert.True(t, strings.Contains(string(body), bHandlerStuff))
}
Beispiel #3
0
func makeListenerWithMultiRoutesForTest(t *testing.T, loadBalancerPolicyName string) *managedService {

	var bHandler plugin.MultiBackendHandlerFunc = func(m plugin.BackendHandlerMap, w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("b stuff"))

		_, ok := m["A"]
		if ok == true {
			w.Write([]byte("context stuff"))
		}
	}

	var BMRAFactory = func(bhMap plugin.BackendHandlerMap) *plugin.MultiBackendAdapter {
		return &plugin.MultiBackendAdapter{
			BackendHandlerCtx: bhMap,
			Handler:           bHandler,
		}
	}

	plugin.RegisterMultiBackendAdapterFactory("test-multiroute-plugin", BMRAFactory)

	testBackends := makeTestBackends(t, "http://localhost:666", "")
	var r1 = route{
		Name:                   "route2",
		URIRoot:                "/foo2",
		Backends:               testBackends,
		MultiBackendPluginName: "test-multiroute-plugin",
	}

	var ms = managedService{
		Address:      "localhost:1234",
		ListenerName: "test listener",
		Routes:       []route{r1},
	}

	return &ms
}