package kg.apc.jmeter.config; import java.io.BufferedReader; import java.io.StringReader; import java.util.Map; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; public class VariableFromCsvFileReaderTest { private final String fileName; public VariableFromCsvFileReaderTest() { fileName = TestCsvFileActionTest.class.getResource("csvFileTest.csv").getPath(); } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { } @After public void tearDown() { } /** * Test of getDataAsMap method, of class VariableFromCsvFileReader. */ @Test public void testGetDataAsMap() { System.out.println("getDataAsMap"); String prefix = ""; String separator = ","; VariableFromCsvFileReader instance = new VariableFromCsvFileReader(fileName); Map result = instance.getDataAsMap(prefix, separator); assertTrue(result.size() == 2); } /** * Test getDataAsMap() using a BufferedReader as input instead of a file. */ @Test public void testBufferedReaderInput() { String prefix = ""; String separator = ","; String csvData = "var0,val0\nvar1,val1"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator); assertEquals("incorrect value for var0", "val0", variables.get("var0")); assertEquals("incorrect value for var1", "val1", variables.get("var1")); } /** * Test getDataAsMap() for input with more than two columns. */ @Test public void testExtraColumnsInput() { String prefix = ""; String separator = ","; String csvData = "var0,val0,a comment\nvar1,val1"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator); assertEquals("incorrect value for var0", "val0", variables.get("var0")); assertEquals("incorrect value for var1", "val1", variables.get("var1")); } /** * Test getDataAsMap() for input with # at the beginning of the line = comments. */ @Test public void testComments() { String prefix = ""; String separator = ","; String csvData = "var0,val0,a comment\n#var1,val1\nvar2,val2"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator); assertEquals("incorrect value for var0", "val0", variables.get("var0")); assertNull("no value for var1", variables.get("var1")); assertEquals("incorrect value for var1", "val2", variables.get("var2")); } /** * Test getDataAsMap() with input that contains blank lines. */ @Test public void testBlankLineInput() { String prefix = ""; String separator = ","; String csvData = "var0,val0\n\nvar1,val1\n"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator); assertEquals("incorrect number of variables parsed from input", 2, variables.size()); assertEquals("incorrect value for var0", "val0", variables.get("var0")); assertEquals("incorrect value for var1", "val1", variables.get("var1")); } /** * Tests getDataAsMap() with input that contains only a single column. */ @Test public void testSingleColumn() { String prefix = ""; String separator = ","; String csvData = "var0\n\nvar1,val1\n"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator); assertEquals("incorrect value for var0", "", variables.get("var0")); assertEquals("incorrect value for var1", "val1", variables.get("var1")); } /** * Tests getDataAsMap() with input that contains multi lines variables. */ @Test public void testMutiLine() { String prefix = ""; String separator = ","; String csvData = "var0,\"line1\nline2\nline3\"\n\nvar1,val1\nvar2,\"lineA\nlineB\nlineC\nlineD\nlineE\""; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator); assertEquals("incorrect value for var0", "line1\nline2\nline3", variables.get("var0")); assertEquals("incorrect value for var1", "val1", variables.get("var1")); assertEquals("incorrect value for var2", "lineA\nlineB\nlineC\nlineD\nlineE", variables.get("var2")); } /** * Test getDataAsMap() with a non-blank variable prefix. */ @Test public void testVariablePrefix() { String prefix = "test"; String separator = ","; String csvData = "var0,val0,a comment\nvar1,val1"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator); assertEquals("incorrect value for testvar0", "val0", variables.get("testvar0")); assertEquals("incorrect value for testvar1", "val1", variables.get("testvar1")); assertNull("var0 should not be mapped", variables.get("var0")); assertNull("var1 should not be mapped", variables.get("var1")); } /** * Test getDataAsMap() skipping the first input line which is a header. */ @Test public void testSkipHeaderLine() { String prefix = ""; String separator = ","; String csvData = "name,value,description\nvar0,val0,a comment\nvar1,val1"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator, 1); assertNull("header line was interpreted as variable data", variables.get("name")); assertEquals("incorrect value for var0", "val0", variables.get("var0")); assertEquals("incorrect value for var1", "val1", variables.get("var1")); } /** * Test getDataAsMap() with negative integer for skipLines. */ @Test public void testSkipHeaderNegative() { String prefix = ""; String separator = ","; String csvData = "var0,val0,a comment\nvar1,val1"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator, -1); assertEquals("incorrect value for var0", "val0", variables.get("var0")); assertEquals("incorrect value for var1", "val1", variables.get("var1")); } /** * Test getDataAsMap() with empty separator. see https://groups.google.com/forum/#!topic/jmeter-plugins/gWn7MTgvTfE */ @Test(expected=IllegalArgumentException.class) public void testEmptySeparator() { String prefix = ""; String separator = ""; String csvData = "name,value,description\nvar0,val0,a comment\nvar1,val1"; BufferedReader input = new BufferedReader(new StringReader(csvData)); VariableFromCsvFileReader instance = new VariableFromCsvFileReader(input); Map variables = instance.getDataAsMap(prefix, separator, 1); } }