1import os 2import shutil 3import subprocess 4import pytest 5 6@pytest.fixture(scope='session', autouse=True) 7def prepare_testdata(request): 8 print('Preparing test data for "rename"') 9 pytest.check_config() 10 11 nserv_datadir = pytest.config.getini('nserv_datadir') 12 nzbget_bin = pytest.config.getini('nzbget_bin') 13 sevenzip_bin = pytest.config.getini('sevenzip_bin') 14 par2_bin = pytest.config.getini('par2_bin') 15 16 if not os.path.exists(nserv_datadir): 17 print('Creating nserv datadir') 18 os.makedirs(nserv_datadir) 19 20 nzbget_srcdir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) 21 testdata_dir = nzbget_srcdir + '/tests/testdata' 22 23 if not os.path.exists(nserv_datadir + '/parrename'): 24 os.makedirs(nserv_datadir + '/parrename') 25 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part01.rar', nserv_datadir + '/parrename/testfile3.part01.rar') 26 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part02.rar', nserv_datadir + '/parrename/testfile3.part02.rar') 27 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part03.rar', nserv_datadir + '/parrename/testfile3.part03.rar') 28 os.chdir(nserv_datadir + '/parrename') 29 if 0 != subprocess.call([par2_bin, 'c', '-b20', 'parrename.par2', '*']): 30 pytest.exit('Test file generation failed') 31 os.rename(nserv_datadir + '/parrename/testfile3.part01.rar', nserv_datadir + '/parrename/abc.21') 32 os.rename(nserv_datadir + '/parrename/testfile3.part02.rar', nserv_datadir + '/parrename/abc.02') 33 os.rename(nserv_datadir + '/parrename/testfile3.part03.rar', nserv_datadir + '/parrename/abc.15') 34 35 def prepare_test(dirname, testfile): 36 if not os.path.exists(nserv_datadir + '/' + dirname + '.nzb'): 37 os.makedirs(nserv_datadir + '/' + dirname) 38 shutil.copyfile(testdata_dir + '/rarrenamer/' + testfile + '.part01.rar', nserv_datadir + '/' + dirname + '/abc.21') 39 shutil.copyfile(testdata_dir + '/rarrenamer/' + testfile + '.part02.rar', nserv_datadir + '/' + dirname + '/abc.02') 40 shutil.copyfile(testdata_dir + '/rarrenamer/' + testfile + '.part03.rar', nserv_datadir + '/' + dirname + '/abc.15') 41 os.chdir(nserv_datadir + '/' + dirname) 42 if 0 != subprocess.call([par2_bin, 'c', '-b20', 'parrename.par2', '*']): 43 pytest.exit('Test file generation failed') 44 45 prepare_test('rarrename3', 'testfile3') 46 prepare_test('rarrename5', 'testfile5') 47 prepare_test('rarrename3encdata', 'testfile3encdata') 48 prepare_test('rarrename5encdata', 'testfile5encdata') 49 prepare_test('rarrename3encnam', 'testfile3encnam') 50 prepare_test('rarrename5encnam', 'testfile5encnam') 51 52 if not os.path.exists(nserv_datadir + '/rarrename2sets'): 53 os.makedirs(nserv_datadir + '/rarrename2sets') 54 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part01.rar', nserv_datadir + '/rarrename2sets/abc.21') 55 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part02.rar', nserv_datadir + '/rarrename2sets/abc.02') 56 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part03.rar', nserv_datadir + '/rarrename2sets/abc.15') 57 shutil.copyfile(testdata_dir + '/rarrenamer/testfile5.part01.rar', nserv_datadir + '/rarrename2sets/abc.22') 58 shutil.copyfile(testdata_dir + '/rarrenamer/testfile5.part02.rar', nserv_datadir + '/rarrename2sets/abc.03') 59 shutil.copyfile(testdata_dir + '/rarrenamer/testfile5.part03.rar', nserv_datadir + '/rarrename2sets/abc.14') 60 61 if not os.path.exists(nserv_datadir + '/rarrename3oldnam'): 62 os.makedirs(nserv_datadir + '/rarrename3oldnam') 63 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.rar', nserv_datadir + '/rarrename3oldnam/abc.61') 64 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.r00', nserv_datadir + '/rarrename3oldnam/abc.32') 65 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.r01', nserv_datadir + '/rarrename3oldnam/abc.45') 66 67 if not os.path.exists(nserv_datadir + '/rarrename3badext'): 68 os.makedirs(nserv_datadir + '/rarrename3badext') 69 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.rar', nserv_datadir + '/rarrename3badext/testfile3oldnam.rar') 70 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.r00', nserv_datadir + '/rarrename3badext/testfile3oldnam.r03') 71 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.r01', nserv_datadir + '/rarrename3badext/testfile3oldnam.r02') 72 73 if not os.path.exists(nserv_datadir + '/rarrename5badext'): 74 os.makedirs(nserv_datadir + '/rarrename5badext') 75 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part01.rar', nserv_datadir + '/rarrename5badext/testfile3.part01.rar') 76 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part02.rar', nserv_datadir + '/rarrename5badext/testfile3.part0002.rar') 77 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part03.rar', nserv_datadir + '/rarrename5badext/testfile3.part03.rar') 78 79 if not os.path.exists(nserv_datadir + '/rar3ignoreext'): 80 os.makedirs(nserv_datadir + '/rar3ignoreext') 81 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part01.rar', nserv_datadir + '/rar3ignoreext/testfile3-1.cbr') 82 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part02.rar', nserv_datadir + '/rar3ignoreext/testfile3-2.cbr') 83 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3.part03.rar', nserv_datadir + '/rar3ignoreext/testfile3-3.cbr') 84 85 if not os.path.exists(nserv_datadir + '/parjoin1.nzb'): 86 os.makedirs(nserv_datadir + '/parjoin1') 87 shutil.copyfile(testdata_dir + '/parchecker/testfile.dat', nserv_datadir + '/parjoin1/testfile.dat') 88 shutil.copyfile(testdata_dir + '/parchecker/testfile.nfo', nserv_datadir + '/parjoin1/testfile.nfo') 89 shutil.copyfile(testdata_dir + '/parchecker/testfile.par2', nserv_datadir + '/parjoin1/testfile.par2') 90 shutil.copyfile(testdata_dir + '/parchecker/testfile.vol00+1.PAR2', nserv_datadir + '/parjoin1/testfile.vol00+1.PAR2') 91 split_test_file(nserv_datadir + '/parjoin1', 'testfile.dat', 50244); 92 93 if not os.path.exists(nserv_datadir + '/parjoin2.nzb'): 94 os.makedirs(nserv_datadir + '/parjoin2') 95 shutil.copyfile(testdata_dir + '/parchecker/testfile.dat', nserv_datadir + '/parjoin2/testfile.dat') 96 shutil.copyfile(testdata_dir + '/parchecker/testfile.nfo', nserv_datadir + '/parjoin2/testfile.nfo') 97 shutil.copyfile(testdata_dir + '/parchecker/testfile.par2', nserv_datadir + '/parjoin2/testfile.par2') 98 shutil.copyfile(testdata_dir + '/parchecker/testfile.vol00+1.PAR2', nserv_datadir + '/parjoin2/testfile.vol00+1.PAR2') 99 split_test_file(nserv_datadir + '/parjoin2', 'testfile.dat', 50244); 100 os.rename(nserv_datadir + '/parjoin2/testfile.dat.001', nserv_datadir + '/parjoin2/renamed.001') 101 os.rename(nserv_datadir + '/parjoin2/testfile.dat.002', nserv_datadir + '/parjoin2/renamed.002') 102 os.rename(nserv_datadir + '/parjoin2/testfile.dat.003', nserv_datadir + '/parjoin2/renamed.003') 103 104 if 0 != subprocess.call([nzbget_bin, '--nserv', '-d', nserv_datadir, '-v', '2', '-z', '3000', '-q']): 105 pytest.exit('Test file generation failed') 106 107 if not os.path.exists(nserv_datadir + '/parjoin3.nzb'): 108 os.makedirs(nserv_datadir + '/parjoin3') 109 create_test_file(nserv_datadir + '/parjoin3', None, 20, 1) 110 os.chdir(nserv_datadir + '/parjoin3') 111 if 0 != subprocess.call([par2_bin, 'c', '-b100', 'parrename.par2', '*']): 112 pytest.exit('Test file generation failed') 113 split_test_file(nserv_datadir + '/parjoin3', '20mb.dat', 7*1024*1024); 114 os.rename(nserv_datadir + '/parjoin3/20mb.dat.001', nserv_datadir + '/parjoin3/renamed.001') 115 os.rename(nserv_datadir + '/parjoin3/20mb.dat.002', nserv_datadir + '/parjoin3/renamed.002') 116 os.rename(nserv_datadir + '/parjoin3/20mb.dat.003', nserv_datadir + '/parjoin3/renamed.003') 117 if 0 != subprocess.call([nzbget_bin, '--nserv', '-d', nserv_datadir, '-v', '2', '-z', '100000', '-q']): 118 pytest.exit('Test file generation failed') 119 120 if not os.path.exists(nserv_datadir + '/rarrename3sm'): 121 os.makedirs(nserv_datadir + '/rarrename3sm') 122 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.rar', nserv_datadir + '/rarrename3sm/abc.61') 123 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.r00', nserv_datadir + '/rarrename3sm/abc.32') 124 shutil.copyfile(testdata_dir + '/rarrenamer/testfile3oldnam.r01', nserv_datadir + '/rarrename3sm/abc.45') 125 os.chdir(nserv_datadir + '/rarrename3sm') 126 if 0 != subprocess.call([par2_bin, 'c', '-b100', 'parrename.par2', '*']): 127 pytest.exit('Test file generation failed') 128 if 0 != subprocess.call([nzbget_bin, '--nserv', '-d', nserv_datadir, '-v', '2', '-z', '500', '-q']): 129 pytest.exit('Test file generation failed') 130 131 if not os.path.exists(nserv_datadir + '/obfuscated1.nzb'): 132 create_test_file(nserv_datadir + '/obfuscated1', sevenzip_bin, 5, 1) 133 os.chdir(nserv_datadir + '/obfuscated1') 134 if 0 != subprocess.call([par2_bin, 'c', '-b100', 'parrename.par2', '*']): 135 pytest.exit('Test file generation failed') 136 os.rename(nserv_datadir + '/obfuscated1/5mb.7z.001', nserv_datadir + '/obfuscated1/abc.51') 137 os.rename(nserv_datadir + '/obfuscated1/5mb.7z.002', nserv_datadir + '/obfuscated1/abc.01') 138 os.rename(nserv_datadir + '/obfuscated1/5mb.7z.003', nserv_datadir + '/obfuscated1/abc.21') 139 os.rename(nserv_datadir + '/obfuscated1/5mb.7z.004', nserv_datadir + '/obfuscated1/abc.34') 140 os.rename(nserv_datadir + '/obfuscated1/5mb.7z.005', nserv_datadir + '/obfuscated1/abc.17') 141 os.rename(nserv_datadir + '/obfuscated1/5mb.7z.006', nserv_datadir + '/obfuscated1/abc.00') 142 if 0 != subprocess.call([nzbget_bin, '--nserv', '-d', nserv_datadir, '-v', '2', '-z', '100000', '-q']): 143 pytest.exit('Test file generation failed') 144 145 if not os.path.exists(nserv_datadir + '/obfuscated2.nzb'): 146 create_test_file(nserv_datadir + '/obfuscated2', sevenzip_bin, 5, 1) 147 os.chdir(nserv_datadir + '/obfuscated2') 148 if 0 != subprocess.call([par2_bin, 'c', '-b100', 'parrename.par2', '*']): 149 pytest.exit('Test file generation failed') 150 os.rename(nserv_datadir + '/obfuscated2/5mb.7z.001', nserv_datadir + '/obfuscated2/abc.51') 151 os.rename(nserv_datadir + '/obfuscated2/5mb.7z.002', nserv_datadir + '/obfuscated2/abc.01') 152 os.rename(nserv_datadir + '/obfuscated2/5mb.7z.003', nserv_datadir + '/obfuscated2/abc.21') 153 os.rename(nserv_datadir + '/obfuscated2/5mb.7z.004', nserv_datadir + '/obfuscated2/abc.34') 154 os.rename(nserv_datadir + '/obfuscated2/5mb.7z.005', nserv_datadir + '/obfuscated2/abc.17') 155 os.rename(nserv_datadir + '/obfuscated2/5mb.7z.006', nserv_datadir + '/obfuscated2/abc.00') 156 os.rename(nserv_datadir + '/obfuscated2/parrename.par2', nserv_datadir + '/obfuscated2/abc.90') 157 os.rename(nserv_datadir + '/obfuscated2/parrename.vol0+1.par2', nserv_datadir + '/obfuscated2/abc.95') 158 os.rename(nserv_datadir + '/obfuscated2/parrename.vol1+2.par2', nserv_datadir + '/obfuscated2/abc.91') 159 os.rename(nserv_datadir + '/obfuscated2/parrename.vol3+2.par2', nserv_datadir + '/obfuscated2/abc.92') 160 if 0 != subprocess.call([nzbget_bin, '--nserv', '-d', nserv_datadir, '-v', '2', '-z', '100000', '-q']): 161 pytest.exit('Test file generation failed') 162 163 if not os.path.exists(nserv_datadir + '/obfuscated3.nzb'): 164 create_test_file(nserv_datadir + '/obfuscated3', sevenzip_bin, 100, 10) 165 os.chdir(nserv_datadir + '/obfuscated3') 166 if 0 != subprocess.call([par2_bin, 'c', '-b100', 'parrename.par2', '*']): 167 pytest.exit('Test file generation failed') 168 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.001', nserv_datadir + '/obfuscated3/abc.51') 169 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.002', nserv_datadir + '/obfuscated3/abc.01') 170 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.003', nserv_datadir + '/obfuscated3/abc.21') 171 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.004', nserv_datadir + '/obfuscated3/abc.34') 172 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.005', nserv_datadir + '/obfuscated3/abc.17') 173 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.006', nserv_datadir + '/obfuscated3/abc.60') 174 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.007', nserv_datadir + '/obfuscated3/abc.32') 175 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.008', nserv_datadir + '/obfuscated3/abc.35') 176 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.009', nserv_datadir + '/obfuscated3/abc.41') 177 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.010', nserv_datadir + '/obfuscated3/abc.50') 178 os.rename(nserv_datadir + '/obfuscated3/100mb.7z.011', nserv_datadir + '/obfuscated3/abc.43') 179 os.rename(nserv_datadir + '/obfuscated3/parrename.par2', nserv_datadir + '/obfuscated3/abc.00') 180 os.rename(nserv_datadir + '/obfuscated3/parrename.vol0+1.par2', nserv_datadir + '/obfuscated3/abc.02') 181 os.rename(nserv_datadir + '/obfuscated3/parrename.vol1+2.par2', nserv_datadir + '/obfuscated3/abc.91') 182 os.rename(nserv_datadir + '/obfuscated3/parrename.vol3+2.par2', nserv_datadir + '/obfuscated3/abc.92') 183 if 0 != subprocess.call([nzbget_bin, '--nserv', '-d', nserv_datadir, '-v', '2', '-z', '100000', '-q']): 184 pytest.exit('Test file generation failed') 185 186def create_test_file(bigdir, sevenzip_bin, sizemb, partmb): 187 print('Preparing test file (' + str(sizemb) + 'MB)') 188 189 if not os.path.exists(bigdir): 190 os.makedirs(bigdir) 191 192 f = open(bigdir + '/' + str(sizemb) + 'mb.dat', 'wb') 193 for n in xrange(sizemb / partmb): 194 print('Writing block %i from %i' % (n + 1, sizemb / partmb)) 195 f.write(os.urandom(partmb * 1024 * 1024)) 196 f.close() 197 198 if sevenzip_bin != None: 199 if 0 != subprocess.call([sevenzip_bin, 'a', bigdir + '/' + str(sizemb) + 'mb.7z', '-mx=0', '-v' + str(partmb) + 'm', bigdir + '/' + str(sizemb) + 'mb.dat']): 200 pytest.exit('Test file generation failed') 201 202 os.remove(bigdir + '/' + str(sizemb) + 'mb.dat') 203 204def split_test_file(filedir, filename, partsize): 205 print('Splitting test file ' + filename) 206 207 inp = open(filedir + '/' + filename, 'rb') 208 inp.seek(0,2) # move the cursor to the end of the file 209 size = inp.tell() 210 inp.seek(0,0) # move the cursor to the start of the file 211 212 written = 0 213 part = 1 214 while (written < size): 215 block = inp.read(partsize) 216 written += partsize 217 f = open(filedir + '/' + filename + '.' + str(part).zfill(3), 'wb') 218 f.write(block) 219 f.close() 220 part += 1 221 inp.close() 222 223 os.remove(filedir + '/' + filename) 224