@Override public boolean matches(Object o) { String actualFile = (String) o; if ("Windows".equals(new SystemEnvironment().getOperatingSystemFamilyName())) { return expected.equalsIgnoreCase(actualFile); } return expected.equals(actualFile); }
private void validatePluginCompatibilityWithCurrentOS(GoPluginDescriptor descriptor) { String currentOS = systemEnvironment.getOperatingSystemFamilyName(); if (!descriptor.isCurrentOSValidForThisPlugin(currentOS)) { List<String> messages = Arrays.asList(String.format("Plugin with ID (%s) is not valid: Incompatible with current operating system '%s'. Valid operating systems are: %s.", descriptor.id(), currentOS, descriptor.about().targetOperatingSystems())); descriptor.markAsInvalid(messages, null); } }
@Before public void setUp() throws Exception { bundleDir = temporaryFolder.newFolder("bundleDir"); pluginDir = temporaryFolder.newFolder("pluginDir"); registry = mock(DefaultPluginRegistry.class); osgiManifestGenerator = mock(GoPluginOSGiManifest.DefaultGoPluginOSGiManifestCreator.class); osgiFramework = mock(GoPluginOSGiFramework.class); goPluginDescriptorBuilder = mock(GoPluginDescriptorBuilder.class); systemEnvironment = mock(SystemEnvironment.class); when(systemEnvironment.get(PLUGIN_ACTIVATOR_JAR_PATH)).thenReturn("defaultFiles/go-plugin-activator.jar"); when(systemEnvironment.get(PLUGIN_BUNDLE_PATH)).thenReturn(bundleDir.getAbsolutePath()); when(systemEnvironment.getOperatingSystemFamilyName()).thenReturn("Linux"); listener = new DefaultPluginJarChangeListener(registry, osgiManifestGenerator, osgiFramework, goPluginDescriptorBuilder, systemEnvironment); }
@Test public void shouldLoadAPluginWhenCurrentOSIsAmongTheListOfTargetOSesAsDeclaredByThePluginInItsXML() throws Exception { File pluginJarFile = new File(pluginDir, PLUGIN_JAR_FILE_NAME); copyPluginToTheDirectory(pluginDir, PLUGIN_JAR_FILE_NAME); GoPluginDescriptor descriptor = new GoPluginDescriptor("some.old.id", "1.0", new GoPluginDescriptor.About(null, null, null, null, null, asList("Windows", "Linux")), null, new File(PLUGIN_JAR_FILE_NAME), false); when(systemEnvironment.getOperatingSystemFamilyName()).thenReturn("Windows"); when(goPluginDescriptorBuilder.build(pluginJarFile, true)).thenReturn(descriptor); listener = new DefaultPluginJarChangeListener(registry, osgiManifestGenerator, osgiFramework, goPluginDescriptorBuilder, systemEnvironment); listener.pluginJarAdded(new PluginFileDetails(pluginJarFile, true)); verify(registry, times(1)).loadPlugin(descriptor); verify(osgiFramework, times(1)).loadPlugin(descriptor); }
@Test public void shouldLoadAPluginWhenAListOfTargetOSesIsNotDeclaredByThePluginInItsXML() throws Exception { File pluginJarFile = new File(pluginDir, PLUGIN_JAR_FILE_NAME); copyPluginToTheDirectory(pluginDir, PLUGIN_JAR_FILE_NAME); GoPluginDescriptor descriptor = new GoPluginDescriptor("some.old.id", "1.0", new GoPluginDescriptor.About(null, null, null, null, null, null), null, new File(PLUGIN_JAR_FILE_NAME), false); when(systemEnvironment.getOperatingSystemFamilyName()).thenReturn("Windows"); when(goPluginDescriptorBuilder.build(pluginJarFile, true)).thenReturn(descriptor); listener = new DefaultPluginJarChangeListener(registry, osgiManifestGenerator, osgiFramework, goPluginDescriptorBuilder, systemEnvironment); listener.pluginJarAdded(new PluginFileDetails(pluginJarFile, true)); verify(registry, times(1)).loadPlugin(descriptor); verify(osgiFramework, times(1)).loadPlugin(descriptor); }
when(newDescriptor.bundleLocation()).thenReturn(explodedDirectory); when(newDescriptor.fileName()).thenReturn(pluginJarFileName); when(newDescriptor.isCurrentOSValidForThisPlugin(systemEnvironment.getOperatingSystemFamilyName())).thenReturn(true); when(goPluginDescriptorBuilder.build(pluginJarFile, true)).thenReturn(newDescriptor);
@Test public void shouldNotLoadAPluginWhenCurrentOSIsNotAmongTheListOfTargetOSesAsDeclaredByThePluginInItsXML() throws Exception { File pluginJarFile = new File(pluginDir, PLUGIN_JAR_FILE_NAME); copyPluginToTheDirectory(pluginDir, PLUGIN_JAR_FILE_NAME); GoPluginDescriptor descriptor = new GoPluginDescriptor("some.old.id", "1.0", new GoPluginDescriptor.About(null, null, null, null, null, asList("Linux", "Mac OS X")), null, new File(PLUGIN_JAR_FILE_NAME), false); when(systemEnvironment.getOperatingSystemFamilyName()).thenReturn("Windows"); when(goPluginDescriptorBuilder.build(pluginJarFile, true)).thenReturn(descriptor); listener = new DefaultPluginJarChangeListener(registry, osgiManifestGenerator, osgiFramework, goPluginDescriptorBuilder, systemEnvironment); listener.pluginJarAdded(new PluginFileDetails(pluginJarFile, true)); verify(registry, times(1)).loadPlugin(descriptor); verifyZeroInteractions(osgiFramework); assertThat(descriptor.getStatus().getMessages().size(), is(1)); assertThat(descriptor.getStatus().getMessages().get(0), is("Plugin with ID (some.old.id) is not valid: Incompatible with current operating system 'Windows'. Valid operating systems are: [Linux, Mac OS X].")); }
@Test public void shouldNotLoadAPluginWhenCurrentOSIsNotAmongTheListOfTargetOSesAsDeclaredByThePluginInItsXMLForUpdatePath() throws Exception { File pluginJarFile = new File(pluginDir, PLUGIN_JAR_FILE_NAME); copyPluginToTheDirectory(pluginDir, PLUGIN_JAR_FILE_NAME); String pluginID = "some.id"; GoPluginDescriptor newPluginDescriptor = new GoPluginDescriptor(pluginID, "1.0", new GoPluginDescriptor.About(null, null, null, null, null, asList("Mac OS X")), null, new File(PLUGIN_JAR_FILE_NAME), true); when(goPluginDescriptorBuilder.build(pluginJarFile, false)).thenReturn(newPluginDescriptor); GoPluginDescriptor oldPluginDescriptor = new GoPluginDescriptor(pluginID, "1.0", new GoPluginDescriptor.About(null, null, null, null, null, asList("Linux", "Mac OS X")), null, new File(PLUGIN_JAR_FILE_NAME), true); when(registry.getPluginByIdOrFileName(pluginID, PLUGIN_JAR_FILE_NAME)).thenReturn(oldPluginDescriptor); when(systemEnvironment.getOperatingSystemFamilyName()).thenReturn("Linux"); when(goPluginDescriptorBuilder.build(pluginJarFile, true)).thenReturn(newPluginDescriptor); when(registry.unloadPlugin(newPluginDescriptor)).thenReturn(oldPluginDescriptor); listener = new DefaultPluginJarChangeListener(registry, osgiManifestGenerator, osgiFramework, goPluginDescriptorBuilder, systemEnvironment); listener.pluginJarAdded(new PluginFileDetails(pluginJarFile, true)); verify(registry, times(1)).loadPlugin(newPluginDescriptor); assertThat(newPluginDescriptor.getStatus().getMessages().size(), is(1)); assertThat(newPluginDescriptor.getStatus().getMessages().get(0), is("Plugin with ID (some.id) is not valid: Incompatible with current operating system 'Linux'. Valid operating systems are: [Mac OS X].")); }