blob: 8818326b6444b71a6314f3337e66186ba0cc4a93 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.internal.cache;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.partition.PartitionRegionHelper;
import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
import com.gemstone.gemfire.internal.cache.versions.VersionTag;
import dunit.SerializableCallable;
import dunit.VM;
/**
* test client initiated transactions with concurrency checks enabled.
* @author sbawaska
*/
public class ClientServerTransactionCCEDUnitTest extends
ClientServerTransactionDUnitTest {
public void setUp() throws Exception {
super.setUp();
addExpectedException("Connection reset");
addExpectedException("SocketTimeoutException");
addExpectedException("ServerConnectivityException");
addExpectedException("Socket Closed");
}
/**
*
*/
private static final long serialVersionUID = -6785438240204988439L;
public ClientServerTransactionCCEDUnitTest(String name) {
super(name);
}
@Override
protected boolean getConcurrencyChecksEnabled() {
return true;
}
@SuppressWarnings("unchecked")
public Map<Object, VersionTag> getVersionTagsForRegion(VM vm, final String regionName) {
return (Map<Object, VersionTag>) vm.invoke(new SerializableCallable() {
@Override
public Object call() throws Exception {
Map<Object, VersionTag> map = new HashMap<Object, VersionTag>();
LocalRegion r = (LocalRegion) getCache().getRegion(regionName);
Iterator<Object> it = null;
if (r instanceof PartitionedRegion) {
Region l = PartitionRegionHelper.getLocalPrimaryData(r);
it = l.keySet().iterator();
} else {
it = r.keySet().iterator();
}
while (it.hasNext()) {
Object key = it.next();
map.put(key, r.getRegionEntry(key).getVersionStamp().asVersionTag());
}
return map;
}
});
}
public InternalDistributedMember getMemberId(VM vm) {
return (InternalDistributedMember) vm.invoke(new SerializableCallable() {
@Override
public Object call() throws Exception {
return getCache().getDistributedSystem().getDistributedMember();
}
});
}
public void verifyVersionTags(VM client, VM server1, VM server2, VM server3) {
Map<Object, VersionTag> clientTags = getVersionTagsForRegion(client, D_REFERENCE);
Map<Object, VersionTag> serverTags = getVersionTagsForRegion(server1, D_REFERENCE);
InternalDistributedMember serverId = getMemberId(server1);
for (Object key : clientTags.keySet()) {
VersionTag serverTag = serverTags.get(key);
serverTag.setMemberID(serverId);
getLogWriter().fine("SWAP:key:"+key+" clientVersion:"+clientTags.get(key)+" serverVersion:"+serverTag);
assertEquals(clientTags.get(key), serverTags.get(key));
serverTags.remove(key);
}
assertTrue(serverTags.isEmpty());
}
}