示例#1
0
        internal static unsafe ChaosSchedule FromNative(IntPtr pointer)
        {
            var      nativeSchedule = *(NativeTypes.FABRIC_CHAOS_SCHEDULE *)pointer;
            DateTime startDate      = NativeTypes.FromNativeFILETIME(nativeSchedule.StartDate);
            DateTime expiryDate     = NativeTypes.FromNativeFILETIME(nativeSchedule.ExpiryDate);
            Dictionary <string, ChaosParameters> chaosParametersDictionary = new Dictionary <string, ChaosParameters>();

            var chaosParametersMap = *(NativeTypes.FABRIC_CHAOS_SCHEDULE_CHAOS_PARAMETERS_MAP *)nativeSchedule.ChaosParametersMap;
            var nativechaosParametersMapArrayPtr = (NativeTypes.FABRIC_CHAOS_SCHEDULE_CHAOS_PARAMETERS_MAP_ITEM *)chaosParametersMap.Items;

            for (int i = 0; i < chaosParametersMap.Count; i++)
            {
                var nativeItem = *(nativechaosParametersMapArrayPtr + i);
                var name       = NativeTypes.FromNativeString(nativeItem.Name);
                var parameters = ChaosParameters.CreateFromNative(nativeItem.Parameters);

                chaosParametersDictionary.Add(name, parameters);
            }

            List <ChaosScheduleJob> jobs = new List <ChaosScheduleJob>();
            var nativeJobsList           = *(NativeTypes.FABRIC_CHAOS_SCHEDULE_JOB_LIST *)nativeSchedule.Jobs;
            var nativeJobsArrayPtr       = (NativeTypes.FABRIC_CHAOS_SCHEDULE_JOB *)nativeJobsList.Items;

            for (int i = 0; i < nativeJobsList.Count; ++i)
            {
                var nativeItem       = (nativeJobsArrayPtr + i);
                ChaosScheduleJob job = ChaosScheduleJob.FromNative(nativeItem);
                jobs.Add(job);
            }

            return(new ChaosSchedule(startDate, expiryDate, chaosParametersDictionary, jobs));
        }
示例#2
0
        /// <summary>
        /// Reads the state of this object from byte array.
        /// </summary>
        /// <param name="br">A BinaryReader object</param>
        /// <exception cref="EndOfStreamException">The end of the stream is reached. </exception>
        /// <exception cref="IOException">An I/O error occurs. </exception>
        public override void Read(BinaryReader br)
        {
            decimal objectVersion = br.ReadDecimal();

            if (objectVersion >= ChaosConstants.ApiVersion62)
            {
                this.StartDate = DateTime.ParseExact(
                    br.ReadString(),
                    ChaosConstants.DateTimeFormat_ISO8601,
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.AdjustToUniversal);

                this.ExpiryDate = DateTime.ParseExact(
                    br.ReadString(),
                    ChaosConstants.DateTimeFormat_ISO8601,
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.AdjustToUniversal);


                int keyValuePairCount = br.ReadInt32();

                for (int i = 0; i < keyValuePairCount; i++)
                {
                    string tempKey = br.ReadString();

                    ChaosParameters tempVal = new ChaosParameters();
                    tempVal.Read(br);
                    this.ChaosParametersDictionary.Add(tempKey, tempVal);
                }

                int jobsCount = br.ReadInt32();

                for (int i = 0; i < jobsCount; i++)
                {
                    ChaosScheduleJob job = new ChaosScheduleJob();
                    job.Read(br);
                    this.Jobs.Add(job);
                }
            }
            else
            {
                TestabilityTrace.TraceSource.WriteError(TraceComponent, "Attempting to read a version of object below lowest version. Saw {0}. Expected >=6.2", objectVersion);
                ReleaseAssert.Fail("Failed to read byte serialization of ChaosSchedule");
            }
        }