/* See LICENSE for licensing and NOTICE for copyright. */ package org.ldaptive.cli; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.security.Permission; import org.ldaptive.AbstractTest; 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 ldap operation cli classes. * * @author Middleware Services */ public class OperationCliTest extends AbstractTest { /** System security manager. */ private final SecurityManager securityManager = System.getSecurityManager(); /** * @param args list of delimited arguments to pass to the CLI * * @throws Exception On test failure */ @Parameters("cliAddArgs") @BeforeClass(groups = {"cli"}) public void createLdapEntry(final String args) throws Exception { // don't allow System#exit System.setSecurityManager( new SecurityManager() { @Override public void checkPermission(final Permission permission) { if (permission.getName().startsWith("exitVM")) { throw new SecurityException("System.exit blocked."); } } }); final PrintStream oldStdOut = System.out; try { final ByteArrayOutputStream outStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(outStream)); AddOperationCli.main(args.split("\\|")); } catch (SecurityException e) { AssertJUnit.assertNotNull(e); } finally { // Restore STDOUT System.setOut(oldStdOut); } } /** * @param args list of delimited arguments to pass to the CLI * * @throws Exception On test failure */ @Parameters("cliDeleteArgs") @AfterClass(groups = {"cli"}) public void deleteLdapEntry(final String args) throws Exception { final PrintStream oldStdOut = System.out; try { final ByteArrayOutputStream outStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(outStream)); DeleteOperationCli.main(args.split("\\|")); } catch (SecurityException e) { AssertJUnit.assertNotNull(e); } finally { // Restore STDOUT System.setOut(oldStdOut); } System.setSecurityManager(securityManager); } /** * @param args list of delimited arguments to pass to the CLI * @param ldifFile to compare with * * @throws Exception On test failure */ @Parameters({ "cliSearchArgs", "cliSearchResults" }) @Test(groups = {"cli"}) public void search(final String args, final String ldifFile) throws Exception { final String ldif = TestUtils.readFileIntoString(ldifFile); final PrintStream oldStdOut = System.out; try { final ByteArrayOutputStream outStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(outStream)); try { SearchOperationCli.main(args.split("\\|")); } catch (SecurityException e) { AssertJUnit.assertNotNull(e); } AssertJUnit.assertEquals( TestUtils.convertLdifToResult(ldif), TestUtils.convertLdifToResult(outStream.toString())); } finally { // Restore STDOUT System.setOut(oldStdOut); } } /** * @param args list of delimited arguments to pass to the CLI * * @throws Exception On test failure. */ @Parameters("cliCompareArgs") @Test(groups = {"cli"}) public void compare(final String args) throws Exception { final PrintStream oldStdOut = System.out; try { final ByteArrayOutputStream outStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(outStream)); try { CompareOperationCli.main(args.split("\\|")); } catch (SecurityException e) { AssertJUnit.assertNotNull(e); } AssertJUnit.assertEquals("true", outStream.toString().trim()); } finally { // Restore STDOUT System.setOut(oldStdOut); } } }