/* * Copyright (c) 2008-2009 Yahoo! Inc. All rights reserved. * The copyrights to the contents of this file are licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php) */ package hudson.plugins.plot; import hudson.FilePath; import hudson.plugins.plot.CSVSeries; import hudson.plugins.plot.PlotPoint; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; import java.util.logging.Logger; import org.apache.commons.io.IOUtils; import au.com.bytecode.opencsv.CSVReader; /** * Test a CSV series. * * @author Allen Reese * */ public class CSVSeriesTest extends SeriesTestCase { private static transient final Logger LOGGER = Logger .getLogger(CSVSeriesTest.class.getName()); private static final String[] files = { "test.csv", }; public void testCSVSeriesWithNoExclusions() { // first create a FilePath to load the test Properties file. File workspaceDirFile = new File("target/test-classes/"); FilePath workspaceRootDir = new FilePath(workspaceDirFile); LOGGER.info("workspace File path: " + workspaceDirFile.getAbsolutePath()); LOGGER.info("workspace Dir path: " + workspaceRootDir.getName()); // Check the number of columns int columns = -1; try { columns = getNumColumns(workspaceRootDir, files[0]); } catch (IOException e) { assertFalse(true); } catch (InterruptedException e) { assertFalse(true); } // Create a new CSV series. CSVSeries series = new CSVSeries(files[0], "http://localhost:8080/%name%/%index%/", "OFF", "", false); LOGGER.info("Created series " + series.toString()); // test the basic subclass properties. testSeries(series, files[0], "", "csv"); // load the series. List<PlotPoint> points = series.loadSeries(workspaceRootDir, 0, System.out); LOGGER.info("Got " + points.size() + " plot points"); testPlotPoints(points, columns); for (int i = 0; i < points.size(); i++) { PlotPoint point = points.get(i); assertEquals("http://localhost:8080/" + point.getLabel() + "/" + i + "/", point.getUrl()); } } public void testCSVSeriesWithTrailingSemicolonDoesntCreateExtraneousPoint() { // first create a FilePath to load the test Properties file. File workspaceDirFile = new File("target/test-classes/"); FilePath workspaceRootDir = new FilePath(workspaceDirFile); String file = "test_trailing_semicolon.csv"; LOGGER.info("workspace File path: " + workspaceDirFile.getAbsolutePath()); LOGGER.info("workspace Dir path: " + workspaceRootDir.getName()); // Create a new CSV series. CSVSeries series = new CSVSeries(file, "http://localhost:8080/%name%/%index%/", "OFF", "", false); LOGGER.info("Created series " + series.toString()); // test the basic subclass properties. testSeries(series, file, "", "csv"); // load the series. List<PlotPoint> points = series.loadSeries(workspaceRootDir, 0, System.out); LOGGER.info("Got " + points.size() + " plot points"); testPlotPoints(points, 8); } private int getNumColumns(FilePath workspaceRootDir, String file) throws IOException, InterruptedException { CSVReader csvreader = null; InputStream in = null; InputStreamReader inputReader = null; FilePath[] seriesFiles = null; try { seriesFiles = workspaceRootDir.list(file); if (seriesFiles != null && seriesFiles.length < 1) { LOGGER.info("No plot data file found: " + workspaceRootDir.getName() + " " + file); return -1; } LOGGER.info("Loading plot series data from: " + file); in = seriesFiles[0].read(); inputReader = new InputStreamReader(in); csvreader = new CSVReader(inputReader); // save the header line to use it for the plot labels. String[] headerLine = csvreader.readNext(); LOGGER.info("Got " + headerLine.length + " columns"); return headerLine.length; } finally { try { if (csvreader != null) csvreader.close(); } catch (IOException e) { } IOUtils.closeQuietly(inputReader); IOUtils.closeQuietly(in); } } }