[infinispan-commits] Infinispan SVN: r171 - in trunk/core/src: main/java/org/infinispan/interceptors and 2 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Mon Apr 27 10:17:28 EDT 2009


Author: manik.surtani at jboss.com
Date: 2009-04-27 10:17:28 -0400 (Mon, 27 Apr 2009)
New Revision: 171

Added:
   trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java
   trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java
   trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java
   trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java
Removed:
   trunk/core/src/test/java/org/infinispan/config/ConfigurationValidityTest.java
Modified:
   trunk/core/src/main/java/org/infinispan/config/Configuration.java
   trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java
   trunk/core/src/test/java/org/infinispan/distribution/BaseDistFunctionalTest.java
   trunk/core/src/test/java/org/infinispan/distribution/DistAsyncFuncTest.java
   trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxFuncTest.java
   trunk/core/src/test/java/org/infinispan/distribution/DistSyncFuncTest.java
   trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxFuncTest.java
Log:
[ISPN-30] (DIST) Return value issues and more tests

Modified: trunk/core/src/main/java/org/infinispan/config/Configuration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/Configuration.java	2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/main/java/org/infinispan/config/Configuration.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -699,8 +699,5 @@
       // certain combinations are illegal, such as state transfer + DIST
       if (cacheMode.isDistributed() && fetchInMemoryState)
          throw new ConfigurationException("Cache cannot use DISTRIBUTION mode and have fetchInMemoryState set to true");
-
-      if (cacheMode == CacheMode.DIST_ASYNC && !unsafeUnreliableReturnValues)
-         throw new ConfigurationException("DISTRIBUTION mode cannot be asynchronous without breaking return values in the public API.  To force this, please use the <unsafe /> element, setting the 'unreliableReturnValues' attribute to 'true'.");
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java	2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/main/java/org/infinispan/interceptors/DistributionInterceptor.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -12,11 +12,13 @@
 import org.infinispan.commands.write.RemoveCommand;
 import org.infinispan.commands.write.ReplaceCommand;
 import org.infinispan.commands.write.WriteCommand;
+import org.infinispan.container.DataContainer;
 import org.infinispan.container.entries.InternalCacheEntry;
 import org.infinispan.context.InvocationContext;
 import org.infinispan.context.TransactionContext;
 import org.infinispan.distribution.DistributionManager;
 import org.infinispan.factories.annotations.Inject;
+import org.infinispan.factories.annotations.Start;
 import org.infinispan.interceptors.base.BaseRpcInterceptor;
 import org.infinispan.remoting.transport.Address;
 import org.infinispan.util.Immutables;
