/* * 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.geode.internal.offheap; import static org.junit.Assert.*; import org.junit.Test; import org.junit.experimental.categories.Category; import org.apache.geode.test.junit.categories.UnitTest; @Category(UnitTest.class) public class RefCountChangeInfoJUnitTest { @Test public void testGetOwner() { String owner1 = new String("Info1"); String notOwner1 = new String("notInfo1"); RefCountChangeInfo refInfo1 = new RefCountChangeInfo(true, 1, owner1); RefCountChangeInfo refInfo2 = new RefCountChangeInfo(true, 1, notOwner1); assertEquals(owner1, refInfo1.getOwner()); assertEquals(notOwner1, refInfo2.getOwner()); assertFalse(refInfo1.getOwner().equals(refInfo2.getOwner())); } @Test public void testNullOwner() { String owner1 = null; String notOwner1 = new String("notInfo1"); RefCountChangeInfo refInfo1 = new RefCountChangeInfo(true, 1, owner1); RefCountChangeInfo refInfo2 = new RefCountChangeInfo(true, 1, notOwner1); assertFalse(isOwnerNull(refInfo2.getOwner())); assertTrue(hasStringLit(refInfo2.toString(), " owner=")); assertEquals(owner1, refInfo1.getOwner()); assertEquals(notOwner1, refInfo2.getOwner()); assertTrue(isOwnerNull(refInfo1.getOwner())); assertFalse(hasStringLit(refInfo1.toString(), " owner=")); } private boolean isOwnerNull(Object own1) { return own1 == null; } private boolean hasStringLit(String str, String has) { if (str.indexOf(has) == -1) return false; return true; } @Test public void testGetUseCount() { String owner1 = new String("Info1"); String owner2 = new String("Info2"); RefCountChangeInfo refInfo1 = new RefCountChangeInfo(true, 1, owner1); assertEquals(0, refInfo1.getUseCount()); RefCountChangeInfo refInfo2 = new RefCountChangeInfo(true, 1, owner1); assertTrue(refInfo1.isSameCaller(refInfo2)); refInfo1.incUseCount(); assertEquals(1, refInfo1.getUseCount()); // owner not used in isDup RefCountChangeInfo refInfo3 = new RefCountChangeInfo(true, 1, owner2); assertTrue(refInfo1.isSameCaller(refInfo3)); refInfo1.incUseCount(); assertEquals(2, refInfo1.getUseCount()); RefCountChangeInfo refInfo4 = new RefCountChangeInfo(false, 1, owner2); assertFalse(refInfo1.isSameCaller(refInfo4)); assertEquals(2, refInfo1.getUseCount()); } @Test public void testDecUseCount() { String owner1 = new String("Info1"); String owner2 = new String("Info2"); RefCountChangeInfo refInfo1 = new RefCountChangeInfo(true, 1, owner1); assertEquals(0, refInfo1.getUseCount()); RefCountChangeInfo refInfo2 = new RefCountChangeInfo(true, 1, owner1); assertTrue(refInfo1.isSameCaller(refInfo2)); refInfo1.incUseCount(); assertEquals(1, refInfo1.getUseCount()); // owner not used in isSameCaller check RefCountChangeInfo refInfo3 = new RefCountChangeInfo(true, 1, owner2); assertTrue(refInfo1.isSameCaller(refInfo3)); refInfo1.incUseCount(); assertEquals(2, refInfo1.getUseCount()); refInfo1.decUseCount(); assertEquals(1, refInfo1.getUseCount()); refInfo1.decUseCount(); assertEquals(0, refInfo1.getUseCount()); } @Test public void testToString() { String owner1 = new String("Info1"); RefCountChangeInfo refInfo1 = new RefCountChangeInfo(true, 1, owner1); RefCountChangeInfo refInfo2 = new RefCountChangeInfo(true, 1, owner1); assertEquals(refInfo1.toString(), refInfo2.toString()); RefCountChangeInfo refInfo3 = new RefCountChangeInfo(false, 1, owner1); assertFalse(refInfo1.toString().equals(refInfo3.toString())); RefCountChangeInfo refInfo4 = new RefCountChangeInfo(true, 2, owner1); assertFalse(refInfo1.toString().equals(refInfo4.toString())); } @Test public void testisSameCaller() { String owner1 = new String("Info1"); String owner2 = new String("Info2"); RefCountChangeInfo refInfo1 = new RefCountChangeInfo(true, 1, owner1); assertEquals(0, refInfo1.getUseCount()); RefCountChangeInfo refInfo2 = new RefCountChangeInfo(true, 1, owner1); assertTrue(refInfo1.isSameCaller(refInfo2)); refInfo1.incUseCount(); assertEquals(1, refInfo1.getUseCount()); String str = refInfo1.toString(); str = refInfo1.toString(); assertTrue(hasStringLit(refInfo1.toString(), " useCount=1")); RefCountChangeInfo refInfo3 = new RefCountChangeInfo(false, 1, owner1); assertFalse(refInfo1.isSameCaller(refInfo3)); assertEquals(1, refInfo1.getUseCount()); RefCountChangeInfo refInfo4 = new RefCountChangeInfo(true, 1, owner2); assertTrue(refInfo1.isSameCaller(refInfo4)); refInfo1.incUseCount(); assertEquals(2, refInfo1.getUseCount()); assertTrue(hasStringLit(refInfo1.toString(), " useCount=2")); refInfo1.setStackTraceString("not_the_same"); assertFalse(refInfo1.isSameCaller(refInfo4)); assertEquals(2, refInfo1.getUseCount()); refInfo1.setStackTraceString(null); refInfo1.setStackTraceString(new SameHashDifferentTrace()); refInfo4.setStackTraceString(new SameHashDifferentTrace()); assertFalse(refInfo1.isSameCaller(refInfo4)); assertEquals(2, refInfo1.getUseCount()); } private static class SameHashDifferentTrace { public int hashCode() { return 1; } public boolean equals(Object notused) { return false; } } }