diff --git a/src/main/java/com/purbon/kafka/topology/serdes/TopicCustomDeserializer.java b/src/main/java/com/purbon/kafka/topology/serdes/TopicCustomDeserializer.java index 3ff216ee0..34a1a20e9 100644 --- a/src/main/java/com/purbon/kafka/topology/serdes/TopicCustomDeserializer.java +++ b/src/main/java/com/purbon/kafka/topology/serdes/TopicCustomDeserializer.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.node.ArrayNode; import com.purbon.kafka.topology.Configuration; +import com.purbon.kafka.topology.exceptions.TopologyParsingException; import com.purbon.kafka.topology.exceptions.ValidationException; import com.purbon.kafka.topology.model.PlanMap; import com.purbon.kafka.topology.model.SubjectNameStrategy; @@ -85,10 +86,10 @@ public Topic deserialize(JsonParser parser, DeserializationContext context) thro Map planConfigObject = plans.get(planLabel).getConfig(); planConfigObject.forEach(config::putIfAbsent); } else { - LOGGER.warn(planLabel + " is missing in the plans definition. It will be ignored."); + throw new TopologyParsingException( + "Topic \"" + name + "\" references non-existing plan \"" + planLabel + "\""); } }); - Topic topic = new Topic(name, producers, consumers, optionalDataType, config, this.config); Optional subjectNameStrategy = diff --git a/src/test/java/com/purbon/kafka/topology/TopologyObjectBuilderTest.java b/src/test/java/com/purbon/kafka/topology/TopologyObjectBuilderTest.java index f6b48662d..01ee8fa3a 100644 --- a/src/test/java/com/purbon/kafka/topology/TopologyObjectBuilderTest.java +++ b/src/test/java/com/purbon/kafka/topology/TopologyObjectBuilderTest.java @@ -146,6 +146,13 @@ public void testTopologyWithPlansButWithNoPlansDef() throws IOException { TopologyObjectBuilder.build(descriptorFile); } + @Test(expected = TopologyParsingException.class) + public void testTopologyWithInvalidPlan() throws IOException { + String descriptorFile = TestUtils.getResourceFilename("/descriptor-with-invalid-plan.yaml"); + String plansFile = TestUtils.getResourceFilename("/plans.yaml"); + TopologyObjectBuilder.build(descriptorFile, plansFile); + } + @Test(expected = TopologyParsingException.class) public void testInvalidTopology() throws IOException { String descriptorFile = diff --git a/src/test/resources/descriptor-with-invalid-plan.yaml b/src/test/resources/descriptor-with-invalid-plan.yaml new file mode 100644 index 000000000..a2b90839a --- /dev/null +++ b/src/test/resources/descriptor-with-invalid-plan.yaml @@ -0,0 +1,10 @@ +--- +context: "contextOrg" +source: "source" +projects: + - name: "foo" + topics: + - name: "fooBar" + plan: "gold" + - name: "barFoo" + plan: "invalid-plan-name"