AppManager: Support exposing cross-cluster ports

Change-Id: I4bdb3573209935f6777656ec2f3481e79d84a9c9
diff --git a/core/installer/cluster_test.go b/core/installer/cluster_test.go
index e315202..b2ecd99 100644
--- a/core/installer/cluster_test.go
+++ b/core/installer/cluster_test.go
@@ -7,7 +7,14 @@
 )
 
 func TestParseNginxProxyConfig(t *testing.T) {
-	cfg, err := ParseNginxProxyConfig(strings.NewReader(`nginx.conf: |
+	cfg, err := ParseNginxProxyConfig(strings.NewReader(`
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: proxy-backend-config
+  namespace: foo
+data:
+nginx.conf: |
 # user       www www;
 worker_processes  1;
 error_log   /dev/null   crit;
@@ -33,33 +40,66 @@
 		}
 	}
 }
+stream {
+	server {
+		listen 9091;
+		proxy_pass foo:1;
+	}
+	server {
+		listen 9092 udp;
+		proxy_pass bar:2;
+	}
+	server {
+		listen 9093;
+		proxy_pass dev:3;
+	}
+}
 `))
 	if err != nil {
 		t.Fatal(err)
 	}
-	if cfg.Port != 9090 {
-		t.Errorf("invalid port: expected 9090, got %d", cfg.Port)
+	if cfg.Namespace != "foo" {
+		t.Errorf("invalid namespace: expeced foo, got %s", cfg.Namespace)
+	}
+	if cfg.IngressPort != 9090 {
+		t.Errorf("invalid port: expected 9090, got %d", cfg.IngressPort)
 	}
 	if len(cfg.Resolvers) != 2 ||
 		!cfg.Resolvers[0].Equal(net.ParseIP("1.1.1.1")) ||
 		!cfg.Resolvers[1].Equal(net.ParseIP("2.2.2.2")) {
 		t.Errorf("invalid resolvers: expected [1.1.1.1 2.2.2.2], got %s", cfg.Resolvers)
 	}
-	if len(cfg.Proxies) != 2 ||
-		cfg.Proxies["a"] != "A" ||
-		cfg.Proxies["b"] != "B" {
-		t.Errorf("invalid proxies: expected map[a:A, b:B], got %s", cfg.Proxies)
+	if len(cfg.Ingress) != 2 ||
+		cfg.Ingress["a"] != "A" ||
+		cfg.Ingress["b"] != "B" {
+		t.Errorf("invalid ingress proxies: expected map[a:A, b:B], got %s", cfg.Ingress)
+	}
+	if len(cfg.TCP) != 2 ||
+		cfg.TCP[9091] != "foo:1" ||
+		cfg.TCP[9093] != "dev:3" {
+		t.Errorf("invalid TCP proxies: expected map[9091:foo:1, 9093:dev:3], got %v", cfg.TCP)
+	}
+	if len(cfg.UDP) != 1 ||
+		cfg.UDP[9092] != "bar:2" {
+		t.Errorf("invalid UDP proxies: expected map[9092:bar:2], got %v", cfg.UDP)
 	}
 }
 
 func TestRenderNginxProxyConfig(t *testing.T) {
 	cfg := NginxProxyConfig{
-		Port:      8080,
-		Resolvers: []net.IP{net.ParseIP("1.1.1.1"), net.ParseIP("2.2.2.2")},
-		Proxies: map[string]string{
+		IngressPort: 8080,
+		Resolvers:   []net.IP{net.ParseIP("1.1.1.1"), net.ParseIP("2.2.2.2")},
+		Ingress: map[string]string{
 			"a": "A",
 			"b": "B",
 		},
+		TCP: map[int]string{
+			1: "foo:1",
+			3: "dev:3",
+		},
+		UDP: map[int]string{
+			2: "bar:2",
+		},
 		PreConf: []string{"line1", "line2"},
 	}
 	var buf strings.Builder