DodoApp: Support remote clusters

Change-Id: I6f4e6a0a32cc723b47c96518d83b1ffdb5169f14
diff --git a/core/installer/schema_test.go b/core/installer/schema_test.go
index 61739fb..04375bf 100644
--- a/core/installer/schema_test.go
+++ b/core/installer/schema_test.go
@@ -2,6 +2,8 @@
 
 import (
 	"testing"
+
+	"cuelang.org/go/cue"
 )
 
 func TestFindPortFields(t *testing.T) {
@@ -34,3 +36,56 @@
 		t.Fatalf("expected 'z' and 'w.z' port fields, %v", p)
 	}
 }
+
+const isNotNetwork = `
+input: {
+	repoAddr: string
+	repoPublicAddr: string
+	managerAddr: string
+	appId: string
+	branch: string
+	sshPrivateKey: string
+	username?: string
+	cluster: #Cluster
+	username?: string | *"test"
+	vpnAuthKey: string  @role(VPNAuthKey) @usernameField(username)
+}
+
+#Cluster: {
+	name: string
+	kubeconfig: string
+	ingressClassName: string
+}
+`
+
+func TestIsNotNetwork(t *testing.T) {
+	v, err := ParseCueAppConfig(CueAppData{"/test.cue": []byte(isNotNetwork)})
+	if err != nil {
+		t.Fatal(err)
+	}
+	if isNetwork(v.LookupPath(cue.ParsePath("input"))) {
+		t.Fatal("not really network")
+	}
+}
+
+const inputIsNetwork = `
+input: {
+	name: string
+	ingressClass: string
+	certificateIssuer: string | *""
+	domain: string
+	allocatePortAddr: string
+	reservePortAddr: string
+	deallocatePortAddr: string
+}
+`
+
+func TestIsNetwork(t *testing.T) {
+	v, err := ParseCueAppConfig(CueAppData{"/test.cue": []byte(inputIsNetwork)})
+	if err != nil {
+		t.Fatal(err)
+	}
+	if !isNetwork(v.LookupPath(cue.ParsePath("input"))) {
+		t.Fatal("is network")
+	}
+}