/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.tck.util;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mule.runtime.api.component.location.Location.builder;
import static org.mule.runtime.core.api.config.MuleProperties.OBJECT_CONNECTIVITY_TESTING_SERVICE;
import org.hamcrest.Matcher;
import org.mule.runtime.api.component.location.Location;
import org.mule.runtime.api.connection.ConnectionValidationResult;
import org.mule.runtime.api.message.ErrorType;
import org.mule.runtime.core.api.MuleContext;
import org.mule.runtime.core.api.connectivity.ConnectivityTestingService;
import org.mule.tck.junit4.rule.SystemProperty;
/**
* Utils to do connectivity testing over configurations on a Mule application
*
* @since 4.0
*/
public class TestConnectivityUtils {
private static final Matcher NULL_VALUE = nullValue();
private MuleContext muleContext;
public TestConnectivityUtils(MuleContext muleContext) {
this.muleContext = muleContext;
}
/**
* Executes a test connectivity and excepts that it finish correctly
* @param configName name of the Config to do a test connectivity
*/
public void assertSuccessConnection(String configName) {
assertConnection(configName, true, NULL_VALUE, NULL_VALUE);
}
/**
* Executes as test connectivity over a the connection bind with the given {@code configName} and asserts a failed
* connectivity test.
*
* @param configName name of the Config to do a test connectivity
* @param exceptionMatcher matcher to assert characteristics of the failed test connectivity
* @param errorTypeMatcher matcher to assert characteristics of the given {@link ErrorType}
*/
public void assertFailedConnection(String configName, Matcher<Exception> exceptionMatcher,
Matcher<ErrorType> errorTypeMatcher) {
assertConnection(configName, false, exceptionMatcher, errorTypeMatcher);
}
/**
* Injects a System property to disable automatic test connectivity when the Mule app starts
*/
public static SystemProperty disableAutomaticTestConnectivity() {
return new SystemProperty("doTestConnectivity", "false");
}
private void assertConnection(String configName, boolean isSuccess, Matcher<Exception> exceptionMatcher,
Matcher<ErrorType> codeMatcher) {
ConnectivityTestingService testingService = muleContext.getRegistry().get(OBJECT_CONNECTIVITY_TESTING_SERVICE);
ConnectionValidationResult validationResult = testingService.testConnection(builder().globalName(configName).build());
assertThat(validationResult.isValid(), is(isSuccess));
if (!isSuccess) {
assertThat(validationResult.getException(), exceptionMatcher);
assertThat(validationResult.getErrorType().orElse(null), codeMatcher);
}
}
}