1 package org.broadinstitute.hellbender.metrics; 2 3 import htsjdk.samtools.metrics.MetricBase; 4 import htsjdk.samtools.metrics.MetricsFile; 5 import org.apache.hadoop.hdfs.MiniDFSCluster; 6 import org.broadinstitute.hellbender.utils.gcs.BucketUtils; 7 import org.broadinstitute.hellbender.GATKBaseTest; 8 import org.broadinstitute.hellbender.testutils.MiniClusterUtils; 9 import org.testng.Assert; 10 import org.testng.annotations.AfterClass; 11 import org.testng.annotations.BeforeClass; 12 import org.testng.annotations.DataProvider; 13 import org.testng.annotations.Test; 14 15 import java.io.File; 16 import java.io.IOException; 17 18 public class MetricsUtilsTest extends GATKBaseTest { 19 private MiniDFSCluster cluster; 20 private String hdfsWorkingDir; 21 22 @BeforeClass(alwaysRun = true) setupMiniCluster()23 private void setupMiniCluster() throws IOException { 24 cluster = MiniClusterUtils.getMiniCluster(); 25 hdfsWorkingDir = MiniClusterUtils.getWorkingDir(cluster).toString(); 26 } 27 28 @AfterClass(alwaysRun = true) shutdownMiniCluster()29 private void shutdownMiniCluster() { 30 MiniClusterUtils.stopCluster(cluster); 31 } 32 33 @DataProvider(name = "metricsPaths") getMetricsPaths()34 public Object[][] getMetricsPaths(){ 35 return new Object[][]{ 36 {"metrics"}, 37 {getGCPTestStaging()}, 38 {hdfsWorkingDir} 39 }; 40 } 41 42 public static class TestMetric extends MetricBase { 43 public Integer value1 = 0; 44 public Integer value2 = 0; 45 } 46 47 @Test(dataProvider = "metricsPaths", groups = "bucket") testSaveMetrics(String destinationPrefix)48 public void testSaveMetrics(String destinationPrefix) throws IOException { 49 final String outputPath = BucketUtils.getTempFilePath(destinationPrefix, ".txt"); 50 TestMetric testMetric = new TestMetric(); 51 testMetric.value1 = 10; 52 testMetric.value2 = 5; 53 54 final MetricsFile<TestMetric, ?> metrics = new MetricsFile<>(); 55 metrics.addMetric(testMetric); 56 MetricsUtils.saveMetrics(metrics, outputPath); 57 Assert.assertTrue(BucketUtils.fileExists(outputPath)); 58 File localCopy = copyFileToLocalTmpFile(outputPath); 59 60 final File expectedMetrics = createTempFile("expectedMetrics", ".txt"); 61 metrics.write(expectedMetrics); 62 63 Assert.assertTrue(MetricsFile.areMetricsEqual(localCopy, expectedMetrics)); 64 } 65 copyFileToLocalTmpFile(String outputPath)66 private File copyFileToLocalTmpFile(String outputPath) throws IOException { 67 File localCopy = createTempFile("local_metrics_copy",".txt"); 68 BucketUtils.copyFile(outputPath, localCopy.getAbsolutePath()); 69 return localCopy; 70 } 71 } 72