Added RedirectUsingNamedRoute
[castle.git] / ActiveRecord / Castle.ActiveRecord.Tests / DifferentDatabaseScopeTestCase.cs
blob675fed4c950339576d59e9dbafc0a5575ac42a1b
1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
2 //
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 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle.ActiveRecord.Tests
17 using System;
18 using System.Data.SqlClient;
20 using Castle.ActiveRecord.Framework;
21 using Castle.ActiveRecord.Framework.Scopes;
22 using Castle.ActiveRecord.Tests.Model;
23 using Castle.Core.Configuration;
25 using NHibernate;
27 using NUnit.Framework;
29 [TestFixture]
30 public class DifferentDatabaseScopeTestCase : AbstractActiveRecordTest
32 [SetUp]
33 public void Setup()
35 base.Init();
37 ActiveRecordStarter.Initialize( GetConfigSource(),
38 typeof(Blog), typeof(Post),
39 typeof(OtherDbBlog), typeof(OtherDbPost), typeof(Test2ARBase) );
41 Recreate();
44 [Test, Category("mssql")]
45 public void SimpleCase()
47 Blog blog = new Blog();
48 blog.Name = "hammett's blog";
49 blog.Author = "hamilton verissimo";
50 blog.Save();
52 SqlConnection conn = CreateSqlConnection();
54 using(conn)
56 conn.Open();
58 using(new DifferentDatabaseScope(conn))
60 blog.Create();
64 Blog[] blogs = Blog.FindAll();
65 Assert.IsNotNull( blogs );
66 Assert.AreEqual( 1, blogs.Length );
68 OtherDbBlog[] blogs2 = OtherDbBlog.FindAll();
69 Assert.IsNotNull( blogs2 );
70 Assert.AreEqual( 1, blogs2.Length );
73 [Test, Category("mssql")]
74 public void UsingSessionScope()
76 ISession session1, session2;
78 using(new SessionScope())
80 Blog blog = new Blog();
81 blog.Name = "hammett's blog";
82 blog.Author = "hamilton verissimo";
83 blog.Save();
85 session1 = blog.CurrentSession;
86 Assert.IsNotNull(session1);
88 SqlConnection conn = CreateSqlConnection();
90 using(conn)
92 conn.Open();
94 using(new DifferentDatabaseScope(conn))
96 blog.Create();
98 session2 = blog.CurrentSession;
99 Assert.IsNotNull(session2);
101 Assert.IsFalse( Object.ReferenceEquals(session1, session2) );
106 Blog[] blogs = Blog.FindAll();
107 Assert.IsNotNull( blogs );
108 Assert.AreEqual( 1, blogs.Length );
110 OtherDbBlog[] blogs2 = OtherDbBlog.FindAll();
111 Assert.IsNotNull( blogs2 );
112 Assert.AreEqual( 1, blogs2.Length );
115 [Test, Category("mssql")]
116 public void UsingTransactionScope()
118 SqlConnection conn = CreateSqlConnection();
119 ISession session1, session2;
120 ITransaction trans1, trans2;
122 using(new TransactionScope())
124 Blog blog = new Blog();
125 blog.Name = "hammett's blog";
126 blog.Author = "hamilton verissimo";
127 blog.Save();
129 session1 = blog.CurrentSession;
130 trans1 = blog.CurrentSession.Transaction;
131 Assert.IsNotNull(session1);
132 Assert.IsNotNull(session1.Transaction);
133 Assert.IsFalse(session1.Transaction.WasCommitted);
134 Assert.IsFalse(session1.Transaction.WasRolledBack);
136 conn.Open();
138 using(new DifferentDatabaseScope(conn))
140 blog.Create();
142 session2 = blog.CurrentSession;
143 trans2 = blog.CurrentSession.Transaction;
144 Assert.IsNotNull(session2);
146 Assert.IsFalse( Object.ReferenceEquals(session1, session2) );
148 Assert.IsNotNull(session2.Transaction);
149 Assert.IsFalse(session2.Transaction.WasCommitted);
150 Assert.IsFalse(session2.Transaction.WasRolledBack);
154 Assert.IsFalse(session1.IsOpen);
155 Assert.IsFalse(session2.IsOpen);
156 Assert.IsTrue(trans1.WasCommitted);
157 Assert.IsFalse(trans1.WasRolledBack);
158 Assert.IsTrue(trans2.WasCommitted);
159 Assert.IsFalse(trans2.WasRolledBack);
161 Blog[] blogs = Blog.FindAll();
162 Assert.IsNotNull( blogs );
163 Assert.AreEqual( 1, blogs.Length );
165 OtherDbBlog[] blogs2 = OtherDbBlog.FindAll();
166 Assert.IsNotNull( blogs2 );
167 Assert.AreEqual( 1, blogs2.Length );
170 [Test, Category("mssql")]
171 public void UsingTransactionScopeWithRollback()
173 SqlConnection conn = CreateSqlConnection();
174 ISession session1, session2;
175 ITransaction trans1, trans2;
177 using(TransactionScope scope = new TransactionScope())
179 Blog blog = new Blog();
180 blog.Name = "hammett's blog";
181 blog.Author = "hamilton verissimo";
182 blog.Save();
184 session1 = blog.CurrentSession;
185 trans1 = blog.CurrentSession.Transaction;
186 Assert.IsNotNull(session1);
187 Assert.IsNotNull(session1.Transaction);
188 Assert.IsFalse(session1.Transaction.WasCommitted);
189 Assert.IsFalse(session1.Transaction.WasRolledBack);
191 conn.Open();
193 using(new DifferentDatabaseScope(conn))
195 blog.Create();
197 session2 = blog.CurrentSession;
198 trans2 = blog.CurrentSession.Transaction;
199 Assert.IsNotNull(session2);
201 Assert.IsFalse( Object.ReferenceEquals(session1, session2) );
203 Assert.IsNotNull(session2.Transaction);
204 Assert.IsFalse(session2.Transaction.WasCommitted);
205 Assert.IsFalse(session2.Transaction.WasRolledBack);
207 scope.VoteRollBack();
211 Assert.IsFalse(session1.IsOpen);
212 Assert.IsFalse(session2.IsOpen);
213 Assert.IsFalse(trans1.WasCommitted);
214 Assert.IsTrue(trans1.WasRolledBack);
215 Assert.IsFalse(trans2.WasCommitted);
216 Assert.IsTrue(trans2.WasRolledBack);
218 Blog[] blogs = Blog.FindAll();
219 Assert.IsNotNull( blogs );
220 Assert.AreEqual( 0, blogs.Length );
222 OtherDbBlog[] blogs2 = OtherDbBlog.FindAll();
223 Assert.IsNotNull( blogs2 );
224 Assert.AreEqual( 0, blogs2.Length );
227 [Test, Category("mssql")]
228 public void MoreThanOneConnectionWithinTheSessionScope()
230 SqlConnection conn = CreateSqlConnection();
231 SqlConnection conn2 = CreateSqlConnection2();
233 using(new SessionScope())
235 foreach(SqlConnection connection in new SqlConnection[] { conn, conn2 })
237 connection.Open();
239 using(new DifferentDatabaseScope(connection))
241 Blog blog = new Blog();
242 blog.Name = "hammett's blog";
243 blog.Author = "hamilton verissimo";
244 blog.Create();
249 OtherDbBlog[] blogs2 = OtherDbBlog.FindAll();
250 Assert.IsNotNull( blogs2 );
251 Assert.AreEqual( 1, blogs2.Length );
253 Blog[] blogs = Blog.FindAll();
254 Assert.IsNotNull( blogs );
255 Assert.AreEqual( 1, blogs.Length );
258 [Test, Category("mssql")]
259 public void UsingSessionAndTransactionScope()
261 SqlConnection conn = CreateSqlConnection();
262 ISession session1, session2;
264 ITransaction trans1, trans2;
265 using(new SessionScope())
267 using(TransactionScope scope = new TransactionScope())
269 Blog blog = new Blog();
270 blog.Name = "hammett's blog";
271 blog.Author = "hamilton verissimo";
272 blog.Save();
274 session1 = blog.CurrentSession;
275 Assert.IsNotNull(session1);
276 trans1 = session1.Transaction;
277 Assert.IsNotNull(trans1);
278 Assert.IsFalse(trans1.WasCommitted);
279 Assert.IsFalse(trans1.WasRolledBack);
281 conn.Open();
283 using(new DifferentDatabaseScope(conn))
285 blog = new Blog();
286 blog.Name = "hammett's blog";
287 blog.Author = "hamilton verissimo";
288 blog.Save();
290 session2 = blog.CurrentSession;
291 Assert.IsNotNull(session2);
292 trans2 = session2.Transaction;
293 Assert.IsFalse( Object.ReferenceEquals(session1, session2) );
295 Assert.IsNotNull(session2.Transaction);
296 Assert.IsFalse(session2.Transaction.WasCommitted);
297 Assert.IsFalse(session2.Transaction.WasRolledBack);
300 using(new DifferentDatabaseScope(conn))
302 blog = new Blog();
303 blog.Name = "hammett's blog";
304 blog.Author = "hamilton verissimo";
305 blog.Save();
307 session2 = blog.CurrentSession;
308 Assert.IsNotNull(session2);
310 Assert.IsFalse( Object.ReferenceEquals(session1, session2) );
312 Assert.IsNotNull(session2.Transaction);
313 Assert.IsFalse(session2.Transaction.WasCommitted);
314 Assert.IsFalse(session2.Transaction.WasRolledBack);
319 Assert.IsFalse(session1.IsOpen);
320 Assert.IsFalse(session2.IsOpen);
321 Assert.IsTrue(trans1.WasCommitted);
322 Assert.IsFalse(trans1.WasRolledBack);
323 Assert.IsTrue(trans2.WasCommitted);
324 Assert.IsFalse(session2.Transaction.WasRolledBack);
326 Blog[] blogs = Blog.FindAll();
327 Assert.IsNotNull( blogs );
328 Assert.AreEqual( 1, blogs.Length );
330 OtherDbBlog[] blogs2 = OtherDbBlog.FindAll();
331 Assert.IsNotNull( blogs2 );
332 Assert.AreEqual( 2, blogs2.Length );
335 [Test, Category("mssql")]
336 public void SequenceOfTransactions()
338 SqlConnection conn = CreateSqlConnection();
339 ISession session1, session2;
341 ITransaction trans1, trans2;
342 using(new SessionScope())
344 using(TransactionScope scope = new TransactionScope())
346 Blog blog = new Blog();
347 blog.Name = "hammett's blog";
348 blog.Author = "hamilton verissimo";
349 blog.Save();
351 session1 = blog.CurrentSession;
352 Assert.IsNotNull(session1);
353 trans1 = session1.Transaction;
354 Assert.IsNotNull(trans1);
355 Assert.IsFalse(trans1.WasCommitted);
356 Assert.IsFalse(trans1.WasRolledBack);
358 conn.Open();
360 using(new DifferentDatabaseScope(conn))
362 blog = new Blog();
363 blog.Name = "hammett's blog";
364 blog.Author = "hamilton verissimo";
365 blog.Save();
367 session2 = blog.CurrentSession;
368 Assert.IsNotNull(session2);
369 trans2 = session2.Transaction;
370 Assert.IsFalse( Object.ReferenceEquals(session1, session2) );
372 Assert.IsNotNull(session2.Transaction);
373 Assert.IsFalse(session2.Transaction.WasCommitted);
374 Assert.IsFalse(session2.Transaction.WasRolledBack);
377 using(new DifferentDatabaseScope(conn))
379 blog = new Blog();
380 blog.Name = "hammett's blog";
381 blog.Author = "hamilton verissimo";
382 blog.Save();
384 session2 = blog.CurrentSession;
385 Assert.IsNotNull(session2);
387 Assert.IsFalse( Object.ReferenceEquals(session1, session2) );
389 Assert.IsNotNull(trans2);
390 Assert.IsFalse(trans2.WasCommitted);
391 Assert.IsFalse(trans2.WasRolledBack);
395 conn.Close();
397 using(TransactionScope scope = new TransactionScope())
399 Blog blog = new Blog();
400 blog.Name = "another blog";
401 blog.Author = "erico verissimo";
402 blog.Save();
406 Assert.IsFalse(session1.IsOpen);
407 Assert.IsFalse(session2.IsOpen);
408 Assert.IsTrue(trans1.WasCommitted);
409 Assert.IsFalse(trans1.WasRolledBack);
410 Assert.IsTrue(trans2.WasCommitted);
411 Assert.IsFalse(trans2.WasRolledBack);
413 Blog[] blogs = Blog.FindAll();
414 Assert.IsNotNull( blogs );
415 Assert.AreEqual( 2, blogs.Length );
417 OtherDbBlog[] blogs2 = OtherDbBlog.FindAll();
418 Assert.IsNotNull( blogs2 );
419 Assert.AreEqual( 2, blogs2.Length );
422 private SqlConnection CreateSqlConnection()
424 IConfigurationSource config = GetConfigSource();
426 IConfiguration db2 = config.GetConfiguration( typeof(Test2ARBase) );
428 SqlConnection conn = null;
430 foreach(IConfiguration child in db2.Children)
432 if (child.Name == "connection.connection_string")
434 conn = new SqlConnection(child.Value);
438 return conn;
441 private SqlConnection CreateSqlConnection2()
443 IConfigurationSource config = GetConfigSource();
445 IConfiguration db2 = config.GetConfiguration( typeof(ActiveRecordBase) );
447 SqlConnection conn = null;
449 foreach(IConfiguration child in db2.Children)
451 if (child.Name == "connection.connection_string")
453 conn = new SqlConnection(child.Value);
457 return conn;