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.quotas; 019 020import static org.junit.Assert.assertFalse; 021import static org.junit.Assert.assertTrue; 022import static org.junit.Assert.fail; 023 024import java.io.IOException; 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, null, true); 043 assertFalse( 044 orig.merge(new QuotaGlobalsSettingsBypass("joe", null, null, null, false)).getBypass()); 045 } 046 047 @Test 048 public void testInvalidMerges() throws IOException { 049 QuotaGlobalsSettingsBypass userBypass = 050 new QuotaGlobalsSettingsBypass("joe", null, null, null, true); 051 QuotaGlobalsSettingsBypass tableBypass = 052 new QuotaGlobalsSettingsBypass(null, TableName.valueOf("table"), null, null, true); 053 QuotaGlobalsSettingsBypass namespaceBypass = 054 new QuotaGlobalsSettingsBypass(null, null, "ns", null, true); 055 QuotaGlobalsSettingsBypass regionServerBypass = 056 new QuotaGlobalsSettingsBypass(null, null, null, "all", true); 057 QuotaGlobalsSettingsBypass userOnTableBypass = 058 new QuotaGlobalsSettingsBypass("joe", TableName.valueOf("table"), null, null, true); 059 QuotaGlobalsSettingsBypass userOnNamespaceBypass = 060 new QuotaGlobalsSettingsBypass("joe", null, "ns", null, true); 061 QuotaGlobalsSettingsBypass userOnRegionServerBypass = 062 new QuotaGlobalsSettingsBypass("joe", null, null, "all", true); 063 064 assertTrue(userBypass.merge(userBypass).getBypass()); 065 expectFailure(userBypass, new QuotaGlobalsSettingsBypass("frank", null, null, null, false)); 066 expectFailure(userBypass, tableBypass); 067 expectFailure(userBypass, namespaceBypass); 068 expectFailure(userBypass, regionServerBypass); 069 expectFailure(userBypass, userOnTableBypass); 070 expectFailure(userBypass, userOnNamespaceBypass); 071 expectFailure(userBypass, userOnRegionServerBypass); 072 073 assertTrue(tableBypass.merge(tableBypass).getBypass()); 074 expectFailure(tableBypass, userBypass); 075 expectFailure(tableBypass, 076 new QuotaGlobalsSettingsBypass(null, TableName.valueOf("foo"), null, null, false)); 077 expectFailure(tableBypass, namespaceBypass); 078 expectFailure(tableBypass, regionServerBypass); 079 expectFailure(tableBypass, userOnTableBypass); 080 expectFailure(tableBypass, userOnNamespaceBypass); 081 expectFailure(tableBypass, userOnRegionServerBypass); 082 083 assertTrue(namespaceBypass.merge(namespaceBypass).getBypass()); 084 expectFailure(namespaceBypass, userBypass); 085 expectFailure(namespaceBypass, tableBypass); 086 expectFailure(namespaceBypass, regionServerBypass); 087 expectFailure(namespaceBypass, new QuotaGlobalsSettingsBypass(null, null, "sn", null, false)); 088 expectFailure(namespaceBypass, userOnTableBypass); 089 expectFailure(namespaceBypass, userOnNamespaceBypass); 090 expectFailure(namespaceBypass, userOnNamespaceBypass); 091 092 assertTrue(regionServerBypass.merge(regionServerBypass).getBypass()); 093 expectFailure(regionServerBypass, userBypass); 094 expectFailure(regionServerBypass, tableBypass); 095 expectFailure(regionServerBypass, namespaceBypass); 096 expectFailure(regionServerBypass, 097 new QuotaGlobalsSettingsBypass(null, null, null, "rs", false)); 098 expectFailure(regionServerBypass, userOnTableBypass); 099 expectFailure(regionServerBypass, userOnNamespaceBypass); 100 expectFailure(regionServerBypass, userOnRegionServerBypass); 101 102 assertTrue(userOnTableBypass.merge(userOnTableBypass).getBypass()); 103 expectFailure(userOnTableBypass, userBypass); 104 expectFailure(userOnTableBypass, tableBypass); 105 expectFailure(userOnTableBypass, namespaceBypass); 106 expectFailure(userOnTableBypass, regionServerBypass); 107 // Incorrect user 108 expectFailure(userOnTableBypass, 109 new QuotaGlobalsSettingsBypass("frank", TableName.valueOf("foo"), null, null, false)); 110 // Incorrect tablename 111 expectFailure(userOnTableBypass, 112 new QuotaGlobalsSettingsBypass("joe", TableName.valueOf("bar"), null, null, false)); 113 expectFailure(userOnTableBypass, userOnNamespaceBypass); 114 expectFailure(userOnTableBypass, userOnRegionServerBypass); 115 116 assertTrue(userOnNamespaceBypass.merge(userOnNamespaceBypass).getBypass()); 117 expectFailure(userOnNamespaceBypass, userBypass); 118 expectFailure(userOnNamespaceBypass, tableBypass); 119 expectFailure(userOnNamespaceBypass, namespaceBypass); 120 expectFailure(userOnNamespaceBypass, regionServerBypass); 121 expectFailure(userOnNamespaceBypass, userOnTableBypass); 122 expectFailure(userOnNamespaceBypass, 123 new QuotaGlobalsSettingsBypass("frank", null, "ns", null, false)); 124 expectFailure(userOnNamespaceBypass, 125 new QuotaGlobalsSettingsBypass("joe", null, "sn", null, false)); 126 expectFailure(userOnNamespaceBypass, userOnRegionServerBypass); 127 128 assertTrue(userOnRegionServerBypass.merge(userOnRegionServerBypass).getBypass()); 129 expectFailure(userOnRegionServerBypass, userBypass); 130 expectFailure(userOnRegionServerBypass, tableBypass); 131 expectFailure(userOnRegionServerBypass, namespaceBypass); 132 expectFailure(userOnRegionServerBypass, regionServerBypass); 133 expectFailure(userOnRegionServerBypass, userOnTableBypass); 134 expectFailure(userOnRegionServerBypass, userOnNamespaceBypass); 135 expectFailure(userOnRegionServerBypass, 136 new QuotaGlobalsSettingsBypass("frank", null, null, "all", false)); 137 expectFailure(userOnRegionServerBypass, 138 new QuotaGlobalsSettingsBypass("joe", null, null, "rs", false)); 139 } 140 141 void expectFailure(QuotaSettings one, QuotaSettings two) throws IOException { 142 try { 143 one.merge(two); 144 fail("Expected to see an Exception merging " + two + " into " + one); 145 } catch (IllegalArgumentException e) { 146 // Expected 147 } 148 } 149}