public void Initialize()
        {
            // run following command to write test method metadata to console:
            // dotnet test --logger:"console;verbosity=normal"
            MethodInfo methodInfo =
                this.GetType().GetMethod(this.TestContext.TestName);

            DescriptionAttribute descriptionAttribute =
                methodInfo.GetCustomAttribute <DescriptionAttribute>();

            Console.WriteLine($"Description    : {descriptionAttribute.Description}");

            TestCategoryAttribute testCategoryAttribute =
                methodInfo.GetCustomAttribute <TestCategoryAttribute>();

            Console.WriteLine($"Category       : {string.Join(',', testCategoryAttribute.TestCategories)}");

            PriorityAttribute priorityAttribute =
                methodInfo.GetCustomAttribute <PriorityAttribute>();

            Console.WriteLine($"Priority       : {priorityAttribute.Priority}");

            OwnerAttribute ownerAttribute =
                methodInfo.GetCustomAttribute <OwnerAttribute>();

            Console.WriteLine($"Owner          : {ownerAttribute.Owner}");

            Stopwatch testMethodStopwatch = new Stopwatch();

            testMethodStopwatch.Start();

            this.TestContext.Properties["TestMethodStopwatch"] =
                testMethodStopwatch;
        }
示例#2
0
        private void HasValidOwnerAttribute()
        {
            StringBuilder sb = new StringBuilder();

            foreach (MethodInfo methodInfo in this.TestMethods)
            {
                OwnerAttribute owner = methodInfo.GetCustomAttributes(typeof(OwnerAttribute), false).Cast <OwnerAttribute>().FirstOrDefault();
                if (owner == null)
                {
                    sb.AppendLine(string.Format("    {0}: should have [Owner].", methodInfo.Name));
                }
                else if (string.IsNullOrWhiteSpace(owner.Owner))
                {
                    sb.AppendLine(string.Format("    {0}: [Owner] cannot be empty.", methodInfo.Name));
                }
            }

            if (sb.Length != 0)
            {
                Assert.Fail(string.Format("{0}these test methods have incorrect [Owner] attributes:\r\n{1}.", testErrorPrefix, sb.ToString()));
            }
        }
