curds: Add a test for parallel track scanning
And add code for generating a large test library to make stress testing possible. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
9b64c590cc
commit
0705f86d81
1
Makefile
1
Makefile
|
@ -3,6 +3,7 @@
|
||||||
clean:
|
clean:
|
||||||
find . -type d -name __pycache__ -exec rm -r {} \+
|
find . -type d -name __pycache__ -exec rm -r {} \+
|
||||||
find trier -type d -name "Test Album" -exec rm -r {} \+
|
find trier -type d -name "Test Album" -exec rm -r {} \+
|
||||||
|
find trier -type d -name "Test Library" -exec rm -r {} \+
|
||||||
|
|
||||||
.PHONY: trier
|
.PHONY: trier
|
||||||
trier:
|
trier:
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
# Copyright 2019 (c) Anna Schumaker.
|
# Copyright 2019 (c) Anna Schumaker.
|
||||||
|
import asyncio
|
||||||
|
import concurrent.futures
|
||||||
import mutagen
|
import mutagen
|
||||||
import unittest
|
import unittest
|
||||||
import os
|
import os
|
||||||
import track
|
import track
|
||||||
|
|
||||||
test_tracks = os.path.abspath("./trier/Test Album")
|
test_tracks = os.path.abspath("./trier/Test Album")
|
||||||
|
test_library = os.path.abspath("./trier/Test Library")
|
||||||
|
|
||||||
class TestTrackClass(unittest.TestCase):
|
class TestTrackClass(unittest.TestCase):
|
||||||
def test_init_basic(self):
|
def test_init_basic(self):
|
||||||
|
@ -50,6 +53,7 @@ class TestTrackClass(unittest.TestCase):
|
||||||
self.assertEqual(track.Track(join(test_tracks, "10 - Test {Disc 20}.ogg")).discnumber, 20)
|
self.assertEqual(track.Track(join(test_tracks, "10 - Test {Disc 20}.ogg")).discnumber, 20)
|
||||||
|
|
||||||
def test_track_add(self):
|
def test_track_add(self):
|
||||||
|
track.tracklist.clear()
|
||||||
t = track.add(os.path.join(test_tracks, "01 - Test Track.ogg"))
|
t = track.add(os.path.join(test_tracks, "01 - Test Track.ogg"))
|
||||||
self.assertIsNotNone(t)
|
self.assertIsNotNone(t)
|
||||||
self.assertEqual(len(track.tracklist), 1)
|
self.assertEqual(len(track.tracklist), 1)
|
||||||
|
@ -65,5 +69,19 @@ class TestTrackClass(unittest.TestCase):
|
||||||
self.assertEqual(len(track.tracklist), 2)
|
self.assertEqual(len(track.tracklist), 2)
|
||||||
self.assertIn(u, track.tracklist)
|
self.assertIn(u, track.tracklist)
|
||||||
|
|
||||||
|
def test_parallel_add(self):
|
||||||
|
track.tracklist.clear()
|
||||||
|
count = 0
|
||||||
|
tracks = [ ]
|
||||||
|
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as pool:
|
||||||
|
for dirname, subdirs, files in os.walk(test_library):
|
||||||
|
for f in files:
|
||||||
|
tracks.append(pool.submit(track.add, os.path.join(dirname, f)))
|
||||||
|
count += 1
|
||||||
|
self.assertEqual(len(track.tracklist), count)
|
||||||
|
self.assertEqual(len(tracks), count)
|
||||||
|
for t in tracks:
|
||||||
|
self.assertIsNotNone(t)
|
||||||
|
|
||||||
if __name__ == '__main--':
|
if __name__ == '__main--':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -8,6 +8,8 @@ ffmpeg = "ffmpeg -hide_banner -nostdin -f s16le -i /dev/zero -codec libvorbis -l
|
||||||
|
|
||||||
def generate_track(length, filename, tags={}):
|
def generate_track(length, filename, tags={}):
|
||||||
path = os.path.join(trier, filename)
|
path = os.path.join(trier, filename)
|
||||||
|
if os.path.exists(path):
|
||||||
|
return
|
||||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||||
subprocess.run(ffmpeg + [ "-t", str(length), path ])
|
subprocess.run(ffmpeg + [ "-t", str(length), path ])
|
||||||
|
|
||||||
|
@ -16,6 +18,7 @@ def generate_track(length, filename, tags={}):
|
||||||
fileinfo[key] = value
|
fileinfo[key] = value
|
||||||
fileinfo.save()
|
fileinfo.save()
|
||||||
|
|
||||||
|
# Create a bunch of tracks in the Test Album directory
|
||||||
generate_track( 0, "Test Album/00 - Empty Track.ogg")
|
generate_track( 0, "Test Album/00 - Empty Track.ogg")
|
||||||
generate_track(10, "Test Album/01 - Test Track.ogg", { "title" : "Test Track",
|
generate_track(10, "Test Album/01 - Test Track.ogg", { "title" : "Test Track",
|
||||||
"artist" : "Test Artist",
|
"artist" : "Test Artist",
|
||||||
|
@ -43,3 +46,18 @@ generate_track(50, "Test Album/09 - Test {Disc 02}.ogg", { "Title" : "Test {Disc
|
||||||
"album" : "Test Album {Disc 02}" })
|
"album" : "Test Album {Disc 02}" })
|
||||||
generate_track(55, "Test Album/10 - Test {Disc 20}.ogg", { "Title" : "Test {Disc 20}",
|
generate_track(55, "Test Album/10 - Test {Disc 20}.ogg", { "Title" : "Test {Disc 20}",
|
||||||
"album" : "Test Album {Disc 20}" })
|
"album" : "Test Album {Disc 20}" })
|
||||||
|
|
||||||
|
# Create a giant library for testing
|
||||||
|
for artistno in range(1, 26):
|
||||||
|
artist = f"Test Artist {artistno:02}"
|
||||||
|
for albumno in range(1, 6):
|
||||||
|
album = f"Test Album {albumno}"
|
||||||
|
for trackno in range(1, 11):
|
||||||
|
title = f"Test Track {trackno:02}"
|
||||||
|
generate_track(trackno, f"Test Library/{artist}/{album}/{trackno:02} - {title}.ogg",
|
||||||
|
{ "title" : title,
|
||||||
|
"artist" : artist,
|
||||||
|
"album" : album,
|
||||||
|
"genre" : f"Test Genre {albumno}",
|
||||||
|
"date" : str(1970 + (albumno * 3)),
|
||||||
|
"tracknumber" : f"{trackno:02}" })
|
||||||
|
|
Loading…
Reference in New Issue