Ejemplo n.º 1
0
        public void RequestRecentUpgrade()
        {
            var fakeClock = new ManualClock()
            {
                Time = DateTimeOffset.UtcNow,
            };

            var f  = new DataRepositoryUpgradeOracleFactory(new LoggerFactory(), fakeClock, new WatchdogStatusAggregator());
            var kg = new DataRepositoryKnownGoods(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
            });

            var lv = new DataRepositoryLatestVersionInfo(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("b", "b").ToBase64String(),
            });

            var pods = new List <PodDataRequestInfo>()
            {
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "name"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = kg.KnownGoodVersions["d"],
                }),
            };

            var o = f.Create(kg, lv, pods);

            Assert.IsNull(o.GetDataRequest(pods[0].Id, "d"), $"Should not give a new request because still in probation");
        }
Ejemplo n.º 2
0
        public void RequestMatchesLastKnownGood()
        {
            var fakeClock = new ManualClock()
            {
                Time = DateTimeOffset.FromUnixTimeSeconds(1_000),
            };

            var f  = new DataRepositoryUpgradeOracleFactory(new LoggerFactory(), fakeClock, new WatchdogStatusAggregator());
            var kg = new DataRepositoryKnownGoods(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
            });

            var lv = new DataRepositoryLatestVersionInfo(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
            });

            var pods = new List <PodDataRequestInfo>()
            {
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "name"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = kg.KnownGoodVersions["d"],
                }),
            };

            var o = f.Create(kg, lv, pods);

            Assert.IsNull(o.GetDataRequest(pods[0].Id, "d"), "Request should return nothing if upgrade would be same as LKG");
        }
Ejemplo n.º 3
0
        public void RequestNoLkg()
        {
            var fakeClock = new ManualClock()
            {
                Time = DateTimeOffset.UtcNow + TimeSpan.FromDays(1),
            };

            var f  = new DataRepositoryUpgradeOracleFactory(new LoggerFactory(), fakeClock, new WatchdogStatusAggregator());
            var kg = new DataRepositoryKnownGoods(new Dictionary <string, string>()
            {
            });

            var lv = new DataRepositoryLatestVersionInfo(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("b", "b").ToBase64String(),
            });

            var pods = new List <PodDataRequestInfo>()
            {
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "name"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = lv.UpgradeInfo["d"],
                }),
            };

            var o = f.Create(kg, lv, pods);

            Assert.IsNull(o.GetDataRequest(pods[0].Id, "d"));
        }
Ejemplo n.º 4
0
        public void WatchdogsFailingDoNotUpgrade()
        {
            var fakeClock = new ManualClock()
            {
                Time = DateTimeOffset.UtcNow + TimeSpan.FromDays(1),
            };

            var f  = new DataRepositoryUpgradeOracleFactory(new LoggerFactory(), fakeClock, new WatchdogStatusAggregator());
            var kg = new DataRepositoryKnownGoods(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
            });

            var lv = new DataRepositoryLatestVersionInfo(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("b", "b").ToBase64String(),
            });

            var pods = new List <PodDataRequestInfo>()
            {
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "pod1"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
                }),
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "pod2"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
                }),
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "pod3"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
                }),
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "pod4"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataDependsOn}"] = "d, e, f",
                    [$"{WatchdogStatus.Prefix}x"]          = $"{WatchdogStatus.ErrorLevel}/ohno",
                }),
            };

            var o = f.Create(kg, lv, pods);


            Assert.IsNull(o.GetDataRequest(pods[0].Id, "d"), "watchdog failure on pod 4");
            Assert.IsNull(o.GetDataRequest(pods[1].Id, "d"), "watchdog failure on pod 4");
            Assert.IsNull(o.GetDataRequest(pods[2].Id, "d"), "watchdog failure on pod 4");
        }
Ejemplo n.º 5
0
        public void FinishUpgradeToLatest()
        {
            var fakeClock = new ManualClock()
            {
                Time = DateTimeOffset.UtcNow + TimeSpan.FromDays(1),
            };

            var f  = new DataRepositoryUpgradeOracleFactory(new LoggerFactory(), fakeClock, new WatchdogStatusAggregator());
            var kg = new DataRepositoryKnownGoods(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
            });

            var lv = new DataRepositoryLatestVersionInfo(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("b", "b").ToBase64String(),
            });

            var pods = new List <PodDataRequestInfo>()
            {
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "pod1"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
                }),
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "pod2"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
                }),
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "pod3"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = new DataDownloadRequestDetails("b", "b").ToBase64String(),
                }),
            };

            var o = f.Create(kg, lv, pods);

            // upgrade 1 to latest
            var pod1 = o.GetDataRequest(pods[0].Id, "d");
            var pod2 = o.GetDataRequest(pods[1].Id, "d");
            var pod3 = o.GetDataRequest(pods[2].Id, "d");

            AssertSameData(lv.UpgradeInfo["d"], pod1, "upgrade to latest");
            AssertSameData(lv.UpgradeInfo["d"], pod2, "upgrade to latest");
            Assert.IsNull(pod3, "pod already on latest");
        }
Ejemplo n.º 6
0
        public void RequestResetNoTimestampVersionToLKG()
        {
            var fakeClock = new ManualClock()
            {
                Time = DateTimeOffset.UtcNow + TimeSpan.FromDays(1),
            };

            var f  = new DataRepositoryUpgradeOracleFactory(new LoggerFactory(), fakeClock, new WatchdogStatusAggregator());
            var kg = new DataRepositoryKnownGoods(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("a", "a").ToBase64String(),
            });

            var lv = new DataRepositoryLatestVersionInfo(new Dictionary <string, string>()
            {
                ["d"] = new DataDownloadRequestDetails("b", "b").ToBase64String(),
            });

            var badReq = new DataDownloadRequestDetails("b", "b")
            {
                UnixTimestampSeconds = null
            };

            var pods = new List <PodDataRequestInfo>()
            {
                new PodDataRequestInfo(
                    new PodIdentifier("ns", "name"),
                    new Dictionary <string, string>()
                {
                    [$"{CommonAnnotations.DataSources}"]        = "d",
                    [$"{CommonAnnotations.DataRequestPrefix}d"] = badReq.ToBase64String(),
                }),
            };

            var o = f.Create(kg, lv, pods);

            AssertSameData(kg.KnownGoodVersions["d"], o.GetDataRequest(pods[0].Id, "d"), $"Reset to LKG on bad timestamp");
        }