Skip to content

Commit 4d7ad0f

Browse files
author
GabrielBrascher
committed
Add unit test for UsageManagerImpl.configureUsageManagerServicePid()
1 parent 7a5649e commit 4d7ad0f

2 files changed

Lines changed: 73 additions & 4 deletions

File tree

usage/src/main/java/com/cloud/usage/UsageManagerImpl.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
283283
throw new ConfigurationException("Unhandled exception configuring UsageManager " + e.toString());
284284
}
285285

286-
configureUsageManagerServicePid();
286+
_pid = configureUsageManagerServicePid();
287287
return true;
288288
}
289289

@@ -296,7 +296,7 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
296296
* <li>NumberUtils.toInt returns 0 (zero) if the conversion fails (pid is null or "")</li>
297297
* </ul>
298298
*/
299-
protected void configureUsageManagerServicePid() {
299+
protected int configureUsageManagerServicePid() {
300300
File usageServicePid = new File(CLOUDSTACK_USAGE_SERVER_SERVICE_PID_FILE);
301301
if (!usageServicePid.exists()) {
302302
throw new CloudRuntimeException(String.format("Cannot find file [%s].", CLOUDSTACK_USAGE_SERVER_SERVICE_PID_FILE));
@@ -307,11 +307,12 @@ protected void configureUsageManagerServicePid() {
307307
try {
308308
String pidAsString = FileUtils.readFileToString(usageServicePid, Charset.defaultCharset());
309309
String pidAsStringWithoutLineSeparator = pidAsString.replace(System.getProperty("line.separator"), "");
310-
_pid = NumberUtils.toInt(pidAsStringWithoutLineSeparator);
311-
if (_pid == 0) {
310+
int pid = NumberUtils.toInt(pidAsStringWithoutLineSeparator);
311+
if (pid == 0) {
312312
throw new CloudRuntimeException(
313313
String.format("Failed to retrieve a valid cloudstack-usage.service pid [file:%s, pid at file:%s]", CLOUDSTACK_USAGE_SERVER_SERVICE_PID_FILE, pidAsString));
314314
}
315+
return pid;
315316
} catch (IOException e) {
316317
throw new CloudRuntimeException(e);
317318
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.cloud.usage;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.nio.charset.Charset;
6+
7+
import org.apache.commons.io.FileUtils;
8+
import org.apache.commons.lang3.math.NumberUtils;
9+
import org.junit.Assert;
10+
import org.junit.Test;
11+
import org.junit.runner.RunWith;
12+
import org.mockito.InOrder;
13+
import org.mockito.Mockito;
14+
import org.powermock.api.mockito.PowerMockito;
15+
import org.powermock.core.classloader.annotations.PrepareForTest;
16+
import org.powermock.modules.junit4.PowerMockRunner;
17+
18+
import com.cloud.utils.exception.CloudRuntimeException;
19+
20+
@RunWith(PowerMockRunner.class)
21+
@PrepareForTest({FileUtils.class, UsageManagerImpl.class, NumberUtils.class})
22+
public class UsageManagerImplTest {
23+
24+
private static final String CLOUDSTACK_USAGE_SERVER_SERVICE_PID_FILE = "/var/run/cloudstack-usage.service.pid";
25+
private UsageManagerImpl usageManagerImpl = new UsageManagerImpl();
26+
27+
@Test
28+
public void configureUsageManagerServicePidTestCompleteExecutionFlow() throws Exception {
29+
prepareAndVerifyTestConfigureUsageManagerServicePidTest(true, true, 1, 1234, "1234" + System.getProperty("line.separator"));
30+
}
31+
32+
@Test(expected=CloudRuntimeException.class)
33+
public void configureUsageManagerServicePidTestFileDoesNotExist() throws Exception {
34+
prepareAndVerifyTestConfigureUsageManagerServicePidTest(false, true, 0, 1234, "1234" + System.getProperty("line.separator"));
35+
}
36+
37+
@Test(expected = CloudRuntimeException.class)
38+
public void configureUsageManagerServicePidTestCannotReadFile() throws Exception {
39+
prepareAndVerifyTestConfigureUsageManagerServicePidTest(true, false, 1, 1234, "1234" + System.getProperty("line.separator"));
40+
}
41+
42+
@Test(expected = CloudRuntimeException.class)
43+
public void configureUsageManagerServicePidTestPidEqualsToZero() throws Exception {
44+
prepareAndVerifyTestConfigureUsageManagerServicePidTest(true, true, 1, 0, "abc");
45+
}
46+
47+
private void prepareAndVerifyTestConfigureUsageManagerServicePidTest(boolean fileExists, boolean canReadFile, int timesCanReadIsExecuted, int expectedPid,
48+
String readedStringFromFile)
49+
throws Exception, IOException {
50+
File usageServicePid = Mockito.mock(File.class);
51+
PowerMockito.whenNew(File.class).withArguments(CLOUDSTACK_USAGE_SERVER_SERVICE_PID_FILE).thenReturn(usageServicePid);
52+
53+
Mockito.when(usageServicePid.exists()).thenReturn(fileExists);
54+
Mockito.when(usageServicePid.canRead()).thenReturn(canReadFile);
55+
56+
PowerMockito.mockStatic(FileUtils.class);
57+
Mockito.when(FileUtils.readFileToString(usageServicePid, Charset.defaultCharset())).thenReturn(readedStringFromFile);
58+
59+
int result = usageManagerImpl.configureUsageManagerServicePid();
60+
61+
InOrder inOrder = Mockito.inOrder(usageServicePid);
62+
inOrder.verify(usageServicePid).exists();
63+
inOrder.verify(usageServicePid, Mockito.times(timesCanReadIsExecuted)).canRead();
64+
65+
Assert.assertEquals(expectedPid, result);
66+
}
67+
68+
}

0 commit comments

Comments
 (0)