/*************************GO-LICENSE-START********************************* * Copyright 2015 ThoughtWorks, Inc. * * Licensed 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. *************************GO-LICENSE-END***********************************/ package com.thoughtworks.go.agent; import com.thoughtworks.go.agent.launcher.DownloadableFile; import com.thoughtworks.go.plugin.infra.PluginManager; import com.thoughtworks.go.plugin.infra.monitor.DefaultPluginJarLocationMonitor; import com.thoughtworks.go.util.SystemEnvironment; import com.thoughtworks.go.util.ZipUtil; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.io.File; import java.io.IOException; import static org.junit.Assert.fail; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class AgentPluginsInitializerTest { @Mock private ZipUtil zipUtil; @Mock private PluginManager pluginManager; @Mock private DefaultPluginJarLocationMonitor pluginJarLocationMonitor; @Mock private SystemEnvironment systemEnvironment; private AgentPluginsInitializer agentPluginsInitializer; @Before public void setUp() throws Exception { agentPluginsInitializer = new AgentPluginsInitializer(pluginManager, pluginJarLocationMonitor, zipUtil, systemEnvironment); when(systemEnvironment.get(SystemEnvironment.AGENT_PLUGINS_PATH)).thenReturn(SystemEnvironment.PLUGINS_PATH); } @Test public void shouldExtractPluginZip() throws Exception { agentPluginsInitializer.onApplicationEvent(null); verify(zipUtil).unzip(DownloadableFile.AGENT_PLUGINS.getLocalFile(), new File(SystemEnvironment.PLUGINS_PATH)); } @Test public void shouldInitializePluginJarLocationMonitorAndStartPluginInfrastructureAfterPluginZipExtracted() throws Exception { InOrder inOrder = inOrder(zipUtil, pluginManager, pluginJarLocationMonitor); agentPluginsInitializer.onApplicationEvent(null); inOrder.verify(zipUtil).unzip(DownloadableFile.AGENT_PLUGINS.getLocalFile(), new File(SystemEnvironment.PLUGINS_PATH)); inOrder.verify(pluginJarLocationMonitor).initialize(); inOrder.verify(pluginManager).startInfrastructure(false); verify(pluginManager, never()).registerPluginsFolderChangeListener(); } @Test public void shouldHandleIOExceptionQuietly() throws Exception { doThrow(new IOException()).when(zipUtil).unzip(DownloadableFile.AGENT_PLUGINS.getLocalFile(), new File(SystemEnvironment.PLUGINS_PATH)); try { agentPluginsInitializer.onApplicationEvent(null); } catch (Exception e) { fail("should have handled IOException"); } } @Test public void shouldAllExceptionsExceptionQuietly() throws Exception { doThrow(new IOException()).when(zipUtil).unzip(DownloadableFile.AGENT_PLUGINS.getLocalFile(), new File(SystemEnvironment.PLUGINS_PATH)); try { doThrow(new RuntimeException("message")).when(pluginJarLocationMonitor).initialize(); agentPluginsInitializer.onApplicationEvent(null); } catch (Exception e) { fail("should have handled IOException"); } } }