/* See LICENSE for licensing and NOTICE for copyright. */ package org.ldaptive.servlets; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; import com.meterware.httpunit.PostMethodWebRequest; import com.meterware.httpunit.WebRequest; import com.meterware.httpunit.WebResponse; import com.meterware.servletunit.ServletRunner; import com.meterware.servletunit.ServletUnitClient; import org.ldaptive.AbstractTest; import org.ldaptive.LdapEntry; import org.ldaptive.LdapUtils; import org.ldaptive.TestUtils; import org.testng.AssertJUnit; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Parameters; import org.testng.annotations.Test; /** * Unit test for {@link AttributeValueServletSearchExecutor}. * * @author Middleware Services */ public class AttributeValueServletSearchExecutorTest extends AbstractTest { /** Entry created for tests. */ private static LdapEntry testLdapEntry; /** To test servlets with. */ private ServletRunner servletRunner; /** * @param ldifFile to create. * @param webXml web.xml for queries * * @throws Exception On test failure. */ @Parameters({ "createEntry12", "webXml" }) @BeforeClass(groups = {"servlet"}) public void createLdapEntry(final String ldifFile, final String webXml) throws Exception { final String ldif = TestUtils.readFileIntoString(ldifFile); testLdapEntry = TestUtils.convertLdifToResult(ldif).getEntry(); super.createLdapEntry(testLdapEntry); servletRunner = new ServletRunner(new File(webXml)); } /** @throws Exception On test failure. */ @AfterClass(groups = {"servlet"}) public void deleteLdapEntry() throws Exception { super.deleteLdapEntry(testLdapEntry.getDn()); servletRunner.shutDown(); } /** * @param query to search for. * @param attr attribute to return from search * @param attributeValue to compare * * @throws Exception On test failure. */ @Parameters( { "attributeServletQuery", "attributeServletAttr", "attributeServletValue" }) @Test(groups = {"servlet"}) public void attributeServlet(final String query, final String attr, final String attributeValue) throws Exception { final ServletUnitClient sc = servletRunner.newClient(); final WebRequest request = new PostMethodWebRequest("http://servlets.ldaptive.org/AttributeSearch"); request.setParameter("query", query); request.setParameter("attrs", attr); final WebResponse response = sc.getResponse(request); AssertJUnit.assertNotNull(response); AssertJUnit.assertEquals("application/octet-stream", response.getContentType()); AssertJUnit.assertEquals( "attachment; filename=\"" + attr + ".bin\"", response.getHeaderField("Content-Disposition")); final InputStream input = response.getInputStream(); final ByteArrayOutputStream data = new ByteArrayOutputStream(); if (input != null) { try { final byte[] buffer = new byte[128]; int length; while ((length = input.read(buffer)) != -1) { data.write(buffer, 0, length); } } finally { data.close(); } } AssertJUnit.assertEquals(attributeValue, LdapUtils.base64Encode(data.toByteArray())); } }