/** * OpenSpotLight - Open Source IT Governance Platform * * Copyright (c) 2009, CARAVELATECH CONSULTORIA E TECNOLOGIA EM INFORMATICA LTDA * or third-party contributors as indicated by the @author tags or express * copyright attribution statements applied by the authors. All third-party * contributions are distributed under license by CARAVELATECH CONSULTORIA E * TECNOLOGIA EM INFORMATICA LTDA. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA * *********************************************************************** * OpenSpotLight - Plataforma de Governança de TI de Código Aberto * * Direitos Autorais Reservados (c) 2009, CARAVELATECH CONSULTORIA E TECNOLOGIA * EM INFORMATICA LTDA ou como contribuidores terceiros indicados pela etiqueta * @author ou por expressa atribuição de direito autoral declarada e atribuída pelo autor. * Todas as contribuições de terceiros estão distribuídas sob licença da * CARAVELATECH CONSULTORIA E TECNOLOGIA EM INFORMATICA LTDA. * * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os * termos da Licença Pública Geral Menor do GNU conforme publicada pela Free Software * Foundation. * * Este programa é distribuído na expectativa de que seja útil, porém, SEM NENHUMA * GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU ADEQUAÇÃO A UMA * FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor do GNU para mais detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto com este * programa; se não, escreva para: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.openspotlight.graph.query.console.command.dynamic; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNot.not; import static org.hamcrest.core.IsNull.notNullValue; import static org.hamcrest.core.IsNull.nullValue; import static org.junit.Assert.assertThat; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.openspotlight.common.exception.SLException; import org.openspotlight.graph.GraphLocation; import org.openspotlight.graph.query.console.ConsoleState; import org.openspotlight.graph.query.console.GraphConnection; import org.openspotlight.graph.query.console.command.AbstractCommandTest; import org.openspotlight.graph.query.console.command.ExampleRemoteServerWithData; public class TestQueryCommand extends AbstractCommandTest { private static final String DEFAULT_REPOSITORY_NAME = "default"; private ConsoleState state = null; @BeforeClass public static void setupServer() throws Exception { ExampleRemoteServerWithData.populateSomeDataAndStartTheServer(); } private String getFileContent(final File in) { final StringBuilder sb = new StringBuilder(); LineNumberReader fileReader; try { fileReader = new LineNumberReader(new FileReader(in)); while (fileReader.ready()) { sb.append(fileReader.readLine()); sb.append("\n"); } return sb.toString(); } catch (final Exception e) { return ""; } } @Override protected void setupCommand() { state = new ConsoleState(null); command = new QueryCommand(); } /*** * We love you Windows... Thanks for all the enjoyable moments we spend together... */ @Before public void deleteFile() { final File f = new File("out.txt"); while (f.exists()) { f.delete(); try { Thread.sleep(250); } catch (final InterruptedException e) { // ignore } } } @After public void deleteTestFile() { // if (this.state.getSession() != null) { // this.state.getSession().close(); // } new File("out.txt").delete(); } @Test public void testAcceptInValidParameter() { state.setInput("selecx "); assertThat(command.accept(state), is(false)); } @Test public void testAcceptInValidParameter2() { final ConsoleState state = new ConsoleState(null); state.setInput("add select"); assertThat(command.accept(state), is(false)); } @Test public void testAcceptInValidParameter3() { final ConsoleState state = new ConsoleState(null); state.setInput("selectx"); assertThat(command.accept(state), is(false)); } @Test public void testAcceptInValidParameter4() { final ConsoleState state = new ConsoleState(null); state.setInput("selectx xx"); assertThat(command.accept(state), is(false)); } @Test public void testAcceptInValidParameter5() { final ConsoleState state = new ConsoleState(null); state.setInput("select *; > "); assertThat(command.accept(state), is(false)); } @Test public void testAcceptInValidParameter6() { final ConsoleState state = new ConsoleState(null); state.setInput("select *; < "); assertThat(command.accept(state), is(false)); } @Test(expected = IllegalArgumentException.class) public void testAcceptNull() { assertThat(command.accept(null), is(false)); } @Test public void testAcceptNullInout() { state.setInput(null); assertThat(command.accept(state), is(false)); } @Test public void testAcceptValidMultiLineParameter() { state.setInput("define"); assertThat(command.accept(state), is(true)); command.execute(reader, out, state); assertThat(state.getInput(), is("")); assertThat(state.getBuffer(), is("define\n")); state.setInput("anything here"); assertThat(command.accept(state), is(true)); command.execute(reader, out, state); assertThat(state.getInput(), is("")); assertThat(state.getBuffer(), is("define\nanything here\n")); } @Test public void testAcceptValidMultiLineParameter1() { state.setInput("select"); assertThat(command.accept(state), is(true)); command.execute(reader, out, state); assertThat(state.getInput(), is("")); assertThat(state.getBuffer(), is("select\n")); state.setInput("anything here"); assertThat(command.accept(state), is(true)); command.execute(reader, out, state); assertThat(state.getInput(), is("")); assertThat(state.getBuffer(), is("select\nanything here\n")); } @Test public void testAcceptValidMultiLineParameter2() { state.setInput("use"); assertThat(command.accept(state), is(true)); command.execute(reader, out, state); assertThat(state.getInput(), is("")); assertThat(state.getBuffer(), is("use\n")); state.setInput("anything here"); assertThat(command.accept(state), is(true)); command.execute(reader, out, state); assertThat(state.getInput(), is("")); assertThat(state.getBuffer(), is("use\nanything here\n")); } @Test public void testAcceptValidParameter() { state.setInput("select *; > test.out"); assertThat(command.accept(state), is(true)); } @Test public void testAcceptValidParameter2() { state.setInput("select *;"); assertThat(command.accept(state), is(true)); } @Test public void testAcceptValidParameter3() { state.setInput("select"); assertThat(command.accept(state), is(true)); } @Test public void testAcceptValidParameter4() { state.setInput("use"); assertThat(command.accept(state), is(true)); } @Test public void testAcceptValidParameter5() { state.setInput("define"); assertThat(command.accept(state), is(true)); } @Test(expected = IllegalArgumentException.class) public void testExecuteNull() { command.execute(null, null, null); } @Test public void testInvalidMultiLineQueryWithTargetError() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state.setInput("define "); state.appendBuffer("something"); command.execute(reader, out, state); assertThat(state.getLastQuery(), is("")); assertThat(state.getBuffer(), is("define \n")); assertThat(state.getActiveCommand(), is(notNullValue())); state .setInput("target org.openspotlight.graph.query.console.test.domain.JavaInterface select * by link JavaTypeMethod (b); > out.txt"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat( state.getLastQuery(), is("define \ntarget org.openspotlight.graph.query.console.test.domain.JavaInterface select * by link JavaTypeMethod (b);")); assertThat(state.getActiveCommand(), is(nullValue())); final File generatedFile = new File("out.txt"); assertThat(generatedFile.exists(), is(false)); } @Test public void testInvalidMultiLineQueryWithVariablesError() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state.setInput("select "); state.appendBuffer("something"); command.execute(reader, out, state); assertThat(state.getLastQuery(), is("")); assertThat(state.getBuffer(), is("select \n")); assertThat(state.getActiveCommand(), is(notNullValue())); state .setInput("** where org.openspotlight.graph.query.console.test.domain.JavaInterface property caption == $var; > out.txt"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat( state.getLastQuery(), is("select \n** where org.openspotlight.graph.query.console.test.domain.JavaInterface property caption == $var;")); assertThat(state.getActiveCommand(), is(nullValue())); final File generatedFile = new File("out.txt"); assertThat(generatedFile.exists(), is(false)); } @Test public void testInvalidQueryWithTargetError() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state .setInput("define target org.openspotlight.graph.query.console.test.domain.JavaInterface select * by link JavaTypeMethod (b); > out.txt"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat( state.getLastQuery(), is("define target org.openspotlight.graph.query.console.test.domain.JavaInterface select * by link JavaTypeMethod (b);")); final File generatedFile = new File("out.txt"); assertThat(generatedFile.exists(), is(false)); } @Test public void testInvalidQueryWithVariablesError() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state .setInput("select ** where org.openspotlight.graph.query.console.test.domain.JavaInterface property caption == $var; > out.txt"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat( state.getLastQuery(), is("select ** where org.openspotlight.graph.query.console.test.domain.JavaInterface property caption == $var;")); final File generatedFile = new File("out.txt"); assertThat(generatedFile.exists(), is(false)); } @Test public void testValidMultiLineParameter() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state.setInput("select "); state.appendBuffer("something"); command.execute(reader, out, state); assertThat(state.getLastQuery(), is("")); assertThat(state.getBuffer(), is("select \n")); assertThat(state.getActiveCommand(), is(notNullValue())); state.setInput("*;"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat(state.getLastQuery(), is("select \n*;")); assertThat(state.getActiveCommand(), is(nullValue())); } @Test public void testValidMultiLineParameter2() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state.setInput("select "); state.appendBuffer("something"); command.execute(reader, out, state); assertThat(state.getLastQuery(), is("")); assertThat(state.getBuffer(), is("select \n")); assertThat(state.getActiveCommand(), is(notNullValue())); state.setInput("*; > out.txt"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat(state.getLastQuery(), is("select \n*;")); assertThat(state.getActiveCommand(), is(nullValue())); final File generatedFile = new File("out.txt"); assertThat(generatedFile.isFile(), is(true)); final String fileContent = getFileContent(generatedFile); assertThat(fileContent, is(is(notNullValue()))); assertThat(fileContent.length(), is(not(0))); } @Test public void testValidMultiLineParameterSyntaxError() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state.setInput("select "); state.appendBuffer("something"); command.execute(reader, out, state); assertThat(state.getLastQuery(), is("")); assertThat(state.getBuffer(), is("select \n")); assertThat(state.getActiveCommand(), is(notNullValue())); state.setInput("*?*; > out.txt"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat(state.getLastQuery(), is("select \n*?*;")); assertThat(state.getActiveCommand(), is(nullValue())); final File generatedFile = new File("out.txt"); assertThat(generatedFile.exists(), is(false)); } @Test public void testValidParameter() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state.setInput("select *;"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat(state.getLastQuery(), is("select *;")); } @Test public void testValidParameter2() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state.setInput("select *; > out.txt"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat(state.getLastQuery(), is("select *;")); final File generatedFile = new File("out.txt"); assertThat(generatedFile.isFile(), is(true)); final String fileContent = getFileContent(generatedFile); assertThat(fileContent, is(notNullValue())); assertThat(fileContent.length(), is(not(0))); } @Test public void testValidParameterSyntaxError() throws SLException, IOException, ClassNotFoundException { final GraphConnection graphConnection = new GraphConnection(); command = new QueryCommand(); state = new ConsoleState(graphConnection.connect("localhost", 7070, "sa", "sa", DEFAULT_REPOSITORY_NAME).from( GraphLocation.SERVER)); state.setInput("select *?*; > out.txt"); command.execute(reader, out, state); assertThat(state.getBuffer().length(), is(0)); assertThat(state.getLastQuery(), is("select *?*;")); final File generatedFile = new File("out.txt"); assertThat(generatedFile.exists(), is(false)); } }