public void MinimalNzbDataShouldBeParsed() { const string nzbText = @"<nzb xmlns=""http://www.newzbin.com/DTD/2003/nzb""></nzb>"; NzbDocument actualDocument = NzbParser.Parse(nzbText); Assert.Empty(actualDocument.MetaData); Assert.Empty(actualDocument.Files); }
public void InvalidFileDateShouldThrow() { const string nzbText = @" <nzb xmlns=""http://www.newzbin.com/DTD/2003/nzb""> <file date=""1496xxx753""></file> </nzb>"; Assert.Throws <InvalidNzbDataException>(() => NzbParser.Parse(nzbText)); }
public void ValidNzbDataShouldBeParsed(string fileName) { string nzbData = testData.GetEmbeddedFile(fileName).ReadAllText(UsenetEncoding.Default); NzbDocument actualDocument = NzbParser.Parse(nzbData); Assert.Equal("Your File!", actualDocument.MetaData["title"].Single()); Assert.Equal("secret", actualDocument.MetaData["password"].Single()); Assert.Equal("HD", actualDocument.MetaData["tag"].Single()); Assert.Equal("TV", actualDocument.MetaData["category"].Single()); Assert.Equal(106895, actualDocument.Size); }
public void FileShouldBeExtractedFromSubjectWhenQuoted() { const string nzbText = @" <nzb xmlns=""http://www.newzbin.com/DTD/2003/nzb""> <file subject=""(TWD151 - 153)[2 / 9] - "TWD151 - 153.rar" yEnc (001 / 249)""></file> </nzb>"; NzbDocument actualDocument = NzbParser.Parse(nzbText); Assert.Equal("TWD151 - 153.rar", actualDocument.Files.Single().FileName); }
public void FileShouldBeExtractedFromSubjectWhenNotQuotedAndNoParenthesis() { const string nzbText = @" <nzb xmlns=""http://www.newzbin.com/DTD/2003/nzb""> <file subject=""[2 / 9] - TWD151 - 153.rar yEnc""></file> </nzb>"; NzbDocument actualDocument = NzbParser.Parse(nzbText); Assert.Equal("[2 / 9] - TWD151 - 153.rar", actualDocument.Files.Single().FileName); }
public void FileDateShouldBeParsed() { DateTimeOffset expected = DateTimeOffset.Parse(@"2017-06-01T06:49:13+00:00"); const string nzbText = @" <nzb xmlns=""http://www.newzbin.com/DTD/2003/nzb""> <file date=""1496299753""></file> </nzb>"; NzbDocument actualDocument = NzbParser.Parse(nzbText); Assert.Equal(expected, actualDocument.Files[0].Date); }
public void MissingSegmentSizeShouldThrow() { const string nzbText = @" <nzb xmlns=""http://www.newzbin.com/DTD/2003/nzb""> <file> <segments> <segment number=""1""></segment> </segments> </file> </nzb>"; Assert.Throws <InvalidNzbDataException>(() => NzbParser.Parse(nzbText)); }
private static void TestDownloadNzbStreaming(NntpClient client, string nzbFileName) { string fullPath = Path.Combine(nzbFileName); string nzbData = File.ReadAllText(fullPath, UsenetEncoding.Default); NzbDocument nzbDocument = NzbParser.Parse(nzbData); string downloadDir = Path.Combine("downloads", nzbFileName); Directory.CreateDirectory(downloadDir); var sw = new Stopwatch(); sw.Restart(); log.LogInformation("Downloading nzb {nzbFileName}", nzbFileName); foreach (NzbFile file in nzbDocument.Files) { log.LogInformation("Downloading file {subject}", file.Subject); foreach (NzbSegment segment in file.Segments) { log.LogInformation("Downloading article {messageId}", segment.MessageId); NntpArticleResponse response = client.Article(segment.MessageId); using (YencStream yencStream = YencStreamDecoder.Decode(response.Article.Body)) { YencHeader header = yencStream.Header; string fileName = Path.Combine(downloadDir, header.FileName); if (!File.Exists(fileName)) { log.LogInformation("Creating file {fileName}", fileName); // create file and pre-allocate disk space for it using (FileStream stream = File.Create(fileName)) { stream.SetLength(header.FileSize); } } log.LogInformation("Writing {size} bytes to file {fileName} at offset {offset}", header.PartSize, fileName, header.PartOffset); using (FileStream stream = File.Open( fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite)) { stream.Seek(header.PartOffset, SeekOrigin.Begin); yencStream.CopyTo(stream); } } } } log.LogInformation("Nzb downloaded in {elapsed}", sw.Elapsed); }
public void MultipleMetaDataKeysShouldBeParsed() { const string nzbText = @" <nzb xmlns=""http://www.newzbin.com/DTD/2003/nzb""> <head> <meta type=""tag"">SD</meta> <meta type=""tag"">avi</meta> </head> </nzb>"; NzbDocument actualDocument = NzbParser.Parse(nzbText); Assert.Single(actualDocument.MetaData); Assert.Equal(2, actualDocument.MetaData["tag"].Count); Assert.NotNull(actualDocument.MetaData["tag"].SingleOrDefault(m => m == "SD")); Assert.NotNull(actualDocument.MetaData["tag"].SingleOrDefault(m => m == "avi")); }
public void ShouldWriteDocumentToFile(string fileName) { IFileInfo file = testData.GetEmbeddedFile(fileName); NzbDocument expected = NzbParser.Parse(file.ReadAllText(UsenetEncoding.Default)); using var stream = new MemoryStream(); using var writer = new StreamWriter(stream, UsenetEncoding.Default); using var reader = new StreamReader(stream, UsenetEncoding.Default); // write to file and read back for comparison writer.WriteNzbDocument(expected); stream.Position = 0; NzbDocument actual = NzbParser.Parse(reader.ReadToEnd()); // compare Assert.Equal(expected, actual); }
public void InvalidNzbShouldThrow() { const string nzbText = @"<html></html>"; Assert.Throws <InvalidNzbDataException>(() => NzbParser.Parse(nzbText)); }
public void InvalidXmlShouldThrow() { const string nzbText = @"sdfsfasfasdfasdf"; Assert.Throws <XmlException>(() => NzbParser.Parse(nzbText)); }