/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hbase.procedure2.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.testclassification.SmallTests;
import org.apache.hadoop.hbase.testclassification.MasterTests;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import static org.junit.Assert.assertEquals;
@Category({MasterTests.class, SmallTests.class})
public class TestDelayedUtil {
private static final Log LOG = LogFactory.getLog(TestDelayedUtil.class);
@Test
public void testDelayedContainerEquals() {
Object o1 = new Object();
Object o2 = new Object();
ZeroDelayContainer<Long> lnull = new ZeroDelayContainer(null);
ZeroDelayContainer<Long> l10a = new ZeroDelayContainer<>(10L);
ZeroDelayContainer<Long> l10b = new ZeroDelayContainer(10L);
ZeroDelayContainer<Long> l15 = new ZeroDelayContainer(15L);
ZeroDelayContainer<Object> onull = new ZeroDelayContainer<>(null);
ZeroDelayContainer<Object> o1ca = new ZeroDelayContainer<>(o1);
ZeroDelayContainer<Object> o1cb = new ZeroDelayContainer<>(o1);
ZeroDelayContainer<Object> o2c = new ZeroDelayContainer<>(o2);
ZeroDelayContainer[] items = new ZeroDelayContainer[] {
lnull, l10a, l10b, l15, onull, o1ca, o1cb, o2c,
};
assertContainersEquals(lnull, items, lnull, onull);
assertContainersEquals(l10a, items, l10a, l10b);
assertContainersEquals(l10b, items, l10a, l10b);
assertContainersEquals(l15, items, l15);
assertContainersEquals(onull, items, lnull, onull);
assertContainersEquals(o1ca, items, o1ca, o1cb);
assertContainersEquals(o1cb, items, o1ca, o1cb);
assertContainersEquals(o2c, items, o2c);
}
private void assertContainersEquals(final ZeroDelayContainer src,
final ZeroDelayContainer[] items, final ZeroDelayContainer... matches) {
for (int i = 0; i < items.length; ++i) {
boolean shouldMatch = false;
for (int j = 0; j < matches.length; ++j) {
if (items[i] == matches[j]) {
shouldMatch = true;
break;
}
}
boolean isMatching = src.equals(items[i]);
assertEquals(src.getObject() + " unexpectedly match " + items[i].getObject(),
shouldMatch, isMatching);
}
}
private static class ZeroDelayContainer<T> extends DelayedUtil.DelayedContainer<T> {
public ZeroDelayContainer(final T object) {
super(object);
}
@Override
public long getTimeout() {
return 0;
}
}
}