示例#3
0
        /// <summary>
        /// Deserialize a json string to a Model instance
        /// </summary>
        /// <param name="payload">json string</param>
        /// <returns>Model instance</returns>
        public static Model DeserializeModel(string payload)
        {
            JObject           root        = JObject.Parse(payload);
            List <ObjectType> objectTypes = new List <ObjectType>();
            Dictionary <ObjectAttributeFields, List <string> > allObjectAttributes = new Dictionary <ObjectAttributeFields, List <string> >();

            foreach (JObject rawOt in root["objectTypes"])
            {
                string        key                 = rawOt["key"].ToObject <string>();
                string        description         = rawOt["description"].ToObject <string>();
                List <string> objectAttributeKeys = new List <string>();

                foreach (JObject rawObjectAttributes in rawOt["objectAttributes"])
                {
                    string objKey           = rawObjectAttributes["key"].ToObject <string>();
                    string objDescription   = rawObjectAttributes["description"].ToObject <string>();
                    string objDisplayName   = rawObjectAttributes["displayName"].ToObject <string>();
                    string objHighLevelType = rawObjectAttributes["type"]["highLevelType"].ToObject <string>();
                    string objContainerType = rawObjectAttributes["type"]["containerType"].ToObject <string>();

                    objectAttributeKeys.Add(objKey);
                    ObjectAttributeFields objFields = Tuple.Create(objKey, objDisplayName, objDescription, objHighLevelType, objContainerType);
                    if (allObjectAttributes.ContainsKey(objFields))
                    {
                        allObjectAttributes[objFields].Add(key);
                    }
                    else
                    {
                        allObjectAttributes.Add(objFields, new List <string>()
                        {
                            key
                        });
                    }
                }
                objectTypes.Add(new ObjectType(key, description, objectAttributeKeys));
            }

            List <EventType> eventTypes = new List <EventType>();
            Dictionary <TimeseriesFields, List <string> > allTimeseries = new Dictionary <TimeseriesFields, List <string> >();

            foreach (JObject rawEt in root["eventTypes"])
            {
                string        key            = rawEt["key"].ToObject <string>();
                string        description    = rawEt["description"].ToObject <string>();
                string        origin         = rawEt["origin"].ToObject <string>();
                List <string> timeseriesKeys = new List <string>();

                foreach (JObject rawTimeseries in rawEt["timeseries"])
                {
                    string tsKey           = rawTimeseries["key"].ToObject <string>();
                    string tsDescription   = rawTimeseries["description"].ToObject <string>();
                    string tsDisplayName   = rawTimeseries["displayName"].ToObject <string>();
                    string tsHighLevelType = rawTimeseries["type"]["highLevelType"].ToObject <string>();

                    timeseriesKeys.Add(tsKey);
                    TimeseriesFields tsFields = Tuple.Create(tsKey, tsDisplayName, tsDescription, tsHighLevelType);
                    if (allTimeseries.ContainsKey(tsFields))
                    {
                        allTimeseries[tsFields].Add(key);
                    }
                    else
                    {
                        allTimeseries.Add(tsFields, new List <string>()
                        {
                            key
                        });
                    }
                }
                eventTypes.Add(new EventType(key, description, origin, timeseriesKeys));
            }
            List <OwnerAttribute> ownerAttributes = new List <OwnerAttribute>();

            foreach (JObject rawOwner in root["ownerAttributes"])
            {
                string key           = rawOwner["key"].ToObject <string>();
                string description   = rawOwner["description"].ToObject <string>();
                string displayName   = rawOwner["displayName"].ToObject <string>();
                string highLevelType = rawOwner["type"]["highLevelType"].ToObject <string>();
                string containerType = rawOwner["type"]["containerType"].ToObject <string>();

                OwnerAttribute owner = new OwnerAttribute(key, displayName, description, highLevelType, containerType);
                ownerAttributes.Add(owner);
            }

            List <Sessionizer> sessionizers = new List <Sessionizer>();

            foreach (JObject rawSessionizer in root["sessionizers"])
            {
                string key               = rawSessionizer["key"].ToObject <string>();
                string description       = rawSessionizer["description"].ToObject <string>();
                string displayName       = rawSessionizer["displayName"].ToObject <string>();
                string startEventTypeKey = rawSessionizer["startEventTypeKey"].ToObject <string>();
                string endEventTypeKey   = rawSessionizer["endEventTypeKey"].ToObject <string>();

                Sessionizer sess = new Sessionizer(key, displayName, description, startEventTypeKey, endEventTypeKey);
                sessionizers.Add(sess);
            }

            JToken rawOrphan = root["orphans"];

            List <ObjectAttribute> orphanObjects = new List <ObjectAttribute>();
            JToken orphanObjectsNode             = rawOrphan["objectAttributes"];

            if (orphanObjectsNode != null)
            {
                foreach (JObject rawObjectAttributes in orphanObjectsNode)
                {
                    string key           = rawObjectAttributes["key"].ToObject <string>();
                    string description   = rawObjectAttributes["description"].ToObject <string>();
                    string displayName   = rawObjectAttributes["displayName"].ToObject <string>();
                    string highLevelType = rawObjectAttributes["type"]["highLevelType"].ToObject <string>();
                    string containerType = rawObjectAttributes["type"]["containerType"].ToObject <string>();

                    ObjectAttribute obj = new ObjectAttribute(key, displayName, description, highLevelType, containerType, new List <string>()
                    {
                    });
                    orphanObjects.Add(obj);
                }
            }

            List <Timeseries> orphanTimeseries = new List <Timeseries>();
            JToken            orphanTsNode     = rawOrphan["timeseries"];

            if (orphanTsNode != null)
            {
                foreach (JObject rawTimeseries in orphanTsNode)
                {
                    string key           = rawTimeseries["key"].ToObject <string>();
                    string description   = rawTimeseries["description"].ToObject <string>();
                    string displayName   = rawTimeseries["displayName"].ToObject <string>();
                    string highLevelType = rawTimeseries["type"]["highLevelType"].ToObject <string>();

                    Timeseries ts = new Timeseries(key, displayName, description, highLevelType, new List <string>()
                    {
                    });
                    orphanTimeseries.Add(ts);
                }
            }

            List <ObjectAttribute> objectAttributes = new List <ObjectAttribute>();

            foreach (KeyValuePair <ObjectAttributeFields, List <string> > entry in allObjectAttributes)
            {
                ObjectAttributeFields objFields   = entry.Key;
                List <string>         objTypeKeys = entry.Value;

                ObjectAttribute obj = new ObjectAttribute(objFields.Item1, objFields.Item2, objFields.Item3, objFields.Item4, objFields.Item5, objTypeKeys);
                objectAttributes.Add(obj);
            }

            List <Timeseries> timeseries = new List <Timeseries>();

            foreach (KeyValuePair <TimeseriesFields, List <string> > entry in allTimeseries)
            {
                TimeseriesFields tsFields      = entry.Key;
                List <string>    eventTypeKeys = entry.Value;

                Timeseries ts = new Timeseries(tsFields.Item1, tsFields.Item2, tsFields.Item3, tsFields.Item4, eventTypeKeys);
                timeseries.Add(ts);
            }
            return(new Model(
                       eventTypes, objectTypes, timeseries, objectAttributes, ownerAttributes, sessionizers, new Orphans(orphanTimeseries, orphanObjects)
                       ));
        }
        public void TestDeserialize()
        {
            string json  = @"
            {
                ""objectTypes"": [
                    {
                    ""key"": ""object_type1"",
                    ""description"": ""desc"",
                    ""objectAttributes"": [
                        {
                        ""key"": ""object_text_attribute"",
                        ""displayName"": ""dp object_text_attribute"",
                        ""description"": ""desc object_text_attribute"",
                        ""type"": {
                            ""highLevelType"": ""TEXT"",
                            ""containerType"": ""none""
                        }
                        },
                        {
                        ""key"": ""object_int_attribute"",
                        ""displayName"": ""dp object_int_attribute"",
                        ""description"": ""desc object_int_attribute"",
                        ""type"": {
                            ""highLevelType"": ""INT"",
                            ""containerType"": ""list""
                        }
                        }
                    ]
                    }
                ],
                ""eventTypes"": [
                    {
                    ""key"": ""event_type1"",
                    ""description"": ""desc"",
                    ""origin"": ""scheduled"",
                    ""timeseries"": [
                        {
                        ""key"": ""ts_number_attribute"",
                        ""displayName"": ""dp ts_number_attribute"",
                        ""description"": ""desc ts_number_attribute"",
                        ""type"": {
                            ""highLevelType"": ""DOUBLE""
                        }
                        },
                        {
                        ""key"": ""ts_text_attribute"",
                        ""displayName"": ""dp ts_text_attribute"",
                        ""description"": ""desc ts_text_attribute"",
                        ""type"": {
                            ""highLevelType"": ""TEXT""
                        }
                        }
                    ]
                    },
                    {
                    ""key"": ""event_type2"",
                    ""description"": ""desc"",
                    ""origin"": ""rule"",
                    ""timeseries"": [
                        {
                        ""key"": ""ts_text_attribute"",
                        ""displayName"": ""dp ts_text_attribute"",
                        ""description"": ""desc ts_text_attribute"",
                        ""type"": {
                            ""highLevelType"": ""TEXT""
                        }
                        }
                    ]
                    }
                ],
                ""ownerAttributes"": [
                    {
                    ""key"": ""owner_text_attribute"",
                    ""displayName"": ""dp owner_text_attribute"",
                    ""description"": ""desc owner_text_attribute"",
                    ""type"": {
                        ""highLevelType"": ""TEXT"",
                        ""containerType"": ""none""
                    }
                    }
                ],
                ""sessionizers"": [
                    {
                    ""key"": ""sessionizer"",
                    ""displayName"": ""dp sessionizer"",
                    ""description"": ""desc sessionizer"",
                    ""startEventTypeKey"": ""event_type1"",
                    ""endEventTypeKey"": ""event_type2""
                    }
                ],
                ""orphans"": {
                    ""timeseries"": [
                    {
                        ""key"": ""orphan_ts"",
                        ""displayName"": ""dp orphan_ts"",
                        ""description"": ""desc orphan_ts"",
                        ""type"": {
                        ""highLevelType"": ""ACCELERATION""
                        }
                    }
                    ],
                    ""objectAttributes"": [
                    {
                        ""key"": ""orphan_object"",
                        ""displayName"": ""dp orphan_object"",
                        ""description"": ""desc orphan_object"",
                        ""type"": {
                        ""highLevelType"": ""EMAIL"",
                        ""containerType"": ""none""
                        }
                    }
                    ]
                }
                }
            ";
            Model  model = ModelDeserializer.DeserializeModel(json);

            Assert.AreEqual(2, model.EventTypes.Count, "event types count");
            Assert.AreEqual(2, model.Timeseries.Count, "timeseries count");
            Assert.AreEqual(1, model.ObjectTypes.Count, "object types count");
            Assert.AreEqual(2, model.ObjectAttributes.Count, "object attributes count");
            Assert.AreEqual(1, model.OwnerAttributes.Count, "owner attributes count");
            Assert.AreEqual(1, model.Sessionizers.Count, "sessionizers count");

            EventType type1 = model.EventTypes[0];

            Assert.AreEqual("event_type1", type1.Key);
            Assert.AreEqual("desc", type1.Description);
            Assert.AreEqual("scheduled", type1.Origin);
            Assert.AreEqual(new List <string>()
            {
                "ts_number_attribute", "ts_text_attribute"
            }, type1.TimeseriesKeys);
            EventType type2 = model.EventTypes[1];

            Assert.AreEqual("event_type2", type2.Key);
            Assert.AreEqual("desc", type2.Description);
            Assert.AreEqual("rule", type2.Origin);
            Assert.AreEqual(new List <string>()
            {
                "ts_text_attribute"
            }, type2.TimeseriesKeys);

            ObjectType oType = model.ObjectTypes[0];

            Assert.AreEqual("object_type1", oType.Key);
            Assert.AreEqual("desc", oType.Description);
            Assert.AreEqual(new List <string>()
            {
                "object_text_attribute", "object_int_attribute"
            }, oType.ObjectAttributeKeys);

            ObjectAttribute object1 = model.ObjectAttributes[0];

            Assert.AreEqual("object_text_attribute", object1.Key);
            Assert.AreEqual("dp object_text_attribute", object1.DisplayName);
            Assert.AreEqual("desc object_text_attribute", object1.Description);
            Assert.AreEqual("TEXT", object1.HighLevelType);
            Assert.AreEqual("none", object1.ContainerType);
            Assert.AreEqual(new List <string>()
            {
                "object_type1"
            }, object1.ObjectTypeKeys);

            ObjectAttribute object2 = model.ObjectAttributes[1];

            Assert.AreEqual("object_int_attribute", object2.Key);
            Assert.AreEqual("dp object_int_attribute", object2.DisplayName);
            Assert.AreEqual("desc object_int_attribute", object2.Description);
            Assert.AreEqual("INT", object2.HighLevelType);
            Assert.AreEqual("list", object2.ContainerType);
            Assert.AreEqual(new List <string>()
            {
                "object_type1"
            }, object2.ObjectTypeKeys);


            Timeseries ts1 = model.Timeseries[0];

            Assert.AreEqual("ts_number_attribute", ts1.Key);
            Assert.AreEqual("dp ts_number_attribute", ts1.DisplayName);
            Assert.AreEqual("desc ts_number_attribute", ts1.Description);
            Assert.AreEqual("DOUBLE", ts1.HighLevelType);
            Assert.AreEqual(new List <string>()
            {
                "event_type1"
            }, ts1.EventTypeKeys);

            Timeseries ts2 = model.Timeseries[1];

            Assert.AreEqual("ts_text_attribute", ts2.Key);
            Assert.AreEqual("dp ts_text_attribute", ts2.DisplayName);
            Assert.AreEqual("desc ts_text_attribute", ts2.Description);
            Assert.AreEqual("TEXT", ts2.HighLevelType);
            Assert.AreEqual(new List <string>()
            {
                "event_type1", "event_type2"
            }, ts2.EventTypeKeys);

            OwnerAttribute owner = model.OwnerAttributes[0];

            Assert.AreEqual("owner_text_attribute", owner.Key);
            Assert.AreEqual("dp owner_text_attribute", owner.DisplayName);
            Assert.AreEqual("desc owner_text_attribute", owner.Description);
            Assert.AreEqual("TEXT", owner.HighLevelType);
            Assert.AreEqual("none", owner.ContainerType);

            Sessionizer sess = model.Sessionizers[0];

            Assert.AreEqual("sessionizer", sess.Key);
            Assert.AreEqual("dp sessionizer", sess.DisplayName);
            Assert.AreEqual("desc sessionizer", sess.Description);
            Assert.AreEqual("event_type1", sess.StartEventTypeKey);
            Assert.AreEqual("event_type2", sess.EndEventTypeKey);

            ObjectAttribute orphanObj = model.Orphans.ObjectAttributes[0];

            Assert.AreEqual("orphan_object", orphanObj.Key);
            Assert.AreEqual("dp orphan_object", orphanObj.DisplayName);
            Assert.AreEqual("desc orphan_object", orphanObj.Description);
            Assert.AreEqual("EMAIL", orphanObj.HighLevelType);
            Assert.AreEqual("none", orphanObj.ContainerType);
            Assert.AreEqual(new List <string>(), orphanObj.ObjectTypeKeys);


            Timeseries orphanTs = model.Orphans.Timeseries[0];

            Assert.AreEqual("orphan_ts", orphanTs.Key);
            Assert.AreEqual("dp orphan_ts", orphanTs.DisplayName);
            Assert.AreEqual("desc orphan_ts", orphanTs.Description);
            Assert.AreEqual("ACCELERATION", orphanTs.HighLevelType);
            Assert.AreEqual(new List <string>(), orphanTs.EventTypeKeys);
        }
