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);
            }
        }
Beispiel #3
0
        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));
            }
        }
Beispiel #4
0
        public void SetUp()
        {
            var ramStorage = new RAMStorage(NumberOfHashTables);

            HashBinDao        = new HashBinDao(ramStorage);
            TrackDao          = new TrackDao(ramStorage);
            SubFingerprintDao = new SubFingerprintDao(ramStorage);
        }
Beispiel #5
0
        public void InsertTrackTest()
        {
            var track = GetTrack();

            var trackReference = TrackDao.InsertTrack(track);

            AssertModelReferenceIsInitialized(trackReference);
            AssertModelReferenceIsInitialized(track.TrackReference);
        }
Beispiel #6
0
        public void DeleteOneTrackTest()
        {
            TrackData track          = GetTrack();
            var       trackReference = TrackDao.InsertTrack(track);

            TrackDao.DeleteTrack(trackReference);

            Assert.IsNull(TrackDao.ReadTrack(trackReference));
        }
Beispiel #7
0
        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));
        }
Beispiel #8
0
        public void ReadTrackByISRCTest()
        {
            TrackData expectedTrack = GetTrack();

            TrackDao.InsertTrack(expectedTrack);

            TrackData actualTrack = TrackDao.ReadTrackByISRC(expectedTrack.ISRC);

            AssertTracksAreEqual(expectedTrack, actualTrack);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
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);
        }
Beispiel #13
0
        public void ReadTrackByISRCTest()
        {
            string    name          = MethodBase.GetCurrentMethod().Name;
            TrackData expectedTrack = GetTrack(name);

            TrackDao.Insert(expectedTrack);

            TrackData actualTrack = TrackDao.ReadTrackByISRC(expectedTrack.ISRC);

            AssertTracksAreEqual(expectedTrack, actualTrack);
        }
Beispiel #14
0
        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));
        }
Beispiel #15
0
        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);
            }
        }
Beispiel #17
0
        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));
        }
Beispiel #19
0
        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);
        }
Beispiel #22
0
        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);
        }
Beispiel #23
0
        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);
            }
        }
Beispiel #25
0
        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);
        }
Beispiel #26
0
        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)));
            }
        }
Beispiel #27
0
        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);
            }
        }
Beispiel #28
0
        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));
        }
Beispiel #30
0
        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();
 }