blob: 79fe95de2080ab2ecd222ce587b7d816bf2fa051 [file] [log] [blame]
/**
* 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.rya.shell;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
import java.io.IOException;
import org.apache.rya.api.client.Install.InstallConfiguration;
import org.apache.rya.shell.SharedShellState.ConnectionState;
import org.apache.rya.shell.SharedShellState.ShellState;
import org.apache.rya.shell.util.InstallPrompt;
import org.apache.rya.shell.util.PasswordPrompt;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.shell.Bootstrap;
import org.springframework.shell.core.CommandResult;
import org.springframework.shell.core.JLineShellComponent;
/**
* Integration tests the functions of the Mongo Rya Shell.
*/
public class MongoRyaShellIT extends RyaShellMongoITBase {
@Test
public void connectMongo_noAuth() throws IOException {
final JLineShellComponent shell = getTestShell();
// Connect to the Mongo instance.
final String cmd =
RyaConnectionCommands.CONNECT_MONGO_CMD + " " +
"--hostname " + super.conf.getMongoHostname() + " " +
"--port " + super.conf.getMongoPort();
final CommandResult connectResult = shell.executeCommand(cmd);
// Ensure the connection was successful.
assertTrue(connectResult.isSuccess());
}
@Test
public void printConnectionDetails_notConnected() {
final JLineShellComponent shell = getTestShell();
// Run the print connection details command.
final CommandResult printResult = shell.executeCommand( RyaConnectionCommands.PRINT_CONNECTION_DETAILS_CMD );
final String msg = (String) printResult.getResult();
final String expected = "The shell is not connected to anything.";
assertEquals(expected, msg);
}
@Test
public void printConnectionDetails_connectedToMongo_noAuths() throws IOException {
final JLineShellComponent shell = getTestShell();
// Connect to the Mongo instance.
final String cmd =
RyaConnectionCommands.CONNECT_MONGO_CMD + " " +
"--hostname " + super.conf.getMongoHostname() + " " +
"--port " + super.conf.getMongoPort();
shell.executeCommand(cmd);
// Run the print connection details command.
final CommandResult printResult = shell.executeCommand( RyaConnectionCommands.PRINT_CONNECTION_DETAILS_CMD );
final String msg = (String) printResult.getResult();
final String expected =
"The shell is connected to an instance of MongoDB using the following parameters:\n" +
" Hostname: " + super.conf.getMongoHostname() + "\n" +
" Port: " + super.conf.getMongoPort() + "\n";
assertEquals(expected, msg);
}
@Test
public void printConnectionDetails_connectedToMongo_auths() throws IOException {
final Bootstrap bootstrap = getTestBootstrap();
final JLineShellComponent shell = getTestShell();
// Mock the user entering the correct password.
final ApplicationContext context = bootstrap.getApplicationContext();
final PasswordPrompt mockPrompt = context.getBean( PasswordPrompt.class );
when(mockPrompt.getPassword()).thenReturn("password".toCharArray());
// Connect to the Mongo instance.
final String cmd =
RyaConnectionCommands.CONNECT_MONGO_CMD + " " +
"--hostname " + super.conf.getMongoHostname() + " " +
"--port " + super.conf.getMongoPort() + " " +
"--username bob";
shell.executeCommand(cmd);
// Run the print connection details command.
final CommandResult printResult = shell.executeCommand( RyaConnectionCommands.PRINT_CONNECTION_DETAILS_CMD );
final String msg = (String) printResult.getResult();
final String expected =
"The shell is connected to an instance of MongoDB using the following parameters:\n" +
" Hostname: " + super.conf.getMongoHostname() + "\n" +
" Port: " + super.conf.getMongoPort() + "\n" +
" Username: bob\n";
assertEquals(expected, msg);
}
@Test
public void connectToInstance_instanceDoesNotExist() throws IOException {
final JLineShellComponent shell = getTestShell();
// Connect to the Mongo instance.
String cmd =
RyaConnectionCommands.CONNECT_MONGO_CMD + " " +
"--hostname " + super.conf.getMongoHostname() + " " +
"--port " + super.conf.getMongoPort();
shell.executeCommand(cmd);
// Try to connect to a non-existing instance.
cmd = RyaConnectionCommands.CONNECT_INSTANCE_CMD + " --instance doesNotExist";
final CommandResult result = shell.executeCommand(cmd);
assertFalse( result.isSuccess() );
}
@Test
public void connectToInstance_noAuths() throws IOException {
final Bootstrap bootstrap = getTestBootstrap();
final JLineShellComponent shell = getTestShell();
// Connect to the Mongo instance.
String cmd =
RyaConnectionCommands.CONNECT_MONGO_CMD + " " +
"--hostname " + super.conf.getMongoHostname() + " " +
"--port " + super.conf.getMongoPort();
shell.executeCommand(cmd);
// Install an instance of rya.
final String instanceName = "testInstance";
final InstallConfiguration installConf = InstallConfiguration.builder().build();
final ApplicationContext context = bootstrap.getApplicationContext();
final InstallPrompt installPrompt = context.getBean( InstallPrompt.class );
when(installPrompt.promptInstanceName()).thenReturn("testInstance");
when(installPrompt.promptInstallConfiguration("testInstance")).thenReturn( installConf );
when(installPrompt.promptVerified(instanceName, installConf)).thenReturn(true);
CommandResult result = shell.executeCommand( RyaAdminCommands.INSTALL_CMD );
assertTrue( result.isSuccess() );
// Connect to the instance that was just installed.
cmd = RyaConnectionCommands.CONNECT_INSTANCE_CMD + " --instance " + instanceName;
result = shell.executeCommand(cmd);
assertTrue( result.isSuccess() );
// Verify the shell state indicates it is connected to an instance.
final SharedShellState sharedState = context.getBean( SharedShellState.class );
final ShellState state = sharedState.getShellState();
assertEquals(ConnectionState.CONNECTED_TO_INSTANCE, state.getConnectionState());
}
@Test
public void disconnect() throws IOException {
final JLineShellComponent shell = getTestShell();
// Connect to the Mongo instance.
final String cmd =
RyaConnectionCommands.CONNECT_MONGO_CMD + " " +
"--hostname " + super.conf.getMongoHostname() + " " +
"--port " + super.conf.getMongoPort();
shell.executeCommand(cmd);
// Disconnect from it.
final CommandResult disconnectResult = shell.executeCommand( RyaConnectionCommands.DISCONNECT_COMMAND_NAME_CMD );
assertTrue( disconnectResult.isSuccess() );
}
// TODO the rest of them?
}