2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 package testsuite.clusterj;
20 import java.util.ArrayList;
21 import java.util.List;
23 import testsuite.clusterj.model.BinaryPK;
25 public class BinaryPKTest extends AbstractClusterJTest {
27 protected int NUMBER_OF_INSTANCES = 15;
28 protected List<BinaryPK> instances = new ArrayList<BinaryPK>();
31 public void localSetUp() {
32 createSessionFactory();
33 session = sessionFactory.getSession();
34 tx = session.currentTransaction();
37 session.deletePersistentAll(BinaryPK.class);
39 } catch (Throwable t) {
40 // ignore errors while deleting
43 addTearDownClasses(BinaryPK.class);
54 /** Insert all instances.
56 protected void insert() {
57 session.makePersistentAll(instances);
60 /** Find all instances.
62 protected void find() {
63 for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
64 byte[] key = getStoragePK(i);
65 BinaryPK result = session.find(BinaryPK.class, key);
66 verifyResult("find ", result, i, false);
70 /** Blind update every fourth instance.
72 protected void update() {
73 // update the instances
74 for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
76 BinaryPK instance = createInstance(i);
77 instance.setName(getValue(NUMBER_OF_INSTANCES - i));
78 session.updatePersistent(instance);
79 verifyStorage("update ", instance, i, true);
82 // verify the updated instances
83 for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
85 byte[] key = getStoragePK(i);
86 BinaryPK instance = session.find(BinaryPK.class, key);
87 verifyResult("update verify", instance, i, true);
92 /** Blind delete every fifth instance.
94 protected void delete() {
95 // delete the instances
96 for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
98 BinaryPK instance = createInstance(i);
99 session.deletePersistent(instance);
102 // verify they have been deleted
103 for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
105 byte[] key = getStoragePK(i);
106 BinaryPK instance = session.find(BinaryPK.class, key);
107 errorIfNotEqual("Failed to delete instance: " + i, null, instance);
112 /** The strategy for instances is for the "instance number" to create
113 * the keys by creating a byte[] with the encoded number.
115 protected void createInstances() {
116 for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
117 BinaryPK instance = createInstance(i);
118 if (getDebug()) System.out.println(toString(instance));
119 instances.add(instance);
123 /** Create an instance of BinaryPK.
124 * @param index the index to use to generate data
125 * @return the instance
127 protected BinaryPK createInstance(int index) {
128 BinaryPK instance = session.newInstance(BinaryPK.class);
129 instance.setId(getStoragePK(index));
130 instance.setNumber(index);
131 instance.setName(getValue(index));
135 protected String toString(BinaryPK instance) {
136 StringBuffer result = new StringBuffer();
137 result.append("BinaryPK[");
138 result.append(toString(instance.getId()));
139 result.append("]: ");
140 result.append(instance.getNumber());
141 result.append(", \"");
142 result.append(instance.getName());
143 result.append("\".");
144 return result.toString();
147 protected byte[] getStoragePK(int index) {
148 return new byte[] {0, (byte)(index/256), (byte)(index%256)};
151 protected byte[] getResultPK(int index) {
152 byte[] result = new byte[255];
153 result[1] = (byte)(index/256);
154 result[2] = (byte)(index%256);
158 protected String getValue(int index) {
159 return "Value " + index;
162 protected void verifyStorage(String where, BinaryPK instance, int index, boolean updated) {
163 errorIfNotEqual(where + "id failed", toString(getStoragePK(index)), toString(instance.getId()));
164 errorIfNotEqual(where + "number failed", index, instance.getNumber());
166 errorIfNotEqual(where + "Value failed", getValue(NUMBER_OF_INSTANCES - index), instance.getName());
168 errorIfNotEqual(where + "Value failed", getValue(index), instance.getName());
173 protected void verifyResult(String where, BinaryPK instance, int index, boolean updated) {
174 errorIfNotEqual(where + "id failed", toString(getResultPK(index)), toString(instance.getId()));
175 errorIfNotEqual("number failed", index, instance.getNumber());
177 errorIfNotEqual(where + "Value failed", getValue(NUMBER_OF_INSTANCES - index), instance.getName());
179 errorIfNotEqual(where + "Value failed", getValue(index), instance.getName());
184 private String toString(byte[] id) {
185 StringBuilder builder = new StringBuilder();
186 for (int i = 0; i < id.length; ++i) {
187 builder.append(String.valueOf(id[i]));
190 return builder.toString();