/ToMigrate/Raven.Tests.Issues/RavenDB_2712/RavenDB_2712_Replication.cs

https://github.com/fitzchak/ravendb · C# · 355 lines · 318 code · 32 blank · 5 comment · 0 complexity · 91b4d89eb1ea7e6e73492e2ded486110 MD5 · raw file

  1. // -----------------------------------------------------------------------
  2. // <copyright file="RavenDB_2712.cs" company="Hibernating Rhinos LTD">
  3. // Copyright (c) Hibernating Rhinos LTD. All rights reserved.
  4. // </copyright>
  5. // -----------------------------------------------------------------------
  6. using Raven.Abstractions.Data;
  7. using Raven.Abstractions.Replication;
  8. using Raven.Abstractions.Util;
  9. using Raven.Client.Extensions;
  10. using Raven.Database.Config.Retriever;
  11. using Raven.Json.Linq;
  12. using Raven.Tests.Common;
  13. using Xunit;
  14. namespace Raven.Tests.Issues.RavenDB_2712
  15. {
  16. public class RavenDB_2712_Replication : ReplicationBase
  17. {
  18. public RavenDB_2712_Replication()
  19. {
  20. ConfigurationRetriever.EnableGlobalConfigurationOnce();
  21. }
  22. [Fact]
  23. public void IfThereIsNoLocalConfigurationThenGlobalShouldBeUsed()
  24. {
  25. using (NewRemoteDocumentStore(databaseName: "Northwind"))
  26. {
  27. var server = servers[0];
  28. var systemDatabase = server.SystemDatabase;
  29. var database = AsyncHelpers.RunSync(() => server.Server.GetDatabaseInternal("Northwind"));
  30. var retriever = database.ConfigurationRetriever;
  31. var document = retriever.GetConfigurationDocument<ReplicationDocument<ReplicationDestination.ReplicationDestinationWithConfigurationOrigin>>(Constants.RavenReplicationDestinations);
  32. Assert.Null(document);
  33. systemDatabase
  34. .Documents
  35. .Put(
  36. Constants.Global.ReplicationDestinationsDocumentName,
  37. null,
  38. RavenJObject.FromObject(new ReplicationDocument
  39. {
  40. Id = Constants.Global.ReplicationDestinationsDocumentName,
  41. Destinations =
  42. {
  43. new ReplicationDestination
  44. {
  45. ApiKey = "key1",
  46. Database = "db1",
  47. ClientVisibleUrl = "curl1",
  48. Disabled = true,
  49. Domain = "d1",
  50. IgnoredClient = true,
  51. Password = "p1",
  52. SkipIndexReplication = false,
  53. TransitiveReplicationBehavior = TransitiveReplicationOptions.Replicate,
  54. Url = "http://localhost:8080",
  55. Username = "u1"
  56. }
  57. }
  58. }), new RavenJObject(), null);
  59. document = retriever.GetConfigurationDocument<ReplicationDocument<ReplicationDestination.ReplicationDestinationWithConfigurationOrigin>>(Constants.RavenReplicationDestinations);
  60. Assert.NotNull(document);
  61. Assert.True(document.GlobalExists);
  62. Assert.False(document.LocalExists);
  63. Assert.Equal(Constants.RavenReplicationDestinations, document.MergedDocument.Id);
  64. Assert.Equal(database.TransactionalStorage.Id.ToString(), document.MergedDocument.Source);
  65. Assert.Equal(1, document.MergedDocument.Destinations.Count);
  66. var destination = document.MergedDocument.Destinations[0];
  67. Assert.True(destination.HasGlobal);
  68. Assert.False(destination.HasLocal);
  69. Assert.Equal("key1", destination.ApiKey);
  70. Assert.Equal("Northwind", destination.Database);
  71. Assert.Equal("curl1", destination.ClientVisibleUrl);
  72. Assert.True(destination.Disabled);
  73. Assert.Equal("d1", destination.Domain);
  74. Assert.True(destination.IgnoredClient);
  75. Assert.Equal("p1", destination.Password);
  76. Assert.False(destination.SkipIndexReplication);
  77. Assert.Equal(TransitiveReplicationOptions.Replicate, destination.TransitiveReplicationBehavior);
  78. Assert.Equal("http://localhost:8080", destination.Url);
  79. Assert.Equal("u1", destination.Username);
  80. }
  81. }
  82. [Fact]
  83. public void LocalConfigurationTakesPrecedenceBeforeGlobal()
  84. {
  85. using (NewRemoteDocumentStore(databaseName: "Northwind"))
  86. {
  87. var server = servers[0];
  88. var systemDatabase = server.SystemDatabase;
  89. var database = AsyncHelpers.RunSync(() => server.Server.GetDatabaseInternal("Northwind"));
  90. var retriever = database.ConfigurationRetriever;
  91. database
  92. .Documents
  93. .Put(
  94. Constants.RavenReplicationDestinations,
  95. null,
  96. RavenJObject.FromObject(new ReplicationDocument
  97. {
  98. Id = Constants.RavenReplicationDestinations,
  99. Destinations = {
  100. new ReplicationDestination
  101. {
  102. ApiKey = "key2",
  103. Database = "Northwind",
  104. ClientVisibleUrl = "curl2",
  105. Disabled = false,
  106. Domain = "d2",
  107. IgnoredClient = false,
  108. Password = "p2",
  109. SkipIndexReplication = true,
  110. TransitiveReplicationBehavior = TransitiveReplicationOptions.None,
  111. Url = "http://localhost:8080",
  112. Username = "u2"
  113. }
  114. },
  115. Source = database.TransactionalStorage.Id.ToString()
  116. }), new RavenJObject(), null);
  117. systemDatabase
  118. .Documents
  119. .Put(
  120. Constants.Global.ReplicationDestinationsDocumentName,
  121. null,
  122. RavenJObject.FromObject(new ReplicationDocument
  123. {
  124. Id = Constants.Global.ReplicationDestinationsDocumentName,
  125. Destinations = {
  126. new ReplicationDestination
  127. {
  128. ApiKey = "key1",
  129. Database = "db1",
  130. ClientVisibleUrl = "curl1",
  131. Disabled = true,
  132. Domain = "d1",
  133. IgnoredClient = true,
  134. Password = "p1",
  135. SkipIndexReplication = false,
  136. TransitiveReplicationBehavior = TransitiveReplicationOptions.Replicate,
  137. Url = "http://localhost:8080",
  138. Username = "u1"
  139. }
  140. },
  141. Source = systemDatabase.TransactionalStorage.Id.ToString()
  142. }), new RavenJObject(), null);
  143. var document = retriever.GetConfigurationDocument<ReplicationDocument<ReplicationDestination.ReplicationDestinationWithConfigurationOrigin>>(Constants.RavenReplicationDestinations);
  144. Assert.NotNull(document);
  145. Assert.True(document.GlobalExists);
  146. Assert.True(document.LocalExists);
  147. Assert.Equal(Constants.RavenReplicationDestinations, document.MergedDocument.Id);
  148. Assert.Equal(database.TransactionalStorage.Id.ToString(), document.MergedDocument.Source);
  149. Assert.Equal(1, document.MergedDocument.Destinations.Count);
  150. var destination = document.MergedDocument.Destinations[0];
  151. Assert.True(destination.HasGlobal);
  152. Assert.True(destination.HasLocal);
  153. Assert.Equal("key2", destination.ApiKey);
  154. Assert.Equal("Northwind", destination.Database);
  155. Assert.Equal("curl2", destination.ClientVisibleUrl);
  156. Assert.False(destination.Disabled);
  157. Assert.Equal("d2", destination.Domain);
  158. Assert.False(destination.IgnoredClient);
  159. Assert.Equal("p2", destination.Password);
  160. Assert.True(destination.SkipIndexReplication);
  161. Assert.Equal(TransitiveReplicationOptions.None, destination.TransitiveReplicationBehavior);
  162. Assert.Equal("http://localhost:8080", destination.Url);
  163. Assert.Equal("u2", destination.Username);
  164. }
  165. }
  166. [Fact]
  167. public void LocalConfigurationShouldBeProperlyFilledWhenNoGlobal()
  168. {
  169. using (NewRemoteDocumentStore(databaseName: "Northwind"))
  170. {
  171. var server = servers[0];
  172. var systemDatabase = server.SystemDatabase;
  173. var database = AsyncHelpers.RunSync(() => server.Server.GetDatabaseInternal("Northwind"));
  174. var retriever = database.ConfigurationRetriever;
  175. database
  176. .Documents
  177. .Put(
  178. Constants.RavenReplicationDestinations,
  179. null,
  180. RavenJObject.FromObject(new ReplicationDocument
  181. {
  182. Id = Constants.RavenReplicationDestinations,
  183. Destinations = {
  184. new ReplicationDestination
  185. {
  186. ApiKey = "key2",
  187. Database = "Northwind",
  188. ClientVisibleUrl = "curl2",
  189. Disabled = false,
  190. Domain = "d2",
  191. IgnoredClient = false,
  192. Password = "p2",
  193. SkipIndexReplication = true,
  194. TransitiveReplicationBehavior = TransitiveReplicationOptions.None,
  195. Url = "http://localhost:8080",
  196. Username = "u2"
  197. }
  198. },
  199. Source = database.TransactionalStorage.Id.ToString()
  200. }), new RavenJObject(), null);
  201. var document = retriever.GetConfigurationDocument<ReplicationDocument<ReplicationDestination.ReplicationDestinationWithConfigurationOrigin>>(Constants.RavenReplicationDestinations);
  202. Assert.NotNull(document);
  203. Assert.False(document.GlobalExists);
  204. Assert.True(document.LocalExists);
  205. Assert.Equal(Constants.RavenReplicationDestinations, document.MergedDocument.Id);
  206. Assert.Equal(database.TransactionalStorage.Id.ToString(), document.MergedDocument.Source);
  207. Assert.Equal(1, document.MergedDocument.Destinations.Count);
  208. var destination = document.MergedDocument.Destinations[0];
  209. Assert.False(destination.HasGlobal);
  210. Assert.True(destination.HasLocal);
  211. Assert.Equal("key2", destination.ApiKey);
  212. Assert.Equal("Northwind", destination.Database);
  213. Assert.Equal("curl2", destination.ClientVisibleUrl);
  214. Assert.False(destination.Disabled);
  215. Assert.Equal("d2", destination.Domain);
  216. Assert.False(destination.IgnoredClient);
  217. Assert.Equal("p2", destination.Password);
  218. Assert.True(destination.SkipIndexReplication);
  219. Assert.Equal(TransitiveReplicationOptions.None, destination.TransitiveReplicationBehavior);
  220. Assert.Equal("http://localhost:8080", destination.Url);
  221. Assert.Equal("u2", destination.Username);
  222. }
  223. }
  224. [Fact]
  225. public void GlobalConfigurationWillBeAppliedToLocalButWithoutOverwrites()
  226. {
  227. using (NewRemoteDocumentStore(databaseName: "Northwind"))
  228. {
  229. var server = servers[0];
  230. var systemDatabase = server.SystemDatabase;
  231. var database = AsyncHelpers.RunSync(() => server.Server.GetDatabaseInternal("Northwind"));
  232. var retriever = database.ConfigurationRetriever;
  233. database
  234. .Documents
  235. .Put(
  236. Constants.RavenReplicationDestinations,
  237. null,
  238. RavenJObject.FromObject(new ReplicationDocument
  239. {
  240. Id = Constants.RavenReplicationDestinations,
  241. Destinations = {
  242. new ReplicationDestination
  243. {
  244. ApiKey = "key2",
  245. Database = "db2",
  246. ClientVisibleUrl = "curl2",
  247. Disabled = false,
  248. Domain = "d2",
  249. IgnoredClient = false,
  250. Password = "p2",
  251. SkipIndexReplication = true,
  252. TransitiveReplicationBehavior = TransitiveReplicationOptions.None,
  253. Url = "http://localhost:8080",
  254. Username = "u2"
  255. }
  256. },
  257. Source = database.TransactionalStorage.Id.ToString()
  258. }), new RavenJObject(), null);
  259. systemDatabase
  260. .Documents
  261. .Put(
  262. Constants.Global.ReplicationDestinationsDocumentName,
  263. null,
  264. RavenJObject.FromObject(new ReplicationDocument
  265. {
  266. Id = Constants.Global.ReplicationDestinationsDocumentName,
  267. Destinations = {
  268. new ReplicationDestination
  269. {
  270. ApiKey = "key1",
  271. Database = "db1",
  272. ClientVisibleUrl = "curl1",
  273. Disabled = true,
  274. Domain = "d1",
  275. IgnoredClient = true,
  276. Password = "p1",
  277. SkipIndexReplication = false,
  278. TransitiveReplicationBehavior = TransitiveReplicationOptions.Replicate,
  279. Url = "http://localhost:8080",
  280. Username = "u1"
  281. }
  282. },
  283. Source = systemDatabase.TransactionalStorage.Id.ToString()
  284. }), new RavenJObject(), null);
  285. var document = retriever.GetConfigurationDocument<ReplicationDocument<ReplicationDestination.ReplicationDestinationWithConfigurationOrigin>>(Constants.RavenReplicationDestinations);
  286. Assert.NotNull(document);
  287. Assert.True(document.GlobalExists);
  288. Assert.True(document.LocalExists);
  289. Assert.Equal(Constants.RavenReplicationDestinations, document.MergedDocument.Id);
  290. Assert.Equal(database.TransactionalStorage.Id.ToString(), document.MergedDocument.Source);
  291. Assert.Equal(2, document.MergedDocument.Destinations.Count);
  292. var destination = document.MergedDocument.Destinations[0];
  293. Assert.False(destination.HasGlobal);
  294. Assert.True(destination.HasLocal);
  295. Assert.Equal("key2", destination.ApiKey);
  296. Assert.Equal("db2", destination.Database);
  297. Assert.Equal("curl2", destination.ClientVisibleUrl);
  298. Assert.False(destination.Disabled);
  299. Assert.Equal("d2", destination.Domain);
  300. Assert.False(destination.IgnoredClient);
  301. Assert.Equal("p2", destination.Password);
  302. Assert.True(destination.SkipIndexReplication);
  303. Assert.Equal(TransitiveReplicationOptions.None, destination.TransitiveReplicationBehavior);
  304. Assert.Equal("http://localhost:8080", destination.Url);
  305. Assert.Equal("u2", destination.Username);
  306. destination = document.MergedDocument.Destinations[1];
  307. Assert.True(destination.HasGlobal);
  308. Assert.False(destination.HasLocal);
  309. Assert.Equal("key1", destination.ApiKey);
  310. Assert.Equal("Northwind", destination.Database);
  311. Assert.Equal("curl1", destination.ClientVisibleUrl);
  312. Assert.True(destination.Disabled);
  313. Assert.Equal("d1", destination.Domain);
  314. Assert.True(destination.IgnoredClient);
  315. Assert.Equal("p1", destination.Password);
  316. Assert.False(destination.SkipIndexReplication);
  317. Assert.Equal(TransitiveReplicationOptions.Replicate, destination.TransitiveReplicationBehavior);
  318. Assert.Equal("http://localhost:8080", destination.Url);
  319. Assert.Equal("u1", destination.Username);
  320. }
  321. }
  322. }
  323. }