public void RemovesIncomingPopularityTransfer()
            {
                // A used to transfer to both B and C.
                // A now transfers to just B.
                PopularityTransfer = 1;

                DownloadData.SetDownloadCount("A", "1.0.0", 100);
                DownloadData.SetDownloadCount("B", "1.0.0", 5);
                DownloadData.SetDownloadCount("C", "1.0.0", 0);

                PopularityTransfers.AddTransfer("A", "B");

                TransferChanges["A"] = new[] { "B" };
                OldTransfers.AddTransfer("A", "B");
                OldTransfers.AddTransfer("A", "C");

                var result = Target.UpdateDownloadTransfers(
                    DownloadData,
                    DownloadChanges,
                    OldTransfers,
                    PopularityTransfers);

                Assert.Equal(new[] { "A", "B", "C" }, result.Keys);
                Assert.Equal(0, result["A"]);
                Assert.Equal(105, result["B"]);
                Assert.Equal(0, result["C"]);
            }
示例#2
0
            public async Task FlagDisablesPopularityTransfers()
            {
                var downloadChanges = new SortedDictionary <string, long>(StringComparer.OrdinalIgnoreCase)
                {
                    { "Package1", 5 }
                };

                DownloadSetComparer
                .Setup(c => c.Compare(It.IsAny <DownloadData>(), It.IsAny <DownloadData>()))
                .Returns <DownloadData, DownloadData>((oldData, newData) =>
                {
                    return(downloadChanges);
                });

                OldTransfers.AddTransfer("Package1", "Package2");
                NewTransfers.AddTransfer("Package1", "Package2");

                FeatureFlags
                .Setup(x => x.IsPopularityTransferEnabled())
                .Returns(false);

                await Target.ExecuteAsync();

                PopularityTransferDataClient
                .Verify(
                    c => c.ReadLatestIndexedAsync(It.IsAny <IAccessCondition>(), It.IsAny <StringCache>()),
                    Times.Once);
                DatabaseFetcher
                .Verify(
                    d => d.GetPopularityTransfersAsync(),
                    Times.Never);

                // The popularity transfers should not be given to the download transferrer.
                DownloadTransferrer
                .Verify(
                    x => x.UpdateDownloadTransfers(
                        NewDownloadData,
                        downloadChanges,
                        OldTransfers,
                        It.Is <PopularityTransferData>(d => d.Count == 0)),
                    Times.Once);

                // Popularity transfers auxiliary file should be empty.
                PopularityTransferDataClient.Verify(
                    c => c.ReplaceLatestIndexedAsync(
                        It.Is <PopularityTransferData>(d => d.Count == 0),
                        It.IsAny <IAccessCondition>()),
                    Times.Once);
            }