PageRenderTime 26ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/gemfire-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListHDFSStoresFunctionJUnitTest.java

https://gitlab.com/kidaa/incubator-geode
Java | 319 lines | 227 code | 72 blank | 20 comment | 4 complexity | bc12f3d99cd0ce7e85b6acb333be75de MD5 | raw file
  1. /*=========================================================================
  2. * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
  3. * This product is protected by U.S. and international copyright
  4. * and intellectual property laws. Pivotal products are covered by
  5. * one or more patents listed at http://www.pivotal.io/patents.
  6. *=========================================================================
  7. */
  8. package com.gemstone.gemfire.management.internal.cli.functions;
  9. import static org.junit.Assert.assertEquals;
  10. import static org.junit.Assert.assertNotNull;
  11. import static org.junit.Assert.assertTrue;
  12. import java.util.ArrayList;
  13. import java.util.Collections;
  14. import java.util.LinkedList;
  15. import java.util.List;
  16. import java.util.Set;
  17. import org.jmock.Expectations;
  18. import org.jmock.Mockery;
  19. import org.jmock.lib.legacy.ClassImposteriser;
  20. import org.junit.After;
  21. import org.junit.Before;
  22. import org.junit.Test;
  23. import org.junit.experimental.categories.Category;
  24. import com.gemstone.gemfire.cache.Cache;
  25. import com.gemstone.gemfire.cache.CacheClosedException;
  26. import com.gemstone.gemfire.cache.execute.FunctionContext;
  27. import com.gemstone.gemfire.cache.execute.ResultSender;
  28. import com.gemstone.gemfire.cache.hdfs.internal.HDFSStoreImpl;
  29. import com.gemstone.gemfire.distributed.DistributedMember;
  30. import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
  31. import com.gemstone.gemfire.management.internal.cli.functions.ListHDFSStoresFunction.HdfsStoreDetails;
  32. import com.gemstone.gemfire.test.junit.categories.HoplogTest;
  33. import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
  34. /**
  35. * The ListHDFSStoreFunctionJUnitTest test suite class tests the contract and functionality of the
  36. * ListHDFSStoreFunction.
  37. * </p>
  38. * @author Namrata Thanvi
  39. * @see com.gemstone.gemfire.cache.hdfs.internal.HDFSStoreImpl
  40. * @see com.gemstone.gemfire.cache.hdfs.internal.HDFSStoreConfigHolder
  41. * @see com.gemstone.gemfire.management.internal.cli.functions.ListHDFSStoresFunction
  42. * @see org.jmock.Expectations
  43. * @see org.jmock.Mockery
  44. * @see org.junit.Assert
  45. * @see org.junit.Test
  46. */
  47. @Category({IntegrationTest.class, HoplogTest.class})
  48. public class ListHDFSStoresFunctionJUnitTest {
  49. private Mockery mockContext;
  50. @Before
  51. public void setup() {
  52. mockContext = new Mockery() {
  53. {
  54. setImposteriser(ClassImposteriser.INSTANCE);
  55. }
  56. };
  57. }
  58. @After
  59. public void tearDown() {
  60. mockContext.assertIsSatisfied();
  61. mockContext = null;
  62. }
  63. @Test
  64. public void testExecute() throws Throwable {
  65. final String memberId = "mockMemberId";
  66. final String memberName = "mockMemberName";
  67. final GemFireCacheImpl mockCache = mockContext.mock(GemFireCacheImpl.class, "Cache");
  68. final DistributedMember mockMember = mockContext.mock(DistributedMember.class, "DistributedMember");
  69. final FunctionContext mockFunctionContext = mockContext.mock(FunctionContext.class, "FunctionContext");
  70. final TestResultSender testResultSender = new TestResultSender();
  71. final HDFSStoreImpl mockHdfsStoreOne = mockContext.mock(HDFSStoreImpl.class, "HDFSStoreOne");
  72. final HDFSStoreImpl mockHdfsStoreTwo = mockContext.mock(HDFSStoreImpl.class, "HDFSStoreTwo");
  73. final HDFSStoreImpl mockHdfsStoreThree = mockContext.mock(HDFSStoreImpl.class, "HDFSStoreThree");
  74. final List<HDFSStoreImpl> mockHdfsStores = new ArrayList<HDFSStoreImpl>();
  75. mockHdfsStores.add(mockHdfsStoreOne);
  76. mockHdfsStores.add(mockHdfsStoreTwo);
  77. mockHdfsStores.add(mockHdfsStoreThree);
  78. final List<String> storeNames = new ArrayList<String>();
  79. storeNames.add("hdfsStoreOne");
  80. storeNames.add("hdfsStoreTwo");
  81. storeNames.add("hdfsStoreThree");
  82. mockContext.checking(new Expectations() {
  83. {
  84. oneOf(mockCache).getHDFSStores();
  85. will(returnValue(mockHdfsStores));
  86. exactly(3).of(mockMember).getId();
  87. will(returnValue(memberId));
  88. exactly(3).of(mockMember).getName();
  89. will(returnValue(memberName));
  90. oneOf(mockHdfsStoreOne).getName();
  91. will(returnValue(storeNames.get(0)));
  92. oneOf(mockHdfsStoreTwo).getName();
  93. will(returnValue(storeNames.get(1)));
  94. oneOf(mockHdfsStoreThree).getName();
  95. will(returnValue(storeNames.get(2)));
  96. oneOf(mockFunctionContext).getResultSender();
  97. will(returnValue(testResultSender));
  98. }
  99. });
  100. final ListHDFSStoresFunction function = createListHDFSStoresFunction(mockCache, mockMember);
  101. function.execute(mockFunctionContext);
  102. final List<?> results = testResultSender.getResults();
  103. assertNotNull(results);
  104. assertEquals(1, results.size());
  105. final Set<HdfsStoreDetails> listHdfsStoreFunctionresults = (Set<HdfsStoreDetails>)results.get(0);
  106. assertNotNull(listHdfsStoreFunctionresults);
  107. assertEquals(3, listHdfsStoreFunctionresults.size());
  108. Collections.sort(storeNames);
  109. for (HdfsStoreDetails listHdfsStoreFunctionresult : listHdfsStoreFunctionresults) {
  110. assertTrue(storeNames.contains(listHdfsStoreFunctionresult.getStoreName()));
  111. assertTrue(storeNames.remove(listHdfsStoreFunctionresult.getStoreName()));
  112. assertEquals(memberId, listHdfsStoreFunctionresult.getMemberId());
  113. assertEquals(memberName, listHdfsStoreFunctionresult.getMemberName());
  114. }
  115. }
  116. @Test(expected = CacheClosedException.class)
  117. public void testExecuteOnMemberWithNoCache() throws Throwable {
  118. final FunctionContext mockFunctionContext = mockContext.mock(FunctionContext.class, "MockFunctionContext");
  119. final DistributedMember mockMember = mockContext.mock(DistributedMember.class, "DistributedMember");
  120. final TestListHDFSStoresFunction testListHdfsStoresFunction =
  121. new TestListHDFSStoresFunction(mockContext.mock(Cache.class, "MockCache"), mockMember) {
  122. @Override protected Cache getCache() {
  123. throw new CacheClosedException("Expected");
  124. }
  125. };
  126. final TestResultSender testResultSender = new TestResultSender();
  127. mockContext.checking(new Expectations() {{
  128. oneOf(mockFunctionContext).getResultSender();
  129. will(returnValue(testResultSender));
  130. }});
  131. testListHdfsStoresFunction.execute(mockFunctionContext);
  132. try {
  133. testResultSender.getResults();
  134. }
  135. catch (CacheClosedException expected) {
  136. assertEquals("Expected", expected.getMessage());
  137. throw expected;
  138. }
  139. }
  140. @Test
  141. @SuppressWarnings("unchecked")
  142. public void testExecuteOnMemberHavingNoHDFSStores() throws Throwable {
  143. final GemFireCacheImpl mockCache = mockContext.mock(GemFireCacheImpl.class, "Cache");
  144. final DistributedMember mockMember = mockContext.mock(DistributedMember.class, "DistributedMember");
  145. final FunctionContext mockFunctionContext = mockContext.mock(FunctionContext.class, "FunctionContext");
  146. final TestResultSender testResultSender = new TestResultSender();
  147. mockContext.checking(new Expectations() {{
  148. oneOf(mockCache).getHDFSStores();
  149. will(returnValue(Collections.emptyList()));
  150. oneOf(mockFunctionContext).getResultSender();
  151. will(returnValue(testResultSender));
  152. }});
  153. final ListHDFSStoresFunction function = createListHDFSStoresFunction(mockCache, mockMember);
  154. function.execute(mockFunctionContext);
  155. final List<?> results = testResultSender.getResults();
  156. assertNotNull(results);
  157. assertEquals(1, results.size());
  158. final Set<HdfsStoreDetails> hdfsStoreDetails = (Set<HdfsStoreDetails>) results.get(0);
  159. assertNotNull(hdfsStoreDetails);
  160. assertTrue(hdfsStoreDetails.isEmpty());
  161. }
  162. @Test
  163. @SuppressWarnings("unchecked")
  164. public void testExecuteOnMemberWithANonGemFireCache() throws Throwable {
  165. final Cache mockCache = mockContext.mock(Cache.class, "Cache");
  166. final FunctionContext mockFunctionContext = mockContext.mock(FunctionContext.class, "FunctionContext");
  167. final TestResultSender testResultSender = new TestResultSender();
  168. mockContext.checking(new Expectations() {
  169. {
  170. oneOf(mockFunctionContext).getResultSender();
  171. will(returnValue(testResultSender));
  172. }
  173. });
  174. final ListHDFSStoresFunction function = createListHDFSStoresFunction(mockCache, null);
  175. function.execute(mockFunctionContext);
  176. final List<?> results = testResultSender.getResults();
  177. assertNotNull(results);
  178. assertEquals(1, results.size());
  179. final Set<HdfsStoreDetails> hdfsStoreDetails = (Set<HdfsStoreDetails>)results.get(0);
  180. assertNotNull(hdfsStoreDetails);
  181. assertTrue(hdfsStoreDetails.isEmpty());
  182. }
  183. @Test(expected = RuntimeException.class)
  184. public void testExecuteThrowsRuntimeException() throws Throwable {
  185. final GemFireCacheImpl mockCache = mockContext.mock(GemFireCacheImpl.class, "Cache");
  186. final DistributedMember mockMember = mockContext.mock(DistributedMember.class, "DistributedMember");
  187. final FunctionContext mockFunctionContext = mockContext.mock(FunctionContext.class, "FunctionContext");
  188. final TestResultSender testResultSender = new TestResultSender();
  189. mockContext.checking(new Expectations() {
  190. {
  191. oneOf(mockCache).getHDFSStores();
  192. will(throwException(new RuntimeException("expected")));
  193. oneOf(mockFunctionContext).getResultSender();
  194. will(returnValue(testResultSender));
  195. }
  196. });
  197. final ListHDFSStoresFunction function = createListHDFSStoresFunction(mockCache, mockMember);
  198. function.execute(mockFunctionContext);
  199. try {
  200. testResultSender.getResults();
  201. } catch (Throwable throwable) {
  202. assertTrue(throwable instanceof RuntimeException);
  203. assertEquals("expected", throwable.getMessage());
  204. throw throwable;
  205. }
  206. }
  207. protected ListHDFSStoresFunction createListHDFSStoresFunction(final Cache cache, DistributedMember member) {
  208. return new TestListHDFSStoresFunction(cache, member);
  209. }
  210. protected static class TestListHDFSStoresFunction extends ListHDFSStoresFunction {
  211. private static final long serialVersionUID = 1L;
  212. private final Cache cache;
  213. DistributedMember member;
  214. @Override
  215. protected DistributedMember getDistributedMemberId(Cache cache) {
  216. return member;
  217. }
  218. public TestListHDFSStoresFunction(final Cache cache, DistributedMember member) {
  219. assert cache != null: "The Cache cannot be null!";
  220. this.cache = cache;
  221. this.member = member;
  222. }
  223. @Override
  224. protected Cache getCache() {
  225. return cache;
  226. }
  227. }
  228. protected static class TestResultSender implements ResultSender {
  229. private final List<Object> results = new LinkedList<Object>();
  230. private Throwable t;
  231. protected List<Object> getResults() throws Throwable {
  232. if (t != null) {
  233. throw t;
  234. }
  235. return Collections.unmodifiableList(results);
  236. }
  237. public void lastResult(final Object lastResult) {
  238. results.add(lastResult);
  239. }
  240. public void sendResult(final Object oneResult) {
  241. results.add(oneResult);
  242. }
  243. public void sendException(final Throwable t) {
  244. this.t = t;
  245. }
  246. }
  247. }