2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2020 Nordix Foundation
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.apex.plugins.event.protocol.yaml;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertTrue;
28 import java.io.IOException;
29 import java.util.List;
30 import org.junit.AfterClass;
31 import org.junit.BeforeClass;
32 import org.junit.Test;
33 import org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters;
34 import org.onap.policy.apex.context.parameters.SchemaParameters;
35 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
36 import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
37 import org.onap.policy.apex.model.basicmodel.service.ModelService;
38 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
39 import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
40 import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
41 import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;
42 import org.onap.policy.apex.model.eventmodel.concepts.AxField;
43 import org.onap.policy.apex.service.engine.event.ApexEvent;
44 import org.onap.policy.apex.service.engine.event.ApexEventException;
45 import org.onap.policy.common.parameters.ParameterService;
48 * The Class TestYamlPluginStability.
50 public class YamlPluginStabilityTest {
51 static AxEvent testEvent;
54 * Register test events and schemas.
56 * @throws IOException Signals that an I/O exception has occurred.
59 public static void registerTestEventsAndSchemas() throws IOException {
60 SchemaParameters schemaParameters = new SchemaParameters();
61 schemaParameters.getSchemaHelperParameterMap().put("JAVA", new JavaSchemaHelperParameters());
62 ParameterService.register(schemaParameters);
64 AxContextSchemas schemas = new AxContextSchemas();
66 AxContextSchema simpleIntSchema = new AxContextSchema(new AxArtifactKey("SimpleIntSchema", "0.0.1"), "JAVA",
68 schemas.getSchemasMap().put(simpleIntSchema.getKey(), simpleIntSchema);
70 AxContextSchema simpleDoubleSchema = new AxContextSchema(new AxArtifactKey("SimpleDoubleSchema", "0.0.1"),
71 "JAVA", "java.lang.Double");
72 schemas.getSchemasMap().put(simpleDoubleSchema.getKey(), simpleDoubleSchema);
74 AxContextSchema simpleStringSchema = new AxContextSchema(new AxArtifactKey("SimpleStringSchema", "0.0.1"),
75 "JAVA", "java.lang.String");
76 schemas.getSchemasMap().put(simpleStringSchema.getKey(), simpleStringSchema);
78 ModelService.registerModel(AxContextSchemas.class, schemas);
80 testEvent = new AxEvent(new AxArtifactKey("TestEvent", "0.0.1"));
81 testEvent.setNameSpace("org.onap.policy.apex.plugins.event.protocol.yaml");
82 AxField teField0 = new AxField(new AxReferenceKey(testEvent.getKey(), "intValue"), simpleIntSchema.getKey());
83 testEvent.getParameterMap().put("intValue", teField0);
84 AxField teField1 = new AxField(new AxReferenceKey(testEvent.getKey(), "doubleValue"),
85 simpleDoubleSchema.getKey());
86 testEvent.getParameterMap().put("doubleValue", teField1);
87 AxField teField2 = new AxField(new AxReferenceKey(testEvent.getKey(), "stringValue"),
88 simpleStringSchema.getKey(), true);
89 testEvent.getParameterMap().put("stringValue", teField2);
91 AxEvents events = new AxEvents();
92 events.getEventMap().put(testEvent.getKey(), testEvent);
94 ModelService.registerModel(AxEvents.class, events);
98 * Unregister test events and schemas.
101 public static void unregisterTestEventsAndSchemas() {
102 ModelService.clear();
103 ParameterService.clear();
109 * @throws ApexEventException the apex event exception
112 public void testStability() throws ApexEventException {
113 Apex2YamlEventConverter converter = new Apex2YamlEventConverter();
115 assertThatThrownBy(() -> converter.init(null))
116 .hasMessage("specified consumer properties are not applicable to the YAML event protocol");
117 YamlEventProtocolParameters pars = new YamlEventProtocolParameters();
118 converter.init(pars);
120 assertThatThrownBy(() -> converter.toApexEvent("NonExistantEvent", ""))
121 .hasMessageContaining("Failed to unmarshal YAML event: an event definition for an event named "
122 + "\"NonExistantEvent\"");
123 assertThatThrownBy(() -> converter.toApexEvent("TestEvent", null))
124 .hasMessage("event processing failed, event is null");
125 assertThatThrownBy(() -> converter.toApexEvent("TestEvent", 1))
126 .hasMessage("error converting event \"1\" to a string");
127 assertThatThrownBy(() -> converter.toApexEvent("TestEvent", ""))
128 .hasMessageContaining("Field \"doubleValue\" is missing");
129 assertThatThrownBy(() -> converter.fromApexEvent(null))
130 .hasMessage("event processing failed, Apex event is null");
131 ApexEvent apexEvent = new ApexEvent(testEvent.getKey().getName(), testEvent.getKey().getVersion(),
132 testEvent.getNameSpace(), testEvent.getSource(), testEvent.getTarget());
133 apexEvent.put("doubleValue", 123.45);
134 apexEvent.put("intValue", 123);
135 apexEvent.put("stringValue", "123.45");
137 apexEvent.setExceptionMessage("my wonderful exception message");
138 String yamlString = (String) converter.fromApexEvent(apexEvent);
139 assertTrue(yamlString.contains("my wonderful exception message"));
141 apexEvent.remove("intValue");
142 assertThatThrownBy(() -> converter.fromApexEvent(apexEvent))
143 .hasMessageContaining("error parsing TestEvent:0.0.1 event to Json. Field \"intValue\" is missing");
144 assertThatThrownBy(() -> converter.toApexEvent(null, ""))
145 .hasMessageContaining("Failed to unmarshal YAML event: event received without mandatory parameter"
147 pars.setNameAlias("TheNameField");
148 assertThatThrownBy(() -> converter.toApexEvent(null, ""))
149 .hasMessageContaining("Failed to unmarshal YAML event: event received without mandatory parameter"
151 apexEvent.put("intValue", 123);
153 apexEvent.remove("stringValue");
154 yamlString = (String) converter.fromApexEvent(apexEvent);
155 apexEvent.put("stringValue", "123.45");
157 String yamlInputString = "doubleValue: 123.45\n" + "intValue: 123";
159 List<ApexEvent> eventList = converter.toApexEvent("TestEvent", yamlInputString);
160 assertEquals(123.45, eventList.get(0).get("doubleValue"));
162 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n" + "stringValue: null";
164 eventList = converter.toApexEvent("TestEvent", yamlInputString);
165 assertEquals(null, eventList.get(0).get("stringValue"));
167 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n" + "stringValue: TestEvent";
168 pars.setNameAlias("stringValue");
169 eventList = converter.toApexEvent(null, yamlInputString);
170 assertEquals("TestEvent", eventList.get(0).get("stringValue"));
172 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n" + "stringValue: SomeOtherEvent";
173 eventList = converter.toApexEvent("TestEvent", yamlInputString);
174 assertEquals("SomeOtherEvent", eventList.get(0).get("stringValue"));
176 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n" + "stringValue: 0.0.1";
177 pars.setNameAlias(null);
178 pars.setVersionAlias("stringValue");
179 eventList = converter.toApexEvent("TestEvent", yamlInputString);
180 assertEquals("0.0.1", eventList.get(0).get("stringValue"));
182 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n" + "stringValue: org.some.other.namespace";
183 pars.setVersionAlias(null);
184 pars.setNameSpaceAlias("stringValue");
185 final String yamlInputStringCopy = yamlInputString;
186 assertThatThrownBy(() -> converter.toApexEvent("TestEvent", yamlInputStringCopy))
187 .hasMessageContaining("Failed to unmarshal YAML event: namespace \"org.some.other.namespace\" on event");
188 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n"
189 + "stringValue: org.onap.policy.apex.plugins.event.protocol.yaml";
190 eventList = converter.toApexEvent("TestEvent", yamlInputString);
191 assertEquals("org.onap.policy.apex.plugins.event.protocol.yaml", eventList.get(0).getNameSpace());
193 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n" + "stringValue: MySource";
194 pars.setNameSpaceAlias(null);
195 pars.setSourceAlias("stringValue");
196 eventList = converter.toApexEvent("TestEvent", yamlInputString);
197 assertEquals("MySource", eventList.get(0).getSource());
199 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n" + "stringValue: MyTarget";
200 pars.setSourceAlias(null);
201 pars.setTargetAlias("stringValue");
202 eventList = converter.toApexEvent("TestEvent", yamlInputString);
203 assertEquals("MyTarget", eventList.get(0).getTarget());
204 pars.setTargetAlias(null);
206 yamlInputString = "doubleValue: 123.45\n" + "intValue: 123\n" + "stringValue: MyString";
207 pars.setSourceAlias(null);
208 pars.setTargetAlias("intValue");
209 assertThatThrownBy(() -> converter.toApexEvent("TestEvent", yamlInputStringCopy))
210 .hasMessageContaining("Failed to unmarshal YAML event: field \"target\" with type \"java.lang.Integer\"");
211 pars.setTargetAlias(null);
213 assertThatThrownBy(() -> converter.toApexEvent("TestEvent", "doubleValue: 123.45\n" + "intValue: ~\n"
214 + "stringValue: MyString"))
215 .hasMessageContaining("mandatory field \"intValue\" is missing");