public void SameNumberOfHashBinsIsInsertedInAllTablesWhenFingerprintingEntireSongTest() { const int StaticStride = 5115; TagInfo tagInfo = tagService.GetTagInfo(PathToMp3); int releaseYear = tagInfo.Year; TrackData track = new TrackData(tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration); var trackReference = TrackDao.InsertTrack(track); var hashData = fingerprintCommandBuilder .BuildFingerprintCommand() .From(PathToMp3) .WithFingerprintConfig(config => { config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .UsingServices(audioService) .Hash() .Result; InsertHashDataForTrack(hashData, trackReference); var hashes = HashBinDao.ReadHashDataByTrackReference(track.TrackReference); Assert.AreEqual(hashData.Count, hashes.Count); foreach (var data in hashes) { Assert.AreEqual(25, data.HashBins.Length); } }
public void SameNumberOfHashBinsIsInsertedInAllTablesWhenFingerprintingEntireSongTest() { const int StaticStride = 5115; TagInfo tagInfo = tagService.GetTagInfo(PathToMp3); int releaseYear = tagInfo.Year; TrackData track = new TrackData(tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration); int trackId = TrackDao.Insert(track); var hashData = fingerprintCommandBuilder .BuildFingerprintCommand() .From(PathToMp3) .WithFingerprintConfig(config => { config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .Hash() .Result; foreach (var hash in hashData) { long subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, trackId); HashBinDao.Insert(hash.HashBins, subFingerprintId); } for (int hashTable = 1; hashTable <= 25; hashTable++) { var hashBins = HashBinDao.ReadHashBinsByHashTable(hashTable); Assert.AreEqual(hashData.Count, hashBins.Count); } }
public void InsertMultipleTrackAtOnceTest() { string name = MethodBase.GetCurrentMethod().Name; List <TrackData> tracks = new List <TrackData>(); const int TrackCount = 100; for (int i = 0; i < TrackCount; i++) { var track = GetTrack(name); tracks.Add(track); TrackDao.Insert(track); } foreach (var track in tracks) { Assert.IsNotNull(track.TrackReference); Assert.IsFalse(track.TrackReference.HashCode == 0); } var actualTracks = TrackDao.ReadAll(); Assert.AreEqual(tracks.Count, actualTracks.Count); for (int i = 0; i < actualTracks.Count; i++) { AssertTracksAreEqual( tracks[i], actualTracks.First(track => track.TrackReference.HashCode == tracks[i].TrackReference.HashCode)); } }
public void SetUp() { var ramStorage = new RAMStorage(NumberOfHashTables); HashBinDao = new HashBinDao(ramStorage); TrackDao = new TrackDao(ramStorage); SubFingerprintDao = new SubFingerprintDao(ramStorage); }
public void InsertTrackTest() { var track = GetTrack(); var trackReference = TrackDao.InsertTrack(track); AssertModelReferenceIsInitialized(trackReference); AssertModelReferenceIsInitialized(track.TrackReference); }
public void DeleteOneTrackTest() { TrackData track = GetTrack(); var trackReference = TrackDao.InsertTrack(track); TrackDao.DeleteTrack(trackReference); Assert.IsNull(TrackDao.ReadTrack(trackReference)); }
public void DeleteOneTrackTest() { string name = MethodBase.GetCurrentMethod().Name; TrackData track = GetTrack(name); int trackId = TrackDao.Insert(track); TrackDao.DeleteTrack(trackId); Assert.IsNull(TrackDao.ReadById(trackId)); }
public void ReadTrackByISRCTest() { TrackData expectedTrack = GetTrack(); TrackDao.InsertTrack(expectedTrack); TrackData actualTrack = TrackDao.ReadTrackByISRC(expectedTrack.ISRC); AssertTracksAreEqual(expectedTrack, actualTrack); }
public void InserTrackShouldAcceptEmptyEntriesCodes() { TrackData track = new TrackData(string.Empty, string.Empty, string.Empty, string.Empty, 1986, 200); var trackReference = TrackDao.InsertTrack(track); var actualTrack = TrackDao.ReadTrack(trackReference); AssertModelReferenceIsInitialized(trackReference); AssertTracksAreEqual(track, actualTrack); }
public void InsertTrackTest() { string name = MethodBase.GetCurrentMethod().Name; var track = GetTrack(name); TrackDao.Insert(track); Assert.IsFalse(track.TrackReference.HashCode == 0); Assert.IsTrue(track.TrackReference is ModelReference <int>); Assert.IsFalse(((ModelReference <int>)track.TrackReference).Id == 0); }
public void InserTrackShouldAcceptEmptyEntriesCodes() { TrackData track = new TrackData(string.Empty, string.Empty, string.Empty, string.Empty, 1986, 200); var trackReference = TrackDao.Insert(track); var actualTrack = TrackDao.ReadById(trackReference.GetHashCode()); Assert.IsNotNull(trackReference); AssertTracksAreEqual(track, actualTrack); }
public TrackDaoFact() { tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetTempFileName()); File.Delete(tempDirectory); Directory.CreateDirectory(tempDirectory); context = new DatabaseContext(tempDirectory, new LMDBConfiguration()); trackDao = new TrackDao(context); subFingerprintDao = new SubFingerprintDao(context); }
public void ReadTrackByISRCTest() { string name = MethodBase.GetCurrentMethod().Name; TrackData expectedTrack = GetTrack(name); TrackDao.Insert(expectedTrack); TrackData actualTrack = TrackDao.ReadTrackByISRC(expectedTrack.ISRC); AssertTracksAreEqual(expectedTrack, actualTrack); }
public void ReadByIdTest() { var track = new TrackData("isrc", "artist", "title", "album", 2012, 200) { GroupId = "group-id" }; var trackReference = TrackDao.InsertTrack(track); AssertTracksAreEqual(track, TrackDao.ReadTrack(trackReference)); }
public void ReadTrackByArtistAndTitleTest() { TrackData track = GetTrack(); TrackDao.InsertTrack(track); var tracks = TrackDao.ReadTrackByArtistAndTitleName(track.Artist, track.Title); Assert.IsNotNull(tracks); Assert.IsTrue(tracks.Count == 1); AssertTracksAreEqual(track, tracks[0]); }
public void ReadByTrackGroupIdWorksAsExpectedTest() { const int StaticStride = 5115; TagInfo tagInfo = tagService.GetTagInfo(PathToMp3); int releaseYear = tagInfo.Year; TrackData firstTrack = new TrackData( tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration) { GroupId = "first-group-id" }; TrackData secondTrack = new TrackData( tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration) { GroupId = "second-group-id" }; int firstTrackId = TrackDao.Insert(firstTrack); int secondTrackId = TrackDao.Insert(secondTrack); var firstHashData = fingerprintCommandBuilder .BuildFingerprintCommand() .From(PathToMp3, 20, 0) .WithFingerprintConfig(config => { config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .Hash() .Result; foreach (var hash in firstHashData) { long subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, firstTrackId); HashBinDao.Insert(hash.HashBins, subFingerprintId); subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, secondTrackId); HashBinDao.Insert(hash.HashBins, subFingerprintId); } foreach (var hashData in firstHashData) { var subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashData.HashBins, 25, "first-group-id").ToList(); Assert.IsTrue(subFingerprintData.Count == 1); Assert.AreEqual(firstTrackId, subFingerprintData[0].TrackReference.HashCode); subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashData.HashBins, 25, "second-group-id").ToList(); Assert.IsTrue(subFingerprintData.Count == 1); Assert.AreEqual(secondTrackId, subFingerprintData[0].TrackReference.HashCode); subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsWithThreshold(hashData.HashBins, 25).ToList(); Assert.AreEqual(2, subFingerprintData.Count); } }
public void ReadByIdTest() { var track = new TrackData("isrc", "artist", "title", "album", 2012, 200) { GroupId = "group-id" }; int id = TrackDao.Insert(track); var actualTrack = TrackDao.ReadById(id); AssertTracksAreEqual(track, actualTrack); }
public virtual int DeleteTrack(string trackId) { var track = TrackDao.ReadTrackById(trackId); if (track == null) { return(0); } var trackReference = track.TrackReference; return(SubFingerprintDao.DeleteSubFingerprintsByTrackReference(trackReference) + TrackDao.DeleteTrack(trackReference)); }
public void ReadTrackByArtistAndTitleTest() { string name = MethodBase.GetCurrentMethod().Name; TrackData track = GetTrack(name); TrackDao.Insert(track); IList <TrackData> tracks = TrackDao.ReadTrackByArtistAndTitleName(track.Artist, track.Title); Assert.IsNotNull(tracks); Assert.IsTrue(tracks.Count == 1); AssertTracksAreEqual(track, tracks[0]); }
public void InsertReadTest() { TrackData track = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = TrackDao.InsertTrack(track); const int NumberOfHashBins = 100; var hashData = Enumerable.Range(0, NumberOfHashBins).Select(i => new HashData(GenericSignature, GenericHashBuckets)); InsertHashDataForTrack(hashData, trackReference); var hashDatas = HashBinDao.ReadHashDataByTrackReference(track.TrackReference); Assert.AreEqual(NumberOfHashBins, hashDatas.Count); }
public virtual void Insert(TrackInfo trackInfo, Hashes hashes) { var fingerprints = hashes.ToList(); if (!fingerprints.Any()) { return; } var trackReference = TrackDao.InsertTrack(trackInfo, hashes.DurationInSeconds).TrackReference; SubFingerprintDao.InsertHashDataForTrack(fingerprints, trackReference); }
private List <TrackData> InsertTracks(int trackCount) { var tracks = new List <TrackData>(); for (int i = 0; i < trackCount; i++) { var track = GetTrack(); tracks.Add(track); TrackDao.InsertTrack(track); } return(tracks); }
public void ReadAllTracksTest() { const int TrackCount = 5; var expectedTracks = InsertTracks(TrackCount); var tracks = TrackDao.ReadAll(); Assert.IsTrue(tracks.Count == TrackCount); foreach (var expectedTrack in expectedTracks) { Assert.IsTrue(tracks.Any(track => track.ISRC == expectedTrack.ISRC)); } }
public void ReadByTrackGroupIdWorksAsExpectedTest() { const int StaticStride = 5115; TagInfo tagInfo = this.GetTagInfo(); int releaseYear = tagInfo.Year; TrackData firstTrack = new TrackData( tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration) { GroupId = "first-group-id" }; TrackData secondTrack = new TrackData( tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration) { GroupId = "second-group-id" }; var firstTrackReference = TrackDao.InsertTrack(firstTrack); var secondTrackReference = TrackDao.InsertTrack(secondTrack); var hashedFingerprints = fingerprintCommandBuilder .BuildFingerprintCommand() .From(PathToMp3, 20, 0) .WithFingerprintConfig(config => { config.SpectrogramConfig.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .UsingServices(audioService) .Hash() .Result; InsertHashedFingerprintsForTrack(hashedFingerprints, firstTrackReference); InsertHashedFingerprintsForTrack(hashedFingerprints, secondTrackReference); const int ThresholdVotes = 25; foreach (var hashedFingerprint in hashedFingerprints) { var subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashedFingerprint.HashBins, ThresholdVotes, "first-group-id").ToList(); Assert.IsTrue(subFingerprintData.Count == 1); Assert.AreEqual(firstTrackReference, subFingerprintData[0].TrackReference); subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashedFingerprint.HashBins, ThresholdVotes, "second-group-id").ToList(); Assert.IsTrue(subFingerprintData.Count == 1); Assert.AreEqual(secondTrackReference, subFingerprintData[0].TrackReference); subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsWithThreshold(hashedFingerprint.HashBins, ThresholdVotes).ToList(); Assert.AreEqual(2, subFingerprintData.Count); } }
public void DeleteHashBinsAndSubfingerprintsOnTrackDelete() { const int StaticStride = 5115; const int SecondsToProcess = 20; const int StartAtSecond = 30; TagInfo tagInfo = tagService.GetTagInfo(PathToMp3); int releaseYear = tagInfo.Year; TrackData track = new TrackData(tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration); int trackId = TrackDao.Insert(track); var hashData = fingerprintCommandBuilder .BuildFingerprintCommand() .From(PathToMp3, SecondsToProcess, StartAtSecond) .WithFingerprintConfig(config => { config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .Hash() .Result; List <long> subFingerprintIds = new List <long>(); foreach (var hash in hashData) { long subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, trackId); HashBinDao.Insert(hash.HashBins, subFingerprintId); subFingerprintIds.Add(subFingerprintId); } var actualTrack = TrackDao.ReadTrackByISRC(tagInfo.ISRC); Assert.IsNotNull(actualTrack); AssertTracksAreEqual(track, actualTrack); // Act int modifiedRows = TrackDao.DeleteTrack(trackId); Assert.IsNull(TrackDao.ReadTrackByISRC(tagInfo.ISRC)); foreach (var id in subFingerprintIds) { Assert.IsTrue(id != 0); Assert.IsNull(SubFingerprintDao.ReadById(id)); } for (int i = 1; i <= 25; i++) { Assert.IsTrue(HashBinDao.ReadHashBinsByHashTable(i).Count == 0); } Assert.AreEqual(1 + hashData.Count + (25 * hashData.Count), modifiedRows); }
public void InsertMultipleTrackAtOnceTest() { const int TrackCount = 100; var tracks = InsertTracks(TrackCount); var actualTracks = TrackDao.ReadAll(); Assert.AreEqual(tracks.Count, actualTracks.Count); for (int i = 0; i < actualTracks.Count; i++) { AssertModelReferenceIsInitialized(actualTracks[i].TrackReference); AssertTracksAreEqual(tracks[i], actualTracks.First(track => track.TrackReference.Equals(tracks[i].TrackReference))); } }
public void MultipleInsertTest() { ConcurrentBag <int> ids = new ConcurrentBag <int>(); for (int i = 0; i < 1000; i++) { int id = TrackDao.Insert(new TrackData("isrc", "artist", "title", "album", 2012, 200) { GroupId = "group-id" }); Assert.IsFalse(ids.Contains(id)); ids.Add(id); } }
public void ReadAllTracksTest() { TrackData firstTrack = new TrackData("first isrc", "artist", "title", "album", 2012, 200); TrackData secondTrack = new TrackData("second isrc", "artist", "title", "album", 2012, 200); TrackDao.Insert(firstTrack); TrackDao.Insert(secondTrack); IList <TrackData> tracks = TrackDao.ReadAll(); Assert.IsTrue(tracks.Count == 2); Assert.IsTrue(tracks.Any(track => track.ISRC == "first isrc")); Assert.IsTrue(tracks.Any(track => track.ISRC == "second isrc")); }
public virtual TrackInfo?ReadTrackById(string trackId) { var trackData = TrackDao.ReadTrackById(trackId); if (trackData == null) { return(null); } var metaFields = CopyMetaFields(trackData.MetaFields); metaFields.Add("TrackLength", $"{trackData.Length: 0.000}"); return(new TrackInfo(trackData.Id, trackData.Title, trackData.Artist, metaFields, trackData.MediaType)); }
public void MultipleInsertTest() { var modelReferences = new ConcurrentBag <IModelReference>(); for (int i = 0; i < 1000; i++) { var modelReference = TrackDao.InsertTrack(new TrackData("isrc", "artist", "title", "album", 2012, 200) { GroupId = "group-id" }); Assert.IsFalse(modelReferences.Contains(modelReference)); modelReferences.Add(modelReference); } }
public HashBinDaoTest() { HashBinDao = new HashBinDao(); TrackDao = new TrackDao(); SubFingerprintDao = new SubFingerprintDao(); }
public SubFingerprintDaoTest() { SubFingerprintDao = new SubFingerprintDao(); TrackDao = new TrackDao(); }
public FingerprintDaoTest() { FingerprintDao = new FingerprintDao(); TrackDao = new TrackDao(); daoTestHelper = new DaoTestHelper(); }