@@ -37,6 +39,10 @@
 public class DistributionInterceptor extends BaseRpcInterceptor {
    DistributionManager dm;
    CommandsFactory cf;
+   DataContainer dataContainer;
+   boolean isL1CacheEnabled, needReliableReturnValues, sync;
+
+
    static final RecipientGenerator CLEAR_COMMAND_GENERATOR = new RecipientGenerator() {
       private final Object[] EMPTY_ARRAY = {};
 
@@ -50,11 +56,19 @@
    };
 
    @Inject
-   public void injectDependencies(DistributionManager distributionManager, CommandsFactory cf) {
+   public void injectDependencies(DistributionManager distributionManager, CommandsFactory cf, DataContainer dataContainer) {
       this.dm = distributionManager;
       this.cf = cf;
+      this.dataContainer = dataContainer;
    }
 
+   @Start
+   public void start() {
+      isL1CacheEnabled = configuration.isL1CacheEnabled();
+      needReliableReturnValues = !configuration.isUnsafeUnreliableReturnValues();
+      sync = configuration.getCacheMode().isSynchronous();
+   }
+
    // ---- READ commands
 
    // if we don't have the key locally, fetch from one of the remote servers
@@ -71,14 +85,26 @@
       return returnValue;
    }
 
+   /**
+    * This method retrieves an entry from a remote cache and optionally stores it in L1 (if L1 is enabled).
+    * <p/>
+    * This method only works if a) this is a locally originating invocation and b) the entry in question is not local to
+    * the current cache instance and c) the entry is not in L1.  If either of a, b or c does not hold true, this method
+    * returns a null and doesn't do anything.
+    *
+    * @param ctx invocation context
+    * @param key key to retrieve
+    * @return value of a remote get, or null
+    * @throws Throwable if there are problems
+    */
    private Object remoteGetAndStoreInL1(InvocationContext ctx, Object key) throws Throwable {
-      if (ctx.isOriginLocal() && !dm.isLocal(key)) {
+      if (ctx.isOriginLocal() && !dm.isLocal(key) && isNotInL1(key)) {
          if (trace) log.trace("Doing a remote get for key {0}", key);
          // attempt a remote lookup
          InternalCacheEntry ice = dm.retrieveFromRemoteSource(key);
 
          if (ice != null) {
-            if (configuration.isL1CacheEnabled()) {
+            if (isL1CacheEnabled) {
                if (trace) log.trace("Caching remotely retrieved entry for key {0} in L1", key);
                long lifespan = ice.getLifespan() < 0 ? configuration.getL1Lifespan() : Math.min(ice.getLifespan(), configuration.getL1Lifespan());
                PutKeyValueCommand put = cf.buildPutKeyValueCommand(ice.getKey(), ice.getValue(), lifespan, -1);
@@ -96,6 +122,16 @@
       return null;
    }
 
+   /**
+    * Tests whether a key is in the L1 cache if L1 is enabled.
+    *
+    * @param key key to check for
+    * @return true if the key is not in L1, or L1 caching is not enabled.  false the key is in L1.
+    */
+   private boolean isNotInL1(Object key) {
+      return !isL1CacheEnabled || !dataContainer.containsKey(key);
+   }
+
    // ---- WRITE commands
 
    @Override
@@ -149,7 +185,6 @@
       }
 
       if (!skipReplicationOfTransactionMethod(ctx)) {
-         boolean sync = configuration.getCacheMode().isSynchronous();
          if (trace) {
             log.trace("[" + rpcManager.getTransport().getAddress() + "] Running remote prepare for global tx {1}.  Synchronous? {2}",
                       rpcManager.getTransport().getAddress(), command.getGlobalTransaction(), sync);
@@ -173,11 +208,14 @@
       return invokeNextInterceptor(ctx, command);
    }
 
-   private void remoteGetBeforeWrite(InvocationContext ctx, Object... keys) throws Throwable {
-      // only do this if we are sync (OR if we dont care about return values!)
-//      if (!configuration.isUnsafeUnreliableReturnValues()) {
-      for (Object k : keys) remoteGetAndStoreInL1(ctx, k);
-//      }
+   private void remoteGetBeforeWrite(InvocationContext ctx, boolean isConditionalCommand, Object... keys) throws Throwable {
+      // this should only happen if:
+      //   a) unsafeUnreliableReturnValues is false
+      //   b) unsafeUnreliableReturnValues is true, we are in a TX and the command is conditional
+
+      if (needReliableReturnValues || (isConditionalCommand && ctx.getTransaction() != null)) {
+         for (Object k : keys) remoteGetAndStoreInL1(ctx, k);
+      }
    }
 
    /**
@@ -187,7 +225,7 @@
    private Object handleWriteCommand(InvocationContext ctx, WriteCommand command, RecipientGenerator recipientGenerator) throws Throwable {
       boolean local = isLocalModeForced(ctx);
       // see if we need to load values from remote srcs first
-      remoteGetBeforeWrite(ctx, recipientGenerator.getKeys());
+      remoteGetBeforeWrite(ctx, command.isConditional(), recipientGenerator.getKeys());
 
       // if this is local mode then skip distributing
       if (local && ctx.getTransaction() == null) return invokeNextInterceptor(ctx, command);
@@ -201,7 +239,7 @@
                List<Address> rec = recipientGenerator.generateRecipients();
                if (trace) log.trace("Invoking command {0} on hosts {1}", command, rec);
                // if L1 caching is used make sure we broadcast an invalidate message
-               if (configuration.isL1CacheEnabled() && rec != null) {
+               if (isL1CacheEnabled && rec != null) {
                   InvalidateCommand ic = cf.buildInvalidateFromL1Command(recipientGenerator.getKeys());
                   replicateCall(ctx, ic, isSynchronous(ctx), false);
                }

Deleted: trunk/core/src/test/java/org/infinispan/config/ConfigurationValidityTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/config/ConfigurationValidityTest.java	2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/config/ConfigurationValidityTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -1,28 +0,0 @@
-package org.infinispan.config;
-
-import org.testng.annotations.Test;
-
- at Test(groups = "unit", testName = "config.ConfigurationValidityTest")
-public class ConfigurationValidityTest {
-   public void testInvalidConfigs() {
-      Configuration c = new Configuration();
-      c.setCacheMode(Configuration.CacheMode.DIST_SYNC);
-      c.assertValid();
-      c.setCacheMode(Configuration.CacheMode.DIST_ASYNC);
-      try {
-         c.assertValid();
-         assert false : "Should fail";
-      } catch (ConfigurationException expected) {
-      }
-      c.setUnsafeUnreliableReturnValues(true);
-      c.assertValid();
-      c.setCacheMode(Configuration.CacheMode.DIST_SYNC);
-      c.assertValid();
-      c.setFetchInMemoryState(true);
-      try {
-         c.assertValid();
-         assert false : "Should fail";
-      } catch (ConfigurationException expected) {
-      }
-   }
-}

Modified: trunk/core/src/test/java/org/infinispan/distribution/BaseDistFunctionalTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/BaseDistFunctionalTest.java	2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/BaseDistFunctionalTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -10,6 +10,7 @@
 import org.infinispan.container.entries.ImmortalCacheEntry;
 import org.infinispan.container.entries.InternalCacheEntry;
 import org.infinispan.container.entries.MortalCacheEntry;
+import org.infinispan.lock.IsolationLevel;
 import org.infinispan.remoting.transport.Address;
 import org.infinispan.test.MultipleCacheManagersTest;
 import org.infinispan.test.TestingUtil;
@@ -26,10 +27,16 @@
    protected List<Cache<Object, String>> caches;
    protected boolean sync = true;
    protected boolean tx = false;
+   protected boolean testRetVals = true;
 
    protected void createCacheManagers() throws Throwable {
       Configuration c = getDefaultClusteredConfig(sync ? DIST_SYNC : DIST_ASYNC);
-      if (!sync) c.setUnsafeUnreliableReturnValues(true);
+      if (!testRetVals) {
+         c.setUnsafeUnreliableReturnValues(true);
+         // we also need to use repeatable read for tests to work when we dont have reliable return values, since the
+         // tests repeatedly queries changes
+         c.setIsolationLevel(IsolationLevel.REPEATABLE_READ);
+      }
       if (tx) c.setTransactionManagerLookupClass(DummyTransactionManagerLookup.class.getName());
       caches = createClusteredCaches(4, "dist", c);
       c1 = caches.get(0);

Modified: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistAsyncFuncTest.java	2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistAsyncFuncTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -19,6 +19,7 @@
    public DistAsyncFuncTest() {
       sync = false;
       tx = false;
+      testRetVals = true;
    }
 
    @Override

Modified: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxFuncTest.java	2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxFuncTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -22,6 +22,7 @@
    public DistAsyncTxFuncTest() {
       sync = false;
       tx = true;
+      testRetVals = true;
       cleanup = CleanupPhase.AFTER_METHOD; // ensure any stale TXs are wiped
    }
 

Added: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java	                        (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -0,0 +1,13 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistAsyncTxUnsafeFuncTest")
+public class DistAsyncTxUnsafeFuncTest extends DistAsyncTxFuncTest {
+   public DistAsyncTxUnsafeFuncTest() {
+      sync = false;
+      tx = true;
+      testRetVals = false;
+      cleanup = CleanupPhase.AFTER_METHOD; // ensure any stale TXs are wiped
+   }
+}


Property changes on: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncTxUnsafeFuncTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java	                        (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -0,0 +1,12 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistAsyncUnsafeFuncTest")
+public class DistAsyncUnsafeFuncTest extends DistAsyncFuncTest {
+   public DistAsyncUnsafeFuncTest() {
+      sync = false;
+      tx = false;
+      testRetVals = false;
+   }
+}


Property changes on: trunk/core/src/test/java/org/infinispan/distribution/DistAsyncUnsafeFuncTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: trunk/core/src/test/java/org/infinispan/distribution/DistSyncFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSyncFuncTest.java	2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSyncFuncTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -13,6 +13,7 @@
    public DistSyncFuncTest() {
       sync = true;
       tx = false;
+      testRetVals = true;
    }
 
    public void testBasicDistribution() {
@@ -52,7 +53,7 @@
       Object retval = nonOwner.put("k1", "value2");
       asyncWait("k1", PutKeyValueCommand.class, getSecondNonOwner("k1"));
 
-      assert "value".equals(retval);
+      if (testRetVals) assert "value".equals(retval);
       assertOnAllCachesAndOwnership("k1", "value2");
    }
 
@@ -60,7 +61,7 @@
       initAndTest();
       Object retval = getFirstNonOwner("k1").putIfAbsent("k1", "value2");
 
-      assert "value".equals(retval);
+      if (testRetVals) assert "value".equals(retval);
 
       assertOnAllCachesAndOwnership("k1", "value");
 
@@ -69,7 +70,7 @@
 
       retval = getFirstNonOwner("k1").putIfAbsent("k1", "value2");
       asyncWait("k1", PutKeyValueCommand.class, getSecondNonOwner("k1"));
-      assert null == retval;
+      if (testRetVals) assert null == retval;
 
       assertOnAllCachesAndOwnership("k1", "value2");
    }
@@ -78,7 +79,7 @@
       initAndTest();
       Object retval = getFirstNonOwner("k1").remove("k1");
       asyncWait("k1", RemoveCommand.class, getSecondNonOwner("k1"));
-      if (sync) assert "value".equals(retval);
+      if (testRetVals) assert "value".equals(retval);
 
       assertOnAllCachesAndOwnership("k1", null);
    }
@@ -86,13 +87,13 @@
    public void testConditionalRemoveFromNonOwner() {
       initAndTest();
       boolean retval = getFirstNonOwner("k1").remove("k1", "value2");
-      assert !retval : "Should not have removed entry";
+      if (testRetVals) assert !retval : "Should not have removed entry";
 
       assertOnAllCachesAndOwnership("k1", "value");
 
       retval = getFirstNonOwner("k1").remove("k1", "value");
       asyncWait("k1", RemoveCommand.class, getSecondNonOwner("k1"));
-      assert retval : "Should have removed entry";
+      if (testRetVals) assert retval : "Should have removed entry";
 
       assertOnAllCachesAndOwnership("k1", null);
    }
@@ -100,7 +101,7 @@
    public void testReplaceFromNonOwner() {
       initAndTest();
       Object retval = getFirstNonOwner("k1").replace("k1", "value2");
-      assert "value".equals(retval);
+      if (testRetVals) assert "value".equals(retval);
 
       asyncWait("k1", ReplaceCommand.class, getSecondNonOwner("k1"));
 
@@ -110,7 +111,7 @@
       asyncWait(null, ClearCommand.class);
 
       retval = getFirstNonOwner("k1").replace("k1", "value2");
-      assert retval == null;
+      if (testRetVals) assert retval == null;
 
       assertOnAllCachesAndOwnership("k1", null);
    }
@@ -119,14 +120,14 @@
       initAndTest();
       Cache<Object, String> nonOwner = getFirstNonOwner("k1");
       boolean retval = nonOwner.replace("k1", "valueX", "value2");
-      assert !retval : "Should not have replaced";
+      if (testRetVals) assert !retval : "Should not have replaced";
 
       assertOnAllCachesAndOwnership("k1", "value");
 
       assert !nonOwner.getAdvancedCache().getComponentRegistry().getComponent(DistributionManager.class).isLocal("k1");
       retval = nonOwner.replace("k1", "value", "value2");
       asyncWait("k1", ReplaceCommand.class, getSecondNonOwner("k1"));
-      assert retval : "Should have replaced";
+      if (testRetVals) assert retval : "Should have replaced";
 
       assertOnAllCachesAndOwnership("k1", "value2");
    }

Modified: trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxFuncTest.java	2009-04-27 12:38:50 UTC (rev 170)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxFuncTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -10,6 +10,7 @@
    public DistSyncTxFuncTest() {
       sync = true;
       tx = true;
+      testRetVals = true;
       cleanup = CleanupPhase.AFTER_METHOD; // ensure any stale TXs are wiped
    }
 
@@ -112,9 +113,9 @@
       TransactionManager tm4 = getTransactionManager(c4);
       tm4.begin();
       Object ret = c4.put(k1, "new_value");
-      assert "value1".equals(ret);
+      if (testRetVals) assert "value1".equals(ret);
       ret = c4.put(k2, "new_value");
-      assert "value2".equals(ret);
+      if (testRetVals) assert "value2".equals(ret);
       tm4.rollback();
 
       assertIsInContainerImmortal(c1, k1);
@@ -140,9 +141,9 @@
       TransactionManager tm4 = getTransactionManager(c4);
       tm4.begin();
       Object ret = c4.putIfAbsent(k1, "new_value");
-      assert "value1".equals(ret) : "Was expecting value1 but was " + ret;
+      if (testRetVals) assert "value1".equals(ret) : "Was expecting value1 but was " + ret;
       ret = c4.putIfAbsent(k2, "new_value");
-      assert "value2".equals(ret) : "Was expecting value2 but was " + ret;
+      if (testRetVals) assert "value2".equals(ret) : "Was expecting value2 but was " + ret;
 
       assert c4.get(k1).equals("value1");
       assert c4.get(k2).equals("value2");
@@ -175,9 +176,9 @@
       TransactionManager tm4 = getTransactionManager(c4);
       tm4.begin();
       Object ret = c4.remove(k1);
-      assert "value1".equals(ret);
+      if (testRetVals) assert "value1".equals(ret);
       ret = c4.remove(k2);
-      assert "value2".equals(ret);
+      if (testRetVals) assert "value2".equals(ret);
 
       assert !c4.containsKey(k1);
       assert !c4.containsKey(k2);
@@ -206,17 +207,17 @@
       TransactionManager tm4 = getTransactionManager(c4);
       tm4.begin();
       boolean ret = c4.remove(k1, "valueX");
-      assert !ret;
+      if (testRetVals) assert !ret;
       ret = c4.remove(k2, "valueX");
-      assert !ret;
+      if (testRetVals) assert !ret;
 
       assert c4.containsKey(k1);
       assert c4.containsKey(k2);
 
       ret = c4.remove(k1, "value1");
-      assert ret;
+      if (testRetVals) assert ret;
       ret = c4.remove(k2, "value2");
-      assert ret;
+      if (testRetVals) assert ret;
 
       assert !c4.containsKey(k1);
       assert !c4.containsKey(k2);
@@ -245,9 +246,9 @@
       TransactionManager tm4 = getTransactionManager(c4);
       tm4.begin();
       Object ret = c4.replace(k1, "new_value");
-      assert "value1".equals(ret);
+      if (testRetVals) assert "value1".equals(ret);
       ret = c4.replace(k2, "new_value");
-      assert "value2".equals(ret);
+      if (testRetVals) assert "value2".equals(ret);
 
       assert "new_value".equals(c4.get(k1));
       assert "new_value".equals(c4.get(k2));
@@ -276,17 +277,17 @@
       TransactionManager tm4 = getTransactionManager(c4);
       tm4.begin();
       boolean ret = c4.replace(k1, "valueX", "new_value");
-      assert !ret;
+      if (testRetVals) assert !ret;
       ret = c4.replace(k2, "valueX", "new_value");
-      assert !ret;
+      if (testRetVals) assert !ret;
 
       assert "value1".equals(c4.get(k1));
       assert "value2".equals(c4.get(k2));
 
       ret = c4.replace(k1, "value1", "new_value");
-      assert ret;
+      if (testRetVals) assert ret;
       ret = c4.replace(k2, "value2", "new_value");
-      assert ret;
+      if (testRetVals) assert ret;
 
       assert "new_value".equals(c4.get(k1));
       assert "new_value".equals(c4.get(k2));

Added: trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java	                        (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -0,0 +1,13 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistSyncTxUnsafeFuncTest")
+public class DistSyncTxUnsafeFuncTest extends DistSyncTxFuncTest {
+   public DistSyncTxUnsafeFuncTest() {
+      sync = true;
+      tx = true;
+      testRetVals = false;
+      cleanup = CleanupPhase.AFTER_METHOD; // ensure any stale TXs are wiped
+   }
+}


Property changes on: trunk/core/src/test/java/org/infinispan/distribution/DistSyncTxUnsafeFuncTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java	                        (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java	2009-04-27 14:17:28 UTC (rev 171)
@@ -0,0 +1,12 @@
+package org.infinispan.distribution;
+
+import org.testng.annotations.Test;
+
+ at Test(groups = "functional", testName = "distribution.DistSyncUnsafeFuncTest")
+public class DistSyncUnsafeFuncTest extends DistSyncFuncTest {
+   public DistSyncUnsafeFuncTest() {
+      sync = true;
+      tx = false;
+      testRetVals = false;
+   }
+}


Property changes on: trunk/core/src/test/java/org/infinispan/distribution/DistSyncUnsafeFuncTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF




More information about the infinispan-commits mailing list