blob: 428438fcd5ed346079cf254d2fc5f0b71ddbc223 [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.cassandra.tools.nodetool;
import java.io.File;
import org.junit.BeforeClass;
import org.junit.Test;
import org.apache.cassandra.cql3.CQLTester;
import org.apache.cassandra.tools.ToolRunner;
import static org.apache.cassandra.tools.ToolRunner.invokeNodetool;
import static org.assertj.core.api.Assertions.assertThat;
/**o
* Tests for the {@code nodetool snapshot} command
*/
public class SnapshotTest extends CQLTester
{
@BeforeClass
public static void setup() throws Exception
{
startJMXServer();
}
@Test
public void testSnapshotAllKeyspaces()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot");
tool.assertOnCleanExit();
assertThat(tool.getExitCode()).isEqualTo(0);
assertThat(tool.getStdout()).contains("Requested creating snapshot(s) for [all keyspaces]");
}
@Test
public void testSnapshotSpecifySingleKeyspace()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "system_schema");
tool.assertOnCleanExit();
assertThat(tool.getExitCode()).isEqualTo(0);
assertThat(tool.getStdout()).contains("Requested creating snapshot(s) for [system_schema]");
}
@Test
public void testSnapshotSpecifyMultipleKeyspaces()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "system", "system_schema");
tool.assertOnCleanExit();
assertThat(tool.getExitCode()).isEqualTo(0);
assertThat(tool.getStdout()).contains("Requested creating snapshot(s) for [system, system_schema]");
}
@Test
public void testSnapshotWithName()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-t", "custom_snapshot_name");
tool.assertOnCleanExit();
assertThat(tool.getExitCode()).isEqualTo(0);
assertThat(tool.getStdout()).contains("Requested creating snapshot(s) for [all keyspaces] with snapshot name [custom_snapshot_name] and options {skipFlush=false}");
}
@Test
public void testInvalidSnapshotName()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-t", "invalid" + File.pathSeparatorChar + "name");
assertThat(tool.getExitCode()).isEqualTo(2);
assertThat(tool.getStderr()).contains("Snapshot name cannot contain " + File.pathSeparatorChar);
}
@Test
public void testSkipFlushOption()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-t", "skip_flush", "-sf");
tool.assertOnCleanExit();
assertThat(tool.getExitCode()).isEqualTo(0);
assertThat(tool.getStdout()).contains("Requested creating snapshot(s) for [all keyspaces] with snapshot name [skip_flush] and options {skipFlush=true}");
}
@Test
public void testTableOption()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-t", "table", "--table", "keyspaces", "system_schema");
tool.assertOnCleanExit();
assertThat(tool.getExitCode()).isEqualTo(0);
assertThat(tool.getStdout()).contains("Requested creating snapshot(s) for [system_schema] with snapshot name [table] and options {skipFlush=false}");
}
@Test
public void testInvalidTableWithMultipleKeyspacesOption()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-t", "table", "--table", "keyspaces", "system", "system_schema");
assertThat(tool.getExitCode()).isEqualTo(2);
assertThat(tool.getStderr()).contains("When specifying the table for a snapshot, you must specify one and only one keyspace");
}
@Test
public void testInvalidTableWithKeyspaceTableListOption()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-t", "table", "--table", "keyspaces", "-kt", "ks.table");
assertThat(tool.getExitCode()).isEqualTo(2);
assertThat(tool.getStderr()).contains("When specifying the Keyspace table list (using -kt,--kt-list,-kc,--kc.list), you must not also specify keyspaces to snapshot");
}
@Test
public void testInvalidTableWithoutKeyspaceOption()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-t", "table", "--table", "keyspaces");
assertThat(tool.getExitCode()).isEqualTo(2);
assertThat(tool.getStderr()).contains("When specifying the table for a snapshot, you must specify one and only one keyspace");
}
@Test
public void testKeyspaceTableListOption()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-t", "kt_option", "-kt", "system_schema.keyspaces,system_schema.aggregates");
tool.assertOnCleanExit();
assertThat(tool.getExitCode()).isEqualTo(0);
assertThat(tool.getStdout()).contains("Requested creating snapshot(s) for [system_schema.keyspaces,system_schema.aggregates] with snapshot name [kt_option] and options {skipFlush=false}");
}
@Test
public void testInvalidKeyspacesWithKeyspaceTableListOptions()
{
ToolRunner.ToolResult tool = invokeNodetool("snapshot", "-kt", "ks.table", "ks");
assertThat(tool.getExitCode()).isEqualTo(2);
assertThat(tool.getStderr()).contains("When specifying the Keyspace table list (using -kt,--kt-list,-kc,--kc.list), you must not also specify keyspaces to snapshot");
}
}