Check for duplicate resource_type names

This commit is contained in:
Kris De Volder
2017-01-25 15:07:17 -08:00
parent 3a5cd4ae00
commit 1306dbac98
3 changed files with 22 additions and 3 deletions

View File

@@ -46,6 +46,10 @@ public class ConcourseValueParsers {
return acceptOnlyUniqueNames(models::getJobNames, "job name");
}
public static SchemaContextAware<ValueParser> resourceTypeNameDef(ConcourseModel models) {
return acceptOnlyUniqueNames(models::getResourceTypeNames, "resource-type name");
}
public static SchemaContextAware<ValueParser> acceptOnlyUniqueNames(
Function<IDocument, Multiset<String>> getDefinedNameCounts,
String typeName
@@ -70,6 +74,4 @@ public class ConcourseValueParsers {
+ " '2h45m'. Valid time units are 'ns', 'us' (or 'µs'), 'ms', 's', "
+ "'m', 'h'."
);
}

View File

@@ -143,6 +143,8 @@ public class PipelineYmlSchema implements YamlSchema {
resourceNameDef.parseWith(ConcourseValueParsers.resourceNameDef(models));
YAtomicType jobNameDef = f.yatomic("Job Name");
jobNameDef.parseWith(ConcourseValueParsers.jobNameDef(models));
YAtomicType resourceTypeNameDef = f.yatomic("ResourceType Name");
resourceTypeNameDef.parseWith(ConcourseValueParsers.resourceTypeNameDef(models));
YBeanType getStep = f.ybean("GetStep");
addProp(getStep, "get", t_resource_name);
@@ -221,7 +223,7 @@ public class PipelineYmlSchema implements YamlSchema {
addProp(job, "disable_manual_trigger", t_boolean);
YBeanType resourceType = f.ybean("ResourceType");
addProp(resourceType, "name", t_ne_string).isRequired(true);
addProp(resourceType, "name", resourceTypeNameDef).isRequired(true);
addProp(resourceType, "type", t_image_type).isRequired(true);
addProp(resourceType, "source", resourceSource);

View File

@@ -520,6 +520,21 @@ public class PipelineYamlEditorTest {
);
}
@Test
public void reconcileDuplicateResourceTypeNames() throws Exception {
Editor editor = harness.newEditor(
"resource_types:\n" +
"- name: slack-notification\n" +
" type: docker_image\n" +
"- name: slack-notification\n" +
" type: docker_image"
);
editor.assertProblems(
"slack-notification|Duplicate resource-type name",
"slack-notification|Duplicate resource-type name"
);
}
@Test
public void reconcileDuplicateJobNames() throws Exception {
Editor editor = harness.newEditor(