/ToMigrate/Raven.Tests.FileSystem/Storage/ConfigTests.cs

https://github.com/fitzchak/ravendb · C# · 431 lines · 342 code · 84 blank · 5 comment · 0 complexity · e120f66ac18722a35a4dbe871d49ccf7 MD5 · raw file

  1. // -----------------------------------------------------------------------
  2. // <copyright file="ConfigTests.cs" company="Hibernating Rhinos LTD">
  3. // Copyright (c) Hibernating Rhinos LTD. All rights reserved.
  4. // </copyright>
  5. // -----------------------------------------------------------------------
  6. using System.Collections.Specialized;
  7. using System.IO;
  8. using System.Linq;
  9. using Raven.Abstractions.Extensions;
  10. using Xunit;
  11. using Xunit.Extensions;
  12. using Raven.Database.FileSystem.Extensions;
  13. using Raven.Json.Linq;
  14. namespace Raven.Tests.FileSystem.Storage
  15. {
  16. public class ConfigTests : StorageAccessorTestBase
  17. {
  18. [Theory]
  19. [PropertyData("Storages")]
  20. public void ConfigExists(string requestedStorage)
  21. {
  22. using (var storage = NewTransactionalStorage(requestedStorage))
  23. {
  24. storage.Batch(accessor => Assert.False(accessor.ConfigExists("config1")));
  25. storage.Batch(accessor => accessor.SetConfig("config1", new RavenJObject()));
  26. storage.Batch(accessor => Assert.True(accessor.ConfigExists("config1")));
  27. storage.Batch(accessor => accessor.SetConfig("config2", new RavenJObject()));
  28. storage.Batch(accessor => Assert.True(accessor.ConfigExists("config1")));
  29. storage.Batch(accessor => Assert.True(accessor.ConfigExists("config2")));
  30. }
  31. }
  32. [Theory]
  33. [PropertyData("Storages")]
  34. public void SetConfig(string requestedStorage)
  35. {
  36. using (var storage = NewTransactionalStorage(requestedStorage))
  37. {
  38. storage.Batch(accessor => accessor.SetConfig("config1", new RavenJObject
  39. {
  40. { "option1", "value1" }
  41. }));
  42. storage.Batch(accessor => accessor.SetConfig("config2", new RavenJObject
  43. {
  44. { "option1", "value2" },
  45. { "option2", "value1" }
  46. }));
  47. storage.Batch(accessor =>
  48. {
  49. var config1 = accessor.GetConfig("config1");
  50. var config2 = accessor.GetConfig("config2");
  51. Assert.NotNull(config1);
  52. Assert.Equal(1, config1.Values().Count());
  53. Assert.Equal("value1", config1["option1"]);
  54. Assert.NotNull(config2);
  55. Assert.Equal(2, config2.Values().Count());
  56. Assert.Equal("value2", config2["option1"]);
  57. Assert.Equal("value1", config2["option2"]);
  58. });
  59. }
  60. }
  61. [Theory]
  62. [PropertyData("Storages")]
  63. public void DeleteConfig(string requestedStorage)
  64. {
  65. using (var storage = NewTransactionalStorage(requestedStorage))
  66. {
  67. storage.Batch(accessor => accessor.DeleteConfig("config1"));
  68. storage.Batch(accessor => accessor.SetConfig("config1", new RavenJObject()));
  69. storage.Batch(accessor => accessor.SetConfig("config2", new RavenJObject()));
  70. storage.Batch(accessor => Assert.True(accessor.ConfigExists("config1")));
  71. storage.Batch(accessor => Assert.True(accessor.ConfigExists("config2")));
  72. storage.Batch(accessor => accessor.DeleteConfig("config2"));
  73. storage.Batch(accessor => Assert.True(accessor.ConfigExists("config1")));
  74. storage.Batch(accessor => Assert.False(accessor.ConfigExists("config2")));
  75. storage.Batch(accessor => accessor.DeleteConfig("config1"));
  76. storage.Batch(accessor => Assert.False(accessor.ConfigExists("config1")));
  77. storage.Batch(accessor => Assert.False(accessor.ConfigExists("config2")));
  78. }
  79. }
  80. [Theory]
  81. [PropertyData("Storages")]
  82. public void GetConfig(string requestedStorage)
  83. {
  84. using (var storage = NewTransactionalStorage(requestedStorage))
  85. {
  86. storage.Batch(accessor => Assert.Throws<FileNotFoundException>(() => accessor.GetConfig("config1")));
  87. storage.Batch(accessor => accessor.SetConfig("config1", new RavenJObject
  88. {
  89. { "option1", "value1" }
  90. }));
  91. storage.Batch(accessor => accessor.SetConfig("config2", new RavenJObject
  92. {
  93. { "option1", "value2" },
  94. { "option2", "value1" }
  95. }));
  96. storage.Batch(accessor =>
  97. {
  98. var config1 = accessor.GetConfig("config1");
  99. var config2 = accessor.GetConfig("config2");
  100. Assert.NotNull(config1);
  101. Assert.Equal(1, config1.Values().Count());
  102. Assert.Equal("value1", config1["option1"]);
  103. Assert.NotNull(config2);
  104. Assert.Equal(2, config2.Values().Count());
  105. Assert.Equal("value2", config2["option1"]);
  106. Assert.Equal("value1", config2["option2"]);
  107. });
  108. }
  109. }
  110. [Theory]
  111. [PropertyData("Storages")]
  112. public void GetConfigNames(string requestedStorage)
  113. {
  114. using (var storage = NewTransactionalStorage(requestedStorage))
  115. {
  116. storage.Batch(accessor => Assert.Empty(accessor.GetConfigNames(0, 10).ToList()));
  117. storage.Batch(accessor => accessor.SetConfig("config1", new RavenJObject()));
  118. storage.Batch(accessor => accessor.SetConfig("config2", new RavenJObject()));
  119. storage.Batch(accessor => accessor.SetConfig("config3", new RavenJObject()));
  120. storage.Batch(accessor => accessor.SetConfig("config4", new RavenJObject()));
  121. storage.Batch(accessor => accessor.SetConfig("config5", new RavenJObject()));
  122. storage.Batch(accessor => accessor.SetConfig("config6", new RavenJObject()));
  123. storage.Batch(accessor =>
  124. {
  125. var names = accessor
  126. .GetConfigNames(0, 10)
  127. .ToList();
  128. Assert.Equal(6, names.Count);
  129. Assert.Contains("config1", names);
  130. Assert.Contains("config2", names);
  131. Assert.Contains("config3", names);
  132. Assert.Contains("config4", names);
  133. Assert.Contains("config5", names);
  134. Assert.Contains("config6", names);
  135. names = accessor
  136. .GetConfigNames(0, 1)
  137. .ToList();
  138. Assert.Equal(1, names.Count);
  139. Assert.Contains("config1", names);
  140. names = accessor
  141. .GetConfigNames(1, 1)
  142. .ToList();
  143. Assert.Equal(1, names.Count);
  144. Assert.Contains("config2", names);
  145. names = accessor
  146. .GetConfigNames(2, 2)
  147. .ToList();
  148. Assert.Equal(2, names.Count);
  149. Assert.Contains("config3", names);
  150. Assert.Contains("config4", names);
  151. names = accessor
  152. .GetConfigNames(3, 7)
  153. .ToList();
  154. Assert.Equal(3, names.Count);
  155. Assert.Contains("config4", names);
  156. Assert.Contains("config5", names);
  157. Assert.Contains("config6", names);
  158. });
  159. }
  160. }
  161. [Theory]
  162. [PropertyData("Storages")]
  163. public void GetConfigNamesStartingWithPrefix(string requestedStorage)
  164. {
  165. using (var storage = NewTransactionalStorage(requestedStorage))
  166. {
  167. int total;
  168. storage.Batch(accessor => Assert.Empty(accessor.GetConfigNamesStartingWithPrefix("config", 0, 10, out total).ToList()));
  169. storage.Batch(accessor => accessor.SetConfig("config1", new RavenJObject()));
  170. storage.Batch(accessor => accessor.SetConfig("config2", new RavenJObject()));
  171. storage.Batch(accessor => accessor.SetConfig("config3", new RavenJObject()));
  172. storage.Batch(accessor => accessor.SetConfig("config4", new RavenJObject()));
  173. storage.Batch(accessor => accessor.SetConfig("config5", new RavenJObject()));
  174. storage.Batch(accessor => accessor.SetConfig("config6", new RavenJObject()));
  175. storage.Batch(accessor => accessor.SetConfig("a-config1", new RavenJObject()));
  176. storage.Batch(accessor => accessor.SetConfig("a-config2", new RavenJObject()));
  177. storage.Batch(accessor => accessor.SetConfig("a-config3", new RavenJObject()));
  178. storage.Batch(accessor => accessor.SetConfig("d-config", new RavenJObject()));
  179. storage.Batch(accessor => accessor.SetConfig("e-config", new RavenJObject()));
  180. storage.Batch(accessor => accessor.SetConfig("f-config", new RavenJObject()));
  181. storage.Batch(accessor =>
  182. {
  183. var names = accessor
  184. .GetConfigNamesStartingWithPrefix("config", 0, 10, out total)
  185. .ToList();
  186. Assert.Equal(6, names.Count);
  187. Assert.Equal(6, total);
  188. Assert.Contains("config1", names);
  189. Assert.Contains("config2", names);
  190. Assert.Contains("config3", names);
  191. Assert.Contains("config4", names);
  192. Assert.Contains("config5", names);
  193. Assert.Contains("config6", names);
  194. names = accessor
  195. .GetConfigNamesStartingWithPrefix("config", 0, 1, out total)
  196. .ToList();
  197. Assert.Equal(1, names.Count);
  198. Assert.Equal(6, total);
  199. Assert.Contains("config1", names);
  200. names = accessor
  201. .GetConfigNamesStartingWithPrefix("config", 1, 1, out total)
  202. .ToList();
  203. Assert.Equal(1, names.Count);
  204. Assert.Equal(6, total);
  205. Assert.Contains("config2", names);
  206. names = accessor
  207. .GetConfigNamesStartingWithPrefix("config", 2, 2, out total)
  208. .ToList();
  209. Assert.Equal(2, names.Count);
  210. Assert.Equal(6, total);
  211. Assert.Contains("config3", names);
  212. Assert.Contains("config4", names);
  213. names = accessor
  214. .GetConfigNamesStartingWithPrefix("config", 3, 7, out total)
  215. .ToList();
  216. Assert.Equal(3, names.Count);
  217. Assert.Equal(6, total);
  218. Assert.Contains("config4", names);
  219. Assert.Contains("config5", names);
  220. Assert.Contains("config6", names);
  221. names = accessor
  222. .GetConfigNamesStartingWithPrefix("config", 7, 2, out total)
  223. .ToList();
  224. Assert.Equal(0, names.Count);
  225. Assert.Equal(6, total);
  226. names = accessor
  227. .GetConfigNamesStartingWithPrefix("config", 10, 2, out total)
  228. .ToList();
  229. Assert.Equal(0, names.Count);
  230. Assert.Equal(6, total);
  231. names = accessor
  232. .GetConfigNamesStartingWithPrefix("no-such-key", 0, 2, out total)
  233. .ToList();
  234. Assert.Equal(0, names.Count);
  235. Assert.Equal(0, total);
  236. names = accessor
  237. .GetConfigNamesStartingWithPrefix("config", 10, 5, out total)
  238. .ToList();
  239. Assert.Equal(0, names.Count);
  240. Assert.Equal(6, total);
  241. names = accessor
  242. .GetConfigNamesStartingWithPrefix("f-config", 12, 2, out total)
  243. .ToList();
  244. Assert.Equal(0, names.Count);
  245. Assert.Equal(1, total);
  246. });
  247. }
  248. }
  249. [Theory]
  250. [PropertyData("Storages")]
  251. public void GetConfigNamesStartingWithPrefix2(string requestedStorage)
  252. {
  253. using (var storage = NewTransactionalStorage(requestedStorage))
  254. {
  255. int total;
  256. storage.Batch(accessor => accessor.SetConfig("a-config1", new RavenJObject()));
  257. storage.Batch(accessor => accessor.SetConfig("b-config2", new RavenJObject()));
  258. storage.Batch(accessor => accessor.SetConfig("c-config3", new RavenJObject()));
  259. storage.Batch(accessor =>
  260. {
  261. var names = accessor
  262. .GetConfigNamesStartingWithPrefix("a-config", 0, 10, out total)
  263. .ToList();
  264. Assert.Equal(1, names.Count);
  265. });
  266. }
  267. }
  268. [Theory]
  269. [PropertyData("Storages")]
  270. public void GetConfigsStartWithPrefix(string requestedStorage)
  271. {
  272. using (var storage = NewTransactionalStorage(requestedStorage))
  273. {
  274. int totalCount;
  275. storage.Batch(accessor => Assert.Empty(accessor.GetConfigsStartWithPrefix("config", 0, 10, out totalCount).ToList()));
  276. storage.Batch(accessor => accessor.SetConfig("config1", new RavenJObject { { "option1", "value1" } }));
  277. storage.Batch(accessor => accessor.SetConfig("config2", new RavenJObject { { "option2", "value1" } }));
  278. storage.Batch(accessor => accessor.SetConfig("config3", new RavenJObject { { "option3", "value1" } }));
  279. storage.Batch(accessor => accessor.SetConfig("config4", new RavenJObject { { "option4", "value1" } }));
  280. storage.Batch(accessor => accessor.SetConfig("config5", new RavenJObject { { "option5", "value1" } }));
  281. storage.Batch(accessor => accessor.SetConfig("config6", new RavenJObject { { "option6", "value1" } }));
  282. storage.Batch(accessor => accessor.SetConfig("a-config1", new RavenJObject { { "option1", "value1" } }));
  283. storage.Batch(accessor => accessor.SetConfig("a-config2", new RavenJObject { { "option2", "value1" } }));
  284. storage.Batch(accessor => accessor.SetConfig("a-config3", new RavenJObject { { "option3", "value1" } }));
  285. storage.Batch(accessor => accessor.SetConfig("d-config", new RavenJObject { { "option1", "value1" } }));
  286. storage.Batch(accessor => accessor.SetConfig("e-config", new RavenJObject { { "option2", "value1" } }));
  287. storage.Batch(accessor => accessor.SetConfig("f-config", new RavenJObject { { "option3", "value1" } }));
  288. storage.Batch(accessor =>
  289. {
  290. var configs = accessor
  291. .GetConfigsStartWithPrefix("config", 0, 10, out totalCount)
  292. .ToList();
  293. Assert.Equal(6, configs.Count);
  294. Assert.Equal(6, totalCount);
  295. Assert.Equal("value1", configs[0]["option1"]);
  296. Assert.Equal("value1", configs[1]["option2"]);
  297. Assert.Equal("value1", configs[2]["option3"]);
  298. Assert.Equal("value1", configs[3]["option4"]);
  299. Assert.Equal("value1", configs[4]["option5"]);
  300. Assert.Equal("value1", configs[5]["option6"]);
  301. configs = accessor
  302. .GetConfigsStartWithPrefix("config", 0, 1, out totalCount)
  303. .ToList();
  304. Assert.Equal(1, configs.Count);
  305. Assert.Equal(6, totalCount);
  306. Assert.Equal("value1", configs[0]["option1"]);
  307. configs = accessor
  308. .GetConfigsStartWithPrefix("config", 1, 1, out totalCount)
  309. .ToList();
  310. Assert.Equal(1, configs.Count);
  311. Assert.Equal(6, totalCount);
  312. Assert.Equal("value1", configs[0]["option2"]);
  313. configs = accessor
  314. .GetConfigsStartWithPrefix("config", 2, 2, out totalCount)
  315. .ToList();
  316. Assert.Equal(2, configs.Count);
  317. Assert.Equal(6, totalCount);
  318. Assert.Equal("value1", configs[0]["option3"]);
  319. Assert.Equal("value1", configs[1]["option4"]);
  320. configs = accessor
  321. .GetConfigsStartWithPrefix("config", 3, 7, out totalCount)
  322. .ToList();
  323. Assert.Equal(6, totalCount);
  324. Assert.Equal(3, configs.Count);
  325. Assert.Equal("value1", configs[0]["option4"]);
  326. Assert.Equal("value1", configs[1]["option5"]);
  327. Assert.Equal("value1", configs[2]["option6"]);
  328. configs = accessor
  329. .GetConfigsStartWithPrefix("config", 30, 10, out totalCount)
  330. .ToList();
  331. Assert.Equal(6, totalCount);
  332. Assert.Equal(0, configs.Count);
  333. configs = accessor
  334. .GetConfigsStartWithPrefix("config", 6, 2, out totalCount)
  335. .ToList();
  336. Assert.Equal(0, configs.Count);
  337. Assert.Equal(6, totalCount);
  338. configs = accessor
  339. .GetConfigsStartWithPrefix("f-config", 12, 2, out totalCount)
  340. .ToList();
  341. Assert.Equal(0, configs.Count);
  342. Assert.Equal(1, totalCount);
  343. });
  344. }
  345. }
  346. }
  347. }