package org.infinispan.it.osgi.tx; import static org.infinispan.it.osgi.util.IspnKarafOptions.perSuiteOptions; import static org.junit.Assert.assertEquals; import static org.ops4j.pax.exam.CoreOptions.options; import java.io.Serializable; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.it.osgi.util.PaxExamUtils; import org.infinispan.test.MultipleCacheManagersTest; import org.infinispan.test.TestingUtil; import org.infinispan.test.fwk.TestResourceTracker; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.ProbeBuilder; import org.ops4j.pax.exam.TestProbeBuilder; import org.ops4j.pax.exam.junit.PaxExam; import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; import org.ops4j.pax.exam.spi.reactors.PerSuite; /** * @author mgencur */ @RunWith(PaxExam.class) @ExamReactorStrategy(PerSuite.class) @Category(PerSuite.class) public class CustomObjectsReplicatedCacheTest extends MultipleCacheManagersTest { @Override protected void createCacheManagers() { //not used } @Configuration public Option[] config() throws Exception { return options(perSuiteOptions()); } @ProbeBuilder public TestProbeBuilder probe(TestProbeBuilder probeBuilder) { return PaxExamUtils.exportTestPackages(probeBuilder); } @Before public void setUp() { TestResourceTracker.testThreadStarted(this); ConfigurationBuilder c = getDefaultClusteredCacheConfig(CacheMode.REPL_SYNC, true); createCluster(c, 2); } @After public void tearDown() { TestingUtil.killCacheManagers(cacheManagers); } @Test public void testCustomObjectClustered() { Person p = new Person("Martin"); cache(0).put("k1", p); assertEquals(p, cache(1).get("k1")); } /* * This custom class has to be defined here. We can't reuse a similar class from ispn-core * as then a CNFE error would never appear. The custom class would be visible to * the ispn-core OSGI module. We need the class to be provided by a client bundle. */ static class Person implements Serializable { final String name; public Person(String name) { this.name = name; } public String getName() { return name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (!name.equals(person.name)) return false; return true; } @Override public int hashCode() { return name.hashCode(); } } }