001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.security.access; 019 020import static org.junit.jupiter.api.Assertions.assertEquals; 021import static org.junit.jupiter.api.Assertions.assertTrue; 022import static org.junit.jupiter.api.Assertions.fail; 023 024import org.apache.hadoop.hbase.TableName; 025import org.apache.hadoop.hbase.security.access.Permission.Action; 026import org.apache.hadoop.hbase.testclassification.SecurityTests; 027import org.apache.hadoop.hbase.testclassification.SmallTests; 028import org.apache.hadoop.hbase.util.Bytes; 029import org.junit.jupiter.api.Tag; 030import org.junit.jupiter.api.Test; 031 032@Tag(SecurityTests.TAG) 033@Tag(SmallTests.TAG) 034public class TestPermissionBuilder { 035 036 @Test 037 public void testBuildGlobalPermission() { 038 // check global permission with empty action 039 Permission permission = Permission.newBuilder().build(); 040 assertTrue(permission instanceof GlobalPermission); 041 assertEquals(0, permission.getActions().length); 042 043 // check global permission with ADMIN action 044 permission = Permission.newBuilder().withActionCodes(Bytes.toBytes("A")).build(); 045 assertTrue(permission instanceof GlobalPermission); 046 assertEquals(1, permission.getActions().length); 047 assertTrue(permission.getActions()[0] == Action.ADMIN); 048 049 byte[] qualifier = Bytes.toBytes("q"); 050 try { 051 permission = Permission.newBuilder().withQualifier(qualifier) 052 .withActions(Action.CREATE, Action.READ).build(); 053 fail("Should throw NPE"); 054 } catch (NullPointerException e) { 055 // catch NPE because set qualifier but table name is null 056 } 057 058 permission = Permission.newBuilder().withActionCodes(Bytes.toBytes("ACP")) 059 .withActions(Action.READ, Action.ADMIN).build(); 060 assertEquals(3, permission.getActions().length); 061 assertEquals(Action.READ, permission.getActions()[0]); 062 assertEquals(Action.CREATE, permission.getActions()[1]); 063 assertEquals(Action.ADMIN, permission.getActions()[2]); 064 } 065 066 @Test 067 public void testBuildNamespacePermission() { 068 String namespace = "ns"; 069 // check namespace permission with CREATE and READ actions 070 Permission permission = 071 Permission.newBuilder(namespace).withActions(Action.CREATE, Action.READ).build(); 072 assertTrue(permission instanceof NamespacePermission); 073 NamespacePermission namespacePermission = (NamespacePermission) permission; 074 assertEquals(namespace, namespacePermission.getNamespace()); 075 assertEquals(2, permission.getActions().length); 076 assertEquals(Action.READ, permission.getActions()[0]); 077 assertEquals(Action.CREATE, permission.getActions()[1]); 078 079 byte[] family = Bytes.toBytes("f"); 080 try { 081 permission = Permission.newBuilder(namespace).withFamily(family) 082 .withActions(Action.CREATE, Action.READ).build(); 083 fail("Should throw NPE"); 084 } catch (NullPointerException e) { 085 // catch NPE because set family but table name is null 086 } 087 } 088 089 @Test 090 public void testBuildTablePermission() { 091 TableName tableName = TableName.valueOf("ns", "table"); 092 byte[] family = Bytes.toBytes("f"); 093 byte[] qualifier = Bytes.toBytes("q"); 094 // check table permission without family or qualifier 095 Permission permission = 096 Permission.newBuilder(tableName).withActions(Action.WRITE, Action.READ).build(); 097 assertTrue(permission instanceof TablePermission); 098 assertEquals(2, permission.getActions().length); 099 assertEquals(Action.READ, permission.getActions()[0]); 100 assertEquals(Action.WRITE, permission.getActions()[1]); 101 TablePermission tPerm = (TablePermission) permission; 102 assertEquals(tableName, tPerm.getTableName()); 103 assertEquals(null, tPerm.getFamily()); 104 assertEquals(null, tPerm.getQualifier()); 105 106 // check table permission with family 107 permission = 108 Permission.newBuilder(tableName).withFamily(family).withActions(Action.EXEC).build(); 109 assertTrue(permission instanceof TablePermission); 110 assertEquals(1, permission.getActions().length); 111 assertEquals(Action.EXEC, permission.getActions()[0]); 112 tPerm = (TablePermission) permission; 113 assertEquals(tableName, tPerm.getTableName()); 114 assertTrue(Bytes.equals(family, tPerm.getFamily())); 115 assertTrue(Bytes.equals(null, tPerm.getQualifier())); 116 117 // check table permission with family and qualifier 118 permission = 119 Permission.newBuilder(tableName).withFamily(family).withQualifier(qualifier).build(); 120 assertTrue(permission instanceof TablePermission); 121 assertEquals(0, permission.getActions().length); 122 tPerm = (TablePermission) permission; 123 assertEquals(tableName, tPerm.getTableName()); 124 assertTrue(Bytes.equals(family, tPerm.getFamily())); 125 assertTrue(Bytes.equals(qualifier, tPerm.getQualifier())); 126 } 127}