|
18 | 18 | package org.apache.hadoop.hbase.client; |
19 | 19 |
|
20 | 20 | import java.io.IOException; |
| 21 | +import java.util.List; |
| 22 | +import java.util.regex.Pattern; |
21 | 23 | import org.apache.hadoop.conf.Configuration; |
22 | 24 | import org.apache.hadoop.hbase.Coprocessor; |
| 25 | +import org.apache.hadoop.hbase.HBaseCommonTestingUtility; |
23 | 26 | import org.apache.hadoop.hbase.HBaseTestingUtility; |
24 | 27 | import org.apache.hadoop.hbase.TableName; |
25 | 28 | import org.apache.hadoop.hbase.coprocessor.CoprocessorHost; |
@@ -228,4 +231,45 @@ public void testRestoreSnapshot() throws Exception { |
228 | 231 | verifyAllowed(new AccessWriteAction(TEST_TABLE), USER_OWNER, USER_RW); |
229 | 232 | verifyDenied(new AccessWriteAction(TEST_TABLE), USER_RO, USER_NONE); |
230 | 233 | } |
| 234 | + |
| 235 | + |
| 236 | + final class AccessSnapshotAction implements AccessTestAction { |
| 237 | + private String snapshotName; |
| 238 | + private AccessSnapshotAction(String snapshotName) { |
| 239 | + this.snapshotName = snapshotName; |
| 240 | + } |
| 241 | + @Override |
| 242 | + public Object run() throws Exception { |
| 243 | + try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration()); |
| 244 | + Admin admin = conn.getAdmin()) { |
| 245 | + admin.snapshot(this.snapshotName, TEST_TABLE); |
| 246 | + } |
| 247 | + return null; |
| 248 | + } |
| 249 | + } |
| 250 | + |
| 251 | + @Test |
| 252 | + public void testDeleteSnapshot() throws Exception { |
| 253 | + String testSnapshotName = HBaseCommonTestingUtility.getRandomUUID().toString(); |
| 254 | + verifyAllowed(new AccessSnapshotAction(testSnapshotName), USER_OWNER); |
| 255 | + verifyDenied(new AccessSnapshotAction(HBaseCommonTestingUtility.getRandomUUID().toString()), |
| 256 | + USER_RO, USER_RW, USER_NONE); |
| 257 | + List<SnapshotDescription> snapshotDescriptions = TEST_UTIL.getAdmin().listSnapshots( |
| 258 | + Pattern.compile(testSnapshotName)); |
| 259 | + Assert.assertEquals(1, snapshotDescriptions.size()); |
| 260 | + Assert.assertEquals(USER_OWNER.getShortName(), snapshotDescriptions.get(0).getOwner()); |
| 261 | + AccessTestAction deleteSnapshotAction = () -> { |
| 262 | + try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration()); |
| 263 | + Admin admin = conn.getAdmin()) { |
| 264 | + admin.deleteSnapshot(testSnapshotName); |
| 265 | + } |
| 266 | + return null; |
| 267 | + }; |
| 268 | + verifyDenied(deleteSnapshotAction, USER_RO, USER_RW, USER_NONE); |
| 269 | + verifyAllowed(deleteSnapshotAction, USER_OWNER); |
| 270 | + |
| 271 | + List<SnapshotDescription> snapshotsAfterDelete = TEST_UTIL.getAdmin().listSnapshots( |
| 272 | + Pattern.compile(testSnapshotName)); |
| 273 | + Assert.assertEquals(0, snapshotsAfterDelete.size()); |
| 274 | + } |
231 | 275 | } |
0 commit comments