Repository: ambari Updated Branches: refs/heads/branch-2.5 3fe36a457 -> 15ec7c337
AMBARI-19694. Post user creation hook - input csv generated with READ permissions (Laszlo Puskas via oleewere) Change-Id: I3ae59596f5817dbd60bed37f259ce54a5f16de39 Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/15ec7c33 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/15ec7c33 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/15ec7c33 Branch: refs/heads/branch-2.5 Commit: 15ec7c337335442ce6889aeedc1d6ff1dc86c4c6 Parents: 3fe36a4 Author: Laszlo Puskas <lpus...@hortonworks.com> Authored: Wed Jan 25 11:01:45 2017 +0100 Committer: oleewere <oleew...@gmail.com> Committed: Wed Jan 25 11:01:45 2017 +0100 ---------------------------------------------------------------------- .../users/CsvFilePersisterService.java | 24 +++++- .../CsvFilePersisterServiceFunctionalTest.java | 91 ++++++++++++++++++++ 2 files changed, 113 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/15ec7c33/ambari-server/src/main/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterService.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterService.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterService.java index d8ffe98..fe6bf35 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterService.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterService.java @@ -18,12 +18,21 @@ package org.apache.ambari.server.serveraction.users; +import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import javax.inject.Inject; import javax.inject.Singleton; @@ -51,10 +60,21 @@ public class CsvFilePersisterService implements CollectionPersisterService<Strin this.csvFile = csvFile; } + public Set<PosixFilePermission> getCsvPermissions() { + Set<PosixFilePermission> permissionsSet = new HashSet<>(); + permissionsSet.add(PosixFilePermission.OWNER_READ); + permissionsSet.add(PosixFilePermission.OWNER_WRITE); + permissionsSet.add(PosixFilePermission.GROUP_READ); + permissionsSet.add(PosixFilePermission.OTHERS_READ); + return permissionsSet; + } + @Inject public void init() throws IOException { - // make 3rd party dependencies be managed by the container (probably constructor binding or factory is needed) - fileWriter = new FileWriter(csvFile); + + Path csv = Files.createFile(Paths.get(csvFile), PosixFilePermissions.asFileAttribute(getCsvPermissions())); + fileWriter = new FileWriter(csv.toFile()); + csvPrinter = new CSVPrinter(fileWriter, CSVFormat.DEFAULT.withRecordSeparator(NEW_LINE_SEPARATOR)); } http://git-wip-us.apache.org/repos/asf/ambari/blob/15ec7c33/ambari-server/src/test/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterServiceFunctionalTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterServiceFunctionalTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterServiceFunctionalTest.java new file mode 100644 index 0000000..97529fe --- /dev/null +++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/users/CsvFilePersisterServiceFunctionalTest.java @@ -0,0 +1,91 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +package org.apache.ambari.server.serveraction.users; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.PosixFilePermission; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.assistedinject.FactoryModuleBuilder; + +/** + * Test cases for the persiter service implementation. + * For fully testing the behavior it builds up GUICE context. + */ +public class CsvFilePersisterServiceFunctionalTest { + + private static final String TEST_CSV = "/tmp/users.csv"; + + private static Injector injector; + private static CollectionPersisterServiceFactory serviceFactory; + private CsvFilePersisterService csvFileCsvFilePersisterService; + private Path testCsvPath; + + /** + * Guice module for testing service / factory behavior + */ + private static class TestPersistServiceModule extends AbstractModule { + @Override + protected void configure() { + install(new FactoryModuleBuilder().implement(CollectionPersisterService.class, CsvFilePersisterService.class).build(CollectionPersisterServiceFactory.class)); + } + } + + @BeforeClass + public static void beforeClass() { + injector = Guice.createInjector(new TestPersistServiceModule()); + serviceFactory = (CollectionPersisterServiceFactory) injector.getInstance(CollectionPersisterServiceFactory.class); + } + + @Before + public void before() { + csvFileCsvFilePersisterService = serviceFactory.createCsvFilePersisterService(TEST_CSV); + testCsvPath = Paths.get(TEST_CSV); + } + + @Test + public void shouldCreateCsvFileWithExpectedPermissions() throws IOException { + + Assert.assertNotNull(csvFileCsvFilePersisterService); + + Assert.assertTrue("The generated file couldn't be found", Files.exists(testCsvPath)); + + Assert.assertTrue("The generated files doesn't have all the expected permissions", Files.getPosixFilePermissions(testCsvPath).containsAll(csvFileCsvFilePersisterService.getCsvPermissions())); + + Assert.assertFalse("The generated file has more than the required permissions", Files.getPosixFilePermissions(testCsvPath).contains(PosixFilePermission.GROUP_EXECUTE)); + + } + + @After + public void after() throws IOException { + Files.deleteIfExists(Paths.get(TEST_CSV)); + } + +} \ No newline at end of file