/*********************************************************************************************************************** * Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu) * * Licensed 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 eu.stratosphere.nephele.profiling.impl; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; import static org.powermock.api.mockito.PowerMockito.whenNew; import java.io.BufferedReader; import java.io.FileReader; import java.net.InetAddress; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import eu.stratosphere.nephele.instance.InstanceConnectionInfo; import eu.stratosphere.nephele.profiling.ProfilingException; import eu.stratosphere.nephele.profiling.impl.types.InternalInstanceProfilingData; /** */ @RunWith(PowerMockRunner.class) @PrepareForTest(InstanceProfiler.class) public class InstanceProfilerTest { @Mock private InstanceConnectionInfo infoMock; @Mock private InetAddress addressMock; @Mock private BufferedReader cpuBufferMock; @Mock private BufferedReader networkBufferMock; @Mock private BufferedReader memoryBufferMock; @Mock private FileReader cpuReaderMock; @Mock private FileReader networkReaderMock; @Mock private FileReader memoryReaderMock; // object under test InstanceProfiler out; @Before public void setUp() throws Exception { initMocks(this); when(this.infoMock.address()).thenReturn(this.addressMock); when(this.addressMock.getHostAddress()).thenReturn("192.168.1.1"); whenNew(FileReader.class).withArguments(InstanceProfiler.PROC_STAT).thenReturn(this.cpuReaderMock); whenNew(BufferedReader.class).withArguments(this.cpuReaderMock).thenReturn(this.cpuBufferMock); when(this.cpuBufferMock.readLine()).thenReturn( "cpu 222875 20767 209704 3782096 209864 0 1066 0 0 0" ); whenNew(FileReader.class).withArguments(InstanceProfiler.PROC_NET_DEV).thenReturn(this.networkReaderMock); whenNew(BufferedReader.class).withArguments(this.networkReaderMock).thenReturn(this.networkBufferMock); when(this.networkBufferMock.readLine()) .thenReturn( " eth0: 364729203 286442 0 0 0 0 0 1060 14483806 191563 0 0 0 0 0 0", (String) null, " eth0: 364729203 286442 0 0 0 0 0 1060 14483806 191563 0 0 0 0 0 0", (String) null, " eth0: 364729203 286442 0 0 0 0 0 1060 14483806 191563 0 0 0 0 0 0", (String) null ); whenNew(FileReader.class).withArguments(InstanceProfiler.PROC_MEMINFO).thenReturn(this.memoryReaderMock); whenNew(BufferedReader.class).withArguments(this.memoryReaderMock).thenReturn(this.memoryBufferMock); when(this.memoryBufferMock.readLine()).thenReturn( "MemTotal: 8052956 kB", "MemFree: 3999880 kB", "Buffers: 77216 kB", "Cached: 1929640 kB", null, "MemTotal: 8052956 kB", "MemFree: 3999880 kB", "Buffers: 77216 kB", "Cached: 1929640 kB", null, "MemTotal: 8052956 kB", "MemFree: 3999880 kB", "Buffers: 77216 kB", "Cached: 1929640 kB", null ); PowerMockito.mockStatic(System.class); when(System.currentTimeMillis()).thenReturn(0L); this.out = new InstanceProfiler(this.infoMock); } @Test public void shouldHaveNetworkTraffic() { try { final InternalInstanceProfilingData generateProfilingData = out.generateProfilingData(0L); assertEquals(0L, generateProfilingData.getReceivedBytes()); assertEquals(0L, generateProfilingData.getTransmittedBytes()); } catch (ProfilingException e) { fail(e.getMessage()); } } @Test public void shouldHaveMemSettingsMeasured() { try { final InternalInstanceProfilingData generateProfilingData = out.generateProfilingData(0L); final long totalMemory = generateProfilingData.getTotalMemory(); assertThat(totalMemory, is(equalTo(8052956L))); long freeMemory = generateProfilingData.getFreeMemory(); assertThat(freeMemory, is(equalTo(3999880L))); long buffers = generateProfilingData.getBufferedMemory(); assertThat(buffers, is(equalTo(77216L))); long cached = generateProfilingData.getCachedMemory(); assertThat(cached, is(equalTo(1929640L))); } catch (ProfilingException e) { fail(e.getMessage()); } } @Test public void shouldMeasureCPUUtilization() { try { final InternalInstanceProfilingData generateProfilingData = out.generateProfilingData(0L); assertEquals(0L, generateProfilingData.getUserCPU()); assertEquals(0L, generateProfilingData.getIdleCPU()); assertEquals(0L, generateProfilingData.getSystemCPU()); assertEquals(0L, generateProfilingData.getHardIrqCPU()); assertEquals(0L, generateProfilingData.getSoftIrqCPU()); assertEquals(0L, generateProfilingData.getIOWaitCPU()); } catch (ProfilingException e) { fail(e.getMessage()); } } }