Click here to Skip to main content
15,897,273 members
Articles / Programming Languages / C#

NetMX - a JMX port to the .NET world

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
10 Mar 2008LGPL34 min read 39.6K   268   11  
An introduction to NetMX - a lightweight .NET management solution.
using System;
using System.Text;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading;
using System.Security.Principal;

namespace NetMX.Tests
{
   /// <summary>
   /// Summary description for MBeanPermissionTest
   /// </summary>
   [TestClass]
   public class MBeanPermissionTest
   {
      #region Additional test attributes
      //
      // You can use the following additional attributes as you write your tests:
      //
      // Use ClassInitialize to run code before running the first test in the class
      // [ClassInitialize()]
      // public static void MyClassInitialize(TestContext testContext) { }
      //
      // Use ClassCleanup to run code after all tests in a class have run
      // [ClassCleanup()]
      // public static void MyClassCleanup() { }
      //
      // Use TestInitialize to run code before running each test 
      // [TestInitialize()]
      // public void MyTestInitialize() { }
      //
      // Use TestCleanup to run code after each test has run
      // [TestCleanup()]
      // public void MyTestCleanup() { }
      //
      #endregion

      [TestMethod]
      public void CopyTest()
      {
         MBeanPermission perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         MBeanPermission permCopy = (MBeanPermission)perm.Copy();
         Assert.IsTrue(perm.Equals(permCopy));
         Assert.IsTrue(permCopy.Equals(perm));
      }

      [TestMethod]
      public void TextFormatTest()
      {
         MBeanPermission perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         MBeanPermission permText = new MBeanPermission("NetMX.StandardMBean, NetMX#getMBeanInfo[Sample:]", MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(permText));
         Assert.IsTrue(permText.Equals(perm));

         perm = new MBeanPermission(null, "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         permText = new MBeanPermission("-#getMBeanInfo[Sample:]", MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(permText));
         Assert.IsTrue(permText.Equals(perm));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", null, new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         permText = new MBeanPermission("NetMX.StandardMBean, NetMX#-[Sample:]", MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(permText));
         Assert.IsTrue(permText.Equals(perm));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", null, MBeanPermissionAction.Invoke);
         permText = new MBeanPermission("NetMX.StandardMBean, NetMX#getMBeanInfo[-]", MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(permText));
         Assert.IsTrue(permText.Equals(perm));

         perm = new MBeanPermission("", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         permText = new MBeanPermission("#getMBeanInfo[Sample:]", MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(permText));
         Assert.IsTrue(permText.Equals(perm));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         permText = new MBeanPermission("NetMX.StandardMBean, NetMX#[Sample:]", MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(permText));
         Assert.IsTrue(permText.Equals(perm));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName(":"), MBeanPermissionAction.Invoke);
         permText = new MBeanPermission("NetMX.StandardMBean, NetMX#getMBeanInfo[:]", MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(permText));
         Assert.IsTrue(permText.Equals(perm));
      }

      [TestMethod]
      public void InSubsetOfTest()
      {
         MBeanPermission permFull = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(permFull.IsSubsetOf(permFull));

         MBeanPermission perm = new MBeanPermission(null, "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(permFull.IsSubsetOf(perm));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", null, new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(permFull.IsSubsetOf(perm));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", null, MBeanPermissionAction.Invoke);
         Assert.IsTrue(permFull.IsSubsetOf(perm));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke | MBeanPermissionAction.Instantiate);
         Assert.IsTrue(permFull.IsSubsetOf(perm));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Instantiate);
         Assert.IsFalse(permFull.IsSubsetOf(perm));
      }
      [TestMethod]
      public void UnionTest()
      {
         MBeanPermission permFull = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);

         MBeanPermission perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(perm.Union(permFull)));
         Assert.IsTrue(perm.Equals(permFull.Union(perm)));

         perm = new MBeanPermission(null, "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(perm.Union(permFull)));
         Assert.IsTrue(perm.Equals(permFull.Union(perm)));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", null, new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(perm.Union(permFull)));
         Assert.IsTrue(perm.Equals(permFull.Union(perm)));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", null, MBeanPermissionAction.Invoke);
         Assert.IsTrue(perm.Equals(perm.Union(permFull)));
         Assert.IsTrue(perm.Equals(permFull.Union(perm)));

         perm = null;
         Assert.IsTrue(permFull.Equals(permFull.Union(perm)));
      }
      [TestMethod]
      public void IntersectTest()
      {
         MBeanPermission permFull = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);

         MBeanPermission perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(permFull.Equals(perm.Intersect(permFull)));
         Assert.IsTrue(permFull.Equals(permFull.Intersect(perm)));

         perm = new MBeanPermission(null, "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(permFull.Equals(perm.Intersect(permFull)));
         Assert.IsTrue(permFull.Equals(permFull.Intersect(perm)));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", null, new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         Assert.IsTrue(permFull.Equals(perm.Intersect(permFull)));
         Assert.IsTrue(permFull.Equals(permFull.Intersect(perm)));

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", null, MBeanPermissionAction.Invoke);
         Assert.IsTrue(permFull.Equals(perm.Intersect(permFull)));
         Assert.IsTrue(permFull.Equals(permFull.Intersect(perm)));

         perm = null;
         Assert.IsNull(permFull.Intersect(perm));
      }
      [TestMethod]
      public void DemandTest()
      {
         SetPermissions(new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke));
         MBeanPermission perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         perm.Demand();

         perm = new MBeanPermission(null, "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         perm.Demand();

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", null, new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         perm.Demand();

         perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", null, MBeanPermissionAction.Invoke);
         perm.Demand();
      }

      [TestMethod]
      [ExpectedException(typeof(InvalidOperationException), "This operation requires a 'needed' permission.")]
      public void DemandVerifyAsNeededFailueTest()
      {
         SetPermissions(new MBeanPermission(null, "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke));
         MBeanPermission perm = new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         perm.Demand();
      }

      [TestMethod]
      [ExpectedException(typeof(InvalidOperationException), "This operation requires a 'held' permission.")]
      public void DemandVerifyAsHeldFailueTest()
      {
         SetPermissions(new MBeanPermission("NetMX.StandardMBean, NetMX", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke));
         MBeanPermission perm = new MBeanPermission("", "getMBeanInfo", new ObjectName("Sample:"), MBeanPermissionAction.Invoke);
         perm.Demand();
      }

      #region Utility
      private static void SetPermissions(params MBeanPermission[] permissions)
      {
         //Thread.SetData(Thread.GetNamedDataSlot("NetMX.MBeanPermission"), permissions);
         Thread.CurrentPrincipal = new DummyPrincipal(permissions);
      }
      private class DummyPrincipal : GenericPrincipal, INetMXPrincipal
      {
         private readonly IEnumerable<MBeanPermission> _permissions;

         public DummyPrincipal(IEnumerable<MBeanPermission> permissions)
            : base(new GenericIdentity("Name", "Type"),new string[] {})
         {            
            _permissions = permissions;
         }

         #region INetMXPrincipal Members
         public IEnumerable<MBeanPermission> Permissions
         {
            get { return _permissions; }
         }
         #endregion
      }
      #endregion
   }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Software Developer (Senior) VSoft
Poland Poland
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions