changeset 2689:19fa2f961292

Mock procfs files in ProcDataSourceTest Reviewed-by: jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-June/023630.html
author Elliott Baron <ebaron@redhat.com>
date Tue, 13 Jun 2017 12:47:56 -0400
parents 93da88c81d1d
children eaa1ff0bf5b9
files common/portability/src/main/java/com/redhat/thermostat/common/portability/linux/ProcDataSource.java common/portability/src/test/java/com/redhat/thermostat/common/portability/linux/ProcDataSourceTest.java
diffstat 2 files changed, 68 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/common/portability/src/main/java/com/redhat/thermostat/common/portability/linux/ProcDataSource.java	Fri Jun 09 21:23:21 2017 +0200
+++ b/common/portability/src/main/java/com/redhat/thermostat/common/portability/linux/ProcDataSource.java	Tue Jun 13 12:47:56 2017 -0400
@@ -36,6 +36,7 @@
 
 package com.redhat.thermostat.common.portability.linux;
 
+import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.Reader;
@@ -61,73 +62,90 @@
     private static final String PID_STAT_FILE = "/proc/${pid}/stat";
     private static final String PID_STATUS_FILE = "/proc/${pid}/status";
     private static final String PID_NUMA_MAPS_FILE = "/proc/${pid}/numa_maps";
+    
+    private final ReaderCreator readerCreator;
+    
+    public ProcDataSource() {
+        this(new ReaderCreator());
+    }
+
+    ProcDataSource(ReaderCreator readerCreator) {
+        this.readerCreator = readerCreator;
+    }
 
     /**
      * Returns a reader for /proc/cpuinfo
      */
     public Reader getCpuInfoReader() throws IOException {
-        return new FileReader(CPUINFO_FILE);
+        return readerCreator.createFileReader(CPUINFO_FILE);
     }
 
     /**
      * Returns a reader for /proc/loadavg
      */
     public Reader getCpuLoadReader() throws IOException {
-        return new FileReader(LOAD_FILE);
+        return readerCreator.createFileReader(LOAD_FILE);
     }
 
     /**
      * Returns a reader for /proc/stat. Kernel/System statistics.
      */
     public Reader getStatReader() throws IOException {
-        return new FileReader(STAT_FILE);
+        return readerCreator.createFileReader(STAT_FILE);
     }
 
     /**
      * Returns a reader for /proc/meminfo
      */
     public Reader getMemInfoReader() throws IOException {
-        return new FileReader(MEMINFO_FILE);
+        return readerCreator.createFileReader(MEMINFO_FILE);
     }
 
     /**
      * Returns a reader for /proc/$PID/environ
      */
     public Reader getEnvironReader(int pid) throws IOException {
-        return new FileReader(getPidFile(PID_ENVIRON_FILE, pid));
+        return readerCreator.createFileReader(getPidFile(PID_ENVIRON_FILE, pid));
     }
 
     /**
      * Returns a reader for /proc/$PID/io
      */
     public Reader getIoReader(int pid) throws IOException {
-        return new FileReader(getPidFile(PID_IO_FILE, pid));
+        return readerCreator.createFileReader(getPidFile(PID_IO_FILE, pid));
     }
 
     /**
      * Returns a reader for /proc/$PID/stat
      */
     public Reader getStatReader(int pid) throws IOException {
-        return new FileReader(getPidFile(PID_STAT_FILE, pid));
+        return readerCreator.createFileReader(getPidFile(PID_STAT_FILE, pid));
     }
 
     /**
      * Returns a reader for /proc/$PID/status
      */
     public Reader getStatusReader(int pid) throws IOException {
-        return new FileReader(getPidFile(PID_STATUS_FILE, pid));
+        return readerCreator.createFileReader(getPidFile(PID_STATUS_FILE, pid));
     }
 
     /**
      * Returns a reader for /proc/$PID/numa_maps
      */
     public Reader getNumaMapsReader(int pid) throws IOException {
-        return new FileReader(getPidFile(PID_NUMA_MAPS_FILE, pid));
+        return readerCreator.createFileReader(getPidFile(PID_NUMA_MAPS_FILE, pid));
     }
 
     private String getPidFile(String fileName, int pid) {
         return fileName.replace("${pid}", Integer.toString(pid));
     }