示例#5
0
        private void GetTestMethodData(MemberInfo member, ref DataRow row)
        {
            this.TestMethodData();
            object[] attributes = member.GetCustomAttributes(true);
            bool     testmethod = false;

            object[] objArray = attributes;
            int      num      = 0;

            while (num < (int)objArray.Length)
            {
                if (!(objArray[num] is TestMethodAttribute))
                {
                    num++;
                }
                else
                {
                    testmethod = true;
                    break;
                }
            }
            if (testmethod)
            {
                row[this.rTestName] = member.Name;
                HashAlgorithm Provider = new SHA1CryptoServiceProvider();
                byte[]        hash     = Provider.ComputeHash(Encoding.Unicode.GetBytes(string.Concat(member.DeclaringType.FullName, ".", member.Name)));
                byte[]        to       = new byte[16];
                Array.Copy(hash, to, 16);
                string str  = this.rTestGUID;
                Guid   guid = new Guid(to);
                row[str] = guid.ToString();
                string   p         = "";
                string   o         = "";
                string   c         = "";
                object[] objArray1 = attributes;
                for (int i = 0; i < (int)objArray1.Length; i++)
                {
                    object                att  = objArray1[i];
                    PriorityAttribute     pri  = att as PriorityAttribute;
                    OwnerAttribute        own  = att as OwnerAttribute;
                    TestCategoryAttribute cate = att as TestCategoryAttribute;
                    if (pri != null)
                    {
                        p = pri.Priority.ToString();
                    }
                    if (own != null)
                    {
                        o = own.Owner;
                    }
                    if (cate != null)
                    {
                        foreach (string ca in cate.TestCategories)
                        {
                            c = string.Concat(c, ca, ";");
                        }
                    }
                }
                row[this.rTestPriority] = p;
                row[this.rTestOwner]    = o;
                if (c.Length > 0)
                {
                    row[this.rTestCategory] = c.Remove(c.Length - 1);
                }
            }
        }