blob: df23914a71bc81a917d9dd21d2ef06118aa4fc8f [file] [log] [blame]
/*
* 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.camel.component.jcache.processor.aggregate;
import org.apache.camel.Exchange;
import org.apache.camel.support.DefaultExchange;
import org.junit.Test;
public class JCacheAggregationRepositoryTest extends JCacheAggregationRepositoryTestSupport {
@Test(expected = UnsupportedOperationException.class)
public void nonOptimisticRepoFailsOnOptimisticAdd() throws Exception {
JCacheAggregationRepository repo = createRepository(false);
repo.start();
try {
Exchange oldOne = new DefaultExchange(context());
Exchange newOne = new DefaultExchange(context());
repo.add(context(), "myKey", oldOne, newOne);
fail("OptimisticLockingException should has been thrown");
} finally {
repo.stop();
}
}
@Test(expected = UnsupportedOperationException.class)
public void optimisticRepoFailsForNonOptimisticAdd() throws Exception {
JCacheAggregationRepository repo = createRepository(true);
repo.start();
try {
Exchange ex = new DefaultExchange(context());
repo.add(context(), "myKey", ex);
} finally {
repo.stop();
}
}
@Test
public void checkOptimisticAddOfNewExchange() throws Exception {
JCacheAggregationRepository repoOne = createRepository(true);
JCacheAggregationRepository repoTwo = createRepository(true);
repoOne.start();
repoTwo.start();
try {
final String testBody = "This is an optimistic test body. Sincerely yours, Captain Obvious.";
final String key = "optimisticKey";
Exchange newEx = createExchangeWithBody(testBody);
Exchange oldEx = repoOne.add(context(), key, null, newEx);
assertNull("Old exchange should be null.", oldEx);
final String theNewestBody = "This is the newest test body.";
Exchange theNewestEx = createExchangeWithBody(theNewestBody);
oldEx = repoTwo.add(context(), key, newEx, theNewestEx);
assertEquals(newEx.getIn().getBody(), oldEx.getIn().getBody());
} finally {
repoOne.stop();
repoTwo.stop();
}
}
@Test
public void checkThreadSafeAddOfNewExchange() throws Exception {
JCacheAggregationRepository repoOne = createRepository(false);
JCacheAggregationRepository repoTwo = createRepository(false);
repoOne.start();
repoTwo.start();
try {
final String testBody = "This is a thread-safe test body. Sincerely yours, Captain Obvious.";
final String key = "threadSafeKey";
Exchange newEx = createExchangeWithBody(testBody);
Exchange oldEx = repoOne.add(context(), key, newEx);
assertNull("Old exchange should be null.", oldEx);
final String theNewestBody = "This is the newest test body.";
Exchange theNewestEx = createExchangeWithBody(theNewestBody);
oldEx = repoTwo.add(context(), key, theNewestEx);
assertEquals(newEx.getIn().getBody(), oldEx.getIn().getBody());
} finally {
repoOne.stop();
repoTwo.stop();
}
}
@Test
public void checkOptimisticGet() throws Exception {
JCacheAggregationRepository repoOne = createRepository(true);
JCacheAggregationRepository repoTwo = createRepository(true);
repoOne.start();
repoTwo.start();
try {
final String testBody = "This is an optimistic test body. Sincerely yours, Captain Obvious.";
final String key = "optimisticKey";
Exchange ex = createExchangeWithBody(testBody);
repoOne.add(context(), key, null, ex);
Exchange gotEx = repoTwo.get(context(), key);
assertEquals("ex and gotEx should be equal", gotEx.getIn().getBody(), ex.getIn().getBody());
} finally {
repoOne.stop();
repoTwo.stop();
}
}
@Test
public void checkThreadSafeGet() throws Exception {
JCacheAggregationRepository repoOne = createRepository(false);
JCacheAggregationRepository repoTwo = createRepository(false);
repoOne.start();
repoTwo.start();
try {
final String testBody = "This is a thread-safe test body. Sincerely yours, Captain Obvious.";
final String key = "threadSafeKey";
Exchange ex = createExchangeWithBody(testBody);
repoOne.add(context(), key, ex);
Exchange gotEx = repoTwo.get(context(), key);
assertEquals("ex and gotEx should be equal", gotEx.getIn().getBody(), ex.getIn().getBody());
} finally {
repoOne.stop();
repoTwo.stop();
}
}
}