blob: 643131c21bcc6efdd25a81958e346a3e2be3c2a2 [file] [log] [blame]
// Copyright 2013 Google Inc. All Rights Reserved.
//
// Licensed 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 com.google.enterprise.adaptor.sharepoint;
import static org.junit.Assert.*;
import com.google.common.util.concurrent.ExecutionError;
import com.google.common.util.concurrent.UncheckedExecutionException;
import com.microsoft.schemas.sharepoint.soap.SiteDataSoap;
import org.junit.*;
import java.io.IOException;
import java.util.concurrent.*;
/** Test cases for {@link RareModificationCache}. */
public class RareModificationCacheTest {
private ExecutorService executor = Executors.newCachedThreadPool();
private SiteDataSoap siteDataSoap = new DelegatingSiteData() {
@Override
protected SiteDataSoap delegate() {
throw new UnsupportedOperationException();
}
};
private SiteDataClient siteDataClient
= new SiteDataClient(siteDataSoap, false);
private RareModificationCache cache
= new RareModificationCache(siteDataClient, executor);
@After
public void shutdownExecutor() {
executor.shutdownNow();
}
@Test(expected = NullPointerException.class)
public void testNullSiteDataClient() {
new RareModificationCache(null, executor);
}
@Test(expected = NullPointerException.class)
public void testNullExecutor() {
new RareModificationCache(siteDataClient, null);
}
@Test
public void testEquals() {
SiteDataClient siteDataClient2 = new SiteDataClient(siteDataSoap, false);
Object v1 = new RareModificationCache.VirtualServerKey(siteDataClient);
Object w1 = new RareModificationCache.WebKey(siteDataClient);
Object w2 = new RareModificationCache.WebKey(siteDataClient2);
Object l1 = new RareModificationCache.ListKey(siteDataClient, "{SomeGUID}");
Object l2
= new RareModificationCache.ListKey(siteDataClient2, "{SomeGUID}");
Object l3 = new RareModificationCache.ListKey(siteDataClient, "{DiffGUID}");
Object l4 = new RareModificationCache.ListKey(siteDataClient, "{someguid}");
assertEquals(v1, v1);
assertEquals(v1.hashCode(), v1.hashCode());
assertEquals(w1, w1);
assertEquals(w1.hashCode(), w1.hashCode());
assertEquals(l1, l1);
assertEquals(l1.hashCode(), l1.hashCode());
assertNotEquals(v1, w1);
assertNotEquals(v1.hashCode(), w1.hashCode());
assertNotEquals(v1, l1);
assertNotEquals(v1.hashCode(), l1.hashCode());
assertNotEquals(w1, v1);
assertNotEquals(w1.hashCode(), v1.hashCode());
assertNotEquals(w1, l1);
assertNotEquals(w1.hashCode(), l1.hashCode());
assertNotEquals(l1, v1);
assertNotEquals(l1.hashCode(), v1.hashCode());
assertNotEquals(l1, w1);
assertNotEquals(l1.hashCode(), w1.hashCode());
assertNotEquals(w1, w2);
assertNotEquals(w1.hashCode(), w2.hashCode());
assertNotEquals(l1, l2);
assertNotEquals(l1.hashCode(), l2.hashCode());
assertNotEquals(l1, l3);
assertNotEquals(l1.hashCode(), l3.hashCode());
assertEquals(l1, l4);
assertEquals(l1.hashCode(), l4.hashCode());
}
@Test(expected = IOException.class)
public void testGetIOException() throws IOException {
cache.get(new RareModificationCache.CacheKey<Object>() {
@Override
public Object computeValue() throws IOException {
throw new IOException();
}
});
}
@Test(expected = UncheckedExecutionException.class)
public void testGetRuntimeException() throws IOException {
cache.get(new RareModificationCache.CacheKey<Object>() {
@Override
public Object computeValue() throws IOException {
throw new RuntimeException();
}
});
}
@Test(expected = ExecutionError.class)
public void testGetError() throws IOException {
cache.get(new RareModificationCache.CacheKey<Object>() {
@Override
public Object computeValue() throws IOException {
throw new Error();
}
});
}
private void assertNotEquals(Object o, Object o2) {
assertFalse(o.equals(o2));
}
}