/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.hive.ptest.execution.conf;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;
import junit.framework.Assert;
import org.apache.commons.io.FileUtils;
import org.apache.hive.ptest.execution.Dirs;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Joiner;
import com.google.common.io.Files;
public class TestTestParser {
private static final Logger LOG = LoggerFactory
.getLogger(TestTestParser.class);
private static final String DRIVER = "driver";
private TestParser testParser;
private File baseDir;
private Context context;
private File workingDirectory;
private File unitTestDir1;
private File unitTestDir2;
private File qFileTestDir;
private File propertyDir;
@Before
public void setup() throws Exception {
context = new Context();
baseDir = Files.createTempDir();
workingDirectory = new File(baseDir.getAbsolutePath(), "source");
unitTestDir1 = Dirs.create(new File(baseDir, Joiner.on("/").join("source", "build", "1", "units",
"test", "classes")));
unitTestDir2 = Dirs.create(new File(baseDir, Joiner.on("/").join("source", "build", "2", "units", "test", "classes")));
qFileTestDir = Dirs.create(new File(baseDir, Joiner.on("/").join("source", "qfiles")));
propertyDir = Dirs.create(new File(baseDir, Joiner.on("/").join("source", "props")));
Assert.assertTrue((new File(unitTestDir1, "TestA.class")).createNewFile());
Assert.assertTrue((new File(unitTestDir2, "TestB.class")).createNewFile());
Assert.assertTrue((new File(unitTestDir1, "TestC.class")).createNewFile());
Assert.assertTrue((new File(unitTestDir1, "TestD$E.class")).createNewFile());
Assert.assertTrue((new File(unitTestDir1, DRIVER + ".class")).createNewFile());
Assert.assertTrue((new File(qFileTestDir, ".svn")).mkdirs());
Assert.assertTrue((new File(qFileTestDir, "dir.q")).mkdirs());
Assert.assertTrue((new File(qFileTestDir, "normal.q")).createNewFile());
Assert.assertTrue((new File(qFileTestDir, "normal2.q")).createNewFile());
Assert.assertTrue((new File(qFileTestDir, "normal3.q")).createNewFile());
Assert.assertTrue((new File(qFileTestDir, "normal4.q")).createNewFile());
Assert.assertTrue((new File(qFileTestDir, "excluded.q")).createNewFile());
Assert.assertTrue((new File(qFileTestDir, "isolated.q")).createNewFile());
Assert.assertTrue((new File(qFileTestDir, "included.q")).createNewFile());
Properties normalProp = new Properties();
normalProp.setProperty("normal.one.group", "normal.q,normal2.q");
normalProp.setProperty("normal.two.group", "normal3.q,normal4.q");
normalProp.setProperty("excluded.group", "excluded.q");
normalProp.setProperty("isolated.group", "isolated.q");
normalProp.setProperty("included.group", "included.q");
serialize("normal.properties", normalProp);
}
@After
public void teardown() {
FileUtils.deleteQuietly(baseDir);
}
@Test
public void testParseWithExcludes() throws Exception {
context.put("unitTests.directories", "build/1 build/2");
context.put("unitTests.subdirForPrefix", "units");
context.put("unitTests.exclude", "TestA");
context.put("unitTests.isolate", "TestB");
context.put("qFileTests", "f");
context.put("qFileTest.f.driver", DRIVER);
context.put("qFileTest.f.directory", "qfiles");
context.put("qFileTest.f.exclude", "excluded");
context.put("qFileTest.f.queryFilesProperty", "qfile");
context.put("qFileTest.f.isolate", "isolated");
context.put("qFileTest.f.groups.excluded", "excluded.q");
context.put("qFileTest.f.groups.isolated", "isolated.q");
testParser = new TestParser(context, new AtomicInteger(1), "testcase", workingDirectory, LOG);
List<TestBatch> testBatches = testParser.parse().get();
Assert.assertEquals(4, testBatches.size());
}
@Test
public void testParseWithIncludes() throws Exception {
context.put("unitTests.directories", "build/1 build/2");
context.put("unitTests.subdirForPrefix", "units");
context.put("unitTests.include", "TestA TestB");
context.put("unitTests.isolate", "TestB");
context.put("qFileTests", "f");
context.put("qFileTest.f.driver", DRIVER);
context.put("qFileTest.f.directory", "qfiles");
context.put("qFileTest.f.include", "included");
context.put("qFileTest.f.isolate", "isolated");
context.put("qFileTest.f.queryFilesProperty", "qfile");
context.put("qFileTest.f.groups.included", "included.q isolated.q");
context.put("qFileTest.f.groups.isolated", "isolated.q");
testParser = new TestParser(context, new AtomicInteger(1), "testcase", workingDirectory, LOG);
List<TestBatch> testBatches = testParser.parse().get();
Assert.assertEquals(4, testBatches.size());
}
@Test
public void testParsePropertyFile() throws Exception {
context.put("unitTests.directories", "build/1 build/2");
context.put("unitTests.subdirForPrefix", "units");
context.put("unitTests.include", "TestA TestB");
context.put("unitTests.isolate", "TestB");
context.put("qFileTests", "f");
context.put("qFileTests.propertyFiles.prop",
"props" + File.separator + "normal.properties");
context.put("qFileTest.f.driver", DRIVER);
context.put("qFileTest.f.directory", "qfiles");
context.put("qFileTest.f.include", "included");
context.put("qFileTest.f.isolate", "isolated");
context.put("qFileTest.f.exclude", "excluded");
context.put("qFileTest.f.queryFilesProperty", "qfile");
context.put("qFileTest.f.groups.included", "prop.${normal.one.group} prop.${normal.two.group} prop.${isolated.group}");
context.put("qFileTest.f.groups.isolated", "prop.${isolated.group}");
context.put("qFileTest.f.groups.excluded", "prop.${excluded.group}");
testParser = new TestParser(context, new AtomicInteger(1), "testcase", workingDirectory, LOG);
List<TestBatch> testBatches = testParser.parse().get();
Assert.assertEquals(4, testBatches.size());
}
private void serialize(String propFileName, Properties props) throws Exception {
File f = new File(propertyDir, propFileName);
OutputStream out = new FileOutputStream(f);
try {
props.store(out, null);
} finally {
out.close();
}
}
}