001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to you under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.hadoop.hbase.quotas; 018 019import static org.junit.Assert.assertFalse; 020import static org.junit.Assert.assertTrue; 021import static org.junit.Assert.fail; 022 023import java.io.IOException; 024 025import org.apache.hadoop.hbase.HBaseClassTestRule; 026import org.apache.hadoop.hbase.TableName; 027import org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.QuotaGlobalsSettingsBypass; 028import org.apache.hadoop.hbase.testclassification.SmallTests; 029import org.junit.ClassRule; 030import org.junit.Test; 031import org.junit.experimental.categories.Category; 032 033@Category({SmallTests.class}) 034public class TestQuotaGlobalsSettingsBypass { 035 036 @ClassRule 037 public static final HBaseClassTestRule CLASS_RULE = 038 HBaseClassTestRule.forClass(TestQuotaGlobalsSettingsBypass.class); 039 040 @Test 041 public void testMerge() throws IOException { 042 QuotaGlobalsSettingsBypass orig = new QuotaGlobalsSettingsBypass("joe", null, null, true); 043 assertFalse(orig.merge(new QuotaGlobalsSettingsBypass( 044 "joe", null, null, false)).getBypass()); 045 } 046 047 @Test 048 public void testInvalidMerges() throws IOException { 049 QuotaGlobalsSettingsBypass userBypass = new QuotaGlobalsSettingsBypass( 050 "joe", null, null, true); 051 QuotaGlobalsSettingsBypass tableBypass = new QuotaGlobalsSettingsBypass( 052 null, TableName.valueOf("table"), null, true); 053 QuotaGlobalsSettingsBypass namespaceBypass = new QuotaGlobalsSettingsBypass( 054 null, null, "ns", true); 055 QuotaGlobalsSettingsBypass userOnTableBypass = new QuotaGlobalsSettingsBypass( 056 "joe", TableName.valueOf("table"), null, true); 057 QuotaGlobalsSettingsBypass userOnNamespaceBypass = new QuotaGlobalsSettingsBypass( 058 "joe", null, "ns", true); 059 060 assertTrue(userBypass.merge(userBypass).getBypass()); 061 expectFailure(userBypass, new QuotaGlobalsSettingsBypass("frank", null, null, false)); 062 expectFailure(userBypass, tableBypass); 063 expectFailure(userBypass, namespaceBypass); 064 expectFailure(userBypass, userOnTableBypass); 065 expectFailure(userBypass, userOnNamespaceBypass); 066 067 assertTrue(tableBypass.merge(tableBypass).getBypass()); 068 expectFailure(tableBypass, userBypass); 069 expectFailure(tableBypass, new QuotaGlobalsSettingsBypass( 070 null, TableName.valueOf("foo"), null, false)); 071 expectFailure(tableBypass, namespaceBypass); 072 expectFailure(tableBypass, userOnTableBypass); 073 expectFailure(tableBypass, userOnNamespaceBypass); 074 075 assertTrue(namespaceBypass.merge(namespaceBypass).getBypass()); 076 expectFailure(namespaceBypass, userBypass); 077 expectFailure(namespaceBypass, tableBypass); 078 expectFailure(namespaceBypass, new QuotaGlobalsSettingsBypass(null, null, "sn", false)); 079 expectFailure(namespaceBypass, userOnTableBypass); 080 expectFailure(namespaceBypass, userOnNamespaceBypass); 081 082 assertTrue(userOnTableBypass.merge(userOnTableBypass).getBypass()); 083 expectFailure(userOnTableBypass, userBypass); 084 expectFailure(userOnTableBypass, tableBypass); 085 expectFailure(userOnTableBypass, namespaceBypass); 086 // Incorrect user 087 expectFailure(userOnTableBypass, new QuotaGlobalsSettingsBypass( 088 "frank", TableName.valueOf("foo"), null, false)); 089 // Incorrect tablename 090 expectFailure(userOnTableBypass, new QuotaGlobalsSettingsBypass( 091 "joe", TableName.valueOf("bar"), null, false)); 092 expectFailure(userOnTableBypass, userOnNamespaceBypass); 093 094 assertTrue(userOnNamespaceBypass.merge(userOnNamespaceBypass).getBypass()); 095 expectFailure(userOnNamespaceBypass, userBypass); 096 expectFailure(userOnNamespaceBypass, tableBypass); 097 expectFailure(userOnNamespaceBypass, namespaceBypass); 098 expectFailure(userOnNamespaceBypass, userOnTableBypass); 099 expectFailure(userOnNamespaceBypass, new QuotaGlobalsSettingsBypass( 100 "frank", null, "ns", false)); 101 expectFailure(userOnNamespaceBypass, new QuotaGlobalsSettingsBypass( 102 "joe", null, "sn", false)); 103 } 104 105 void expectFailure(QuotaSettings one, QuotaSettings two) throws IOException { 106 try { 107 one.merge(two); 108 fail("Expected to see an Exception merging " + two + " into " + one); 109 } catch (IllegalArgumentException e) {} 110 } 111}