Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/20/11 17:04:35 (13 years ago)
Author:
cneumuel
Message:

#1233

  • added methods for granting and revoking hive experiment permissions
  • added unit tests for hive experiment permissions
  • added a status webpage to see how some statistics and current status
Location:
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/Mocks/MockAuthorizationManager.cs

    r6372 r6457  
    2424namespace HeuristicLab.Services.Hive.Tests.Mocks {
    2525  public class MockAuthorizationManager : IAuthorizationManager {
    26     private Guid userId = new Guid("6C7911A1-46EA-4E51-97DF-5582653AAFCE");
     26    public static Guid MockUserId1 = new Guid("6C7911A1-46EA-4E51-97DF-5582653AAFCE");
     27    public static Guid MockUserId2 = new Guid("897660EB-C90F-4054-988C-D39D530A0A02");
     28    public static Guid MockUserId3 = new Guid("9F7B4EA8-A38D-4BC2-802F-E148AC7A6A87");
     29
     30    private Guid userId = MockUserId1;
    2731
    2832    public Guid UserId {
     
    3741      // o.k.
    3842    }
    39 
     43   
     44    internal void SetUserId(Guid id) {
     45      this.userId = id;
     46    }
    4047  }
    4148}
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/Mocks/MockServiceLocator.cs

    r6452 r6457  
    2222using HeuristicLab.Services.Hive.DataAccess;
    2323using HeuristicLab.Services.Hive.Tests.Mocks;
     24using System;
    2425
    2526namespace HeuristicLab.Services.Hive.Tests {
     
    3536    }
    3637
     38    private MockAuthorizationManager mockAuthorizationManager = new MockAuthorizationManager();
    3739    public IAuthorizationManager AuthorizationManager {
    38       get { return new MockAuthorizationManager(); }
     40      get { return mockAuthorizationManager; }
    3941    }
    4042
     
    5355      get { return defaultServiceLocator.HeartbeatManager; }
    5456    }
     57
     58    #region Special mocking methods
     59    public void SetCurrentUser(Guid id) {
     60      mockAuthorizationManager.SetUserId(id);
     61    }
     62
     63    #endregion
    5564  }
    5665}
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs

    r6452 r6457  
    2626using HeuristicLab.Services.Hive.Common.DataTransfer;
    2727using HeuristicLab.Services.Hive.Common.ServiceContracts;
     28using HeuristicLab.Services.Hive.Tests.Mocks;
    2829using Microsoft.VisualStudio.TestTools.UnitTesting;
    2930using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
     
    3233  [TestClass]
    3334  public class ServiceTests {
     35    // use the mock service locator to modify service properties (such as current user)
     36    private static MockServiceLocator mockServiceLocator;
    3437
    3538    [ClassInitialize]
    3639    public static void MyClassInitialize(TestContext testContext) {
    37       ServiceLocator.Instance = new MockServiceLocator(ServiceLocator.Instance);
     40      mockServiceLocator = new MockServiceLocator(ServiceLocator.Instance);
     41      ServiceLocator.Instance = mockServiceLocator;
    3842    }
    3943
     
    4751
    4852      // create hive experiment
    49       DT.HiveExperiment experiment = new DT.HiveExperiment() {
    50         Name = "TestExperiment",
    51         Description = ""
    52       };
     53      DT.HiveExperiment experiment = new DT.HiveExperiment() { Name = "TestExperiment", Description = "" };
    5354
    5455      // create job
    55       DT.Job job = new DT.Job() {
    56         CoresNeeded = 1,
    57         MemoryNeeded = 0,
    58         Priority = 0
    59       };
     56      DT.Job job = new DT.Job() { CoresNeeded = 1, MemoryNeeded = 0, Priority = 0 };
    6057      job.State = JobState.Offline;
    6158      job.StateLog.Add(new StateLog { State = JobState.Offline, DateTime = DateTime.Now });
     
    7875      plugin1.DateCreated = DateTime.Now;
    7976      plugin1.Hash = hash;
    80      
     77
    8178      DT.PluginData pluginData1 = new DT.PluginData();
    8279      pluginData1.FileName = "Tests.MyPlugin-1.0.dll";
     
    206203
    207204      // create hive experiment
    208       DT.HiveExperiment experiment = new DT.HiveExperiment() {
    209         Name = "TestExperiment",
    210         Description = ""
    211       };
     205      DT.HiveExperiment experiment = new DT.HiveExperiment() { Name = "TestExperiment", Description = "" };
    212206
    213207      // create parent job
     
    304298      service.DeleteSlave(slave.Id);
    305299    }
     300
     301
     302    [TestMethod]
     303    public void TestHiveExperimentPermissions() {
     304      var service = GetLocalService();
     305      mockServiceLocator.SetCurrentUser(MockAuthorizationManager.MockUserId1);
     306
     307      // create hive experiment
     308      DT.HiveExperiment e1 = new DT.HiveExperiment() { Name = "TestExperiment", Description = "" };
     309      e1.Id = service.AddHiveExperiment(e1);
     310     
     311      var e1loaded = service.GetHiveExperiment(e1.Id);
     312      Assert.AreEqual(Permission.Full, e1loaded.Permission);
     313
     314      // change to user2
     315      mockServiceLocator.SetCurrentUser(MockAuthorizationManager.MockUserId2);
     316      e1loaded = service.GetHiveExperiment(e1.Id);
     317      Assert.AreEqual(null, e1loaded); // no access
     318
     319      // user2 should not be able to grant permissions
     320      try {
     321        service.GrantPermission(e1.Id, MockAuthorizationManager.MockUserId2, Permission.ReadOnly);
     322        Assert.Fail("Should not be possible to grant permission due to missing permission for User2");
     323      }
     324      catch { /* ok, cool */ }
     325
     326      // switch back to user1 (owner) and grant user2 permissions
     327      mockServiceLocator.SetCurrentUser(MockAuthorizationManager.MockUserId1);
     328      service.GrantPermission(e1.Id, MockAuthorizationManager.MockUserId2, Permission.ReadOnly);
     329
     330      // back to user2
     331      mockServiceLocator.SetCurrentUser(MockAuthorizationManager.MockUserId2);
     332      e1loaded = service.GetHiveExperiment(e1.Id);
     333      Assert.AreEqual(Permission.ReadOnly, e1loaded.Permission);
     334
     335      // user2 should still not be able to grant permissions
     336      try {
     337        service.GrantPermission(e1.Id, MockAuthorizationManager.MockUserId2, Permission.ReadOnly);
     338        Assert.Fail("Should not be possible to grant permission due to missing permission for User2");
     339      }
     340      catch { /* ok, cool */ }
     341
     342      // back to user1
     343      mockServiceLocator.SetCurrentUser(MockAuthorizationManager.MockUserId1);
     344      service.GrantPermission(e1.Id, MockAuthorizationManager.MockUserId2, Permission.Full);
     345
     346      // back to user2
     347      mockServiceLocator.SetCurrentUser(MockAuthorizationManager.MockUserId2);
     348      e1loaded = service.GetHiveExperiment(e1.Id);
     349      Assert.AreEqual(Permission.Full, e1loaded.Permission);
     350
     351      // grant rights to user3, now this should be possible due to full permissions
     352      service.GrantPermission(e1.Id, MockAuthorizationManager.MockUserId3, Permission.ReadOnly);
     353
     354      // back to user1 and revoke rights for user2
     355      mockServiceLocator.SetCurrentUser(MockAuthorizationManager.MockUserId1);
     356      service.RevokePermission(e1.Id, MockAuthorizationManager.MockUserId2);
     357
     358      // back to user2
     359      mockServiceLocator.SetCurrentUser(MockAuthorizationManager.MockUserId2);
     360      e1loaded = service.GetHiveExperiment(e1.Id);
     361      Assert.AreEqual(null, e1loaded); // no access
     362
     363      service.DeleteHiveExperiment(e1.Id);
     364    }
    306365  }
    307366}
Note: See TracChangeset for help on using the changeset viewer.