public ICollection<String> GetDefaultAttributesToGet(ObjectClass oclass)
        {
            ICollection<string> attributesToGet = new HashSet<String>();

            ActiveDirectoryConnector connector = new ActiveDirectoryConnector();
            connector.Init(ConfigHelper.GetConfiguration());
            Schema schema = connector.Schema();
            ObjectClassInfo ocInfo = schema.FindObjectClassInfo(oclass.GetObjectClassValue());
            Assert.IsNotNull(ocInfo);

            foreach (ConnectorAttributeInfo caInfo in ocInfo.ConnectorAttributeInfos)
            {
                if (caInfo.IsReturnedByDefault)
                {
                    attributesToGet.Add(caInfo.Name);
                }
            }

            return attributesToGet;
        }
        public void TestSchema()
        {
            ActiveDirectoryConnector connector = new ActiveDirectoryConnector();
            connector.Init(ConfigHelper.GetConfiguration());
            Schema schema = connector.Schema();
            Boolean foundOptionalAttributes = false;
            Boolean foundOperationalAttributes = false;

            // just a very high level check of things.  Should have 3 ObjectClassInfos,
            // (group, account, and organizationalUnit) and nothing contained in them
            // should be null.  Group and account should have some operational
            // attributes
            Assert.AreEqual(3, schema.ObjectClassInfo.Count);
            foreach (ObjectClassInfo ocInfo in schema.ObjectClassInfo)
            {
                Assert.IsNotNull(ocInfo);
                Assert.That((ocInfo.ObjectType == ObjectClass.ACCOUNT.GetObjectClassValue())
                    || (ocInfo.ObjectType == ActiveDirectoryConnector.OBJECTCLASS_GROUP)
                    || (ocInfo.ObjectType == ActiveDirectoryConnector.OBJECTCLASS_OU));
                Trace.WriteLine("****** " + ocInfo.ObjectType);

                // skip this for organizational unit ... it doesnt really have this
                if (ocInfo.ObjectType.Equals(ActiveDirectoryConnector.ouObjectClass))
                {
                    continue;
                }

                foreach (ConnectorAttributeInfo caInfo in ocInfo.ConnectorAttributeInfos)
                {
                    Assert.IsNotNull(caInfo);
                    Trace.WriteLine(String.Format("{0} {1} {2} {3}", caInfo.Name,
                        caInfo.IsCreatable ? "createable" : "",
                        caInfo.IsUpdateable ? "updateable" : "",
                        caInfo.IsRequired ? "required" : "",
                        caInfo.IsMultiValued ? "multivalue" : ""));
                    if (ConnectorAttributeUtil.IsSpecial(caInfo))
                    {
                        foundOperationalAttributes = true;
                    }
                    else
                    {
                        if (!caInfo.IsRequired)
                        {
                            foundOptionalAttributes = true;
                        }
                    }
                }
                Assert.That(foundOperationalAttributes && foundOptionalAttributes);
            }
        }