@Override protected void onSource(HasSourceModels owner, SourceModel sourceModel) { List<ParameterModel> overrides = getOverrideParameters(sourceModel); if (!overrides.isEmpty()) { if (owner instanceof ConfigurationModel) { List<String> invalidOverrides = getInvalidOverrides((ConfigurationModel) owner, overrides); if (!invalidOverrides.isEmpty()) { reportNoMatchingParameterForOverride(((ConfigurationModel) owner).getName(), sourceModel, invalidOverrides, problemsReporter); } } else if (!model.getConfigurationModels().isEmpty()) { reportNoConfigurationForOverride(sourceModel, problemsReporter); } } }
@Override public void onOperation(HasOperationModels owner, OperationModel operationModel) { validateInjectedConfigType(owner, operationModel, problemsReporter); List<ParameterModel> overrides = getOverrideParameters(operationModel); if (!overrides.isEmpty()) { if (owner instanceof ConfigurationModel) { List<String> invalidOverrides = getInvalidOverrides((ConfigurationModel) owner, overrides); if (!invalidOverrides.isEmpty()) { reportNoMatchingParameterForOverride(((ConfigurationModel) owner).getName(), operationModel, invalidOverrides, problemsReporter); } } else if (!model.getConfigurationModels().isEmpty()) { reportNoConfigurationForOverride(operationModel, problemsReporter); } } }
private Optional<String> defaultGlobalElementName() { Optional<String> defaultElementName = empty(); if (extensionModel.getConfigurationModels().isEmpty() && extensionModel.getModelProperty(GlobalElementComponentModelModelProperty.class).isPresent()) { defaultElementName = extensionModel.getModelProperty(GlobalElementComponentModelModelProperty.class) .map(globalElementComponentModelModelProperty -> format( DEFAULT_CONFIG_GLOBAL_ELEMENT_SUFFIX, extensionModel.getName())); } return defaultElementName; }
private void assertTestConnectionModuleOn(String modulePath) { ExtensionModel extensionModel = getExtensionModelFrom(modulePath); assertThat(extensionModel.getName(), is("module-test-connection")); assertThat(extensionModel.getConfigurationModels().size(), is(1)); ConfigurationModel configurationModel = extensionModel.getConfigurationModels().get(0); assertThat(configurationModel.getName(), is(CONFIG_NAME)); assertThat(configurationModel.getAllParameterModels().size(), is(4)); Optional<ConnectionProviderModel> connectionProviderModel = configurationModel.getConnectionProviderModel(MODULE_CONNECTION_GLOBAL_ELEMENT_NAME); assertThat(connectionProviderModel.isPresent(), is(true)); assertThat(connectionProviderModel.get().supportsConnectivityTesting(), is(true)); }
@Test public void testModuleCallingOperationsWithinModule() { String modulePath = "modules/module-calling-operations-within-module.xml"; ExtensionModel extensionModel = getExtensionModelFrom(modulePath); assertThat(extensionModel.getName(), is("module-calling-operations-within-module")); assertThat(extensionModel.getConfigurationModels().size(), is(0)); assertThat(extensionModel.getModelProperty(GlobalElementComponentModelModelProperty.class).isPresent(), is(false)); assertThat(extensionModel.getOperationModels().size(), is(11)); }
@Test public void testModuleResources() { String modulePath = "modules/module-resources.xml"; ExtensionModel extensionModel = getExtensionModelFrom(modulePath); assertThat(extensionModel.getName(), is("module-resources")); assertThat(extensionModel.getConfigurationModels().size(), is(0)); assertThat(extensionModel.getModelProperty(GlobalElementComponentModelModelProperty.class).isPresent(), is(false)); assertThat(extensionModel.getOperationModels().size(), is(0)); }
@Test public void configurationNameClashesWithAnotherConfigurationName() { exception.expect(IllegalModelDefinitionException.class); ConfigurationModel anotherConfigurationModel = mock(ConfigurationModel.class); when(anotherConfigurationModel.getName()).thenReturn(CONFIG_NAME); when(extensionModel.getConfigurationModels()).thenReturn(asList(configurationModel, anotherConfigurationModel)); validate(); }
@Test public void sourceWithDefaultBackPressureStrategies() { SourceModel source = heisenbergExtension.getConfigurationModels().get(0).getSourceModel("ReconnectableListenPayments").get(); Optional<ParameterModel> parameter = source.getAllParameterModels().stream() .filter(p -> BACK_PRESSURE_STRATEGY_PARAMETER_NAME.equals(p.getName())) .findAny(); assertThat(parameter.isPresent(), is(false)); }
@Test public void streamingHintOnSource() throws Exception { SourceModel sourceModel = heisenbergExtension.getConfigurationModels().get(0).getSourceModel("ListenPayments").get(); ParameterModel streamingParameter = sourceModel.getAllParameterModels().stream() .filter(p -> p.getName().equals(STREAMING_STRATEGY_PARAMETER_NAME)) .findFirst() .get(); assertStreamingStrategy(streamingParameter); }
@Test public void configLevelOperationWithoutConnectionProvider() { when(operationModel.requiresConnection()).thenReturn(true); when(extensionModel.getOperationModels()).thenReturn(emptyList()); when(configurationModel.getOperationModels()).thenReturn(singletonList(operationModel)); when(configurationModel.getConnectionProviders()).thenReturn(emptyList()); when(extensionModel.getConfigurationModels()).thenReturn(singletonList(configurationModel)); expectedException.expect(IllegalModelDefinitionException.class); validate(); }
@Test(expected = IllegalModelDefinitionException.class) public void repeatedEncodingConfigField() { when(extensionModel.getConfigurationModels()).thenReturn(asList(configurationModel)); mockImplementingType(configurationModel, ConfigRepeatedEncoding.class); validate(extensionModel, validator); }
@Test(expected = IllegalModelDefinitionException.class) public void repeatedRefNameConfigField() { when(extensionModel.getConfigurationModels()).thenReturn(asList(configurationModel)); mockImplementingType(configurationModel, ConfigRepeatedRefName.class); validate(extensionModel, validator); }
@Test(expected = IllegalModelDefinitionException.class) public void encodingConfigFieldWrongType() { when(extensionModel.getConfigurationModels()).thenReturn(asList(configurationModel)); mockImplementingType(configurationModel, ConfigEncodingWrongType.class); validate(extensionModel, validator); }
@Test public void streamingHintOnOperation() throws Exception { OperationModel operationModel = heisenbergExtension.getConfigurationModels().get(0).getOperationModel("sayMyName").get(); ParameterModel streamingParameter = operationModel.getAllParameterModels().stream() .filter(p -> p.getName().equals(STREAMING_STRATEGY_PARAMETER_NAME)) .findFirst() .get(); assertStreamingStrategy(streamingParameter); }
@Test public void customStereotype() { OperationModel operation = heisenbergExtension.getConfigurationModels().get(0).getOperationModel("callSaul").get(); StereotypeModel stereotypeModel = operation.getStereotype(); assertThat(stereotypeModel.isAssignableTo(PROCESSOR), is(true)); assertThat(stereotypeModel.getType(), is(new EmpireStereotype().getName().toUpperCase())); assertThat(stereotypeModel.getNamespace(), is(HEISENBERG.toUpperCase())); assertThat(stereotypeModel.getParent().get(), is(PROCESSOR)); assertThat(operation.getModelProperty(CustomStereotypeModelProperty.class).isPresent(), is(true)); }
private void assertModule(Optional<String> declarationPath, DeclarationOperation declaresOutput, DeclarationOperation declaresAttributes, DeclarationOperation declaresOutputAndAttributes, DeclarationOperation declaresNothing) { final ExtensionModel extensionModel = getExtensionModelFrom(declarationPath); assertThat(extensionModel.getName(), is("module-declarer-datasense")); assertThat(extensionModel.getConfigurationModels().size(), is(0)); assertThat(extensionModel.getModelProperty(GlobalElementComponentModelModelProperty.class).isPresent(), is(false)); assertThat(extensionModel.getOperationModels().size(), is(4)); assertOperation("op-declares-output", extensionModel, declaresOutput, format(DOC_OUTPUT_FORMAT, "op-declares-output"), ""); assertOperation("op-declares-attributes", extensionModel, declaresAttributes, "", format(DOC_OUTPUT_ATTRIBUTE_FORMAT, "op-declares-attributes")); assertOperation("op-declares-output-and-attributes", extensionModel, declaresOutputAndAttributes, format(DOC_OUTPUT_FORMAT, "op-declares-output-and-attributes"), format(DOC_OUTPUT_ATTRIBUTE_FORMAT, "op-declares-output-and-attributes")); assertOperation("op-declares-nothing", extensionModel, declaresNothing, "", ""); }
@Test public void differentNamesClashWhenHyphenized() { exception.expect(IllegalModelDefinitionException.class); exception.expectMessage("contains 2 components 'config-name"); ConfigurationModel configuration = mock(ConfigurationModel.class); mockModelProperties(configuration); when(configuration.getName()).thenReturn("config-name"); when(configurationModel.getName()).thenReturn("ConfigName"); when(configuration.getAllParameterModels()).thenReturn(asList(simpleConfigParam, topLevelConfigParam)); when(configuration.getOperationModels()).thenReturn(ImmutableList.of()); when(configuration.getConnectionProviders()).thenReturn(ImmutableList.of()); when(extensionModel.getConfigurationModels()).thenReturn(asList(configurationModel, configuration)); validate(); }
@Test public void invalidTestConnectionElement() { ExtensionModel loaded = getExtensionModelFrom("validation/testconnection/module-invalid-test-connection.xml", new HashSet<>(Arrays.asList(getHttpExtension(false)))); ProblemsReporter problemsReporter = new ProblemsReporter(loaded); new TestConnectionValidator().validate(loaded, problemsReporter); assertThat(problemsReporter.getWarnings().size(), is(1)); assertThat(problemsReporter.getWarnings().get(0).getMessage(), is(format(TEST_CONNECTION_SELECTED_ELEMENT_INVALID, "http-requester-config", MODULE_CONNECTION_MARKER_ATTRIBUTE, "http:request-config"))); assertThat(problemsReporter.getWarnings().get(0).getComponent(), is(loaded.getConfigurationModels().get(0))); }
@Test public void sourceWithReducedBackPressureStrategies() { SourceModel source = heisenbergExtension.getConfigurationModels().get(0).getSourceModel("ListenPayments").get(); ParameterModel parameter = source.getAllParameterModels().stream() .filter(p -> BACK_PRESSURE_STRATEGY_PARAMETER_NAME.equals(p.getName())) .findAny().orElseThrow(() -> new IllegalStateException("No backPressureStrategy parameter")); assertThat(parameter.getType(), is(instanceOf(StringType.class))); assertThat(parameter.getDefaultValue(), is(FAIL)); EnumAnnotation enumAnnotation = parameter.getType().getAnnotation(EnumAnnotation.class) .orElseThrow(() -> new IllegalStateException("No enum annotation")); assertThat(asList(enumAnnotation.getValues()), containsInAnyOrder(FAIL.name(), DROP.name())); }
@Test public void assertDeclaration() { assertThat(extensionModel.getName(), is(EXTENSION_NAME)); assertThat(extensionModel.getDescription(), is(EXTENSION_DESCRIPTION)); assertThat(extensionModel.getVersion(), is(VERSION)); assertThat(extensionModel.getConfigurationModels(), hasSize(2)); assertThat(extensionModel.getVendor(), is(VENDOR)); assertThat(extensionModel.getOperationModels(), hasSize(1)); assertThat(extensionModel.getConnectionProviders(), is(empty())); assertThat(extensionModel.getSourceModels(), is(empty())); }