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