/** * 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.hplsql; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.io.StringReader; import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.Test; /** * Unit tests for HPL/SQL (no Hive connection required) */ public class TestHplsqlLocal { private final ByteArrayOutputStream out = new ByteArrayOutputStream(); @Test public void testAdd() throws Exception { run("add"); } @Test public void testAssign() throws Exception { run("assign"); } @Test public void testBool() throws Exception { run("bool"); } @Test public void testBoolExpr() throws Exception { run("bool_expr"); } @Test public void testBreak() throws Exception { run("break"); } @Test public void testCase() throws Exception { run("case"); } @Test public void testCast() throws Exception { run("cast"); } @Test public void testCast2() throws Exception { run("cast2"); } @Test public void testChar() throws Exception { run("char"); } @Test public void testCoalesce() throws Exception { run("coalesce"); } @Test public void testConcat() throws Exception { run("concat"); } @Test public void testCreateFunction() throws Exception { run("create_function"); } @Test public void testCreateFunction2() throws Exception { run("create_function2"); } @Test public void testCreateFunction3() throws Exception { run("create_function3"); } @Test public void testCreateFunction4() throws Exception { run("create_function4"); } @Test public void testCreatePackage() throws Exception { run("create_package"); } @Test public void testCreatePackage2() throws Exception { run("create_package2"); } @Test public void testCreatePackage3() throws Exception { run("create_package3"); } @Test public void testCreateProcedure() throws Exception { run("create_procedure"); } @Test public void testCreateProcedure2() throws Exception { run("create_procedure2"); } @Test public void testCreateProcedure3() throws Exception { run("create_procedure3"); } @Test public void testCreateProcedureNoParams() throws Exception { run("create_procedure_no_params"); } @Test public void testDatatypes() throws Exception { run("datatypes"); } @Test public void testDate() throws Exception { run("date"); } @Test public void testDbmsOutput() throws Exception { run("dbms_output"); } @Test public void testDeclare() throws Exception { run("declare"); } @Test public void testDeclare2() throws Exception { run("declare2"); } @Test public void testDeclare3() throws Exception { run("declare3"); } @Test public void testDeclareCondition() throws Exception { run("declare_condition"); } @Test public void testDeclareCondition2() throws Exception { run("declare_condition2"); } @Test public void testDecode() throws Exception { run("decode"); } @Test public void testEqual() throws Exception { run("equal"); } @Test public void testException() throws Exception { run("exception"); } @Test public void testExceptionDivideByZero() throws Exception { run("exception_divide_by_zero"); } @Test public void testExit() throws Exception { run("exit"); } @Test public void testExpr() throws Exception { run("expr"); } @Test public void testFloat() throws Exception { run("float"); } @Test public void testForRange() throws Exception { run("for_range"); } @Test public void testIf() throws Exception { run("if"); } @Test public void testIf2() throws Exception { run("if2"); } @Test public void testIf3Bteq() throws Exception { run("if3_bteq"); } @Test public void testInclude() throws Exception { run("include"); } @Test public void testInstr() throws Exception { run("instr"); } @Test public void testInterval() throws Exception { run("interval"); } @Test public void testLang() throws Exception { run("lang"); } @Test public void testLeave() throws Exception { run("leave"); } @Test public void testLength() throws Exception { run("length"); } @Test public void testLen() throws Exception { run("len"); } @Test public void testLower() throws Exception { run("lower"); } @Test public void testMultDiv() throws Exception { run("mult_div"); } @Test public void testNvl() throws Exception { run("nvl"); } @Test public void testNvl2() throws Exception { run("nvl2"); } @Test public void testPrint() throws Exception { run("print"); } @Test public void testReplace() throws Exception { run("replace"); } @Test public void testReturn() throws Exception { run("return"); } @Test public void testSetError() throws Exception { run("seterror"); } @Test public void testSub() throws Exception { run("sub"); } @Test public void testSubstring() throws Exception { run("substring"); } @Test public void testSubstr() throws Exception { run("substr"); } @Test public void testTimestampIso() throws Exception { run("timestamp_iso"); } @Test public void testTimestamp() throws Exception { run("timestamp"); } @Test public void testToChar() throws Exception { run("to_char"); } @Test public void testToTimestamp() throws Exception { run("to_timestamp"); } @Test public void testTrim() throws Exception { run("trim"); } @Test public void testTwoPipes() throws Exception { run("twopipes"); } @Test public void testUpper() throws Exception { run("upper"); } @Test public void testValuesInto() throws Exception { run("values_into"); } @Test public void testVarScope() throws Exception { run("var_scope"); } @Test public void testVarScope2() throws Exception { run("var_scope2"); } @Test public void testWhile() throws Exception { run("while"); } /** * Run a test file */ void run(String testFile) throws Exception { System.setOut(new PrintStream(out)); Exec exec = new Exec(); String[] args = { "-f", "src/test/queries/local/" + testFile + ".sql", "-trace" }; exec.run(args); String s = getTestOutput(out.toString()).trim(); FileUtils.writeStringToFile(new java.io.File("target/tmp/log/" + testFile + ".out.txt"), s); String t = FileUtils.readFileToString(new java.io.File("src/test/results/local/" + testFile + ".out.txt"), "utf-8").trim(); System.setOut(null); Assert.assertEquals(s, t); } /** * Get test output */ String getTestOutput(String s) throws Exception { StringBuilder sb = new StringBuilder(); BufferedReader reader = new BufferedReader(new StringReader(s)); String line = null; while ((line = reader.readLine()) != null) { if (!line.startsWith("log4j:") && !line.contains("INFO Log4j")) { sb.append(line); sb.append("\n"); } } return sb.toString(); } }