package org.lognavigator.controller; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.lognavigator.bean.Breadcrumb; import org.lognavigator.bean.DisplayType; import org.lognavigator.exception.AuthorizationException; import org.lognavigator.service.DefaultConfigService; import org.lognavigator.service.FakeLogAccessService; import org.lognavigator.util.Constants; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.ui.ExtendedModelMap; public class CommandControllerTest { private CommandController commandController; private MockHttpServletRequest request; @Before public void setup() throws Exception { commandController = new CommandController(); commandController.logAccessService = new FakeLogAccessService(); commandController.configService = new DefaultConfigService(); commandController.listController = new ListController(); commandController.listController.configService = new DefaultConfigService(); request = new MockHttpServletRequest(); } @Test public void testExecuteCommand_ModelMap() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "cat file.log"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.RAW; // when String viewName = commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); // then Assert.assertEquals(Constants.VIEW_RAW, viewName); Assert.assertEquals(true, request.getAttribute(Constants.SHOW_OPTIONS_KEY)); Assert.assertEquals(encoding, request.getAttribute(Constants.ENCODING_KEY)); Assert.assertEquals(displayType, request.getAttribute(Constants.DISPLAY_TYPE_KEY)); Assert.assertNotNull(request.getAttribute(Constants.BREADCRUMBS_KEY)); Assert.assertNotNull(model.get(Constants.RAW_CONTENT_KEY)); } @SuppressWarnings("unchecked") @Test public void testExecuteCommand_BreadCrumbs_TailFile() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "tail -1000 file.log"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.RAW; // when commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); // then List<Breadcrumb> breadcrumbs = (List<Breadcrumb>) request.getAttribute(Constants.BREADCRUMBS_KEY); Assert.assertEquals(2, breadcrumbs.size()); Assert.assertEquals(logAccessConfigId, breadcrumbs.get(0).getLabel()); Assert.assertEquals("file.log", breadcrumbs.get(1).getLabel()); } @SuppressWarnings("unchecked") @Test public void testExecuteCommand_BreadCrumbs_TailFolderFile() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "tail -1000 folder/file.log"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.RAW; // when commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); // then List<Breadcrumb> breadcrumbs = (List<Breadcrumb>) request.getAttribute(Constants.BREADCRUMBS_KEY); Assert.assertEquals(3, breadcrumbs.size()); Assert.assertEquals(logAccessConfigId, breadcrumbs.get(0).getLabel()); Assert.assertEquals("folder", breadcrumbs.get(1).getLabel()); Assert.assertEquals("file.log", breadcrumbs.get(2).getLabel()); } @SuppressWarnings("unchecked") @Test public void testExecuteCommand_BreadCrumbs_TailSubFolderFile() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "tail -1000 folder1/folder2/file.log"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.RAW; // when commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); // then List<Breadcrumb> breadcrumbs = (List<Breadcrumb>) request.getAttribute(Constants.BREADCRUMBS_KEY); Assert.assertEquals(4, breadcrumbs.size()); Assert.assertEquals(logAccessConfigId, breadcrumbs.get(0).getLabel()); Assert.assertEquals("folder1", breadcrumbs.get(1).getLabel()); Assert.assertEquals("folder2", breadcrumbs.get(2).getLabel()); Assert.assertEquals("file.log", breadcrumbs.get(3).getLabel()); } @SuppressWarnings("unchecked") @Test public void testExecuteCommand_BreadCrumbs_ListTarGzEntries() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "tar -ztvf backup/apache-access.tar.gz"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.TABLE; // when commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); // then List<Breadcrumb> breadcrumbs = (List<Breadcrumb>) request.getAttribute(Constants.BREADCRUMBS_KEY); Assert.assertEquals(3, breadcrumbs.size()); Assert.assertEquals(logAccessConfigId, breadcrumbs.get(0).getLabel()); Assert.assertEquals("backup", breadcrumbs.get(1).getLabel()); Assert.assertEquals("apache-access.tar.gz", breadcrumbs.get(2).getLabel()); } @SuppressWarnings("unchecked") @Test public void testExecuteCommand_BreadCrumbs_ListTarGzEntry() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "tar -O -zxf backup/apache-access.tar.gz backup/apache-access-3l.log.gz | gzip -dc | tail -1000"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.RAW; // when commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); // then List<Breadcrumb> breadcrumbs = (List<Breadcrumb>) request.getAttribute(Constants.BREADCRUMBS_KEY); Assert.assertEquals(4, breadcrumbs.size()); Assert.assertEquals(logAccessConfigId, breadcrumbs.get(0).getLabel()); Assert.assertEquals("backup", breadcrumbs.get(1).getLabel()); Assert.assertEquals("apache-access.tar.gz", breadcrumbs.get(2).getLabel()); Assert.assertEquals("apache-access-3l.log.gz", breadcrumbs.get(3).getLabel()); } @Test(expected=AuthorizationException.class) public void testExecuteCommand_ForbiddenCommand1() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "rm file.log"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.RAW; // when commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); } @Test(expected=AuthorizationException.class) public void testExecuteCommand_ForbiddenCommand2() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "ls | tail -1 | rm"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.RAW; // when commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); } @Test(expected=AuthorizationException.class) public void testExecuteCommand_ForbiddenCommand3() throws Exception { // given ExtendedModelMap model = new ExtendedModelMap(); String logAccessConfigId ="one-id"; String cmd = "> file.log"; String encoding = Constants.DEFAULT_ENCODING_OPTION; DisplayType displayType = DisplayType.RAW; // when commandController.executeCommand(model, request, logAccessConfigId, cmd, encoding, displayType); } }