/** * Copyright (c) Codice Foundation * <p> * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser * General Public License as published by the Free Software Foundation, either version 3 of the * License, or any later version. * <p> * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. A copy of the GNU Lesser General Public License * is distributed along with this program and can be found at * <http://www.gnu.org/licenses/lgpl.html>. */ package org.codice.ddf.ui.admin.api; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.codice.ddf.configuration.SystemBaseUrl; import org.codice.ddf.configuration.SystemInfo; import org.codice.ddf.ui.admin.api.impl.SystemPropertiesAdmin; import org.junit.Before; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class SystemPropertiesAdminTest { @Mock private GuestClaimsHandlerExt mockGuestClaimsHandlerExt; File etcFolder = null; File systemPropsFile = null; File userPropsFile = null; File userAttrsFile = null; int expectedSystemPropertiesCount = 0; @Before public void setUp() throws IOException { System.setProperty(SystemBaseUrl.PORT, "1234"); System.setProperty(SystemBaseUrl.HOST, "host"); expectedSystemPropertiesCount++; System.setProperty(SystemBaseUrl.HTTP_PORT, "4567"); expectedSystemPropertiesCount++; System.setProperty(SystemBaseUrl.HTTPS_PORT, "8901"); expectedSystemPropertiesCount++; System.setProperty(SystemInfo.ORGANIZATION, "org"); expectedSystemPropertiesCount++; System.setProperty(SystemInfo.SITE_CONTACT, "contact"); expectedSystemPropertiesCount++; System.setProperty(SystemInfo.SITE_NAME, "site"); expectedSystemPropertiesCount++; System.setProperty(SystemInfo.VERSION, "version"); expectedSystemPropertiesCount++; TemporaryFolder temporaryFolder = new TemporaryFolder(); temporaryFolder.create(); etcFolder = temporaryFolder.newFolder("etc"); System.setProperty("karaf.etc", etcFolder.getAbsolutePath()); systemPropsFile = new File(etcFolder, "system.properties"); userPropsFile = new File(etcFolder, "users.properties"); userAttrsFile = new File(etcFolder, "users.attributes"); } @Test public void testReadSystemProperties() { SystemPropertiesAdmin spa = new SystemPropertiesAdmin(mockGuestClaimsHandlerExt); List<SystemPropertyDetails> details = spa.readSystemProperties(); assertThat(getDetailsValue(details, SystemBaseUrl.HOST), equalTo("host")); assertThat(getDetailsValue(details, SystemBaseUrl.HTTP_PORT), equalTo("4567")); assertThat(getDetailsValue(details, SystemBaseUrl.HTTPS_PORT), equalTo("8901")); assertThat(getDetailsValue(details, SystemInfo.ORGANIZATION), equalTo("org")); assertThat(getDetailsValue(details, SystemInfo.SITE_CONTACT), equalTo("contact")); assertThat(getDetailsValue(details, SystemInfo.SITE_NAME), equalTo("site")); assertThat(getDetailsValue(details, SystemInfo.VERSION), equalTo("version")); assertThat(details.size(), is(expectedSystemPropertiesCount)); } @Test public void testWriteSystemPropertiesNullProps() { SystemPropertiesAdmin spa = new SystemPropertiesAdmin(mockGuestClaimsHandlerExt); spa.writeSystemProperties(null); List<SystemPropertyDetails> details = spa.readSystemProperties(); assertThat(SystemBaseUrl.getHost(), equalTo("host")); assertThat(SystemBaseUrl.getPort(), equalTo("1234")); assertThat(SystemBaseUrl.getHttpPort(), equalTo("4567")); assertThat(SystemBaseUrl.getHttpsPort(), equalTo("8901")); assertThat(SystemBaseUrl.getProtocol(), equalTo("https://")); assertThat(SystemInfo.getOrganization(), equalTo("org")); assertThat(SystemInfo.getSiteContatct(), equalTo("contact")); assertThat(SystemInfo.getSiteName(), equalTo("site")); assertThat(SystemInfo.getVersion(), equalTo("version")); assertThat(details.size(), is(expectedSystemPropertiesCount)); } @Test public void testWriteSystemProperties() throws Exception { Properties userProps = new Properties(); userProps.put("admin", "admin,group,somethingelse"); userProps.put("host", "host,group,somethingelse"); try (FileOutputStream outProps = new FileOutputStream(userPropsFile)) { userProps.store(outProps, null); } try (FileOutputStream outAttrs = new FileOutputStream(userAttrsFile)) { String json = "{\n" + " \"admin\" : {\n" + "\n" + " },\n" + " \"host\" : {\n" + "\n" + " }\n" + "}"; outAttrs.write(json.getBytes()); } SystemPropertiesAdmin spa = new SystemPropertiesAdmin(mockGuestClaimsHandlerExt); Map<String, String> map = new HashMap<>(); map.put(SystemBaseUrl.HOST, "newhost"); spa.writeSystemProperties(map); List<SystemPropertyDetails> details = spa.readSystemProperties(); assertThat(SystemBaseUrl.getHost(), equalTo("newhost")); assertThat(SystemBaseUrl.getPort(), equalTo("8901")); assertThat(SystemBaseUrl.getHttpPort(), equalTo("4567")); assertThat(SystemBaseUrl.getHttpsPort(), equalTo("8901")); assertThat(SystemBaseUrl.getProtocol(), equalTo("https://")); assertThat(SystemInfo.getOrganization(), equalTo("org")); assertThat(SystemInfo.getSiteContatct(), equalTo("contact")); assertThat(SystemInfo.getSiteName(), equalTo("site")); assertThat(SystemInfo.getVersion(), equalTo("version")); assertThat(details.size(), is(expectedSystemPropertiesCount)); //only writes out the changed props assertTrue(systemPropsFile.exists()); Properties sysProps = new Properties(); try (FileReader sysPropsReader = new FileReader(systemPropsFile)) { sysProps.load(sysPropsReader); assertThat(sysProps.size(), is(2)); assertThat(sysProps.getProperty(SystemBaseUrl.HOST), equalTo("newhost")); } userProps = new Properties(); try (FileReader userPropsReader = new FileReader(userPropsFile)) { userProps.load(userPropsReader); assertThat(userProps.size(), is(2)); assertThat(userProps.getProperty("newhost"), equalTo("host,group,somethingelse")); } map.put(SystemBaseUrl.HOST, "anotherhost"); spa.writeSystemProperties(map); userProps = new Properties(); try (FileReader userPropsReader = new FileReader(userPropsFile)) { userProps.load(userPropsReader); assertThat(userProps.size(), is(2)); assertThat(userProps.getProperty("anotherhost"), equalTo("host,group,somethingelse")); assertNull(userProps.getProperty("newhost")); assertNull(userProps.getProperty("host")); } try (BufferedReader userAttrsReader = new BufferedReader(new FileReader(userAttrsFile))) { String line = null; boolean hasHost = false; while ((line = userAttrsReader.readLine()) != null) { if (line.contains("anotherhost")) { hasHost = true; } } if (!hasHost) { fail("User attribute file did not get updated."); } } } private String getDetailsValue(List<SystemPropertyDetails> props, String key) { for (SystemPropertyDetails spd : props) { if (spd.getKey() .equals(key)) { return spd.getValue(); } } return "KeyNotFound"; } }