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.replication; 019 020import static org.hamcrest.MatcherAssert.assertThat; 021import static org.hamcrest.Matchers.endsWith; 022import static org.junit.Assert.assertNotNull; 023 024import java.io.IOException; 025import org.apache.hadoop.fs.FileSystem; 026import org.apache.hadoop.fs.Path; 027import org.apache.hadoop.hbase.HBaseClassTestRule; 028import org.apache.hadoop.hbase.HBaseCommonTestingUtil; 029import org.apache.hadoop.hbase.testclassification.MediumTests; 030import org.apache.hadoop.hbase.testclassification.ReplicationTests; 031import org.apache.hadoop.hbase.util.CommonFSUtils; 032import org.apache.hadoop.hbase.util.RotateFile; 033import org.junit.AfterClass; 034import org.junit.BeforeClass; 035import org.junit.ClassRule; 036import org.junit.experimental.categories.Category; 037 038@Category({ ReplicationTests.class, MediumTests.class }) 039public class TestFSReplicationPeerStorage extends ReplicationPeerStorageTestBase { 040 041 @ClassRule 042 public static final HBaseClassTestRule CLASS_RULE = 043 HBaseClassTestRule.forClass(TestFSReplicationPeerStorage.class); 044 045 private static final HBaseCommonTestingUtil UTIL = new HBaseCommonTestingUtil(); 046 047 private static FileSystem FS; 048 049 private static Path DIR; 050 051 @BeforeClass 052 public static void setUp() throws Exception { 053 DIR = UTIL.getDataTestDir("test_fs_peer_storage"); 054 CommonFSUtils.setRootDir(UTIL.getConfiguration(), DIR); 055 FS = FileSystem.get(UTIL.getConfiguration()); 056 STORAGE = new FSReplicationPeerStorage(FS, UTIL.getConfiguration()); 057 } 058 059 @AfterClass 060 public static void tearDown() throws IOException { 061 UTIL.cleanupTestDir(); 062 } 063 064 @Override 065 protected void removePeerSyncRelicationState(String peerId) throws Exception { 066 FSReplicationPeerStorage storage = (FSReplicationPeerStorage) STORAGE; 067 Path peerDir = storage.getPeerDir(peerId); 068 RotateFile file = 069 new RotateFile(FS, peerDir, FSReplicationPeerStorage.SYNC_REPLICATION_STATE_FILE, 1024); 070 file.read(); 071 file.delete(); 072 } 073 074 @Override 075 protected void assertPeerSyncReplicationStateCreate(String peerId) throws Exception { 076 FSReplicationPeerStorage storage = (FSReplicationPeerStorage) STORAGE; 077 Path peerDir = storage.getPeerDir(peerId); 078 RotateFile file = 079 new RotateFile(FS, peerDir, FSReplicationPeerStorage.SYNC_REPLICATION_STATE_FILE, 1024); 080 assertNotNull(file.read()); 081 } 082 083 @Override 084 protected void assertPeerNameControlException(ReplicationException e) { 085 assertThat(e.getMessage(), endsWith("peer already exists")); 086 } 087}