/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.jmeter.assertions; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import org.apache.jmeter.junit.JMeterTestCase; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.threads.JMeterContext; import org.apache.jmeter.threads.JMeterContextService; import org.apache.jmeter.threads.JMeterVariables; import org.junit.Before; import org.junit.Test; public class XMLSchemaAssertionTest extends JMeterTestCase { private XMLSchemaAssertion assertion; private SampleResult result; private JMeterContext jmctx; @Before public void setUp() throws Exception { jmctx = JMeterContextService.getContext(); assertion = new XMLSchemaAssertion(); assertion.setThreadContext(jmctx);// This would be done by the run // command result = new SampleResult(); JMeterVariables vars = new JMeterVariables(); jmctx.setVariables(vars); jmctx.setPreviousResult(result); } private ByteArrayOutputStream readBA(String name) throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(findTestFile(name))); ByteArrayOutputStream baos = new ByteArrayOutputStream(1000); int len = 0; byte[] data = new byte[512]; while ((len = bis.read(data)) >= 0) { baos.write(data, 0, len); } bis.close(); return baos; } private byte[] readFile(String name) throws IOException { return readBA(name).toByteArray(); } @Test public void testAssertionOK() throws Exception { result.setResponseData(readFile("testfiles/XMLSchematest.xml")); assertion.setXsdFileName(findTestPath("testfiles/XMLSchema-pass.xsd")); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("isError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertFalse("Should not be an error", res.isError()); assertFalse("Should not be a failure", res.isFailure()); } @Test public void testAssertionFail() throws Exception { result.setResponseData(readFile("testfiles/XMLSchematest.xml")); assertion.setXsdFileName("testfiles/XMLSchema-fail.xsd"); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("isError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertTrue(res.isError()); assertFalse(res.isFailure()); } @Test public void testAssertionBadXSDFile() throws Exception { result.setResponseData(readFile("testfiles/XMLSchematest.xml")); assertion.setXsdFileName("xtestfiles/XMLSchema-fail.xsd"); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("isError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertTrue(res.getFailureMessage().indexOf("Failed to read schema document") > 0); assertTrue(res.isError());// TODO - should this be a failure? assertFalse(res.isFailure()); } @Test public void testAssertionNoFile() throws Exception { result.setResponseData(readFile("testfiles/XMLSchematest.xml")); assertion.setXsdFileName(""); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("isError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertEquals(XMLSchemaAssertion.FILE_NAME_IS_REQUIRED, res.getFailureMessage()); assertFalse(res.isError()); assertTrue(res.isFailure()); } @Test public void testAssertionNoResult() throws Exception { // result.setResponseData - not set assertion.setXsdFileName("testfiles/XMLSchema-fail.xsd"); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("isError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertEquals(AssertionResult.RESPONSE_WAS_NULL, res.getFailureMessage()); assertFalse(res.isError()); assertTrue(res.isFailure()); } @Test public void testAssertionEmptyResult() throws Exception { result.setResponseData("", null); assertion.setXsdFileName("testfiles/XMLSchema-fail.xsd"); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("isError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertEquals(AssertionResult.RESPONSE_WAS_NULL, res.getFailureMessage()); assertFalse(res.isError()); assertTrue(res.isFailure()); } @Test public void testAssertionBlankResult() throws Exception { result.setResponseData(" ", null); assertion.setXsdFileName("testfiles/XMLSchema-fail.xsd"); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("isError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertTrue(res.getFailureMessage().indexOf("Premature end of file") > 0); assertTrue(res.isError()); assertFalse(res.isFailure()); } @Test public void testXMLTrailingContent() throws Exception { ByteArrayOutputStream baos = readBA("testfiles/XMLSchematest.xml"); baos.write("extra".getBytes()); // TODO - charset? result.setResponseData(baos.toByteArray()); assertion.setXsdFileName(findTestPath("testfiles/XMLSchema-pass.xsd")); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("isError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertTrue(res.getFailureMessage().indexOf("Content is not allowed in trailing section") > 0); assertTrue(res.isError()); assertFalse(res.isFailure()); } @Test public void testXMLTrailingWhitespace() throws Exception { ByteArrayOutputStream baos = readBA("testfiles/XMLSchematest.xml"); baos.write(" \t\n".getBytes()); // TODO - charset? result.setResponseData(baos.toByteArray()); assertion.setXsdFileName(findTestPath("testfiles/XMLSchema-pass.xsd")); AssertionResult res = assertion.getResult(jmctx.getPreviousResult()); testLog.debug("xisError() " + res.isError() + " isFailure() " + res.isFailure()); testLog.debug("failure " + res.getFailureMessage()); assertFalse(res.isError()); assertFalse(res.isFailure()); } }