private static InstanceSetHistory BuildHistoryFromResource(string resourceName)
        {
            var testDataResource = Assembly.GetExecutingAssembly()
                                   .GetManifestResourceNames()
                                   .First(n => n.EndsWith(resourceName));

            var b = new InstanceSetHistoryBuilder(
                new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc),
                new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc));

            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(testDataResource))
                using (var reader = new JsonTextReader(new StreamReader(stream)))
                {
                    var events = new JsonSerializer().Deserialize <LogRecord[]>(reader)
                                 .Select(rec => rec.ToEvent())
                                 .OrderByDescending(e => e.Timestamp);

                    foreach (var e in events)
                    {
                        b.Process(e);
                    }
                }

            return(b.Build());
        }
        public void WhenInstanceNotAddedButStopEventRecorded_ThenInstanceIncludedInSetAsMissingTenancy()
        {
            var b = new InstanceSetHistoryBuilder(
                new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc),
                new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc));

            b.Process(new StopInstanceEvent(new LogRecord()
            {
                LogName      = "projects/project-1/logs/cloudaudit.googleapis.com%2Factivity",
                ProtoPayload = new AuditLogRecord()
                {
                    MethodName   = StopInstanceEvent.Method,
                    ResourceName = "projects/project-1/zones/us-central1-a/instances/instance-1"
                },
                Resource = new ResourceRecord()
                {
                    Labels = new Dictionary <string, string>
                    {
                        { "instance_id", "123" }
                    }
                },
                Timestamp = new DateTime(2019, 12, 31)
            }));

            var set = b.Build();

            Assert.AreEqual(1, set.Instances.Count());
            Assert.AreEqual(123, set.Instances.First().InstanceId);
            Assert.AreEqual(InstanceHistoryState.MissingTenancy, set.Instances.First().State);
        }
        public void WhenInstanceNotAddedButInsertEventRecorded_ThenInstanceIncludedInSet()
        {
            var b = new InstanceSetHistoryBuilder(
                new DateTime(2019, 12, 1, 0, 0, 0, DateTimeKind.Utc),
                new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc));

            b.Process(new TerminateOnHostMaintenanceEvent(new LogRecord()
            {
                LogName      = "projects/project-1/logs/cloudaudit.googleapis.com%2Fsystem_event",
                ProtoPayload = new AuditLogRecord()
                {
                    MethodName   = TerminateOnHostMaintenanceEvent.Method,
                    ResourceName = "projects/project-1/zones/us-central1-a/instances/instance-1",
                },
                Resource = new ResourceRecord()
                {
                    Labels = new Dictionary <string, string>
                    {
                        { "instance_id", "123" }
                    }
                },
                Timestamp = new DateTime(2019, 12, 31),
                Severity  = "INFO"
            }));
            b.Process(new InsertInstanceEvent(new LogRecord()
            {
                LogName      = "projects/project-1/logs/cloudaudit.googleapis.com%2Factivity",
                ProtoPayload = new AuditLogRecord()
                {
                    MethodName   = InsertInstanceEvent.Method,
                    ResourceName = "projects/project-1/zones/us-central1-a/instances/instance-1",
                },
                Resource = new ResourceRecord()
                {
                    Labels = new Dictionary <string, string>
                    {
                        { "instance_id", "123" }
                    }
                },
                Timestamp = new DateTime(2019, 12, 31)
            }));

            var set = b.Build();

            Assert.AreEqual(1, set.Instances.Count());
            Assert.AreEqual(123, set.Instances.First().InstanceId);
        }