HBASE-4883 TestCatalogTracker failing for me on ubuntu

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1207639 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2011-11-28 21:49:58 +00:00
parent bdc28714e1
commit 01c389c879
1 changed files with 22 additions and 32 deletions

View File

@ -50,9 +50,9 @@ import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.experimental.categories.Category; import org.junit.experimental.categories.Category;
import org.mockito.Matchers;
import org.mockito.Mockito; import org.mockito.Mockito;
/** /**
@ -326,34 +326,29 @@ public class TestCatalogTracker {
* Test waiting on meta w/ no timeout specified. * Test waiting on meta w/ no timeout specified.
* @throws Exception * @throws Exception
*/ */
@Ignore // Can't make it work reliably on all platforms; mockito gets confused
// Throwing: org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
// Result cannot be returned by locateRegion()
// If you plug locateRegion, it then throws for incCounter, and if you plug
// that ... and so one.
@Test public void testNoTimeoutWaitForMeta() @Test public void testNoTimeoutWaitForMeta()
throws Exception { throws Exception {
// Mock an HConnection and a HRegionInterface implementation. Have the // Mock an HConnection and a HRegionInterface implementation. Have the
// HConnection return the HRI. Have the HRI return a few mocked up responses // HConnection return the HRI. Have the HRI return a few mocked up responses
// to make our test work. // to make our test work.
HConnection connection = // Mock an HRegionInterface.
HConnectionTestingUtility.getMockedConnection(UTIL.getConfiguration()); final HRegionInterface implementation = Mockito.mock(HRegionInterface.class);
HConnection connection = mockConnection(implementation);
try { try {
// Mock an HRegionInterface. // Now the ct is up... set into the mocks some answers that make it look
// like things have been getting assigned. Make it so we'll return a
final HRegionInterface implementation = Mockito.mock(HRegionInterface.class); // location (no matter what the Get is). Same for getHRegionInfo -- always
// Make it so our implementation is returned when we do a connection. // just return the meta region.
// Need to fake out the location lookup stuff first. final Result result = getMetaTableRowResult();
ServerName sn = new ServerName("example.com", 1234, System.currentTimeMillis()); Mockito.when(connection.getRegionServerWithRetries((ServerCallable<Result>)Mockito.any())).
final HRegionLocation anyLocation = thenReturn(result);
new HRegionLocation(HRegionInfo.FIRST_META_REGIONINFO, sn.getHostname(), Mockito.when(implementation.getRegionInfo((byte[]) Mockito.any())).
sn.getPort()); thenReturn(HRegionInfo.FIRST_META_REGIONINFO);
Mockito.when(connection.getRegionLocation((byte[]) Mockito.any(),
(byte[]) Mockito.any(), Mockito.anyBoolean())).
thenReturn(anyLocation);
// Have implementation returned which ever way getHRegionConnection is called.
Mockito.when(connection.getHRegionConnection(Mockito.anyString(),
Mockito.anyInt(), Matchers.anyBoolean())).
thenReturn(implementation);
Mockito.when(connection.getHRegionConnection(Mockito.anyString(),
Mockito.anyInt())).
thenReturn(implementation);
final CatalogTracker ct = constructAndStartCatalogTracker(connection); final CatalogTracker ct = constructAndStartCatalogTracker(connection);
ServerName hsa = ct.getMetaLocation(); ServerName hsa = ct.getMetaLocation();
Assert.assertNull(hsa); Assert.assertNull(hsa);
@ -367,15 +362,6 @@ public class TestCatalogTracker {
}; };
startWaitAliveThenWaitItLives(t, 1000); startWaitAliveThenWaitItLives(t, 1000);
// Now the ct is up... set into the mocks some answers that make it look
// like things have been getting assigned. Make it so we'll return a
// location (no matter what the Get is). Same for getHRegionInfo -- always
// just return the meta region.
final Result result = getMetaTableRowResult();
Mockito.when(connection.getRegionServerWithRetries((ServerCallable<Result>)Mockito.any())).
thenReturn(result);
Mockito.when(implementation.getRegionInfo((byte[]) Mockito.any())).
thenReturn(HRegionInfo.FIRST_META_REGIONINFO);
// This should trigger wake up of meta wait (Its the removal of the meta // This should trigger wake up of meta wait (Its the removal of the meta
// region unassigned node that triggers catalogtrackers that a meta has // region unassigned node that triggers catalogtrackers that a meta has
// been assigned). // been assigned).
@ -411,6 +397,7 @@ public class TestCatalogTracker {
throws IOException { throws IOException {
HConnection connection = HConnection connection =
HConnectionTestingUtility.getMockedConnection(UTIL.getConfiguration()); HConnectionTestingUtility.getMockedConnection(UTIL.getConfiguration());
Mockito.doNothing().when(connection).close();
// Make it so we return any old location when asked. // Make it so we return any old location when asked.
final HRegionLocation anyLocation = final HRegionLocation anyLocation =
new HRegionLocation(HRegionInfo.FIRST_META_REGIONINFO, SN.getHostname(), new HRegionLocation(HRegionInfo.FIRST_META_REGIONINFO, SN.getHostname(),
@ -418,6 +405,9 @@ public class TestCatalogTracker {
Mockito.when(connection.getRegionLocation((byte[]) Mockito.any(), Mockito.when(connection.getRegionLocation((byte[]) Mockito.any(),
(byte[]) Mockito.any(), Mockito.anyBoolean())). (byte[]) Mockito.any(), Mockito.anyBoolean())).
thenReturn(anyLocation); thenReturn(anyLocation);
Mockito.when(connection.locateRegion((byte[]) Mockito.any(),
(byte[]) Mockito.any())).
thenReturn(anyLocation);
if (implementation != null) { if (implementation != null) {
// If a call to getHRegionConnection, return this implementation. // If a call to getHRegionConnection, return this implementation.
Mockito.when(connection.getHRegionConnection(Mockito.anyString(), Mockito.anyInt())). Mockito.when(connection.getHRegionConnection(Mockito.anyString(), Mockito.anyInt())).