public void ToBDictionary_Info_SingleFile_AddsNameAndLength(long fileSize, string fileName) { // Arrange var torrent = new Torrent { File = new SingleFileInfo { FileSize = fileSize, FileName = fileName } }; // Act var info = torrent.ToBDictionary().Get<BDictionary>("info"); // Assert info.Should().Contain(TorrentInfoFields.Length, (BNumber)fileSize); info.Should().Contain(TorrentInfoFields.Name, (BString)fileName); }
public void ToBDictionary_ExtraFields_OverwritesExistingData(string comment, BString extraValue) { // Arrange var torrent = new Torrent { Comment = comment, ExtraFields = new BDictionary { {TorrentFields.Comment, extraValue} } }; // Act var result = torrent.ToBDictionary(); // Assert result.Should().Contain(TorrentFields.Comment, extraValue); }
public void ToBDictionary_Info_MultiFile_AddsFiles(string directoryName, long fileSize, IList<string> path) { // Arrange var torrent = new Torrent { Files = new MultiFileInfoList(directoryName) { new MultiFileInfo { FileSize = fileSize, Path = path } } }; // Act var info = torrent.ToBDictionary().Get<BDictionary>("info"); var files = info.Get<BList>(TorrentInfoFields.Files).AsType<BDictionary>(); // Assert info.Should().Contain(TorrentInfoFields.Name, (BString) directoryName); info.Should().ContainKey(TorrentInfoFields.Files); info[TorrentInfoFields.Files].Should().BeOfType<BList<BDictionary>>(); files[0].Should().BeOfType<BDictionary>(); files[0].Should().Contain(TorrentFilesFields.Length, (BNumber) fileSize); files[0].Should().ContainKey(TorrentFilesFields.Path); files[0].Get<BList>(TorrentFilesFields.Path).Should().HaveCount(path.Count); }
public void ToBDictionary_EqualsEmptyBDictionaryForEmptyTorrent() { var torrent = new Torrent(); var result = torrent.ToBDictionary(); result.Should().HaveCount(0); result.ShouldBeEquivalentTo(new BDictionary()); }
public void ToBDictionary_ExtraFields_AreAdded(BString key, BString value) { // Arrange var torrent = new Torrent { ExtraFields = new BDictionary { [key] = value } }; // Act var result = torrent.ToBDictionary(); // Assert result.Should().Contain(key, value); }
public void ToBDictionary_Encoding_DoesNotAddNull() { var torrent = new Torrent {Encoding = null}; var result = torrent.ToBDictionary(); result.Should().NotContainKey(TorrentFields.Encoding); }
public void ToBDictionary_Encoding_UsesWebNameToUpper() { var torrent = new Torrent { Encoding = Encoding.UTF8 }; var result = torrent.ToBDictionary(); result.Get<BString>(TorrentFields.Encoding).Should().Be(Encoding.UTF8.WebName.ToUpper()); }
public void ToBDictionary_CreationDate_DoesNotAddNull() { var torrent = new Torrent {CreationDate = null}; var result = torrent.ToBDictionary(); result.Should().NotContainKey(TorrentFields.CreationDate); }
public void ToBDictionary_Encoding_AddsToCorrectField() { var torrent = new Torrent {Encoding = Encoding.UTF8}; var result = torrent.ToBDictionary(); result.Should().Contain(TorrentFields.Encoding, (BString)Encoding.UTF8.WebName.ToUpper()); }
public void ToBDictionary_CreatedBy_AddsToCorrectField(string createdBy) { var torrent = new Torrent {CreatedBy = createdBy}; var result = torrent.ToBDictionary(); result.Should().Contain(TorrentFields.CreatedBy, (BString)createdBy); }
public void ToBDictionary_CreationDate_AddsToCorrectField(DateTime creationDate) { var torrent = new Torrent {CreationDate = creationDate}; var result = torrent.ToBDictionary(); result.Should().Contain(TorrentFields.CreationDate, (BNumber)creationDate); }
public void ToBDictionary_Comment_AddsToCorrectField(string comment) { var torrent = new Torrent {Comment = comment }; var result = torrent.ToBDictionary(); result.Should().Contain(TorrentFields.Comment, (BString)comment); }
public void ToBDictionary_Announce_SingleTracker_AddsAnnounceButNotAddAnnounceList() { var torrent = new Torrent { Trackers = new List<IList<string>> { new List<string> { "http://sometracker.com" } } }; var result = torrent.ToBDictionary(); result.Should().ContainKey(TorrentFields.Announce); result.Should().NotContainKey(TorrentFields.AnnounceList); }
public void ToBDictionary_Announce_NoTrackers_DoesNotAddAnnounce() { var torrent = new Torrent { Trackers = new List<IList<string>> { new List<string>() } }; var result = torrent.ToBDictionary(); result.Should().NotContainKey(TorrentFields.Announce); }
/// <summary> /// Calculates the info hash of the torrent. /// The info hash is a 20-byte SHA1 hash of the 'info'-dictionary of the torrent /// used to uniquely identify it and it's contents. /// /// <para>Example: 6D60711ECF005C1147D8973A67F31A11454AB3F5</para> /// </summary> /// <param name="torrent">The torrent to calculate the info hash for.</param> /// <returns>A byte-array of the 20-byte SHA1 hash.</returns> public static byte[] CalculateInfoHashBytes(Torrent torrent) { var info = torrent.ToBDictionary().Get <BDictionary>("info"); return(CalculateInfoHashBytes(info)); }
/// <summary> /// Calculates the info hash of the torrent. /// The info hash is a 20-byte SHA1 hash of the 'info'-dictionary of the torrent /// used to uniquely identify it and it's contents. /// /// <para>Example: 6D60711ECF005C1147D8973A67F31A11454AB3F5</para> /// </summary> /// <param name="torrent">The torrent to calculate the info hash for.</param> /// <returns>A string representation of the 20-byte SHA1 hash without dashes.</returns> public static string CalculateInfoHash(Torrent torrent) { var info = torrent.ToBDictionary().Get <BDictionary>("info"); return(CalculateInfoHash(info)); }