Add general proxy support (fixes #259)

Change-Id: I63a3eb1e14a35067522fa8ee9efc905059dea087
diff --git a/t/proxy.t b/t/proxy.t
index 1db8ac9..5d5280a 100644
--- a/t/proxy.t
+++ b/t/proxy.t
@@ -158,6 +158,55 @@
   ->header_is('Access-Control-Max-Age', '86400')
   ;
 
+# General proxy mounts
+my $plugin_path = '/realplugin';
+
+$t = Test::Mojo->new('Kalamar' => {
+  Kalamar => {
+    proxies => [
+      'PROXY_STUB',
+      {
+        root_path => '/plugin/hello',
+        mount => $plugin_path,
+        service => 'export-plugin-proxy'
+      }
+    ],
+    proxy_inactivity_timeout => 99,
+    proxy_connect_timeout => 66,
+  }
+});
+
+my $fake_plugin = $t->app->plugin(
+  Mount => {
+    $plugin_path =>
+      $fixtures_path->child('plugin-ex.pl')
+  }
+);
+
+# Configure fake plugin
+my $fake_plugin_app = $fake_plugin->pattern->defaults->{app};
+$fake_plugin_app->log($t->app->log);
+
+# Globally set server
+$t->app->ua->server->app($t->app);
+
+$t->get_ok('/realplugin')
+  ->status_is(200)
+  ->content_is('Hello base world!');
+
+$t->get_ok('/realplugin/huhux')
+  ->status_is(200)
+  ->content_is('Hello world! huhux');
+
+$t->get_ok('/plugin/hello/huhux')
+  ->status_is(200)
+  ->content_is('Hello world! huhux');
+
+# require Mojolicious::Command::routes;
+# use Mojo::Util qw(encode tablify);
+# my $rows = [];
+# Mojolicious::Command::routes::_walk($_, 0, $rows, 0) for @{$t->app->routes->children};
+# warn encode('UTF-8', tablify($rows));
 
 done_testing;
 __END__
diff --git a/t/server/plugin-ex.pl b/t/server/plugin-ex.pl
new file mode 100644
index 0000000..d7ef4e3
--- /dev/null
+++ b/t/server/plugin-ex.pl
@@ -0,0 +1,16 @@
+#!/usr/bin/env perl
+use Mojolicious::Lite;
+use strict;
+use warnings;
+
+# Base page
+get '/' => sub {
+  shift->render(text => 'Hello base world!');
+};
+
+get '/*all' => sub {
+  my $c = shift;
+  $c->render(text => 'Hello world! ' . $c->stash('all'));
+};
+
+app->start;