/*
 * 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.gobblin.util.filesystem;

import java.util.Collections;
import java.util.List;

import org.apache.hadoop.fs.permission.AclEntry;
import org.apache.hadoop.fs.permission.AclEntryScope;
import org.apache.hadoop.fs.permission.AclEntryType;
import org.apache.hadoop.fs.permission.FsAction;
import org.apache.hadoop.fs.permission.FsPermission;
import org.testng.Assert;
import org.testng.annotations.Test;


/** Tests for {@link OwnerAndPermission}*/
public class OwnerAndPermissionTest {

  @Test
  public void testOwnerAndPermissionCopyConstructor() {
    String owner = "testOwner";
    String group = "testGroup";
    FsPermission permission = new FsPermission((short) 0755);
    AclEntry aclEntry = new AclEntry.Builder()
        .setPermission(FsAction.READ_WRITE)
        .setName("test-acl")
        .setScope(AclEntryScope.DEFAULT)
        .setType(AclEntryType.GROUP)
        .build();
    List<AclEntry> aclEntries = Collections.singletonList(aclEntry);

    OwnerAndPermission ownerAndPermission = new OwnerAndPermission(owner, group, permission, aclEntries);
    OwnerAndPermission copyOwnerAndPermission = new OwnerAndPermission(ownerAndPermission);

    Assert.assertEquals(copyOwnerAndPermission.getOwner(), owner);
    Assert.assertEquals(copyOwnerAndPermission.getGroup(), group);
    Assert.assertEquals(copyOwnerAndPermission.getFsPermission(), permission);
    Assert.assertEquals(copyOwnerAndPermission.getAclEntries(), aclEntries);

    Assert.assertNotSame(ownerAndPermission, copyOwnerAndPermission);
    Assert.assertNotSame(ownerAndPermission.getFsPermission(), copyOwnerAndPermission.getFsPermission());
    Assert.assertNotSame(ownerAndPermission.getAclEntries(), copyOwnerAndPermission.getAclEntries());
  }
}
