/** * Copyright (c) 2009-2011 VMware, 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.springsource.insight.plugin.springtx; import java.util.Map; import org.junit.Test; import org.springframework.transaction.TransactionDefinition; import com.springsource.insight.collection.test.AbstractCollectionTestSupport; import com.springsource.insight.intercept.operation.Operation; public class TransactionOperationFinalizerTest extends AbstractCollectionTestSupport { @Test public void getVariousStrings() { Operation testTO1 = new Operation() .put("propagation", TransactionDefinition.PROPAGATION_REQUIRED) .put("isolation", TransactionDefinition.ISOLATION_READ_COMMITTED); finalize(testTO1); assertEquals("REQUIRED", testTO1.get("propagation")); assertEquals("READ_COMMITTED", testTO1.get("isolation")); Operation testTO2 = new Operation() .put("propagation", TransactionDefinition.PROPAGATION_REQUIRES_NEW) .put("isolation", TransactionDefinition.ISOLATION_DEFAULT); finalize(testTO2); assertEquals("REQUIRES_NEW", testTO2.get("propagation")); assertEquals("DEFAULT", testTO2.get("isolation")); } @Test public void getLabel() { Operation op = new Operation().put("name", "myTx"); finalize(op); assertEquals("Transaction: myTx", op.getLabel()); } @Test public void getLabel_truncated() { Operation op = new Operation().put("name", "0123456789012345678901.34567890"); finalize(op); assertEquals("Transaction: 0123456789012345678901.3456...", op.getLabel()); } @Test public void getLabel_withNoTxName() { Operation op = new Operation(); finalize(op); assertEquals("Transaction", op.getLabel()); } @Test public void getLabel_readOnly() { Operation op = new Operation().put("name", "myTx").put("readOnly", true); finalize(op); assertEquals("Transaction: myTx (Read-only)", op.getLabel()); } @Test public void getLabel_rolledBack() { Operation op = new Operation().put("name", "myTx").put("status", TransactionOperationStatus.RolledBack.toString()); finalize(op); assertEquals("Transaction: myTx (Rolled Back)", op.getLabel()); } @Test public void truncateTxName() { assertEquals("", TransactionOperationFinalizer.truncateTxName("", 5)); assertEquals("MyTx", TransactionOperationFinalizer.truncateTxName("MyTx", 5)); assertEquals("MyTra", TransactionOperationFinalizer.truncateTxName("MyTra", 5)); assertEquals("My...", TransactionOperationFinalizer.truncateTxName("MyTrans", 5)); assertEquals(".", TransactionOperationFinalizer.truncateTxName("..", 5)); assertEquals(".", TransactionOperationFinalizer.truncateTxName(".", 5)); assertEquals("Foo.Meth...", TransactionOperationFinalizer.truncateTxName("com.my.Foo.MethodName", 11)); assertEquals("Foo.Meth...", TransactionOperationFinalizer.truncateTxName("Foo.MethodName", 11)); assertEquals("Foo.Meth...", TransactionOperationFinalizer.truncateTxName(".Foo.MethodName", 11)); } @Test public void normalizePropagation() { for (int index = 0; index < TransactionOperationFinalizer.propagationNames.size(); index++) { String expected = TransactionOperationFinalizer.propagationNames.get(index), actual = TransactionOperationFinalizer.normalizePropagation(new Operation().put("propagation", index)); assertEquals("Mismatched values for index=" + index, expected, actual); } } @Test public void normalizeBadPropagationValues() { assertNull("Unexpected result for null", TransactionOperationFinalizer.normalizePropagation(new Operation())); assertNull("Unexpected result for negative index", TransactionOperationFinalizer.normalizePropagation(new Operation().put("propagation", (-1)))); assertNull("Unexpected result for out-of-bounds index", TransactionOperationFinalizer.normalizePropagation( new Operation().put("propagation", TransactionOperationFinalizer.propagationNames.size() + 1))); } @Test public void normalizeIsolation() { for (Map.Entry<Integer, String> ie : TransactionOperationFinalizer.isolationLevels.entrySet()) { Integer value = ie.getKey(); String expected = ie.getValue(), actual = TransactionOperationFinalizer.normalizeIsolation(new Operation().put("isolation", value.intValue())); assertEquals("Mismatched values for value=" + value, expected, actual); } } @Test public void normalizeBadIsolationValues() { assertEquals("Unexpected result for null", TransactionOperationFinalizer.DEFAULT_ISOLATION_LEVEL, TransactionOperationFinalizer.normalizeIsolation(new Operation())); assertEquals("Unexpected negative value result", TransactionOperationFinalizer.DEFAULT_ISOLATION_LEVEL, TransactionOperationFinalizer.normalizeIsolation(new Operation().put("isolation", (-3777347)))); int maxValue = Integer.MIN_VALUE; for (Integer value : TransactionOperationFinalizer.isolationLevels.keySet()) { if (maxValue < value.intValue()) { maxValue = value.intValue(); } } assertEquals("Unexpected beyond max. value result", TransactionOperationFinalizer.DEFAULT_ISOLATION_LEVEL, TransactionOperationFinalizer.normalizeIsolation(new Operation().put("isolation", maxValue + 1))); } private static void finalize(Operation operation) { TransactionOperationFinalizer.register(operation); operation.finalizeConstruction(); } }