/* * Copyright 2014-present Facebook, 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. */ package com.facebook.buck.io; import static org.junit.Assert.assertEquals; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.util.HashSet; import java.util.Set; import org.junit.Test; public class MorePosixFilePermissionsTest { static class Sample { public final Set<PosixFilePermission> permissions; public final long mode; public Sample(long mode, Set<PosixFilePermission> permissions) { this.permissions = Preconditions.checkNotNull(permissions); this.mode = mode; } } // Some examples of converting between unix modes and perm sets. @SuppressWarnings("PMD.AvoidUsingOctalValues") private static final ImmutableList<Sample> CONVERSION_SAMPLES = ImmutableList.of( new Sample(040, Sets.newHashSet(PosixFilePermission.GROUP_READ)), new Sample( 0600, Sets.newHashSet(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE)), new Sample(0777, Sets.newHashSet(PosixFilePermission.values())), new Sample(01, Sets.newHashSet(PosixFilePermission.OTHERS_EXECUTE)), new Sample(0, new HashSet<PosixFilePermission>())); // Some examples that test various cases of adding in execute perms for readers. private static final ImmutableMap<String, String> ADD_EXECUTE_PERM_SAMPLES = ImmutableMap.of( "rw-r--r--", "rwxr-xr-x", "rw----r--", "rwx---r-x", "------r--", "------r-x", "---------", "---------", "r-x------", "r-x------"); @Test public void testConversionToAndFromDoesNotChangePermissions() { for (Sample sample : CONVERSION_SAMPLES) { assertEquals( sample.permissions, MorePosixFilePermissions.fromMode(MorePosixFilePermissions.toMode(sample.permissions))); } } @Test public void testConversionToAndFromDoesNotChangeMode() { for (Sample sample : CONVERSION_SAMPLES) { assertEquals( sample.mode, MorePosixFilePermissions.toMode(MorePosixFilePermissions.fromMode(sample.mode))); } } @Test public void testModeAndPermissionsAreEqualAfterConversionEitherWay() { for (Sample sample : CONVERSION_SAMPLES) { assertEquals(MorePosixFilePermissions.fromMode(sample.mode), sample.permissions); assertEquals(sample.mode, MorePosixFilePermissions.toMode(sample.permissions)); } } @Test public void testAddingExecutePermissionsIfReadable() { for (ImmutableMap.Entry<String, String> ent : ADD_EXECUTE_PERM_SAMPLES.entrySet()) { assertEquals( MorePosixFilePermissions.addExecutePermissionsIfReadable( PosixFilePermissions.fromString(ent.getKey())), PosixFilePermissions.fromString(ent.getValue())); } } }