screwturn-4/Core-Tests/AclStorerTests.cs
2009-09-30 13:47:13 +00:00

148 lines
4.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using NUnit.Framework;
using Rhino.Mocks;
using ScrewTurn.Wiki.AclEngine;
namespace ScrewTurn.Wiki.Tests {
[TestFixture]
public class AclStorerTests {
private string testFile = Path.Combine(Environment.GetEnvironmentVariable("TEMP"), "__ACL_File.dat");
private MockRepository mocks = new MockRepository();
private IAclManager MockAclManager() {
IAclManager manager = mocks.DynamicMock<AclManagerBase>();
return manager;
}
[TearDown]
public void TearDown() {
try {
File.Delete(testFile);
}
catch { }
}
[Test]
public void Constructor() {
IAclManager manager = MockAclManager();
AclStorer storer = new AclStorer(manager, testFile);
Assert.AreSame(manager, storer.AclManager, "Wrong ACL Manager instance");
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void Constructor_NullAclManager() {
AclStorer storer = new AclStorer(null, testFile);
}
[TestCase(null, ExpectedException = typeof(ArgumentNullException))]
[TestCase("", ExpectedException = typeof(ArgumentException))]
public void Constructor_InvalidFile(string f) {
AclStorer storer = new AclStorer(MockAclManager(), f);
}
private void AssertAclEntriesAreEqual(AclEntry expected, AclEntry actual) {
Assert.AreEqual(expected.Resource, actual.Resource, "Wrong resource");
Assert.AreEqual(expected.Action, actual.Action, "Wrong action");
Assert.AreEqual(expected.Subject, actual.Subject, "Wrong subject");
Assert.AreEqual(expected.Value, actual.Value, "Wrong value");
}
[Test]
public void Store_LoadData() {
IAclManager manager = MockAclManager();
AclStorer storer = new AclStorer(manager, testFile);
manager.StoreEntry("Res1", "Action1", "U.User", Value.Grant);
manager.StoreEntry("Res2", "Action2", "G.Group", Value.Deny);
storer.Dispose();
storer = null;
manager = MockAclManager();
storer = new AclStorer(manager, testFile);
storer.LoadData();
Assert.AreEqual(2, manager.TotalEntries, "Wrong entry count");
AclEntry[] allEntries = manager.RetrieveAllEntries();
Assert.AreEqual(2, allEntries.Length, "Wrong entry count");
Array.Sort(allEntries, delegate(AclEntry x, AclEntry y) { return x.Subject.CompareTo(y.Subject); });
AssertAclEntriesAreEqual(new AclEntry("Res2", "Action2", "G.Group", Value.Deny), allEntries[0]);
AssertAclEntriesAreEqual(new AclEntry("Res1", "Action1", "U.User", Value.Grant), allEntries[1]);
}
[Test]
public void Delete_LoadData() {
IAclManager manager = MockAclManager();
AclStorer storer = new AclStorer(manager, testFile);
manager.StoreEntry("Res1", "Action1", "U.User", Value.Grant);
manager.StoreEntry("Res2", "Action2", "G.Group", Value.Deny);
manager.StoreEntry("Res3", "Action1", "U.User", Value.Grant);
manager.StoreEntry("Res3", "Action2", "G.Group", Value.Deny);
manager.DeleteEntriesForResource("Res3");
storer.Dispose();
storer = null;
manager = MockAclManager();
storer = new AclStorer(manager, testFile);
storer.LoadData();
Assert.AreEqual(2, manager.TotalEntries, "Wrong entry count");
AclEntry[] allEntries = manager.RetrieveAllEntries();
Assert.AreEqual(2, allEntries.Length, "Wrong entry count");
Array.Sort(allEntries, delegate(AclEntry x, AclEntry y) { return x.Subject.CompareTo(y.Subject); });
AssertAclEntriesAreEqual(new AclEntry("Res2", "Action2", "G.Group", Value.Deny), allEntries[0]);
AssertAclEntriesAreEqual(new AclEntry("Res1", "Action1", "U.User", Value.Grant), allEntries[1]);
}
[Test]
public void Overwrite_LoadData() {
IAclManager manager = MockAclManager();
AclStorer storer = new AclStorer(manager, testFile);
manager.StoreEntry("Res1", "Action1", "U.User", Value.Grant);
manager.StoreEntry("Res2", "Action2", "G.Group", Value.Grant);
manager.StoreEntry("Res2", "Action2", "G.Group", Value.Deny); // Overwrite
storer.Dispose();
storer = null;
manager = MockAclManager();
storer = new AclStorer(manager, testFile);
storer.LoadData();
Assert.AreEqual(2, manager.TotalEntries, "Wrong entry count");
AclEntry[] allEntries = manager.RetrieveAllEntries();
Assert.AreEqual(2, allEntries.Length, "Wrong entry count");
Array.Sort(allEntries, delegate(AclEntry x, AclEntry y) { return x.Subject.CompareTo(y.Subject); });
AssertAclEntriesAreEqual(new AclEntry("Res2", "Action2", "G.Group", Value.Deny), allEntries[0]);
AssertAclEntriesAreEqual(new AclEntry("Res1", "Action1", "U.User", Value.Grant), allEntries[1]);
}
}
}