PageRenderTime 29ms CodeModel.GetById 32ms RepoModel.GetById 1ms app.codeStats 0ms

/client/java/xixiclient/src/test/java/com/yeaya/xixibase/xixiclient/MultiOperationTest.java

https://github.com/yeaya/xixibase
Java | 446 lines | 377 code | 49 blank | 20 comment | 43 complexity | 84e5bfa038e54d7a67af114121522746 MD5 | raw file
  1. /*
  2. Copyright [2011] [Yao Yuan(yeaya@163.com)]
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package com.yeaya.xixibase.xixiclient;
  14. import static org.junit.Assert.*;
  15. import java.io.IOException;
  16. import java.io.InputStream;
  17. import java.util.ArrayList;
  18. import java.util.HashMap;
  19. import java.util.List;
  20. import java.util.Properties;
  21. import org.junit.After;
  22. import org.junit.Before;
  23. import org.junit.Test;
  24. import com.yeaya.xixibase.xixiclient.multi.MultiDeleteItem;
  25. import com.yeaya.xixibase.xixiclient.multi.MultiUpdateItem;
  26. import junit.framework.TestCase;
  27. public class MultiOperationTest {
  28. private static final String managerName1 = "MultiOperationTest";
  29. private static XixiClient cc1 = null;
  30. private static XixiClientManager mgr1 = null;
  31. static String servers;
  32. static boolean enableSSL = false;
  33. static {
  34. servers = System.getProperty("hosts");
  35. enableSSL = System.getProperty("enableSSL") != null && System.getProperty("enableSSL").equals("true");
  36. if (servers == null) {
  37. try {
  38. InputStream in = MultiOperationTest.class.getResourceAsStream("/test.properties");
  39. Properties p = new Properties();
  40. p.load(in);
  41. in.close();
  42. servers = p.getProperty("hosts");
  43. enableSSL = p.getProperty("enableSSL") != null && p.getProperty("enableSSL").equals("true");
  44. } catch (IOException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. String[] serverlist = servers.split(",");
  49. mgr1 = XixiClientManager.getInstance(managerName1);
  50. mgr1.socketManager.setSocketWriteBufferSize(64 * 1024);
  51. mgr1.initialize(serverlist, enableSSL);
  52. // mgr1.enableLocalCache();
  53. }
  54. @Before
  55. public void setUp() throws Exception {
  56. cc1 = mgr1.createClient();
  57. }
  58. @After
  59. public void tearDown() throws Exception {
  60. assertNotNull(cc1);
  61. cc1.flush();
  62. }
  63. @Test
  64. public void testMultiGet() {
  65. String[] allKeys = { "key1", "key2", "key3", "key4", "key5", "key6", "key7" };
  66. String[] setKeys = { "key1", "key3", "key5", "key7" };
  67. for (String key : setKeys) {
  68. cc1.set(key, key + "xixi");
  69. }
  70. ArrayList<String> allKeyList = new ArrayList<String>();
  71. for (String key : allKeys) {
  72. allKeyList.add(key);
  73. }
  74. List<CacheItem> results = cc1.multiGet(allKeyList);
  75. HashMap<String, CacheItem> hm = new HashMap<String, CacheItem>();
  76. for (int i = 0; i < allKeyList.size(); i++) {
  77. hm.put(allKeyList.get(i), results.get(i));
  78. }
  79. assert allKeys.length == results.size();
  80. for (int i = 0; i < setKeys.length; i++) {
  81. String key = setKeys[i];
  82. String val = (String) hm.get(key).getValue();
  83. assertEquals(key + "xixi", val);
  84. }
  85. }
  86. @Test
  87. public void testMultiGetError() {
  88. assertNull(cc1.multiGet(null));
  89. ArrayList<String> allKeyList = new ArrayList<String>();
  90. assertEquals(0, cc1.multiGet(allKeyList).size());
  91. String[] allKeys = { "key1", "key2", "key4", "key5", "key6", "key7" };
  92. String[] setKeys = { "key1", "key3", "key5", "key7" };
  93. for (String key : setKeys) {
  94. cc1.set(key, key + "xixi");
  95. }
  96. allKeyList.add(null);
  97. for (String key : allKeys) {
  98. allKeyList.add(key);
  99. }
  100. allKeyList.add(null);
  101. List<CacheItem> results = cc1.multiGet(allKeyList);
  102. HashMap<String, CacheItem> hm = new HashMap<String, CacheItem>();
  103. for (int i = 0; i < allKeyList.size(); i++) {
  104. hm.put(allKeyList.get(i), results.get(i));
  105. }
  106. assertEquals(allKeys.length + 2, results.size());
  107. for (int i = 0; i < setKeys.length; i++) {
  108. String key = setKeys[i];
  109. if (!key.equals("key3")) {
  110. String val = (String) hm.get(key).getValue();
  111. assertEquals(key + "xixi", val);
  112. }
  113. }
  114. }
  115. @Test
  116. public void testMultiAdd() {
  117. int max = 100;
  118. ArrayList<MultiUpdateItem> multi = new ArrayList<MultiUpdateItem>();
  119. ArrayList<String> keys = new ArrayList<String>();
  120. ArrayList<String> values = new ArrayList<String>();
  121. for (int i = 0; i < max; i++) {
  122. String key = Integer.toString(i);
  123. String value = "value" + i;
  124. MultiUpdateItem item = new MultiUpdateItem();
  125. item.key = key;
  126. item.value = value;
  127. multi.add(item);
  128. keys.add(key);
  129. values.add(value);
  130. }
  131. int ret = cc1.multiAdd(multi);
  132. assertEquals(max, ret);
  133. List<CacheItem> results = cc1.multiGet(keys);
  134. for (int i = 0; i < max; i++) {
  135. CacheItem item = results.get(i);
  136. assertEquals(item.getValue(), values.get(i));
  137. }
  138. }
  139. @Test
  140. public void testMultiSet() {
  141. int max = 100;
  142. ArrayList<MultiUpdateItem> multi = new ArrayList<MultiUpdateItem>();
  143. ArrayList<String> keys = new ArrayList<String>();
  144. ArrayList<String> values = new ArrayList<String>();
  145. for (int i = 0; i < max; i++) {
  146. String key = Integer.toString(i);
  147. String value = "value" + i;
  148. MultiUpdateItem item = new MultiUpdateItem();
  149. item.key = key;
  150. item.value = value;
  151. multi.add(item);
  152. keys.add(key);
  153. values.add(value);
  154. }
  155. int ret = cc1.multiSet(multi);
  156. assertEquals(max, ret);
  157. List<CacheItem> results = cc1.multiGet(keys);
  158. for (int i = 0; i < max; i++) {
  159. CacheItem item = results.get(i);
  160. assertEquals(item.getValue(), values.get(i));
  161. }
  162. }
  163. @Test
  164. public void testMultiReplace() {
  165. int max = 100;
  166. ArrayList<MultiUpdateItem> multi = new ArrayList<MultiUpdateItem>();
  167. ArrayList<String> keys = new ArrayList<String>();
  168. ArrayList<String> values = new ArrayList<String>();
  169. for (int i = 0; i < max; i++) {
  170. String key = Integer.toString(i);
  171. String value = "value" + i;
  172. MultiUpdateItem item = new MultiUpdateItem();
  173. item.key = key;
  174. item.value = value;
  175. multi.add(item);
  176. keys.add(key);
  177. values.add(value);
  178. }
  179. int ret = cc1.multiSet(multi);
  180. assertEquals(max, ret);
  181. List<CacheItem> results = cc1.multiGet(keys);
  182. for (int i = 0; i < max; i++) {
  183. CacheItem item = results.get(i);
  184. assertEquals(item.getValue(), values.get(i));
  185. }
  186. ArrayList<MultiUpdateItem> multi2 = new ArrayList<MultiUpdateItem>();
  187. ArrayList<String> keys2 = new ArrayList<String>();
  188. ArrayList<String> values2 = new ArrayList<String>();
  189. for (int i = 0; i < max; i++) {
  190. String key = Integer.toString(i);
  191. String value = "value2" + i;
  192. MultiUpdateItem item = new MultiUpdateItem();
  193. item.key = key;
  194. item.value = value;
  195. multi2.add(item);
  196. keys2.add(key);
  197. values2.add(value);
  198. }
  199. ret = cc1.multiReplace(multi2);
  200. assertEquals(max, ret);
  201. List<CacheItem> results2 = cc1.multiGet(keys2);
  202. for (int i = 0; i < max; i++) {
  203. CacheItem item = results2.get(i);
  204. assertEquals(item.getValue(), values2.get(i));
  205. }
  206. }
  207. @Test
  208. public void testMultiAppend() {
  209. int max = 100;
  210. ArrayList<MultiUpdateItem> multi = new ArrayList<MultiUpdateItem>();
  211. ArrayList<String> keys = new ArrayList<String>();
  212. ArrayList<String> values = new ArrayList<String>();
  213. for (int i = 0; i < max; i++) {
  214. String key = Integer.toString(i);
  215. String value = "value" + i;
  216. MultiUpdateItem item = new MultiUpdateItem();
  217. item.key = key;
  218. item.value = value;
  219. multi.add(item);
  220. keys.add(key);
  221. values.add(value);
  222. }
  223. int ret = cc1.multiAdd(multi);
  224. assertEquals(max, ret);
  225. for (int i = 0; i < max; i++) {
  226. multi.get(i).value = "append";
  227. }
  228. ret = cc1.multiAppend(multi);
  229. assertEquals(max, ret);
  230. List<CacheItem> results = cc1.multiGet(keys);
  231. for (int i = 0; i < max; i++) {
  232. CacheItem item = results.get(i);
  233. assertEquals(item.getValue(), values.get(i) + "append");
  234. }
  235. }
  236. @Test
  237. public void testMultiPrepend() {
  238. int max = 100;
  239. ArrayList<MultiUpdateItem> multi = new ArrayList<MultiUpdateItem>();
  240. ArrayList<String> keys = new ArrayList<String>();
  241. ArrayList<String> values = new ArrayList<String>();
  242. for (int i = 0; i < max; i++) {
  243. String key = Integer.toString(i);
  244. String value = "value" + i;
  245. MultiUpdateItem item = new MultiUpdateItem();
  246. item.key = key;
  247. item.value = value;
  248. multi.add(item);
  249. keys.add(key);
  250. values.add(value);
  251. }
  252. int ret = cc1.multiAdd(multi);
  253. assertEquals(max, ret);
  254. ArrayList<MultiUpdateItem> multi2 = new ArrayList<MultiUpdateItem>();
  255. for (int i = 0; i < max; i++) {
  256. MultiUpdateItem item = new MultiUpdateItem();
  257. item.key = multi.get(i).key;
  258. item.value = "prepend";
  259. multi2.add(item);
  260. }
  261. ret = cc1.multiPrepend(multi2);
  262. assertEquals(max, ret);
  263. List<CacheItem> results = cc1.multiGet(keys);
  264. for (int i = 0; i < max; i++) {
  265. CacheItem item = results.get(i);
  266. assertEquals(item.getValue(), "prepend" + values.get(i));
  267. assertTrue(item.cacheId != multi.get(i).cacheID);
  268. }
  269. }
  270. @Test
  271. public void testMultiDelete() {
  272. int max = 100;
  273. ArrayList<MultiUpdateItem> multi = new ArrayList<MultiUpdateItem>();
  274. ArrayList<String> keys = new ArrayList<String>();
  275. ArrayList<String> values = new ArrayList<String>();
  276. for (int i = 0; i < max; i++) {
  277. String key = Integer.toString(i);
  278. String value = "value" + i;
  279. MultiUpdateItem item = new MultiUpdateItem();
  280. item.key = key;
  281. item.value = value;
  282. multi.add(item);
  283. keys.add(key);
  284. values.add(value);
  285. }
  286. int ret = cc1.multiAdd(multi);
  287. assertEquals(max, ret);
  288. ArrayList<MultiDeleteItem> md = new ArrayList<MultiDeleteItem>();
  289. for (int i = 0; i < multi.size(); i++) {
  290. MultiUpdateItem item = multi.get(i);
  291. MultiDeleteItem ditem = new MultiDeleteItem();
  292. ditem.key = item.key;
  293. ditem.cacheID = item.cacheID;
  294. md.add(ditem);
  295. }
  296. List<CacheItem> results = cc1.multiGet(keys);
  297. for (int i = 0; i < max; i++) {
  298. CacheItem item = results.get(i);
  299. assertEquals(item.getValue(), values.get(i));
  300. }
  301. cc1.multiDelete(md);
  302. results = cc1.multiGet(keys);
  303. for (int i = 0; i < max; i++) {
  304. CacheItem item = results.get(i);
  305. assertNull(item);
  306. }
  307. }
  308. @Test
  309. public void testMultiFlags() {
  310. int max = 100;
  311. ArrayList<MultiUpdateItem> multi = new ArrayList<MultiUpdateItem>();
  312. ArrayList<String> keys = new ArrayList<String>();
  313. ArrayList<String> values = new ArrayList<String>();
  314. for (int i = 0; i < max; i++) {
  315. String key = Integer.toString(i);
  316. String value = "value" + i;
  317. MultiUpdateItem item = new MultiUpdateItem();
  318. item.key = key;
  319. item.value = value;
  320. multi.add(item);
  321. keys.add(key);
  322. values.add(value);
  323. }
  324. int ret = cc1.multiAdd(multi);
  325. assertEquals(max, ret);
  326. // ArrayList<MultiUpdateBaseItem> multibase = new ArrayList<MultiUpdateBaseItem>();
  327. // for (int i = 0; i < max; i++) {
  328. // MultiUpdateBaseItem item = new MultiUpdateBaseItem();
  329. // }
  330. ArrayList<MultiDeleteItem> md = new ArrayList<MultiDeleteItem>();
  331. for (int i = 0; i < multi.size(); i++) {
  332. MultiUpdateItem item = multi.get(i);
  333. MultiDeleteItem ditem = new MultiDeleteItem();
  334. ditem.key = item.key;
  335. ditem.cacheID = item.cacheID;
  336. md.add(ditem);
  337. }
  338. List<CacheItem> results = cc1.multiGet(keys);
  339. for (int i = 0; i < max; i++) {
  340. CacheItem item = results.get(i);
  341. assertEquals(item.getValue(), values.get(i));
  342. }
  343. cc1.multiDelete(md);
  344. results = cc1.multiGet(keys);
  345. for (int i = 0; i < max; i++) {
  346. CacheItem item = results.get(i);
  347. assertNull(item);
  348. }
  349. }
  350. @Test
  351. public void testMultiError() {
  352. int ret = cc1.multiAdd(null);
  353. assertEquals(ret, 0);
  354. assertNotNull(cc1.getLastError());
  355. int max = 100;
  356. ArrayList<MultiUpdateItem> multi = new ArrayList<MultiUpdateItem>();
  357. ret = cc1.multiAdd(multi);
  358. assertEquals(ret, 0);
  359. assertNotNull(cc1.getLastError());
  360. ArrayList<String> keys = new ArrayList<String>();
  361. ArrayList<String> values = new ArrayList<String>();
  362. for (int i = 0; i < max; i++) {
  363. String key = Integer.toString(i);
  364. String value = "value" + i;
  365. MultiUpdateItem item = new MultiUpdateItem();
  366. item.key = key;
  367. item.value = value;
  368. multi.add(item);
  369. keys.add(key);
  370. values.add(value);
  371. }
  372. ret = cc1.multiAdd(multi);
  373. assertEquals(max, ret);
  374. ArrayList<MultiDeleteItem> md = new ArrayList<MultiDeleteItem>();
  375. for (int i = 0; i < multi.size(); i++) {
  376. MultiUpdateItem item = multi.get(i);
  377. MultiDeleteItem ditem = new MultiDeleteItem();
  378. ditem.key = item.key;
  379. ditem.cacheID = item.cacheID;
  380. md.add(ditem);
  381. }
  382. List<CacheItem> results = cc1.multiGet(keys);
  383. for (int i = 0; i < max; i++) {
  384. CacheItem item = results.get(i);
  385. assertEquals(item.getValue(), values.get(i));
  386. }
  387. cc1.multiDelete(md);
  388. results = cc1.multiGet(keys);
  389. for (int i = 0; i < max; i++) {
  390. CacheItem item = results.get(i);
  391. assertNull(item);
  392. }
  393. }
  394. }