Mercurial > hg > release > thermostat-0.13
changeset 890:7765a6857a8d
Fix connect command and add tests
Fix the currently-broken connect command and add integration tests to
ensure the connect and disconnect commands stay working.
Reviewed-by: jerboaa
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-January/005000.html
author | Omair Majid <omajid@redhat.com> |
---|---|
date | Mon, 07 Jan 2013 11:50:49 -0500 |
parents | 55f03d096318 |
children | 3477dae0e6da |
files | distribution/config/commands/connect.properties distribution/config/commands/disconnect.properties distribution/src/test/java/com/redhat/thermostat/distribution/CliTest.java distribution/src/test/java/com/redhat/thermostat/distribution/IntegrationTest.java distribution/src/test/java/com/redhat/thermostat/distribution/StorageConnectionTest.java |
diffstat | 5 files changed, 119 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/distribution/config/commands/connect.properties Mon Jan 07 10:44:01 2013 -0500 +++ b/distribution/config/commands/connect.properties Mon Jan 07 11:50:49 2013 -0500 @@ -5,6 +5,7 @@ thermostat-storage-mongodb-${project.version}.jar, \ mongo.jar, \ commons-beanutils.jar, \ + commons-codec.jar, \ commons-collections.jar, \ commons-logging.jar, \ httpcomponents-core.jar, \
--- a/distribution/config/commands/disconnect.properties Mon Jan 07 10:44:01 2013 -0500 +++ b/distribution/config/commands/disconnect.properties Mon Jan 07 11:50:49 2013 -0500 @@ -2,7 +2,7 @@ description = disconnect from the currently used storage -usage = thermostat disconnect +usage = disconnect # No options necessary for this command #options =
--- a/distribution/src/test/java/com/redhat/thermostat/distribution/CliTest.java Mon Jan 07 10:44:01 2013 -0500 +++ b/distribution/src/test/java/com/redhat/thermostat/distribution/CliTest.java Mon Jan 07 11:50:49 2013 -0500 @@ -122,10 +122,10 @@ public void testShell() throws Exception { Spawn shell = spawnThermostat("shell"); - shell.expect("Thermostat >"); + shell.expect(SHELL_PROMPT); shell.send("help\n"); - shell.expect("Thermostat >"); + shell.expect(SHELL_PROMPT); assertMatchesHelpCommandList(shell.getCurrentStandardOutContents());
--- a/distribution/src/test/java/com/redhat/thermostat/distribution/IntegrationTest.java Mon Jan 07 10:44:01 2013 -0500 +++ b/distribution/src/test/java/com/redhat/thermostat/distribution/IntegrationTest.java Mon Jan 07 11:50:49 2013 -0500 @@ -57,6 +57,8 @@ public static final long TIMEOUT_IN_SECONDS = 30; + public static final String SHELL_PROMPT = "Thermostat >"; + public static String getThermostatExecutable() { return "target/bin/thermostat"; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distribution/src/test/java/com/redhat/thermostat/distribution/StorageConnectionTest.java Mon Jan 07 11:50:49 2013 -0500 @@ -0,0 +1,113 @@ +/* + * Copyright 2013 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat 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 + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * <http://www.gnu.org/licenses/>. + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.distribution; + +import java.io.IOException; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; + +import expectj.ExpectJException; +import expectj.Spawn; +import expectj.TimeoutException; + +public class StorageConnectionTest extends IntegrationTest { + + @BeforeClass + public static void setUpOnce() throws IOException, TimeoutException, ExpectJException { + Spawn storage = spawnThermostat("storage", "--start"); + storage.expect("pid:"); + storage.expectClose(); + + assertNoExceptions(storage.getCurrentStandardOutContents(), storage.getCurrentStandardErrContents()); + } + + @AfterClass + public static void tearDownOnce() throws IOException, TimeoutException, ExpectJException { + Spawn storage = spawnThermostat("storage", "--stop"); + storage.expect("server shutdown complete"); + storage.expectClose(); + + assertNoExceptions(storage.getCurrentStandardOutContents(), storage.getCurrentStandardErrContents()); + } + + @Test + public void testConnect() throws ExpectJException, TimeoutException, IOException { + Spawn shell = spawnThermostat("shell"); + + shell.expect(SHELL_PROMPT); + shell.send("connect -d mongodb://127.0.0.1:27518\n"); + shell.expect(SHELL_PROMPT); + shell.send("exit\n"); + shell.expectClose(); + + assertCommandIsFound(shell.getCurrentStandardOutContents(), shell.getCurrentStandardErrContents()); + assertNoExceptions(shell.getCurrentStandardOutContents(), shell.getCurrentStandardErrContents()); + } + + @Test + public void testDisconnectWithoutConnecting() throws ExpectJException, TimeoutException, IOException { + Spawn shell = spawnThermostat("shell"); + + shell.expect(SHELL_PROMPT); + shell.send("disconnect\n"); + shell.expect(SHELL_PROMPT); + shell.send("exit\n"); + shell.expectClose(); + + assertCommandIsFound(shell.getCurrentStandardOutContents(), shell.getCurrentStandardErrContents()); + assertNoExceptions(shell.getCurrentStandardOutContents(), shell.getCurrentStandardErrContents()); + } + + @Test + public void testConnectAndDisconnectInShell() throws IOException, TimeoutException, ExpectJException { + Spawn shell = spawnThermostat("shell"); + + shell.expect(SHELL_PROMPT); + shell.send("connect -d mongodb://127.0.0.1:27518\n"); + shell.expect(SHELL_PROMPT); + shell.send("disconnect\n"); + shell.send("exit\n"); + shell.expectClose(); + + assertNoExceptions(shell.getCurrentStandardOutContents(), shell.getCurrentStandardErrContents()); + } + + // TODO add a test to make sure connect/disconnect is not visible outside the shell +}