blob: 672852a7566f57d72f4c005dac5c5ad657d6b944 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 ArSysOp and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alexander Fedorov <alexander.fedorov@arsysop.ru> - initial API and implementation
*******************************************************************************/
package org.eclipse.e4.core.internal.tests.about;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.Optional;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.services.about.AboutSections;
import org.eclipse.e4.core.services.about.ISystemInformation;
import org.eclipse.e4.core.services.translation.TranslationService;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
public class AboutTest {
@Test
public void testCreateSectionFilter() throws Exception {
String section = AboutSections.SECTION_SYSTEM_ENVIRONMENT;
BundleContext context = FrameworkUtil.getBundle(AboutTest.class).getBundleContext();
ServiceReference<ISystemInformation> reference = reference(context, section);
assertEquals("Invalid service metadata", section, reference.getProperty(AboutSections.SECTION));
}
@Test
public void testSystemEnvironmentVariables() throws Exception {
String printed = printSection(AboutSections.SECTION_SYSTEM_ENVIRONMENT);
System.getenv().keySet().forEach(key -> assertTrue(printed.contains(key)));
}
@Test
public void testSystemProperties() throws Exception {
String printed = printSection(AboutSections.SECTION_SYSTEM_PROPERTIES);
System.getProperties().keySet().forEach(key -> assertTrue(printed.contains(String.valueOf(key))));
}
@Test
public void testAppendInstalledFeatures() throws Exception {
// tested with InstalledFeaturesTest, just check that it is present here
String printed = printSection(AboutSections.SECTION_INSTALLED_FEATURES);
assertNotNull(printed);
}
@Test
public void testAppendInstalledBundles() throws Exception {
Bundle bundle = FrameworkUtil.getBundle(AboutTest.class);
IEclipseContext context = EclipseContextFactory.getServiceContext(bundle.getBundleContext());
context.set(TranslationService.LOCALE, Locale.getDefault());
String version = bundle.getVersion().toString();
String aboutMe = String.format("org.eclipse.e4.core.tests (%s) \"E4 Core Tests\" [Active]", version);
String printed = printSection(AboutSections.SECTION_INSTALLED_BUNDLES);
assertTrue(printed.contains(aboutMe));
}
@Test
public void testAppendUserPreferences() throws Exception {
Bundle bundle = FrameworkUtil.getBundle(AboutTest.class);
IEclipseContext context = EclipseContextFactory.getServiceContext(bundle.getBundleContext());
context.set(TranslationService.LOCALE, Locale.getDefault());
String printed = printSection(AboutSections.SECTION_USER_PREFERENCES);
assertFalse(printed.isEmpty());
}
@Test
public void testMaskPassword() throws Exception {
String key = "A_PASSWORD_PROPERTY";
String dec = "A_PASSWORD_VALUE";
String enc = "****************";
System.setProperty(key, dec);
String printed = printSection(AboutSections.SECTION_SYSTEM_PROPERTIES);
assertTrue(printed.contains(key + "=" + enc));
}
@Test
public void testMultilineValue() throws Exception {
String lf = System.lineSeparator();
String key = "A_MULTILINE_PROPERTY";
String value = "a" + "\n" + "b" + "\n" + "c";
String expected = "a" + lf + "b" + lf + "c";
System.setProperty(key, value);
String printed = printSection(AboutSections.SECTION_SYSTEM_PROPERTIES);
assertTrue(printed.contains(key + "=" + expected));
}
private String printSection(String section) throws Exception {
BundleContext context = FrameworkUtil.getBundle(AboutTest.class).getBundleContext();
ServiceReference<ISystemInformation> reference = reference(context, section);
ISystemInformation service = context.getService(reference);
try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(baos)) {
service.append(pw);
pw.flush();
return new String(baos.toByteArray(), Charset.defaultCharset());
} finally {
context.ungetService(reference);
}
}
private ServiceReference<ISystemInformation> reference(BundleContext context, String section)
throws InvalidSyntaxException {
String filter = AboutSections.createSectionFilter(section);
Optional<ServiceReference<ISystemInformation>> first = context
.getServiceReferences(ISystemInformation.class, filter)
.stream().findFirst();
assumeTrue("No reference found", first.isPresent());
return first.get();
}
}