+    
+    // For testing purposes
+    static class ReaderCreator {
+        FileReader createFileReader(String fileName) throws FileNotFoundException {
+            return new FileReader(fileName);
+        }
+    }
 
 }
 
--- a/common/portability/src/test/java/com/redhat/thermostat/common/portability/linux/ProcDataSourceTest.java	Fri Jun 09 21:23:21 2017 +0200
+++ b/common/portability/src/test/java/com/redhat/thermostat/common/portability/linux/ProcDataSourceTest.java	Tue Jun 13 12:47:56 2017 -0400
@@ -36,86 +36,106 @@
 
 package com.redhat.thermostat.common.portability.linux;
 
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.FileReader;
 import java.io.IOException;
 import java.io.Reader;
 
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.redhat.thermostat.common.portability.linux.ProcDataSource.ReaderCreator;
 import com.redhat.thermostat.shared.config.OS;
 
-import com.redhat.thermostat.testutils.TestUtils;
-
-import org.junit.Assume;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-
 public class ProcDataSourceTest {
+    
+    private ProcDataSource source;
+    private ReaderCreator readerCreator;
+    
+    @Before
+    public void setup() throws Exception {
+        readerCreator = mock(ReaderCreator.class);
+        FileReader reader = mock(FileReader.class);
+        when(readerCreator.createFileReader(anyString())).thenReturn(reader);
+        source = new ProcDataSource(readerCreator);
+    }
 
     @Test
     public void testGetCpuInfoReader() throws IOException {
         Assume.assumeTrue(OS.IS_LINUX);
-        Reader r = new ProcDataSource().getCpuInfoReader();
+        Reader r = source.getCpuInfoReader();
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/cpuinfo");
     }
 
     @Test
     public void testGetCpuLoadReader() throws IOException {
         Assume.assumeTrue(OS.IS_LINUX);
-        Reader r = new ProcDataSource().getCpuLoadReader();
+        Reader r = source.getCpuLoadReader();
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/loadavg");
     }
 
     @Test
     public void testGetMemInfoReader() throws IOException {
         Assume.assumeTrue(OS.IS_LINUX);
-        Reader r = new ProcDataSource().getMemInfoReader();
+        Reader r = source.getMemInfoReader();
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/meminfo");
     }
 
     @Test
     public void testGetStatReader() throws IOException {
         Assume.assumeTrue(OS.IS_LINUX);
-        int pid = TestUtils.getProcessId();
-        Reader r = new ProcDataSource().getStatReader(pid);
+        Reader r = source.getStatReader();
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/stat");
     }
 
     @Test
     public void testGetEnvironReader() throws IOException {
         Assume.assumeTrue(OS.IS_LINUX);
-        int pid = TestUtils.getProcessId();
-        Reader r = new ProcDataSource().getEnvironReader(pid);
+        Reader r = source.getEnvironReader(1234);
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/1234/environ");
     }
 
     @Test
     public void testIoReader() throws Exception {
         Assume.assumeTrue(OS.IS_LINUX);
-        int pid = TestUtils.getProcessId();
-        Reader r = new ProcDataSource().getIoReader(pid);
+        Reader r = source.getIoReader(1234);
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/1234/io");
     }
 
     @Test
     public void testStatReader() throws Exception {
         Assume.assumeTrue(OS.IS_LINUX);
-        int pid = TestUtils.getProcessId();
-        Reader r = new ProcDataSource().getStatReader(pid);
+        Reader r = source.getStatReader(1234);
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/1234/stat");
     }
 
     @Test
     public void testStatusReader() throws Exception {
         Assume.assumeTrue(OS.IS_LINUX);
-        int pid = TestUtils.getProcessId();
-        Reader r = new ProcDataSource().getStatusReader(pid);
+        Reader r = source.getStatusReader(1234);
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/1234/status");
     }
 
     @Test
     public void testNumaMapsReader() throws Exception {
         Assume.assumeTrue(OS.IS_LINUX);
-        int pid = TestUtils.getProcessId();
-        Reader r = new ProcDataSource().getNumaMapsReader(pid);
+        Reader r = source.getNumaMapsReader(1234);
         assertNotNull(r);
+        verify(readerCreator).createFileReader("/proc/1234/numa_maps");
     }
 }