Flesh out basic schema for CloudConfig.compilation sub props

This commit is contained in:
Kris De Volder
2017-08-08 12:15:08 -07:00
parent 157b121ffa
commit caa8d180a3
8 changed files with 84 additions and 11 deletions

View File

@@ -11,20 +11,43 @@
package org.springframework.ide.vscode.bosh;
import org.springframework.ide.vscode.bosh.models.BoshModels;
import org.springframework.ide.vscode.commons.util.ValueParsers;
import org.springframework.ide.vscode.commons.yaml.schema.YType;
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory;
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.AbstractType;
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YAtomicType;
import org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YBeanType;
import org.springframework.ide.vscode.commons.yaml.schema.YTypeUtil;
import org.springframework.ide.vscode.commons.yaml.schema.YamlSchema;
public class BoshCloudConfigSchema extends SchemaSupport implements YamlSchema {
private YBeanType toplevelType;
private YType t_any;
private final YBeanType toplevelType;
private final YType t_az_ref;
private final YType t_vm_type_ref;
private final YType t_network_ref;
public BoshCloudConfigSchema(YTypeFactory f, BoshModels models) {
super(f);
t_any = f.yany("Object");
AbstractType t_any = f.yany("Object");
AbstractType t_ne_string = f.yatomic("String")
.parseWith(ValueParsers.NE_STRING);
YAtomicType t_boolean = f.yenum("boolean", "true", "false");
t_az_ref = t_ne_string;
t_vm_type_ref = t_ne_string;
t_network_ref = t_ne_string;
AbstractType t_pos_integer = f.yatomic("Positive Integer")
.parseWith(ValueParsers.POS_INTEGER);
YBeanType t_compilation = f.ybean("Compilation");
addProp(t_compilation, "workers", t_pos_integer).isRequired(true);
addProp(t_compilation, "reuse_compilation_vms", t_boolean);
addProp(t_compilation, "az", t_az_ref).isRequired(true);
addProp(t_compilation, "vm_type", t_vm_type_ref).isRequired(true);
addProp(t_compilation, "network", t_network_ref).isRequired(true);
this.toplevelType = f.ybean("CloudConfig");
addProp(toplevelType, "azs", t_any).isRequired(true);
@@ -32,7 +55,7 @@ public class BoshCloudConfigSchema extends SchemaSupport implements YamlSchema {
addProp(toplevelType, "vm_types", t_any).isRequired(true);
addProp(toplevelType, "vm_extensions", t_any);
addProp(toplevelType, "disk_types", t_any).isRequired(true);
addProp(toplevelType, "compilation", t_any).isRequired(true);
addProp(toplevelType, "compilation", t_compilation).isRequired(true);
}
@Override

View File

@@ -0,0 +1 @@
*Required*. Name of the AZ defined in AZs section to use for creating compilation VMs.

View File

@@ -0,0 +1 @@
*Required*. References a valid network name defined in the Networks block. BOSH assigns network properties to compilation VMs according to the type and properties of the specified network.

View File

@@ -0,0 +1 @@
*Optional*. If `false`, BOSH creates a new compilation VM for each new package compilation and destroys the VM when compilation is complete. If `true`, compilation VMs are re-used when compiling packages. Defaults to `false`.

View File

@@ -0,0 +1 @@
*Required*. Name of the VM type defined in VM types section to use for creating compilation VMs.

View File

@@ -0,0 +1 @@
*Required*. The maximum number of compilation VMs.

View File

@@ -1696,7 +1696,7 @@ public class BoshEditorTest {
"- name: blah\n" +
" <*>"
);
editor.assertContextualCompletions(LanguageId.BOSH_DEPLOYMENT, c -> c.getLabel().equals("jobs Snippet"),
editor.assertContextualCompletions(c -> c.getLabel().equals("jobs Snippet"),
"jo<*>"
, // ------
"jobs:\n" +
@@ -1727,7 +1727,7 @@ public class BoshEditorTest {
" - name: $1\n" +
" release: $2<*>"
);
editor.assertContextualCompletions(LanguageId.BOSH_DEPLOYMENT, c -> c.getLabel().equals("→ jobs Snippet"),
editor.assertContextualCompletions(c -> c.getLabel().equals("→ jobs Snippet"),
"jo<*>"
, // ------
" jobs:\n" +
@@ -1745,7 +1745,7 @@ public class BoshEditorTest {
" type: aaa\n" +
"<*>"
);
editor.assertContextualCompletions(LanguageId.BOSH_DEPLOYMENT, DEDENTED_COMPLETION.and(SNIPPET_COMPLETION),
editor.assertContextualCompletions(DEDENTED_COMPLETION.and(SNIPPET_COMPLETION),
" <*>"
, // ==>
"instance_groups:\n" +
@@ -1789,7 +1789,7 @@ public class BoshEditorTest {
" type: aaa\n" +
"<*>"
);
editor.assertContextualCompletions(LanguageId.BOSH_DEPLOYMENT, DEDENTED_COMPLETION.and(SNIPPET_COMPLETION.negate()),
editor.assertContextualCompletions(DEDENTED_COMPLETION.and(SNIPPET_COMPLETION.negate()),
" <*>"
, //==>
"instance_groups:\n" +
@@ -1818,7 +1818,7 @@ public class BoshEditorTest {
"- name: \n" +
"<*>"
);
editor.assertContextualCompletions(LanguageId.BOSH_DEPLOYMENT, c -> c.getLabel().equals("→ jobs"),
editor.assertContextualCompletions(c -> c.getLabel().equals("→ jobs"),
"jo<*>"
, // ==>
" jobs:\n" +
@@ -1910,4 +1910,48 @@ public class BoshEditorTest {
editor.assertHoverContains("compilation", "A compilation definition allows to specify VM characteristics.");
}
@Test public void cloudconfig_compilation_subproperties() throws Exception {
Editor editor = harness.newEditor(LanguageId.BOSH_CLOUD_CONFIG,
"compilation:\n" +
" <*>"
);
editor.assertContextualCompletions(PLAIN_COMPLETION.or(SNIPPET_COMPLETION),
"<*>"
, // ==>
"workers: $1\n" +
" az: $2\n" +
" vm_type: $3\n" +
" network: $4<*>"
,
"az: <*>"
,
"network: <*>"
,
"reuse_compilation_vms: <*>"
,
"vm_type: <*>"
,
"workers: <*>"
);
editor = harness.newEditor(LanguageId.BOSH_CLOUD_CONFIG,
"compilation:\n" +
" workers: not-int\n" +
" reuse_compilation_vms: not-bool\n" +
" az: z1\n" +
" vm_type: default\n" +
" network: private\n"
);
editor.ignoreProblem(YamlSchemaProblems.MISSING_PROPERTY);
editor.assertProblems(
"not-int|NumberFormatException",
"not-bool|unknown 'boolean'"
);
editor.assertHoverContains("workers", "The maximum number of compilation VMs");
editor.assertHoverContains("reuse_compilation_vms", "If `false`, BOSH creates a new compilation VM");
editor.assertHoverContains("az", "Name of the AZ defined in AZs section");
editor.assertHoverContains("vm_type", "Name of the VM type defined in VM types section");
editor.assertHoverContains("network", "References a valid network name defined in the Networks block");
}
}

View File

@@ -377,7 +377,8 @@ public class Editor {
}
}
public void assertContextualCompletions(LanguageId language, Predicate<CompletionItem> isInteresting, String textBefore, String... textAfter) throws Exception {
public void assertContextualCompletions(Predicate<CompletionItem> isInteresting, String textBefore, String... textAfter) throws Exception {
LanguageId language = this.getLanguageId();
Editor editor = harness.newEditor(language, this.getText());
editor.reconcile(); //this ensures the conText is parsed and its AST is cached (will be used for
//dynamic CA when the conText + textBefore is not parsable.
@@ -391,7 +392,7 @@ public class Editor {
}
public void assertContextualCompletions(String textBefore, String... textAfter) throws Exception {
assertContextualCompletions(getLanguageId(), (x) -> true, textBefore, textAfter);
assertContextualCompletions((x) -> true, textBefore, textAfter);
}
private String replaceSelection(String replacement) {