package test.com.xceptance.xlt.common.util.action.data; import java.net.MalformedURLException; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import com.gargoylesoftware.htmlunit.util.NameValuePair; import com.xceptance.xlt.api.data.GeneralDataProvider; import com.xceptance.xlt.api.util.XltProperties; import com.xceptance.xlt.common.util.action.data.URLActionData; import com.xceptance.xlt.common.util.action.data.URLActionDataBuilder; import com.xceptance.xlt.common.util.action.data.URLActionDataStore; import com.xceptance.xlt.common.util.action.data.URLActionDataStoreBuilder; import com.xceptance.xlt.common.util.action.data.URLActionDataValidation; import com.xceptance.xlt.common.util.action.data.URLActionDataValidationBuilder; import com.xceptance.xlt.common.util.action.data.YAMLBasedURLActionDataListBuilder; import com.xceptance.xlt.common.util.bsh.ParameterInterpreter; public class YAMLBasedURLActionDataListBuilderTest { ParameterInterpreter interpreter; private XltProperties properties; private GeneralDataProvider dataProvider; private final String path = "./config/data/test/"; private final String fileTmp = path + "tmp.yml"; private final String fileXhrSubrequests = path + "xhrSubrequests.yml"; private final String fileTestData = path + "testData.yml"; private final String fileEmptyFile = path + "emptyFile.yml"; private final String fileNotExistingFile = path + "notExistingFile.yml"; private final String fileSingleActionNoDefaultsData = path + "SAND.yml"; private final String fileStaticSubrequests = path + "staticSubrequests.yml"; private final String fileComplexTestCase = path + "complexTestCase.yml"; private final String fileSyntaxErrorRoot = path + "syntaxErrorRoot.yml"; private final String fileSyntaxErrorAction = path + "syntaxErrorAction.yml"; private final String fileSyntaxErrorRequest = path + "syntaxErrorRequest.yml"; private final String fileSyntaxErrorResponse = path + "syntaxErrorResponse.yml"; private final String fileSyntaxErrorSubrequests = path + "syntaxErrorSubrequests.yml"; private final String fileSyntaxErrorXhr = path + "syntaxErrorXhr.yml"; private final String fileSyntaxErrorStatic = path + "syntaxErrorStatic.yml"; private final String fileSyntaxErrorActionNameNull = path + "syntaxErrorActionNameNull.yml"; private final String fileSyntaxErrorUrlNull = path + "syntaxErrorUrlNull.yml"; private final URLActionDataBuilder actionBuilder = new URLActionDataBuilder(); private final URLActionDataStoreBuilder storeBuilder = new URLActionDataStoreBuilder(); private final URLActionDataValidationBuilder validationBuilder = new URLActionDataValidationBuilder(); @Before public void setup() { properties = XltProperties.getInstance(); dataProvider = GeneralDataProvider.getInstance(); interpreter = new ParameterInterpreter(properties, dataProvider); } @Rule public ExpectedException expectedEx = ExpectedException.none(); @Test public void testCorrectConstructor() { @SuppressWarnings("unused") final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileTestData, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); } @Test(expected = IllegalArgumentException.class) public void testOutputForUnExistingFile() { final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileNotExistingFile, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); final List<URLActionData> actions = listBuilder.buildURLActionDataList(); Assert.assertTrue(actions.isEmpty()); } @Test public void testOutputForEmptyFile() { final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileEmptyFile, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); final List<URLActionData> actions = listBuilder.buildURLActionDataList(); Assert.assertTrue(actions.isEmpty()); } @Test public void testOutputForDefaultValues() { final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileTestData, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testBuildSingleActionWithoutDefaults() throws MalformedURLException { final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSingleActionNoDefaultsData, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); final List<URLActionData> actions = listBuilder.buildURLActionDataList(); Assert.assertFalse(actions.isEmpty()); final URLActionData action = actions.get(0); Assert.assertEquals("name", action.getName()); Assert.assertEquals("http://www.xceptance.com", action.getUrl().toString()); Assert.assertEquals(URLActionData.TYPE_XHR, action.getType()); Assert.assertTrue(action.isXHRAction()); Assert.assertEquals(URLActionData.METHOD_GET, action.getMethod().toString()); Assert.assertFalse(action.encodeParameters()); Assert.assertEquals("body", action.getBody()); Assert.assertEquals(400, action.getResponseCodeValidator().getHttpResponseCode()); final List<NameValuePair> headers = action.getHeaders(); Assert.assertFalse(headers.isEmpty()); for (int i = 0; i < headers.size(); i++) { final NameValuePair nvp = headers.get(i); Assert.assertEquals("header_" + (i + 1), nvp.getName()); Assert.assertEquals("header_value_" + (i + 1), nvp.getValue()); } final List<NameValuePair> parameters = action.getParameters(); Assert.assertFalse(parameters.isEmpty()); for (int i = 0; i < parameters.size(); i++) { final NameValuePair nvp = parameters.get(i); Assert.assertEquals("parameter_" + (i + 1), nvp.getName()); Assert.assertEquals("parameter_value_" + (i + 1), nvp.getValue()); } final List<URLActionDataStore> store = action.getStore(); Assert.assertFalse(store.isEmpty()); final URLActionDataStore store1 = store.get(0); Assert.assertEquals("variable_1", store1.getName()); Assert.assertEquals("XPath", store1.getSelectionMode()); Assert.assertEquals("xpath_1", store1.getSelectionContent()); final URLActionDataStore store2 = store.get(1); Assert.assertEquals("variable_2", store2.getName()); Assert.assertEquals("Regex", store2.getSelectionMode()); Assert.assertEquals("xpath_2", store2.getSelectionContent()); final List<URLActionDataValidation> validations = action.getValidations(); Assert.assertFalse(validations.isEmpty()); final URLActionDataValidation validation1 = validations.get(0); Assert.assertEquals("validation_name_1", validation1.getName()); Assert.assertEquals(URLActionDataValidation.XPATH, validation1.getSelectionMode()); Assert.assertEquals("xpath_value_1", validation1.getSelectionContent()); Assert.assertEquals(URLActionDataValidation.EXISTS, validation1.getValidationMode()); Assert.assertNull(validation1.getValidationContent()); final URLActionDataValidation validation2 = validations.get(1); Assert.assertEquals("validation_name_2", validation2.getName()); Assert.assertEquals(URLActionDataValidation.REGEXP, validation2.getSelectionMode()); Assert.assertEquals("regexp_value_2", validation2.getSelectionContent()); Assert.assertEquals(URLActionDataValidation.MATCHES, validation2.getValidationMode()); Assert.assertEquals("matches_value_2", validation2.getValidationContent()); } @Test public void testStaticSubrequestCreation() throws MalformedURLException { final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileStaticSubrequests, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); final List<URLActionData> actions = listBuilder.buildURLActionDataList(); Assert.assertFalse(actions.isEmpty()); final URLActionData static_action_1 = actions.get(1); Assert.assertEquals("https://www.xceptance.com/images/xceptance-logo-transparent-202px.png", static_action_1.getUrl().toString()); Assert.assertEquals(URLActionData.TYPE_STATIC, static_action_1.getType()); Assert.assertTrue(static_action_1.isStaticContent()); Assert.assertEquals(URLActionData.METHOD_GET, static_action_1.getMethod().toString()); final URLActionData static_action_2 = actions.get(2); Assert.assertEquals("https://www.xceptance.com/images/xlt-logo-small.png", static_action_2.getUrl().toString()); Assert.assertEquals(URLActionData.TYPE_STATIC, static_action_2.getType()); Assert.assertTrue(static_action_2.isStaticContent()); Assert.assertEquals(URLActionData.METHOD_GET, static_action_2.getMethod().toString()); } @Test public void testXhrSubrequestCreation() throws MalformedURLException { final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileXhrSubrequests, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); final List<URLActionData> actions = listBuilder.buildURLActionDataList(); Assert.assertFalse(actions.isEmpty()); } @Test public void testXomplexTestCase() throws MalformedURLException { final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileComplexTestCase, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); final List<URLActionData> actions = listBuilder.buildURLActionDataList(); Assert.assertFalse(actions.isEmpty()); } @Test public void testTmp() throws MalformedURLException { final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileTmp, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorRoot() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("Invalid list item"); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorRoot, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorAction() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("is not a valid child of \"Action\""); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorAction, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorActionNameNull() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("Name of \"Action\" cannot be Null"); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorActionNameNull, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorRequest() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("is not a valid child of \"Request\""); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorRequest, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorUrlNull() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("'Url' cannot be null"); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorUrlNull, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorResponse() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("is not a valid child of \"Response\""); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorResponse, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorSubrequests() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("is not a valid child of \"Subrequests\""); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorSubrequests, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorXhr() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("is not a valid child of \"Xhr\""); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorXhr, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } @Test public void testSyntaxErrorStatic() throws MalformedURLException { expectedEx.expect(IllegalArgumentException.class); expectedEx.expectMessage("its value is not an array list"); final YAMLBasedURLActionDataListBuilder listBuilder = new YAMLBasedURLActionDataListBuilder(this.fileSyntaxErrorStatic, this.interpreter, this.actionBuilder, this.validationBuilder, this.storeBuilder); @SuppressWarnings("unused") final List<URLActionData> actions = listBuilder.buildURLActionDataList(); } }