diff --git a/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java index a16fc62f869..f1398a344a5 100644 --- a/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java +++ b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java @@ -475,14 +475,19 @@ public class AsyncJobManagerImpl extends ManagerBase implements AsyncJobManager, return job; } - private String obfuscatePassword(String result, boolean hidePassword) { + public String obfuscatePassword(String result, boolean hidePassword) { if (hidePassword) { String pattern = "\"password\":"; if (result != null) { if (result.contains(pattern)) { String[] resp = result.split(pattern); String psswd = resp[1].toString().split(",")[0]; - result = resp[0] + pattern + psswd.replace(psswd.substring(2, psswd.length() - 1), "*****") + "," + resp[1].split(",", 2)[1]; + if (psswd.endsWith("}")) { + psswd = psswd.substring(0, psswd.length() - 1); + result = resp[0] + pattern + psswd.replace(psswd.substring(2, psswd.length() - 1), "*****") + "}," + resp[1].split(",", 2)[1]; + } else { + result = resp[0] + pattern + psswd.replace(psswd.substring(2, psswd.length() - 1), "*****") + "," + resp[1].split(",", 2)[1]; + } } } } diff --git a/framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java b/framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java index a49f28ef55d..7130873e4ee 100644 --- a/framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java +++ b/framework/jobs/src/test/java/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java @@ -16,116 +16,67 @@ // under the License. package org.apache.cloudstack.framework.jobs; -/* - * This integration test requires real DB setup, it is not meant to run at per-build - * basis, it can only be opened in developer's run - * - * +import org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnitRunner; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = "classpath:/AsyncJobManagerTestContext.xml") -public class AsyncJobManagerTest extends TestCase { - private static final Logger s_logger = - Logger.getLogger(AsyncJobManagerTest.class); +@RunWith (MockitoJUnitRunner.class) +public class AsyncJobManagerTest { - @Inject - AsyncJobManager _jobMgr; + @Spy + AsyncJobManagerImpl asyncJobManager; - @Inject - AsyncJobTestDashboard _testDashboard; + String input = "\"haprovider\":\"kvmhaprovider\"},\"outofbandmanagement\":{\"powerstate\":\"On\",\"enabled\":true,\"driver\":\"redfish\",\"address\":\"oob-address.com\",\"port\":\"80\",\"username\":\"root\",\"password\":\"password\"},\"resourcestate\":\"PrepareForMaintenance\",\"hahost\":false"; + String expected = "\"haprovider\":\"kvmhaprovider\"},\"outofbandmanagement\":{\"powerstate\":\"On\",\"enabled\":true,\"driver\":\"redfish\",\"address\":\"oob-address.com\",\"port\":\"80\",\"username\":\"root\",\"password\":\"p*****\"},\"resourcestate\":\"PrepareForMaintenance\",\"hahost\":false"; + String obfuscatedInput = "\"haprovider\":\"kvmhaprovider\"},\"outofbandmanagement\":{\"powerstate\":\"On\",\"enabled\":true,\"driver\":\"redfish\",\"address\":\"oob-address.com\",\"port\":\"80\",\"username\":\"root\",\"password\":\"p***\"},\"resourcestate\":\"PrepareForMaintenance\",\"hahost\":false"; + String noPassword = "\"haprovider\":\"kvmhaprovider\"},\"outofbandmanagement\":{\"powerstate\":\"On\",\"enabled\":true,\"driver\":\"redfish\",\"address\":\"oob-address.com\",\"port\":\"80\",\"username\":\"root\"},\"resourcestate\":\"PrepareForMaintenance\",\"hahost\":false"; - @Override - @Before - public void setUp() throws Exception { - try { - ComponentContext.initComponentsLifeCycle(); - } catch (Exception ex) { - ex.printStackTrace(); - s_logger.error(ex.getMessage()); - } - } + String inputNoBraces = "\"password\":\"password\"\",\"action\":\"OFF\""; + String expectedNoBraces = "\"password\":\"p*****\",\"action\":\"OFF\""; - @Override - @After - public void tearDown() throws Exception { - } - - public void testWaitBehave() { - - final Object me = this; - new Thread(new Runnable() { - - @Override - public void run() { - s_logger.info("Sleeping..."); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - s_logger.debug("[ignored] ."); - } - - s_logger.info("wakeup"); - synchronized (me) { - me.notifyAll(); - } - } - - }).start(); - - s_logger.info("First wait"); - synchronized (me) { - try { - wait(5000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - s_logger.info("First wait done"); - - s_logger.info("Second wait"); - synchronized (me) { - try { - wait(5000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - s_logger.info("Second wait done"); + @Test + public void obfuscatePasswordTest() { + String result = asyncJobManager.obfuscatePassword(input, true); + Assert.assertEquals(expected, result); } @Test - public void test() { - final int TOTAL_JOBS_PER_QUEUE = 5; - final int TOTAL_QUEUES = 100; - - for (int i = 0; i < TOTAL_QUEUES; i++) { - for (int j = 0; j < TOTAL_JOBS_PER_QUEUE; j++) { - AsyncJobVO job = new AsyncJobVO(); - job.setCmd("TestCmd"); - job.setDispatcher("TestJobDispatcher"); - job.setCmdInfo("TestCmd info"); - - _jobMgr.submitAsyncJob(job, "fakequeue", i); - - s_logger.info("Job submitted. job " + job.getId() + ", queue: " + i); - } - } - - while (true) { - if (_testDashboard.getCompletedJobCount() == TOTAL_JOBS_PER_QUEUE * TOTAL_QUEUES) - break; - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - s_logger.debug("[ignored] ."); - } - } - - s_logger.info("Test done with " + _testDashboard.getCompletedJobCount() + " job executed"); + public void obfuscatePasswordTestNoBraces() { + String result = asyncJobManager.obfuscatePassword(inputNoBraces, true); + Assert.assertEquals(expectedNoBraces, result); } -} -*/ + @Test + public void obfuscatePasswordTestHidePasswordFalse() { + String result = asyncJobManager.obfuscatePassword(input, false); + Assert.assertEquals(input, result); + } + + @Test + public void obfuscatePasswordTestObfuscatedInput() { + String result = asyncJobManager.obfuscatePassword(obfuscatedInput, true); + Assert.assertEquals(expected, result); + } + + @Test + public void obfuscatePasswordTestHidePasswordFalseObfuscatedInput() { + String result = asyncJobManager.obfuscatePassword(obfuscatedInput, false); + Assert.assertEquals(obfuscatedInput, result); + } + + @Test + public void obfuscatePasswordTestNoPassword() { + String result = asyncJobManager.obfuscatePassword(noPassword, true); + Assert.assertEquals(noPassword, result); + } + + @Test + public void obfuscatePasswordTestHidePasswordNoPassword() { + String result = asyncJobManager.obfuscatePassword(noPassword, false); + Assert.assertEquals(noPassword, result); + } + +}