/* * 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.geode.management.internal.cli.shell; import static org.junit.Assert.*; import java.io.File; import java.lang.reflect.Field; import java.nio.file.Files; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.rules.TemporaryFolder; import org.apache.geode.test.junit.categories.IntegrationTest; @Category(IntegrationTest.class) public class GfshHistoryJUnitTest { private File gfshHistoryFile; private GfshConfig gfshConfig; @Rule public TemporaryFolder tempDirectory = new TemporaryFolder(); @Before public void setUp() throws Exception { teardown(); gfshHistoryFile = tempDirectory.newFile("historyFile"); gfshConfig = new GfshConfig(gfshHistoryFile.getAbsolutePath(), "", // defaultPrompt 0, // historySize tempDirectory.getRoot().getAbsolutePath(), // logDir null, // logLevel null, // logLimit null, // logCount null // initFileName ); } @After public void teardown() throws Exception { // Null out static instance so Gfsh can be reinitialised Field gfshInstance = Gfsh.class.getDeclaredField("instance"); gfshInstance.setAccessible(true); gfshInstance.set(null, null); } @Test public void testHistoryFileIsCreated() throws Exception { Gfsh gfsh = Gfsh.getInstance(false, new String[] {}, gfshConfig); gfsh.executeScriptLine("connect --fake-param=foo"); List<String> lines = Files.readAllLines(gfshHistoryFile.toPath()); assertEquals(2, lines.size()); assertEquals(lines.get(1), "connect --fake-param=foo"); } @Test public void testHistoryFileDoesNotContainPasswords() throws Exception { Gfsh gfsh = Gfsh.getInstance(false, new String[] {}, gfshConfig); gfsh.executeScriptLine( "connect --password=foo --password = foo --password= goo --password =goo --password-param=blah --other-password-param= gah"); List<String> lines = Files.readAllLines(gfshHistoryFile.toPath()); assertEquals( "connect --password=***** --password = ***** --password= ***** --password =***** --password-param=***** --other-password-param= *****", lines.get(1)); } @Test public void testClearHistory() throws Exception { Gfsh gfsh = Gfsh.getInstance(false, new String[] {}, gfshConfig); gfsh.executeScriptLine("connect --fake-param=foo"); List<String> lines = Files.readAllLines(gfshHistoryFile.toPath()); assertEquals(2, lines.size()); // clear the history gfsh.clearHistory(); assertEquals(gfsh.getGfshHistory().size(), 0); assertFalse(gfshHistoryFile.exists()); } }