/ToMigrate/Raven.Tests/MultiGet/MultiGetCaching.cs

https://github.com/fitzchak/ravendb · C# · 398 lines · 348 code · 50 blank · 0 comment · 21 complexity · 44b6165f44ff7640a00904bdb424c8d6 MD5 · raw file

  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using Raven.Client;
  5. using Raven.Client.Linq;
  6. using Raven.Client.Document;
  7. using Raven.Server;
  8. using Raven.Tests.Common;
  9. using Raven.Tests.Linq;
  10. using Xunit;
  11. namespace Raven.Tests.MultiGet
  12. {
  13. public class MultiGetCaching : RavenTest
  14. {
  15. [Fact]
  16. public void CanAggressivelyCacheLoads()
  17. {
  18. using (var server = GetNewServer())
  19. using (var store = new DocumentStore
  20. {
  21. Url = "http://localhost:8079",
  22. Conventions = { ShouldAggressiveCacheTrackChanges = false}
  23. }.Initialize())
  24. {
  25. using (var session = store.OpenSession())
  26. {
  27. session.Store(new User());
  28. session.Store(new User());
  29. session.SaveChanges();
  30. }
  31. WaitForAllRequestsToComplete(server);
  32. server.Server.ResetNumberOfRequests();
  33. for (int i = 0; i < 5; i++)
  34. {
  35. using (var session = store.OpenSession())
  36. {
  37. using (session.Advanced.DocumentStore.AggressivelyCacheFor(TimeSpan.FromMinutes(5)))
  38. {
  39. session.Advanced.Lazily.Load<User>("users/1");
  40. session.Advanced.Lazily.Load<User>("users/2");
  41. session.Advanced.Eagerly.ExecuteAllPendingLazyOperations();
  42. }
  43. }
  44. }
  45. WaitForAllRequestsToComplete(server);
  46. Assert.Equal(1, server.Server.NumberOfRequests);
  47. }
  48. }
  49. [Fact]
  50. public void CanAggressivelyCachePartOfMultiGet_SimpleFirst()
  51. {
  52. using (var server = GetNewServer())
  53. using (var store = new DocumentStore
  54. {
  55. Url = "http://localhost:8079",
  56. Conventions = { ShouldAggressiveCacheTrackChanges = false}
  57. }.Initialize())
  58. {
  59. using (var session = store.OpenSession())
  60. {
  61. session.Store(new User());
  62. session.Store(new User());
  63. session.SaveChanges();
  64. }
  65. WaitForAllRequestsToComplete(server);
  66. server.Server.ResetNumberOfRequests();
  67. using (var session = store.OpenSession())
  68. {
  69. using (session.Advanced.DocumentStore.AggressivelyCacheFor(TimeSpan.FromMinutes(5)))
  70. {
  71. session.Load<User>(new[] { "users/1" });
  72. }
  73. }
  74. using (var session = store.OpenSession())
  75. {
  76. using (session.Advanced.DocumentStore.AggressivelyCacheFor(TimeSpan.FromMinutes(5)))
  77. {
  78. session.Advanced.Lazily.Load<User>(new[] { "users/1" });
  79. session.Advanced.Lazily.Load<User>("users/2");
  80. session.Advanced.Eagerly.ExecuteAllPendingLazyOperations();
  81. }
  82. }
  83. WaitForAllRequestsToComplete(server);
  84. Assert.Equal(2, server.Server.NumberOfRequests);
  85. Assert.Equal(1, store.JsonRequestFactory.NumberOfCachedRequests);
  86. }
  87. }
  88. [Fact]
  89. public void CanAggressivelyCachePartOfMultiGet_DirectLoad()
  90. {
  91. using (var server = GetNewServer())
  92. using (var store = new DocumentStore
  93. {
  94. Url = "http://localhost:8079",
  95. Conventions = { ShouldAggressiveCacheTrackChanges = false}
  96. }.Initialize())
  97. {
  98. using (var session = store.OpenSession())
  99. {
  100. session.Store(new User());
  101. session.Store(new User());
  102. session.SaveChanges();
  103. }
  104. WaitForAllRequestsToComplete(server);
  105. server.Server.ResetNumberOfRequests();
  106. using (var session = store.OpenSession())
  107. {
  108. using (session.Advanced.DocumentStore.AggressivelyCacheFor(TimeSpan.FromMinutes(5)))
  109. {
  110. session.Load<User>("users/1");
  111. }
  112. }
  113. using (var session = store.OpenSession())
  114. {
  115. using (session.Advanced.DocumentStore.AggressivelyCacheFor(TimeSpan.FromMinutes(5)))
  116. {
  117. session.Advanced.Lazily.Load<User>("users/1");
  118. session.Advanced.Lazily.Load<User>("users/2");
  119. session.Advanced.Eagerly.ExecuteAllPendingLazyOperations();
  120. }
  121. }
  122. WaitForAllRequestsToComplete(server);
  123. Assert.Equal(2, server.Server.NumberOfRequests);
  124. Assert.Equal(1, store.JsonRequestFactory.NumberOfCachedRequests);
  125. }
  126. }
  127. [Fact]
  128. public void CanAggressivelyCachePartOfMultiGet_BatchFirst()
  129. {
  130. using (var server = GetNewServer())
  131. using (var store = new DocumentStore
  132. {
  133. Url = "http://localhost:8079",
  134. Conventions = { ShouldAggressiveCacheTrackChanges = false}
  135. }.Initialize())
  136. {
  137. using (var session = store.OpenSession())
  138. {
  139. session.Store(new User());
  140. session.Store(new User());
  141. session.SaveChanges();
  142. }
  143. WaitForAllRequestsToComplete(server);
  144. server.Server.ResetNumberOfRequests();
  145. using (var session = store.OpenSession())
  146. {
  147. using (session.Advanced.DocumentStore.AggressivelyCacheFor(TimeSpan.FromMinutes(5)))
  148. {
  149. session.Advanced.Lazily.Load<User>(new[] { "users/1" });
  150. session.Advanced.Eagerly.ExecuteAllPendingLazyOperations();
  151. }
  152. }
  153. using (var session = store.OpenSession())
  154. {
  155. using (session.Advanced.DocumentStore.AggressivelyCacheFor(TimeSpan.FromMinutes(5)))
  156. {
  157. session.Load<User>(new[] { "users/1" });
  158. }
  159. }
  160. WaitForAllRequestsToComplete(server);
  161. Assert.Equal(1, server.Server.NumberOfRequests);
  162. Assert.Equal(1, store.JsonRequestFactory.NumberOfCachedRequests);
  163. }
  164. }
  165. [Fact]
  166. public void CanCacheLazyQueryResults()
  167. {
  168. using (GetNewServer())
  169. using (var store = new DocumentStore
  170. {
  171. Url = "http://localhost:8079",
  172. Conventions = { ShouldAggressiveCacheTrackChanges = false}
  173. }.Initialize())
  174. {
  175. using (var session = store.OpenSession())
  176. {
  177. session.Store(new User { Name = "oren" });
  178. session.Store(new User());
  179. session.Store(new User { Name = "ayende" });
  180. session.Store(new User());
  181. session.SaveChanges();
  182. }
  183. using (var session = store.OpenSession())
  184. {
  185. session.Query<User>()
  186. .Customize(x => x.WaitForNonStaleResults())
  187. .Where(x => x.Name == "test")
  188. .ToList();
  189. }
  190. using (var session = store.OpenSession())
  191. {
  192. var result1 = session.Query<User>().Where(x => x.Name == "oren").Lazily();
  193. var result2 = session.Query<User>().Where(x => x.Name == "ayende").Lazily();
  194. Assert.NotEmpty(result2.Value);
  195. Assert.Equal(1, session.Advanced.NumberOfRequests);
  196. Assert.NotEmpty(result1.Value);
  197. Assert.Equal(1, session.Advanced.NumberOfRequests);
  198. Assert.Equal(0, store.JsonRequestFactory.NumberOfCachedRequests);
  199. }
  200. using (var session = store.OpenSession())
  201. {
  202. var result1 = session.Query<User>().Where(x => x.Name == "oren").Lazily();
  203. var result2 = session.Query<User>().Where(x => x.Name == "ayende").Lazily();
  204. Assert.NotEmpty(result2.Value);
  205. Assert.Equal(1, session.Advanced.NumberOfRequests);
  206. Assert.NotEmpty(result1.Value);
  207. Assert.Equal(1, session.Advanced.NumberOfRequests);
  208. Assert.Equal(2, store.JsonRequestFactory.NumberOfCachedRequests);
  209. }
  210. }
  211. }
  212. [Fact]
  213. public void CanCacheLazyQueryAndMultiLoadResults()
  214. {
  215. using (GetNewServer())
  216. using (var store = new DocumentStore
  217. {
  218. Url = "http://localhost:8079",
  219. Conventions = { ShouldAggressiveCacheTrackChanges = false}
  220. }.Initialize())
  221. {
  222. using (var session = store.OpenSession())
  223. {
  224. session.Store(new User { Name = "oren" });
  225. session.Store(new User());
  226. session.Store(new User { Name = "ayende" });
  227. session.Store(new User());
  228. session.SaveChanges();
  229. }
  230. using (var session = store.OpenSession())
  231. {
  232. session.Query<User>()
  233. .Customize(x => x.WaitForNonStaleResults())
  234. .Where(x => x.Name == "test")
  235. .ToList();
  236. }
  237. using (var session = store.OpenSession())
  238. {
  239. var items = session.Advanced.Lazily.Load<User>(new [] { "users/2", "users/4" });
  240. var result1 = session.Query<User>().Where(x => x.Name == "oren").Lazily();
  241. var result2 = session.Query<User>().Where(x => x.Name == "ayende").Lazily();
  242. Assert.NotEmpty(result2.Value);
  243. Assert.NotEmpty(items.Value);
  244. Assert.Equal(1, session.Advanced.NumberOfRequests);
  245. Assert.NotEmpty(result1.Value);
  246. Assert.Equal(1, session.Advanced.NumberOfRequests);
  247. Assert.Equal(0, store.JsonRequestFactory.NumberOfCachedRequests);
  248. }
  249. using (var session = store.OpenSession())
  250. {
  251. var items = session.Advanced.Lazily.Load<User>(new [] { "users/2", "users/4" });
  252. var result1 = session.Query<User>().Where(x => x.Name == "oren").Lazily();
  253. var result2 = session.Query<User>().Where(x => x.Name == "ayende").Lazily();
  254. Assert.NotEmpty(result2.Value);
  255. Assert.NotEmpty(items.Value);
  256. Assert.Equal(1, session.Advanced.NumberOfRequests);
  257. Assert.NotEmpty(result1.Value);
  258. Assert.Equal(1, session.Advanced.NumberOfRequests);
  259. Assert.Equal(3, store.JsonRequestFactory.NumberOfCachedRequests);
  260. }
  261. }
  262. }
  263. [Fact]
  264. public void CanMixCachingForBatchAndNonBatched_BatchedFirst()
  265. {
  266. using (GetNewServer())
  267. using (var store = new DocumentStore
  268. {
  269. Url = "http://localhost:8079",
  270. Conventions = { ShouldAggressiveCacheTrackChanges = false}
  271. }.Initialize())
  272. {
  273. using (var session = store.OpenSession())
  274. {
  275. session.Store(new User { Name = "oren" });
  276. session.Store(new User());
  277. session.Store(new User { Name = "ayende" });
  278. session.Store(new User());
  279. session.SaveChanges();
  280. }
  281. using (var session = store.OpenSession())
  282. {
  283. session.Query<User>()
  284. .Customize(x => x.WaitForNonStaleResults())
  285. .Where(x => x.Name == "test")
  286. .ToList();
  287. }
  288. using (var session = store.OpenSession())
  289. {
  290. var result1 = session.Query<User>().Where(x => x.Name == "oren").Lazily();
  291. var result2 = session.Query<User>().Where(x => x.Name == "ayende").Lazily();
  292. Assert.NotEmpty(result2.Value);
  293. Assert.Equal(1, session.Advanced.NumberOfRequests);
  294. Assert.NotEmpty(result1.Value);
  295. Assert.Equal(1, session.Advanced.NumberOfRequests);
  296. }
  297. using (var session = store.OpenSession())
  298. {
  299. session.Query<User>().Where(x => x.Name == "oren").ToArray();
  300. session.Query<User>().Where(x => x.Name == "ayende").ToArray();
  301. Assert.Equal(2, store.JsonRequestFactory.NumberOfCachedRequests);
  302. }
  303. }
  304. }
  305. [Fact]
  306. public void CanMixCachingForBatchAndNonBatched_IndividualFirst()
  307. {
  308. using (GetNewServer())
  309. using (var store = new DocumentStore
  310. {
  311. Url = "http://localhost:8079",
  312. Conventions = { ShouldAggressiveCacheTrackChanges = false}
  313. }.Initialize())
  314. {
  315. using (var session = store.OpenSession())
  316. {
  317. session.Store(new User { Name = "oren" });
  318. session.Store(new User());
  319. session.Store(new User { Name = "ayende" });
  320. session.Store(new User());
  321. session.SaveChanges();
  322. }
  323. using (var session = store.OpenSession())
  324. {
  325. session.Query<User>()
  326. .Customize(x => x.WaitForNonStaleResults())
  327. .Where(x => x.Name == "test")
  328. .ToList();
  329. }
  330. using (var session = store.OpenSession())
  331. {
  332. session.Query<User>().Where(x => x.Name == "oren").ToArray();
  333. session.Query<User>().Where(x => x.Name == "ayende").ToArray();
  334. }
  335. using (var session = store.OpenSession())
  336. {
  337. var result1 = session.Query<User>().Where(x => x.Name == "oren").Lazily();
  338. var result2 = session.Query<User>().Where(x => x.Name == "ayende").Lazily();
  339. Assert.NotEmpty(result2.Value);
  340. Assert.Equal(1, session.Advanced.NumberOfRequests);
  341. Assert.NotEmpty(result1.Value);
  342. Assert.Equal(1, session.Advanced.NumberOfRequests);
  343. Assert.Equal(2, store.JsonRequestFactory.NumberOfCachedRequests);
  344. }
  345. }
  346. }
  347. }
  348. }